@fayz-ai/plugin-financial 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0erC,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2erC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../src/locales/pt-BR.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0evC,CAAA"}
1
+ {"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../src/locales/pt-BR.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2evC,CAAA"}
@@ -11,6 +11,7 @@ export declare const MIGRATION_007B_MOVEMENT_PAYMENT_METHOD_TYPE = "-- payment_m
11
11
  export declare const MIGRATION_008_SPLIT_PAYMENT_MOVEMENTS = "-- Split bill (obligation) vs payment (cash event).\n-- Each payment is now its own movement_kind='payment' row (one per cash event), so\n-- two payments on one installment show as two extract rows instead of one summed row.\n-- Bills stay pure obligations; v_invoice_balances already filters movement_kind='bill',\n-- so the new payment rows don't affect invoice balances. Backfill is idempotent.\n-- Requires fee_amount (006b_extract_fee_amount.sql).\n\nINSERT INTO public.plg_financial_movements\n (tenant_id, invoice_id, direction, movement_kind, amount, paid_amount, fee_amount, status,\n due_date, payment_date, installment_number, payment_method_id, payment_method_type_id,\n bank_account_id, cash_session_id, card_brand, card_installments, notes, metadata)\nSELECT\n b.tenant_id, b.invoice_id, b.direction, 'payment', b.paid_amount, b.paid_amount,\n COALESCE(b.fee_amount, 0), 'paid',\n b.due_date, COALESCE(b.payment_date, b.updated_at::date, CURRENT_DATE), b.installment_number,\n b.payment_method_id, b.payment_method_type_id, b.bank_account_id, b.cash_session_id,\n b.card_brand, b.card_installments, b.notes,\n jsonb_build_object('backfilledFromBill', b.id)\nFROM public.plg_financial_movements b\nWHERE b.movement_kind = 'bill' AND b.paid_amount > 0\n AND NOT EXISTS (\n SELECT 1 FROM public.plg_financial_movements p\n WHERE p.movement_kind = 'payment' AND p.metadata->>'backfilledFromBill' = b.id::text\n );\n\nUPDATE public.plg_financial_movements\nSET payment_date = NULL, bank_account_id = NULL, payment_method_id = NULL,\n payment_method_type_id = NULL, cash_session_id = NULL, card_brand = NULL, card_installments = NULL\nWHERE movement_kind = 'bill';\n";
