Files
Paulo Lima JrandClaude Opus 5.5 6e582ff866 feat(propostas): proposta comercial, do briefing da IA ao PDF que o cliente recebe
Nova capacidade "Propostas", desligada por padrão (Configurações › Propostas):

- tabelas crm_proposals / crm_proposal_items / modelos de proposta, com RLS por
  organização, numeração por organização e ano alocada só no envio, versão, e
  trava de organização nos vínculos (0462–0477, com apêndice no baseline);
- o assistente que conversa levanta um briefing universal de sete categorias,
  pede confirmação e só então rascunha (crm_preparar_proposta + recusa
  em crm_draft_proposal quando falta categoria ou confirmação);
- modelos da empresa: editar, criar, importar PDF/texto, desligar os da
  plataforma;
- editor com "Preencher com a conversa", seções editáveis e prévia fiel do PDF;
- envio exige modelo confirmado e preço, salva antes de enviar e manda o PDF
  pelo WhatsApp da empresa, com a marca dela;
- aviso na Central, em destaque na tela e no Radar; LGPD alcança a proposta.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 23:00:12 -03:00

19 lines
574 B
TypeScript

// lib/propostas/moeda.test.ts
import { describe, expect, it } from "vitest";
import { formatarMoeda } from "./moeda";
describe("formatarMoeda", () => {
it("formata centavos em real", () => {
expect(formatarMoeda(150000, "BRL")).toBe(
(150000 / 100).toLocaleString("pt-BR", { style: "currency", currency: "BRL" }),
);
});
it("formata centavos em outra moeda (D11 — moeda da organização)", () => {
expect(formatarMoeda(150000, "USD")).toBe(
(150000 / 100).toLocaleString("pt-BR", { style: "currency", currency: "USD" }),
);
});
});