12
12
  export declare const MIGRATION_009_AGENT_RPCS = "-- ============================================================================\n-- plugin-financial 009: server-plane agent write RPC.\n--\n-- public.agent_financial_mark_payment_received \u2014 \"marca o atendimento como\n-- pago em cart\u00E3o 2x\". Resolves the order (directly or via a booking id),\n-- guard-checks the actor (agent_guard, spine 015), promotes the order into an\n-- invoice + installment ledger through the EXISTING invariant function\n-- fn_invoice_from_order (004) \u2014 never re-implementing its numbering/allocation\n-- logic \u2014 then settles the installments following 008's split model (bill rows\n-- flip to paid; each cash event is its own movement_kind='payment' row).\n--\n-- fn_invoice_from_order authorizes via user_tenant_ids() (auth.uid()). This\n-- RPC runs under the broker's service key, so it impersonates the ALREADY\n-- GUARD-VERIFIED actor for the duration of the transaction by setting\n-- request.jwt.claims locally \u2014 the invariant function keeps working unchanged\n-- and the audit trail carries the real acting user.\n--\n-- Contract: (p_tenant_id, p_actor_user_id, p_payload) \u2192 jsonb\n-- payload {order_id? uuid, booking_id? uuid, method text\n-- ('cash'|'pix'|'credit_card'|'debit_card'|'transfer'),\n-- installments? int (credit_card only, 1\u201312), amount? numeric}\n-- ============================================================================\n\nCREATE OR REPLACE FUNCTION public.agent_financial_mark_payment_received(\n p_tenant_id uuid,\n p_actor_user_id uuid,\n p_payload jsonb\n) RETURNS jsonb\nLANGUAGE plpgsql SECURITY DEFINER\nSET search_path = public\nAS $$\nDECLARE\n v_denial jsonb;\n v_order_id uuid;\n v_booking_id uuid;\n v_method text;\n v_installments int;\n v_amount numeric;\n v_order record;\n v_bill record;\n v_paid_count int := 0;\n v_total_paid numeric := 0;\nBEGIN\n -- \u2500\u2500 payload \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n BEGIN\n v_order_id := (p_payload->>'order_id')::uuid;\n v_booking_id := (p_payload->>'booking_id')::uuid;\n v_amount := (p_payload->>'amount')::numeric;\n v_installments := COALESCE((p_payload->>'installments')::int, 1);\n EXCEPTION WHEN OTHERS THEN\n RETURN jsonb_build_object('ok', false, 'error', 'invalid payload: ' || SQLERRM);\n END;\n v_method := lower(COALESCE(p_payload->>'method', 'cash'));\n IF v_method NOT IN ('cash', 'pix', 'credit_card', 'debit_card', 'transfer') THEN\n RETURN jsonb_build_object('ok', false, 'error', 'unknown payment method');\n END IF;\n IF v_installments NOT BETWEEN 1 AND 12\n OR (v_installments > 1 AND v_method <> 'credit_card') THEN\n RETURN jsonb_build_object('ok', false, 'error', 'installments require credit_card (1-12)');\n END IF;\n\n -- booking \u2192 order\n IF v_order_id IS NULL AND v_booking_id IS NOT NULL THEN\n SELECT b.order_id INTO v_order_id\n FROM appointments b\n WHERE b.id = v_booking_id AND b.tenant_id = p_tenant_id;\n END IF;\n IF v_order_id IS NULL THEN\n RETURN jsonb_build_object('ok', false, 'error', 'order_id or booking_id required (booking must have an order)');\n END IF;\n\n SELECT o.id, o.status, o.total INTO v_order\n FROM orders o\n WHERE o.id = v_order_id AND o.tenant_id = p_tenant_id;\n IF NOT FOUND THEN\n RETURN jsonb_build_object('ok', false, 'error', 'unknown order for this tenant');\n END IF;\n IF v_order.status = 'cancelled' THEN\n RETURN jsonb_build_object('ok', false, 'error', 'cannot receive payment on a cancelled order');\n END IF;\n\n -- \u2500\u2500 authorization \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n v_denial := agent_guard(p_tenant_id, p_actor_user_id, 'financial.receivables', 'update');\n IF v_denial IS NOT NULL THEN\n RETURN jsonb_build_object('ok', false, 'denial', v_denial);\n END IF;\n\n -- already fully paid?\n IF EXISTS (\n SELECT 1 FROM plg_financial_movements m\n WHERE m.invoice_id = v_order_id AND m.movement_kind = 'bill'\n ) AND NOT EXISTS (\n SELECT 1 FROM plg_financial_movements m\n WHERE m.invoice_id = v_order_id AND m.movement_kind = 'bill' AND m.status <> 'paid'\n ) THEN\n RETURN jsonb_build_object('ok', false, 'error', 'order is already fully paid');\n END IF;\n\n -- \u2500\u2500 invoice via the existing invariant function (impersonate the verified\n -- actor so fn_invoice_from_order's user_tenant_ids() check passes) \u2500\u2500\u2500\u2500\u2500\n PERFORM set_config('request.jwt.claims',\n jsonb_build_object('sub', p_actor_user_id, 'role', 'authenticated')::text,\n true);\n PERFORM fn_invoice_from_order(v_order_id, current_date, NULL, v_installments, 'credit');\n\n -- \u2500\u2500 settle: flip pending bill installments to paid + emit payment rows \u2500\u2500\u2500\n FOR v_bill IN\n SELECT m.* FROM plg_financial_movements m\n WHERE m.invoice_id = v_order_id\n AND m.tenant_id = p_tenant_id\n AND m.movement_kind = 'bill'\n AND m.status <> 'paid'\n ORDER BY m.installment_number NULLS FIRST\n LOOP\n UPDATE plg_financial_movements SET\n status = 'paid',\n paid_amount = v_bill.amount,\n payment_date = current_date,\n card_installments = CASE WHEN v_method = 'credit_card' THEN v_installments ELSE NULL END,\n metadata = COALESCE(metadata, '{}'::jsonb)\n || jsonb_build_object('paidVia', 'agent', 'method', v_method),\n updated_at = now()\n WHERE id = v_bill.id;\n\n INSERT INTO plg_financial_movements\n (tenant_id, invoice_id, direction, movement_kind, amount, paid_amount, status,\n due_date, payment_date, installment_number, card_installments, metadata)\n VALUES\n (p_tenant_id, v_order_id, v_bill.direction, 'payment', v_bill.amount, v_bill.amount,\n 'paid', v_bill.due_date, current_date, v_bill.installment_number,\n CASE WHEN v_method = 'credit_card' THEN v_installments ELSE NULL END,\n jsonb_build_object('source', 'agent', 'method', v_method));\n\n v_paid_count := v_paid_count + 1;\n v_total_paid := v_total_paid + v_bill.amount;\n END LOOP;\n\n IF v_paid_count = 0 THEN\n RETURN jsonb_build_object('ok', false, 'error', 'no open installments found to settle');\n END IF;\n\n INSERT INTO audit_logs (tenant_id, user_id, action, entity_type, entity_id, metadata)\n VALUES (p_tenant_id, p_actor_user_id, 'agent.markPaymentReceived', 'order', v_order_id::text,\n jsonb_build_object('payload', p_payload, 'installmentsSettled', v_paid_count,\n 'totalPaid', v_total_paid));\n\n RETURN jsonb_build_object(\n 'ok', true,\n 'id', v_order_id,\n 'record', jsonb_build_object(\n 'ref', jsonb_build_object('id', v_order_id, 'resource', 'orders',\n 'archetype', 'order:service_order'),\n 'method', v_method,\n 'installments', v_installments,\n 'installments_settled', v_paid_count,\n 'total_paid', v_total_paid\n )\n );\nEND;\n$$;\n\nREVOKE ALL ON FUNCTION public.agent_financial_mark_payment_received(uuid, uuid, jsonb) FROM public;\nREVOKE EXECUTE ON FUNCTION public.agent_financial_mark_payment_received(uuid, uuid, jsonb) FROM anon;\nGRANT EXECUTE ON FUNCTION public.agent_financial_mark_payment_received(uuid, uuid, jsonb)\n TO authenticated, service_role;\n";
13
13
  export declare const MIGRATION_010_INVOICE_INTERNAL = "-- Financial plugin \u2014 separate WHO MAY invoice from HOW an invoice is built.\n--\n-- fn_invoice_from_order (004) mixes the two: it checks that the caller is a\n-- member of the order's tenant, then does the work. That check is right for a\n-- human clicking \"Faturar\" in the admin, and impossible for anything else \u2014 a\n-- storefront checkout runs as the SHOPPER, whose user_tenant_ids() is empty by\n-- definition, so an order that should raise a receivable the moment it is placed\n-- cannot raise one at all. SECURITY DEFINER does not help: auth.uid() still\n-- belongs to the caller inside the definer context.\n--\n-- So the body moves to an internal function with no authorization of its own,\n-- and fn_invoice_from_order keeps its signature, keeps its check, and delegates.\n-- Callers that exist today (CRM approveQuote, the agenda bridge) are untouched.\n-- The internal one is granted to NOBODY: it is reachable only from other\n-- SECURITY DEFINER functions and triggers that have already decided the caller\n-- is entitled \u2014 the shop's order-to-cash bridge being the first.\n--\n-- Idempotent.\n\nCREATE OR REPLACE FUNCTION public.fn_invoice_from_order_internal(\n p_order_id uuid,\n p_due_date date DEFAULT NULL,\n p_status text DEFAULT NULL,\n p_installments int DEFAULT 1,\n p_direction text DEFAULT 'credit'\n) RETURNS uuid\nLANGUAGE plpgsql\nSECURITY DEFINER\nSET search_path = public\nAS $$\nDECLARE\n v_order public.orders%ROWTYPE;\n v_ref text;\n v_seq bigint;\n v_summary text;\n v_contact text;\n v_existing uuid;\n v_kind text;\n v_prefix text;\n v_n int := GREATEST(COALESCE(p_installments, 1), 1);\n v_total numeric;\n v_base numeric;\n v_amt numeric;\n v_alloc numeric := 0;\n v_due date;\n i int;\nBEGIN\n SELECT * INTO v_order FROM public.orders WHERE id = p_order_id;\n IF NOT FOUND THEN RAISE EXCEPTION 'fn_invoice_from_order: order % not found', p_order_id; END IF;\n\n -- Idempotent: an order already carrying a bill is already invoiced.\n SELECT id INTO v_existing FROM public.plg_financial_movements\n WHERE invoice_id = p_order_id AND movement_kind = 'bill' LIMIT 1;\n IF v_existing IS NOT NULL THEN RETURN p_order_id; END IF;\n\n IF p_direction = 'debit' THEN v_kind := 'invoice_payable'; v_prefix := 'PAG';\n ELSE v_kind := 'invoice_receivable'; v_prefix := 'REC'; END IF;\n\n SELECT public.next_sequence(v_order.tenant_id, v_kind) INTO v_seq;\n v_ref := v_prefix || '-' || lpad(v_seq::text, 5, '0');\n\n SELECT string_agg(name, ', ' ORDER BY sort_order) INTO v_summary\n FROM public.order_items WHERE order_id = p_order_id;\n SELECT name INTO v_contact FROM public.people WHERE id = v_order.party_id;\n\n UPDATE public.orders SET\n status = COALESCE(p_status, status),\n stage = 'invoiced',\n direction = p_direction,\n reference_number = v_ref,\n metadata = COALESCE(metadata, '{}'::jsonb) || jsonb_build_object(\n 'itemsSummary', COALESCE(v_summary, ''),\n 'contactName', v_contact,\n 'installmentCount', v_n,\n 'quoteNumber', v_order.reference_number,\n 'direction', p_direction\n ),\n updated_at = now()\n WHERE id = p_order_id;\n\n v_total := COALESCE(v_order.total, 0);\n v_base := round(v_total / v_n, 2);\n v_due := COALESCE(p_due_date, current_date);\n FOR i IN 1..v_n LOOP\n IF i = v_n THEN v_amt := round(v_total - v_alloc, 2);\n ELSE v_amt := v_base; v_alloc := v_alloc + v_base; END IF;\n INSERT INTO public.plg_financial_movements\n (tenant_id, invoice_id, direction, movement_kind, amount, paid_amount, status, due_date, installment_number)\n VALUES\n (v_order.tenant_id, p_order_id, p_direction, 'bill', v_amt, 0, 'pending',\n (v_due + ((i - 1) || ' months')::interval)::date, i);\n END LOOP;\n\n RETURN p_order_id;\nEND;\n$$;\n\n-- Deliberately NOT granted to authenticated/anon: entry is through\n-- fn_invoice_from_order, or from another definer function that has already\n-- established the caller's right to create this receivable.\nREVOKE ALL ON FUNCTION public.fn_invoice_from_order_internal(uuid, date, text, int, text) FROM PUBLIC;\n\n-- The public entry point: unchanged signature and behaviour, now a guard around\n-- the shared body instead of a second copy of it.\nCREATE OR REPLACE FUNCTION public.fn_invoice_from_order(\n p_order_id uuid,\n p_due_date date DEFAULT NULL,\n p_status text DEFAULT NULL,\n p_installments int DEFAULT 1,\n p_direction text DEFAULT 'credit'\n) RETURNS uuid\nLANGUAGE plpgsql\nSECURITY DEFINER\nSET search_path = public\nAS $$\nDECLARE v_tenant uuid;\nBEGIN\n SELECT tenant_id INTO v_tenant FROM public.orders WHERE id = p_order_id;\n IF v_tenant IS NULL THEN\n RAISE EXCEPTION 'fn_invoice_from_order: order % not found', p_order_id;\n END IF;\n IF v_tenant NOT IN (SELECT public.user_tenant_ids()) THEN\n RAISE EXCEPTION 'fn_invoice_from_order: forbidden';\n END IF;\n\n RETURN public.fn_invoice_from_order_internal(\n p_order_id, p_due_date, p_status, p_installments, p_direction);\nEND;\n$$;\n\nGRANT EXECUTE ON FUNCTION public.fn_invoice_from_order(uuid, date, text, int, text) TO authenticated;\n\nNOTIFY pgrst, 'reload schema';\n";
14
+ export declare const MIGRATION_011_NFE = "-- 011_nfe.sql \u2014 Nota Fiscal Eletr\u00F4nica (NF-e / NFC-e / NFS-e)\n-- ----------------------------------------------------------------------------\n-- Fiscal documents the merchant issues, tracked against orders. This migration\n-- ships the STRUCTURE only: the actual authorization with SEFAZ / the prefeitura\n-- is delegated to an external emissor (Focus NFe, NFe.io, PlugNotas\u2026) wired\n-- later behind the provider's issueNota. Rows here carry the n\u00FAmero/s\u00E9rie,\n-- status, access key and the links to the authorized XML + DANFE once emitted.\n--\n-- Per-tenant RLS, canonical form (tenant_id IN user_tenant_ids()). Idempotent.\n\nCREATE TABLE IF NOT EXISTS public.plg_financial_nfe (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n -- nfe (55, mercadoria) | nfce (65, consumidor) | nfse (servi\u00E7o)\n model text NOT NULL DEFAULT 'nfe',\n -- draft | processing | issued | cancelled | error\n status text NOT NULL DEFAULT 'draft',\n number text,\n series text,\n order_id uuid,\n contact_id uuid,\n contact_name text,\n total_amount numeric(14,2) NOT NULL DEFAULT 0,\n issued_at timestamptz,\n access_key text,\n xml_url text,\n danfe_url text,\n emissor text,\n error_message text,\n observations text,\n metadata jsonb NOT NULL DEFAULT '{}',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE INDEX IF NOT EXISTS idx_plg_financial_nfe_tenant ON public.plg_financial_nfe(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_plg_financial_nfe_order ON public.plg_financial_nfe(order_id);\n\nALTER TABLE public.plg_financial_nfe ENABLE ROW LEVEL SECURITY;\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_financial_nfe TO authenticated;\n\nDO $$\nBEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_select') THEN\n CREATE POLICY plg_financial_nfe_select ON public.plg_financial_nfe FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_insert') THEN\n CREATE POLICY plg_financial_nfe_insert ON public.plg_financial_nfe FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_update') THEN\n CREATE POLICY plg_financial_nfe_update ON public.plg_financial_nfe FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_delete') THEN\n CREATE POLICY plg_financial_nfe_delete ON public.plg_financial_nfe FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\n END IF;\nEND $$;\n\nNOTIFY pgrst, 'reload schema';\n";
14
15
  export declare const MIGRATIONS: Array<{
15
16
  id: string;
16
17
  sql: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,8+DA8BpC,CAAA;AAED,eAAO,MAAM,4BAA4B,woKA6GxC,CAAA;AAED,eAAO,MAAM,+BAA+B,67CA4B3C,CAAA;AAED,eAAO,MAAM,yBAAyB,0kBAYrC,CAAA;AAED,eAAO,MAAM,2BAA2B,25PAkLvC,CAAA;AAED,eAAO,MAAM,2BAA2B,y6CAsCvC,CAAA;AAED,eAAO,MAAM,0BAA0B,k3EAqCtC,CAAA;AAED,eAAO,MAAM,iCAAiC,kxCAoB7C,CAAA;AAED,eAAO,MAAM,4BAA4B,sjEAgCxC,CAAA;AAED,eAAO,MAAM,2CAA2C,8YAMvD,CAAA;AAED,eAAO,MAAM,qCAAqC,qqDA6BjD,CAAA;AAED,eAAO,MAAM,wBAAwB,uzPAqKpC,CAAA;AAED,eAAO,MAAM,8BAA8B,unKAqI1C,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAczD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,8+DA8BpC,CAAA;AAED,eAAO,MAAM,4BAA4B,woKA6GxC,CAAA;AAED,eAAO,MAAM,+BAA+B,67CA4B3C,CAAA;AAED,eAAO,MAAM,yBAAyB,0kBAYrC,CAAA;AAED,eAAO,MAAM,2BAA2B,25PAkLvC,CAAA;AAED,eAAO,MAAM,2BAA2B,y6CAsCvC,CAAA;AAED,eAAO,MAAM,0BAA0B,k3EAqCtC,CAAA;AAED,eAAO,MAAM,iCAAiC,kxCAoB7C,CAAA;AAED,eAAO,MAAM,4BAA4B,sjEAgCxC,CAAA;AAED,eAAO,MAAM,2CAA2C,8YAMvD,CAAA;AAED,eAAO,MAAM,qCAAqC,qqDA6BjD,CAAA;AAED,eAAO,MAAM,wBAAwB,uzPAqKpC,CAAA;AAED,eAAO,MAAM,8BAA8B,unKAqI1C,CAAA;AAED,eAAO,MAAM,iBAAiB,srGA0D7B,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAezD,CAAA"}
package/dist/types.d.ts CHANGED
@@ -288,6 +288,8 @@ export interface MovementQuery {
288
288
  status?: MovementStatus | MovementStatus[];
289
289
  bankAccountId?: string;
290
290
  cashSessionId?: string;
291
+ /** Scope to a single invoice's movements (bills + payments). */
292
+ invoiceId?: string;
291
293
  dateRange?: DateRange;
292
294
  page?: number;
293
295
  pageSize?: number;
@@ -451,4 +453,51 @@ export interface ReconcileInput {
451
453
  /** Internal movement to link; omit to accept the line standalone */
452
454
  matchedMovementId?: string;
453
455
  }
456
+ /** 55 = NF-e (mercadoria), 65 = NFC-e (consumidor), nfse = serviço (prefeitura). */
457
+ export type NotaFiscalModel = 'nfe' | 'nfce' | 'nfse';
458
+ export type NotaFiscalStatus = 'draft' | 'processing' | 'issued' | 'cancelled' | 'error';
459
+ export interface NotaFiscal {
460
+ id: string;
461
+ tenantId: string;
462
+ model: NotaFiscalModel;
463
+ status: NotaFiscalStatus;
464
+ /** Número da nota — null while draft (assigned on issue). */
465
+ number: string | null;
466
+ series: string | null;
467
+ /** Order this nota documents (plg_shop_orders / orders id), if any. */
468
+ orderId?: string;
469
+ contactId?: string;
470
+ contactName?: string;
471
+ totalAmount: number;
472
+ issuedAt?: string;
473
+ /** Chave de acesso (44 dígitos), when authorized. */
474
+ accessKey?: string;
475
+ /** Links to the authorized XML and the DANFE/DANFCE PDF. */
476
+ xmlUrl?: string;
477
+ danfeUrl?: string;
478
+ /** External emissor id (focusnfe | nfeio | plugnotas | manual). */
479
+ emissor?: string;
480
+ errorMessage?: string;
481
+ observations?: string;
482
+ metadata?: Record<string, unknown>;
483
+ createdAt: string;
484
+ updatedAt: string;
485
+ }
486
+ export interface CreateNotaFiscalInput {
487
+ model?: NotaFiscalModel;
488
+ orderId?: string;
489
+ contactId?: string;
490
+ contactName?: string;
491
+ totalAmount: number;
492
+ series?: string;
493
+ observations?: string;
494
+ }
495
+ export interface NotaFiscalQuery {
496
+ status?: NotaFiscalStatus | NotaFiscalStatus[];
497
+ model?: NotaFiscalModel;
498
+ orderId?: string;
499
+ search?: string;
500
+ page?: number;
501
+ pageSize?: number;
502
+ }
454
503
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InvoiceDetailView.d.ts","sourceRoot":"","sources":["../../src/views/InvoiceDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAU1D,OAAO,KAAK,EAA2C,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAY7F,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;IACrF,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,oBAAoB,CAAA;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,qBAwkBA"}
1
+ {"version":3,"file":"InvoiceDetailView.d.ts","sourceRoot":"","sources":["../../src/views/InvoiceDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAU1D,OAAO,KAAK,EAA2C,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAY7F,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;IACrF,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,oBAAoB,CAAA;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,qBA0kBA"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare function NotasFiscaisView(): React.JSX.Element;
3
+ //# sourceMappingURL=NotasFiscaisView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotasFiscaisView.d.ts","sourceRoot":"","sources":["../../src/views/NotasFiscaisView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AA0B/D,wBAAgB,gBAAgB,sBAiJ/B"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "fayz": {
4
4
  "status": "beta"
5
5
  },
6
- "version": "0.8.3",
6
+ "version": "0.8.4",
7
7
  "description": "Fayz SDK — plugin-financial plugin",
8
8
  "type": "module",
9
9
  "main": "./dist/index.cjs",
@@ -29,9 +29,9 @@
29
29
  "lucide-react": "^0.400.0",
30
30
  "zustand": "^4.5.0",
31
31
  "@tanstack/react-table": "^8.20.0",
32
- "@fayz-ai/ui": "^0.8.3",
33
- "@fayz-ai/saas": "^0.8.3",
34
- "@fayz-ai/core": "^0.8.3"
32
+ "@fayz-ai/saas": "^0.8.4",
33
+ "@fayz-ai/core": "^0.8.4",
34
+ "@fayz-ai/ui": "^0.8.4"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/react": "^18.3.0",
@@ -16,6 +16,8 @@ export interface FinancialModules {
16
16
  cards: boolean
17
17
  /** Bank reconciliation (conciliação). Opt-in — enable when a bank connector imports statements. */
18
18
  reconciliation: boolean
19
+ /** Notas fiscais (NF-e/NFC-e/NFS-e). Opt-in — enable for fiscal-document tracking. */
20
+ notasFiscais: boolean
19
21
  }
20
22
 
21
23
  export type FinancialCurrency = CurrencyConfig
@@ -20,6 +20,7 @@ import { StatementsView } from './views/StatementsView'
20
20
  import { CommissionsView } from './views/CommissionsView'
21
21
  import { CardsView } from './views/CardsView'
22
22
  import { ReconciliationView } from './views/ReconciliationView'
23
+ import { NotasFiscaisView } from './views/NotasFiscaisView'
23
24
  import { FinancialGeneralSettings } from './components/FinancialGeneralSettings'
24
25
  import { FinancialOnboarding } from './components/FinancialOnboarding'
25
26
 
@@ -117,6 +118,16 @@ function buildNav(
117
118
  })
118
119
  }
119
120
 
121
+ if (config.modules.notasFiscais) {
122
+ items.push({
123
+ id: 'notas-fiscais',
124
+ label: t('financial.nav.notasFiscais'),
125
+ icon: 'FileText',
126
+ active: activeView === 'notas-fiscais',
127
+ onClick: () => navigate('notas-fiscais'),
128
+ })
129
+ }
130
+
120
131
  if (config.modules.commissions) {
121
132
  items.push({
122
133
  id: 'commissions',
@@ -166,6 +177,7 @@ export function FinancialPage({ config, provider, store, registries }: {
166
177
  summary: 0,
167
178
  'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,
168
179
  'cash-registers': 0, statements: 0, reconciliation: 0, commissions: 0, cards: 0,
180
+ 'notas-fiscais': 0,
169
181
  settings: 1,
170
182
  })
171
183
 
@@ -321,6 +333,8 @@ export function FinancialPage({ config, provider, store, registries }: {
321
333
  return <CommissionsView />
322
334
  case 'cards':
323
335
  return <CardsView />
336
+ case 'notas-fiscais':
337
+ return <NotasFiscaisView />
324
338
  default:
325
339
  return <SummaryView />
326
340
  }
package/src/data/mock.ts CHANGED
@@ -8,6 +8,7 @@ import type {
8
8
  InvoiceQuery, MovementQuery, StatementQuery,
9
9
  PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,
10
10
  DateRange, InvoiceStatus, MovementStatus,
11
+ NotaFiscal, CreateNotaFiscalInput, NotaFiscalQuery,
11
12
  } from '../types'
12
13
 
13
14
  // ---------------------------------------------------------------------------
@@ -64,6 +65,7 @@ interface MockStore {
64
65
  chartOfAccounts: ChartOfAccountsNode[]
65
66
  costCenters: CostCenter[]
66
67
  cardTransactions: CardTransaction[]
68
+ notas: NotaFiscal[]
67
69
  }
68
70
 
69
71
  function createStore(options?: MockFinancialProviderOptions): MockStore {
@@ -124,6 +126,7 @@ function createStore(options?: MockFinancialProviderOptions): MockStore {
124
126
  chartOfAccounts: [],
125
127
  costCenters: [],
126
128
  cardTransactions: [],
129
+ notas: [],
127
130
  }
128
131
  }
129
132
 
@@ -767,6 +770,72 @@ export function createMockFinancialProvider(options?: MockFinancialProviderOptio
767
770
  if (internal) { internal.reconciledAt = undefined; internal.updatedAt = now() }
768
771
  }
769
772
  },
773
+
774
+ // --- Notas fiscais (NF-e / NFC-e / NFS-e) ---
775
+ async getNotas(query: NotaFiscalQuery): Promise<PaginatedResult<NotaFiscal>> {
776
+ let list = [...store.notas].sort((a, b) => b.createdAt.localeCompare(a.createdAt))
777
+ if (query.status) list = list.filter((n) => matchesStatus(n.status, query.status))
778
+ if (query.model) list = list.filter((n) => n.model === query.model)
779
+ if (query.orderId) list = list.filter((n) => n.orderId === query.orderId)
780
+ if (query.search) {
781
+ const q = query.search.toLowerCase()
782
+ list = list.filter((n) => (n.number ?? '').toLowerCase().includes(q) || (n.contactName ?? '').toLowerCase().includes(q))
783
+ }
784
+ return paginate(list, query.page, query.pageSize)
785
+ },
786
+
787
+ async getNotaById(id: string): Promise<NotaFiscal | null> {
788
+ return store.notas.find((n) => n.id === id) ?? null
789
+ },
790
+
791
+ async createNota(input: CreateNotaFiscalInput): Promise<NotaFiscal> {
792
+ const nota: NotaFiscal = {
793
+ id: uid(),
794
+ tenantId: 'mock-tenant',
795
+ model: input.model ?? 'nfe',
796
+ status: 'draft',
797
+ number: null,
798
+ series: input.series ?? null,
799
+ orderId: input.orderId,
800
+ contactId: input.contactId,
801
+ contactName: input.contactName,
802
+ totalAmount: input.totalAmount,
803
+ observations: input.observations,
804
+ createdAt: now(),
805
+ updatedAt: now(),
806
+ }
807
+ store.notas.unshift(nota)
808
+ return nota
809
+ },
810
+
811
+ async updateNota(id: string, patch: Partial<NotaFiscal>): Promise<NotaFiscal> {
812
+ const nota = store.notas.find((n) => n.id === id)
813
+ if (!nota) throw new Error('Nota fiscal not found')
814
+ Object.assign(nota, patch, { updatedAt: now() })
815
+ return nota
816
+ },
817
+
818
+ async issueNota(id: string): Promise<NotaFiscal> {
819
+ const nota = store.notas.find((n) => n.id === id)
820
+ if (!nota) throw new Error('Nota fiscal not found')
821
+ const issuedCount = store.notas.filter((n) => n.status === 'issued').length
822
+ nota.status = 'issued'
823
+ nota.number = String(issuedCount + 1).padStart(6, '0')
824
+ nota.series = nota.series ?? '1'
825
+ nota.issuedAt = now()
826
+ nota.emissor = 'manual'
827
+ nota.updatedAt = now()
828
+ return nota
829
+ },
830
+
831
+ async cancelNota(id: string, reason?: string): Promise<NotaFiscal> {
832
+ const nota = store.notas.find((n) => n.id === id)
833
+ if (!nota) throw new Error('Nota fiscal not found')
834
+ nota.status = 'cancelled'
835
+ nota.errorMessage = reason
836
+ nota.updatedAt = now()
837
+ return nota
838
+ },
770
839
  }
771
840
 
772
841
  return provider
@@ -8,6 +8,7 @@ import type {
8
8
  InvoiceQuery, MovementQuery, StatementQuery,
9
9
  PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,
10
10
  DateRange, ReconciliationCandidate,
11
+ NotaFiscal, CreateNotaFiscalInput, NotaFiscalQuery,
11
12
  } from '../types'
12
13
  import { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'
13
14
  import { getFinancialTenantId } from '../lib/tenant'
@@ -357,6 +358,7 @@ export function createSupabaseFinancialProvider(): FinancialDataProvider {
357
358
  }
358
359
  if (query.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)
359
360
  if (query.cashSessionId) qb = qb.eq('cash_session_id', query.cashSessionId)
361
+ if (query.invoiceId) qb = qb.eq('invoice_id', query.invoiceId)
360
362
  if (query.dateRange) qb = qb.gte('due_date', query.dateRange.from).lte('due_date', query.dateRange.to)
361
363
  const page = query.page ?? 1
362
364
  const pageSize = query.pageSize ?? 50
@@ -883,6 +885,83 @@ export function createSupabaseFinancialProvider(): FinancialDataProvider {
883
885
  await pub.from(T.movements).update({ reconciled_at: null }).eq('id', line.matched_movement_id)
884
886
  }
885
887
  },
888
+
889
+ // --- Notas fiscais (NF-e / NFC-e / NFS-e) ---
890
+ async getNotas(query: NotaFiscalQuery): Promise<PaginatedResult<NotaFiscal>> {
891
+ const { pub } = getClients()
892
+ let qb = pub.from(T.notas).select('*', { count: 'exact' })
893
+ if (query.status) {
894
+ const statuses = Array.isArray(query.status) ? query.status : [query.status]
895
+ qb = qb.in('status', statuses)
896
+ }
897
+ if (query.model) qb = qb.eq('model', query.model)
898
+ if (query.orderId) qb = qb.eq('order_id', query.orderId)
899
+ if (query.search) qb = qb.or(`number.ilike.%${query.search}%,contact_name.ilike.%${query.search}%`)
900
+ const page = query.page ?? 1
901
+ const pageSize = query.pageSize ?? 50
902
+ qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('created_at', { ascending: false })
903
+ const { data, count } = await qb
904
+ return { data: (data ?? []).map((r: any) => snakeToCamel(r) as unknown as NotaFiscal), total: count ?? 0 }
905
+ },
906
+
907
+ async getNotaById(id: string): Promise<NotaFiscal | null> {
908
+ const { pub } = getClients()
909
+ const { data } = await pub.from(T.notas).select('*').eq('id', id).maybeSingle()
910
+ return data ? (snakeToCamel(data) as unknown as NotaFiscal) : null
911
+ },
912
+
913
+ async createNota(input: CreateNotaFiscalInput): Promise<NotaFiscal> {
914
+ const { pub } = getClients()
915
+ const row = {
916
+ tenant_id: getTenantId(),
917
+ model: input.model ?? 'nfe',
918
+ status: 'draft',
919
+ series: input.series ?? null,
920
+ order_id: input.orderId ?? null,
921
+ contact_id: input.contactId ?? null,
922
+ contact_name: input.contactName ?? null,
923
+ total_amount: input.totalAmount,
924
+ observations: input.observations ?? null,
925
+ }
926
+ const { data, error } = await pub.from(T.notas).insert(row).select().single()
927
+ if (error) throw error
928
+ return snakeToCamel(data) as unknown as NotaFiscal
929
+ },
930
+
931
+ async updateNota(id: string, patch: Partial<NotaFiscal>): Promise<NotaFiscal> {
932
+ const { pub } = getClients()
933
+ const { data, error } = await pub.from(T.notas).update(camelToSnake(patch as Record<string, unknown>)).eq('id', id).select().single()
934
+ if (error) throw error
935
+ return snakeToCamel(data) as unknown as NotaFiscal
936
+ },
937
+
938
+ // Emission seam: no SEFAZ integration yet, so assign a número/série locally
939
+ // and mark it issued. An external emissor replaces this body (or overrides
940
+ // issueNota on a wrapping provider) without any UI change.
941
+ async issueNota(id: string): Promise<NotaFiscal> {
942
+ const { pub } = getClients()
943
+ const { data: current } = await pub.from(T.notas).select('series').eq('id', id).single()
944
+ const { count } = await pub.from(T.notas).select('id', { count: 'exact', head: true }).eq('status', 'issued')
945
+ const patch = {
946
+ status: 'issued',
947
+ number: String((count ?? 0) + 1).padStart(6, '0'),
948
+ series: current?.series ?? '1',
949
+ issued_at: new Date().toISOString(),
950
+ emissor: 'manual',
951
+ }
952
+ const { data, error } = await pub.from(T.notas).update(patch).eq('id', id).select().single()
953
+ if (error) throw error
954
+ return snakeToCamel(data) as unknown as NotaFiscal
955
+ },
956
+
957
+ async cancelNota(id: string, reason?: string): Promise<NotaFiscal> {
958
+ const { pub } = getClients()
959
+ const { data, error } = await pub.from(T.notas)
960
+ .update({ status: 'cancelled', error_message: reason ?? null })
961
+ .eq('id', id).select().single()
962
+ if (error) throw error
963
+ return snakeToCamel(data) as unknown as NotaFiscal
964
+ },
886
965
  }
887
966
 
888
967
  return provider
@@ -9,4 +9,5 @@ export const T = {
9
9
  cashRegisterSessions: 'plg_financial_cash_register_sessions',
10
10
  paymentMethods: 'plg_financial_payment_methods',
11
11
  paymentMethodTypes: 'plg_financial_payment_method_types',
12
+ notas: 'plg_financial_nfe',
12
13
  } as const
package/src/data/types.ts CHANGED
@@ -9,6 +9,7 @@ import type {
9
9
  DateRange,
10
10
  ImportBankTransactionsInput, ImportBankTransactionsResult,
11
11
  UnreconciledQuery, ReconciliationCandidate, ReconcileInput,
12
+ NotaFiscal, CreateNotaFiscalInput, NotaFiscalQuery,
12
13
  } from '../types'
13
14
 
14
15
  export interface FinancialDataProvider {
@@ -70,4 +71,16 @@ export interface FinancialDataProvider {
70
71
  reconcileMovement?(input: ReconcileInput): Promise<void>
71
72
  /** Undo a reconciliation. */
72
73
  unreconcileMovement?(bankMovementId: string): Promise<void>
74
+
75
+ // --- Notas fiscais (NF-e / NFC-e / NFS-e) ---
76
+ // Optional: implemented by providers that back the Notas Fiscais tab. Emission
77
+ // to SEFAZ is delegated — `issueNota` is the seam an external emissor plugs
78
+ // into; until then it assigns a número/série locally and marks it issued.
79
+ getNotas?(query: NotaFiscalQuery): Promise<PaginatedResult<NotaFiscal>>
80
+ getNotaById?(id: string): Promise<NotaFiscal | null>
81
+ createNota?(input: CreateNotaFiscalInput): Promise<NotaFiscal>
82
+ updateNota?(id: string, data: Partial<NotaFiscal>): Promise<NotaFiscal>
83
+ /** Request authorization. Decoupled from the fiscal gateway — see note above. */
84
+ issueNota?(id: string): Promise<NotaFiscal>
85
+ cancelNota?(id: string, reason?: string): Promise<NotaFiscal>
73
86
  }
package/src/index.ts CHANGED
@@ -50,6 +50,7 @@ export interface FinancialPluginLabels {
50
50
  cards: string
51
51
  cardsOverview: string
52
52
  cardsReconciliation: string
53
+ notasFiscais: string
53
54
  }
54
55
 
55
56
  export interface ItemTypeOption {
@@ -68,6 +69,8 @@ export interface FinancialPluginOptions {
68
69
  cards?: boolean
69
70
  /** Bank reconciliation (conciliação). Defaults off — enable with a bank connector. */
70
71
  reconciliation?: boolean
72
+ /** Notas fiscais (NF-e/NFC-e/NFS-e). Defaults off — opt-in per app. */
73
+ notasFiscais?: boolean
71
74
  }
72
75
  labels?: Partial<FinancialPluginLabels>
73
76
  currency?: {
@@ -162,6 +165,7 @@ const DEFAULT_LABELS: FinancialPluginLabels = {
162
165
  cards: 'Cards',
163
166
  cardsOverview: 'Overview',
164
167
  cardsReconciliation: 'Reconciliation',
168
+ notasFiscais: 'Fiscal Invoices',
165
169
  }
166
170
 
167
171
  const DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }
@@ -204,6 +208,8 @@ function resolveConfig(options?: FinancialPluginOptions): ResolvedFinancialConfi
204
208
  cards: options?.modules?.cards !== false,
205
209
  // Opt-in: only shown when an app explicitly enables reconciliation (bank connector present).
206
210
  reconciliation: options?.modules?.reconciliation === true,
211
+ // Opt-in: only shown when an app explicitly enables fiscal-invoice tracking.
212
+ notasFiscais: options?.modules?.notasFiscais === true,
207
213
  },
208
214
  // Opt-in: only render the plugin's own quick-add buttons/FAB when the host asks.
209
215
  quickAdd: options?.quickAdd === true,
package/src/locales/en.ts CHANGED
@@ -134,6 +134,7 @@ export const en: Record<string, string> = {
134
134
  "financial.nav.payables": "Accounts Payable",
135
135
  "financial.nav.receivables": "Accounts Receivable",
136
136
  "financial.nav.reconciliation": "Reconciliation",
137
+ "financial.nav.notasFiscais": "Fiscal Invoices",
137
138
  "financial.nav.recurringExpenses": "Recurring Expenses",
138
139
  "financial.nav.rules": "Rules",
139
140
  "financial.nav.statements": "Statements",
@@ -134,6 +134,7 @@ export const ptBR: Record<string, string> = {
134
134
  "financial.nav.payables": "Contas a Pagar",
135
135
  "financial.nav.receivables": "Contas a Receber",
136
136
  "financial.nav.reconciliation": "Conciliação",
137
+ "financial.nav.notasFiscais": "Notas Fiscais",
137
138
  "financial.nav.recurringExpenses": "Despesas Recorrentes",
138
139
  "financial.nav.rules": "Regras",
139
140
  "financial.nav.statements": "Extratos",
@@ -0,0 +1,58 @@
1
+ -- 011_nfe.sql — Nota Fiscal Eletrônica (NF-e / NFC-e / NFS-e)
2
+ -- ----------------------------------------------------------------------------
3
+ -- Fiscal documents the merchant issues, tracked against orders. This migration
4
+ -- ships the STRUCTURE only: the actual authorization with SEFAZ / the prefeitura
5
+ -- is delegated to an external emissor (Focus NFe, NFe.io, PlugNotas…) wired
6
+ -- later behind the provider's issueNota. Rows here carry the número/série,
7
+ -- status, access key and the links to the authorized XML + DANFE once emitted.
8
+ --
9
+ -- Per-tenant RLS, canonical form (tenant_id IN user_tenant_ids()). Idempotent.
10
+
11
+ CREATE TABLE IF NOT EXISTS public.plg_financial_nfe (
12
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
13
+ tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
14
+ -- nfe (55, mercadoria) | nfce (65, consumidor) | nfse (serviço)
15
+ model text NOT NULL DEFAULT 'nfe',
16
+ -- draft | processing | issued | cancelled | error
17
+ status text NOT NULL DEFAULT 'draft',
18
+ number text,
19
+ series text,
20
+ order_id uuid,
21
+ contact_id uuid,
22
+ contact_name text,
23
+ total_amount numeric(14,2) NOT NULL DEFAULT 0,
24
+ issued_at timestamptz,
25
+ access_key text,
26
+ xml_url text,
27
+ danfe_url text,
28
+ emissor text,
29
+ error_message text,
30
+ observations text,
31
+ metadata jsonb NOT NULL DEFAULT '{}',
32
+ created_at timestamptz NOT NULL DEFAULT now(),
33
+ updated_at timestamptz NOT NULL DEFAULT now()
34
+ );
35
+
36
+ CREATE INDEX IF NOT EXISTS idx_plg_financial_nfe_tenant ON public.plg_financial_nfe(tenant_id);
37
+ CREATE INDEX IF NOT EXISTS idx_plg_financial_nfe_order ON public.plg_financial_nfe(order_id);
38
+
39
+ ALTER TABLE public.plg_financial_nfe ENABLE ROW LEVEL SECURITY;
40
+ GRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_financial_nfe TO authenticated;
41
+
42
+ DO $$
43
+ BEGIN
44
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_select') THEN
45
+ CREATE POLICY plg_financial_nfe_select ON public.plg_financial_nfe FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
46
+ END IF;
47
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_insert') THEN
48
+ CREATE POLICY plg_financial_nfe_insert ON public.plg_financial_nfe FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));
49
+ END IF;
50
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_update') THEN
51
+ CREATE POLICY plg_financial_nfe_update ON public.plg_financial_nfe FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
52
+ END IF;
53
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='plg_financial_nfe' AND policyname='plg_financial_nfe_delete') THEN
54
+ CREATE POLICY plg_financial_nfe_delete ON public.plg_financial_nfe FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
55
+ END IF;
56
+ END $$;
57
+
58
+ NOTIFY pgrst, 'reload schema';