@fayz-ai/plugin-financial 0.14.11 → 0.16.0
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.
- package/dist/components/ClientAccountModal.d.ts +3 -0
- package/dist/components/ClientAccountModal.d.ts.map +1 -1
- package/dist/components/CnabRemittanceModal.d.ts +10 -0
- package/dist/components/CnabRemittanceModal.d.ts.map +1 -0
- package/dist/components/FinancialCounterpartySearchSelect.d.ts +16 -0
- package/dist/components/FinancialCounterpartySearchSelect.d.ts.map +1 -0
- package/dist/components/FinancialGeneralSettings.d.ts +18 -1
- package/dist/components/FinancialGeneralSettings.d.ts.map +1 -1
- package/dist/components/PaymentModal.d.ts +1 -1
- package/dist/components/PaymentModal.d.ts.map +1 -1
- package/dist/components/PersonStatementWidget.d.ts +9 -0
- package/dist/components/PersonStatementWidget.d.ts.map +1 -1
- package/dist/data/mock.d.ts +2 -1
- package/dist/data/mock.d.ts.map +1 -1
- package/dist/data/supabase.d.ts.map +1 -1
- package/dist/data/tables.d.ts +1 -0
- package/dist/data/tables.d.ts.map +1 -1
- package/dist/data/types.d.ts +35 -1
- package/dist/data/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4712 -1205
- package/dist/index.js.map +1 -1
- package/dist/lib/analytics-cards.d.ts +5 -0
- package/dist/lib/analytics-cards.d.ts.map +1 -0
- package/dist/lib/invoice-list.d.ts +28 -0
- package/dist/lib/invoice-list.d.ts.map +1 -0
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/migrations/index.d.ts +12 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/types.d.ts +75 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/views/ClientAccountPanel.d.ts.map +1 -1
- package/dist/views/CommissionRulesView.d.ts.map +1 -1
- package/dist/views/CommissionsView.d.ts.map +1 -1
- package/dist/views/FinancialPage.d.ts +1 -1
- package/dist/views/FinancialPage.d.ts.map +1 -1
- package/dist/views/GiftCardsView.d.ts.map +1 -1
- package/dist/views/InvoiceDetailView.d.ts +6 -2
- package/dist/views/InvoiceDetailView.d.ts.map +1 -1
- package/dist/views/InvoiceFormView.d.ts.map +1 -1
- package/dist/views/InvoiceListView.d.ts.map +1 -1
- package/dist/views/NotasFiscaisView.d.ts.map +1 -1
- package/dist/views/ReconciliationView.d.ts.map +1 -1
- package/dist/views/RecurringBillsView.d.ts +9 -0
- package/dist/views/RecurringBillsView.d.ts.map +1 -0
- package/dist/views/StatementsView.d.ts.map +1 -1
- package/dist/views/payable-agent.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type AnalyticsCardDef } from '@fayz-ai/core';
|
|
2
|
+
import type { ResolvedFinancialConfig } from '../context';
|
|
3
|
+
import type { FinancialDataProvider } from '../data/types';
|
|
4
|
+
export declare function buildFinancialAnalyticsCards(config: ResolvedFinancialConfig, provider: FinancialDataProvider): AnalyticsCardDef[];
|
|
5
|
+
//# sourceMappingURL=analytics-cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-cards.d.ts","sourceRoot":"","sources":["../../src/lib/analytics-cards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,gBAAgB,EAAqB,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,qBAAqB,GAC9B,gBAAgB,EAAE,CA+EpB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface InvoiceLineSummarySource {
|
|
2
|
+
invoice_id?: string | null;
|
|
3
|
+
name?: string | null;
|
|
4
|
+
description?: string | null;
|
|
5
|
+
quantity?: number | string | null;
|
|
6
|
+
}
|
|
7
|
+
interface InvoiceItemType {
|
|
8
|
+
value: string;
|
|
9
|
+
label: string;
|
|
10
|
+
icon?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Product and service are catalog-backed choices; Other is always available. */
|
|
13
|
+
export declare function availableInvoiceItemTypes<T extends InvoiceItemType>(itemTypes: T[], lookupKinds: Iterable<string>, otherLabel: string): T[];
|
|
14
|
+
export interface CounterpartyAccountingPolicy {
|
|
15
|
+
defaultAccountId?: string;
|
|
16
|
+
defaultCostCenterId?: string;
|
|
17
|
+
allowedAccountIds: string[];
|
|
18
|
+
limitAccounts: boolean;
|
|
19
|
+
addItemsAutomatically: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Read migrated V1 supplier policy from both historical metadata shapes. */
|
|
22
|
+
export declare function counterpartyAccountingPolicy(optionData: unknown): CounterpartyAccountingPolicy;
|
|
23
|
+
export declare function resolveCounterpartyAccountingPolicy(policy: CounterpartyAccountingPolicy, resolvedRefs: Record<string, string>): CounterpartyAccountingPolicy;
|
|
24
|
+
/** Compact the real invoice lines for list display. Import notes and invoice
|
|
25
|
+
* descriptions are fallbacks, never substitutes for the things being billed. */
|
|
26
|
+
export declare function summarizeInvoiceLines(rows: InvoiceLineSummarySource[], visible?: number): Map<string, string>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=invoice-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice-list.d.ts","sourceRoot":"","sources":["../../src/lib/invoice-list.ts"],"names":[],"mappings":"AAAA,UAAU,wBAAwB;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAClC;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,eAAe,EACjE,SAAS,EAAE,CAAC,EAAE,EACd,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC7B,UAAU,EAAE,MAAM,GACjB,CAAC,EAAE,CASL;AAED,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,aAAa,EAAE,OAAO,CAAA;IACtB,qBAAqB,EAAE,OAAO,CAAA;CAC/B;AAcD,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,OAAO,GAAG,4BAA4B,CAyC9F;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,4BAA4B,CAO9B;AAED;gFACgF;AAChF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,EAAE,EAAE,OAAO,SAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxG"}
|
package/dist/locales/en.d.ts.map
CHANGED
|
@@ -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,
|
|
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,CAilBrC,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,
|
|
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,CAolBvC,CAAA"}
|
|
@@ -78,6 +78,18 @@ export declare const MIGRATION_076_O_PLANO_DE_CONTAS_DO_CLIENTE_VENCE_O_DO_MODEL
|
|
|
78
78
|
export declare const MIGRATION_077_O_RESUMO_FINANCEIRO_SE_SOMA_NO_BANCO = "-- O resumo financeiro se soma no banco, n\u00E3o no navegador.\n--\n-- O cart\u00E3o de resumo do painel falhava com 500 e o usu\u00E1rio via\n-- \"N\u00E3o foi poss\u00EDvel carregar o resumo financeiro\". A causa est\u00E1 em\n-- `getSummary`, e \u00E9 de forma, n\u00E3o de dado:\n--\n-- pub.from(T.movements).select('direction, movement_kind, amount,\n-- paid_amount, status, due_date, payment_date')\n--\n-- Sem filtro e sem limite. Ele baixa **todos os movimentos do tenant** e soma\n-- em JavaScript com `.filter().reduce()`. Funcionava com alguns milhares; o\n-- Espa\u00E7o Facial tem **276.360**, e o que era uma lista virou um pedido\n-- imposs\u00EDvel \u2014 tempo de consulta, tamanho de resposta e mem\u00F3ria do navegador,\n-- os tr\u00EAs ao mesmo tempo.\n--\n-- E nenhum dos nove n\u00FAmeros que a tela mostra precisa das linhas. Todos s\u00E3o\n-- agregados: saldo, a receber, a pagar, entrada e sa\u00EDda do per\u00EDodo, contagem e\n-- valor do vencido. Somar no banco devolve uma linha em vez de 276 mil.\n--\n-- \u2500\u2500 Onde a regra foi lida \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--\n-- Cada express\u00E3o abaixo \u00E9 a tradu\u00E7\u00E3o literal do `.reduce()` que ela substitui,\n-- inclusive as decis\u00F5es que pareciam detalhe:\n--\n-- \u00B7 \"em aberto\" \u00E9 `status IN (pending, partial, overdue)` \u2014 n\u00E3o \u00E9 `<> paid`,\n-- porque cancelado n\u00E3o est\u00E1 em aberto, est\u00E1 morto.\n-- \u00B7 \"vencido\" \u00E9 `status = 'overdue' OR due_date < hoje` \u2014 a tela n\u00E3o confia\n-- s\u00F3 no carimbo, e faz bem: quem vence hoje \u00E0 noite ainda est\u00E1 pendente no\n-- banco.\n-- \u00B7 o saldo do per\u00EDodo conta s\u00F3 `movement_kind = 'payment'` \u2014 evento de\n-- dinheiro, nunca a obriga\u00E7\u00E3o que ele quita. Somar os dois contaria a mesma\n-- venda duas vezes.\n-- \u00B7 a janela padr\u00E3o \u00E9 M\u00D3VEL de 30 dias, e n\u00E3o o m\u00EAs corrente: no dia 2 um\n-- \"m\u00EAs at\u00E9 agora\" mostra quase zero e parece defeito.\n--\n-- `SECURITY INVOKER` de prop\u00F3sito: a fun\u00E7\u00E3o enxerga exatamente o que quem\n-- chamou enxergaria, ent\u00E3o a cerca de unidade vale aqui como vale na lista. Um\n-- resumo que somasse o que a tela n\u00E3o mostra seria pior que um resumo que falha.\n--\n-- Idempotente.\n\nCREATE OR REPLACE FUNCTION public.financial_summary(\n p_from date DEFAULT NULL,\n p_to date DEFAULT NULL\n) RETURNS TABLE (\n total_balance numeric,\n total_receivable numeric,\n total_payable numeric,\n monthly_inflow numeric,\n monthly_outflow numeric,\n overdue_receivable_count integer,\n overdue_receivable_amount numeric,\n overdue_payable_count integer,\n overdue_payable_amount numeric\n)\nLANGUAGE sql\nSTABLE\nSECURITY INVOKER\nSET search_path TO ''\nAS $function$\n WITH janela AS (\n SELECT coalesce(p_from, (current_date - 30)) AS de,\n coalesce(p_to, current_date) AS ate\n ),\n saldo AS (\n SELECT coalesce(sum(b.balance), 0) AS v\n FROM public.v_financial_account_balances b\n WHERE b.is_active\n AND b.kind IN ('bank', 'cash_physical', 'cash_session',\n 'card_receivable_credit', 'card_receivable_debit')\n ),\n aberto AS (\n SELECT\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'credit'), 0) AS receber,\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'debit'), 0) AS pagar,\n count(*) FILTER (WHERE m.direction = 'credit'\n AND (m.status = 'overdue' OR m.due_date < current_date)) AS venc_receber_n,\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'credit'\n AND (m.status = 'overdue' OR m.due_date < current_date)), 0) AS venc_receber_v,\n count(*) FILTER (WHERE m.direction = 'debit'\n AND (m.status = 'overdue' OR m.due_date < current_date)) AS venc_pagar_n,\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'debit'\n AND (m.status = 'overdue' OR m.due_date < current_date)), 0) AS venc_pagar_v\n FROM public.plg_financial_movements m\n WHERE m.status IN ('pending', 'partial', 'overdue')\n ),\n caixa AS (\n SELECT\n coalesce(sum(c.paid_amount) FILTER (WHERE c.direction = 'credit'), 0) AS entrada,\n coalesce(sum(c.paid_amount) FILTER (WHERE c.direction = 'debit'), 0) AS saida\n FROM public.v_financial_cash_movements c, janela j\n WHERE c.movement_kind = 'payment'\n AND c.payment_date >= j.de AND c.payment_date <= j.ate\n )\n SELECT saldo.v, aberto.receber, aberto.pagar, caixa.entrada, caixa.saida,\n aberto.venc_receber_n::integer, aberto.venc_receber_v,\n aberto.venc_pagar_n::integer, aberto.venc_pagar_v\n FROM saldo, aberto, caixa;\n$function$;\n\nCOMMENT ON FUNCTION public.financial_summary(date, date) IS\n 'Os nove n\u00FAmeros do cart\u00E3o de resumo, somados no banco. Substitui um '\n 'getSummary que baixava TODOS os movimentos do tenant para reduzir em '\n 'JavaScript \u2014 276.360 linhas no Espa\u00E7o Facial, e um 500 em vez do cart\u00E3o.';\n\nGRANT EXECUTE ON FUNCTION public.financial_summary(date, date) TO authenticated, service_role;\n";
|
|
79
79
|
export declare const MIGRATION_078_O_SALDO_DA_CONTA_SE_CALCULA_SO_NA_CONTA_PEDIDA = "-- O saldo da conta se calcula s\u00F3 na conta pedida.\n--\n-- Terceira vez que este erro aparece neste pool, e sempre com a mesma forma:\n-- uma CTE que agrega tudo antes de o filtro existir.\n--\n-- WITH debits AS (SELECT ... GROUP BY debit_account_id),\n-- credits AS (SELECT ... GROUP BY credit_account_id)\n-- SELECT ... FROM plg_financial_accounts account\n-- LEFT JOIN debits ON debits.account_id = account.id\n-- LEFT JOIN credits ON credits.account_id = account.id;\n--\n-- Uma CTE \u00E9 materializada INTEIRA antes de o `WHERE` de quem a consome\n-- aparecer. Ent\u00E3o quem pede o saldo de 156 contas paga a agrega\u00E7\u00E3o de todas.\n--\n-- \u2500\u2500 A conta, medida \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--\n-- Tenant Espa\u00E7o Facial, 20/09/2026:\n--\n-- contas totais 120.516\n-- das quais kind = 'person' 120.290 (o raz\u00E3o de cliente do V1)\n-- das quais o resumo do painel usa 156 (bank, cash_*, card_*)\n--\n-- somar o saldo dessas 156 21.849 ms\n--\n-- Vinte e dois segundos para somar cento e cinquenta e seis contas. O porte do\n-- V1 trouxe uma conta de raz\u00E3o por cliente, e foi isso que exp\u00F4s a forma \u2014\n-- antes eram dezenas de contas e ningu\u00E9m sentia.\n--\n-- \u2500\u2500 O conserto \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--\n-- `LEFT JOIN LATERAL` correlacionado em `account.id`. A correla\u00E7\u00E3o deixa de ser\n-- condi\u00E7\u00E3o de jun\u00E7\u00E3o e vira PAR\u00C2METRO: o planejador s\u00F3 soma os movimentos das\n-- contas que sobreviveram ao filtro, pelos \u00EDndices que j\u00E1 existem\n-- (`plg_financial_movements_debit_idx` e `_credit_idx`).\n--\n-- Nada muda no que a view devolve: as mesmas colunas, a mesma aritm\u00E9tica, a\n-- mesma regra de sinal por esp\u00E9cie de conta. Muda quantas contas ela visita.\n--\n-- Idempotente.\n\n-- `v_financial_customer_credit` pende desta view \u2014 conferido em `pg_depend`\n-- antes de derrubar, que \u00E9 a li\u00E7\u00E3o que j\u00E1 custou sete views num CASCADE. O\n-- CASCADE a levava junto e ningu\u00E9m percebia at\u00E9\n-- `financial_credit_customer()` procurar por ela:\n--\n-- ERROR: relation \"public.v_financial_customer_credit\" does not exist\n--\n-- Cai junto, de prop\u00F3sito e por escrito, e volta logo abaixo com a mesma\n-- defini\u00E7\u00E3o do baseline.\nDROP VIEW IF EXISTS public.v_financial_customer_credit;\nDROP VIEW IF EXISTS public.v_financial_account_balances CASCADE;\n\nCREATE VIEW public.v_financial_account_balances WITH (security_invoker = true) AS\nSELECT\n account.id AS account_id,\n account.tenant_id,\n account.unit_id,\n account.kind,\n account.code,\n account.name,\n account.person_id,\n account.is_active,\n account.account_type,\n account.bank_name,\n account.agency_number,\n account.account_number,\n account.metadata,\n COALESCE(d.total, 0::numeric)::numeric(14,2) AS debit_total,\n COALESCE(cr.total, 0::numeric)::numeric(14,2) AS credit_total,\n (COALESCE(cr.total, 0::numeric) - COALESCE(d.total, 0::numeric))::numeric(14,2) AS net_credit,\n -- A regra de sinal n\u00E3o muda: na conta de dinheiro o d\u00E9bito SOMA (entrou no\n -- caixa); nas outras \u00E9 o cr\u00E9dito que soma.\n CASE WHEN account.kind = ANY (ARRAY['bank','cash_physical','cash_session',\n 'card_receivable_credit','card_receivable_debit'])\n THEN (COALESCE(d.total, 0::numeric) - COALESCE(cr.total, 0::numeric))::numeric(14,2)\n ELSE (COALESCE(cr.total, 0::numeric) - COALESCE(d.total, 0::numeric))::numeric(14,2)\n END AS balance,\n (COALESCE(d.n, 0::bigint) + COALESCE(cr.n, 0::bigint))::integer AS movement_count,\n account.created_at,\n account.updated_at\n FROM public.plg_financial_accounts account\n LEFT JOIN LATERAL (\n SELECT sum(m.amount) AS total, count(*) AS n\n FROM public.v_financial_cash_movements m\n WHERE m.debit_account_id = account.id\n AND m.status <> 'cancelled'\n AND m.movement_kind = ANY (ARRAY['payment','transfer'])\n ) d ON true\n LEFT JOIN LATERAL (\n SELECT sum(m.amount) AS total, count(*) AS n\n FROM public.v_financial_cash_movements m\n WHERE m.credit_account_id = account.id\n AND m.status <> 'cancelled'\n AND m.movement_kind = ANY (ARRAY['payment','transfer'])\n ) cr ON true;\n\nCOMMENT ON VIEW public.v_financial_account_balances IS\n 'Saldo de cada conta, dos movimentos dela. LATERAL correlacionado em '\n 'account.id para que a soma aconte\u00E7a s\u00F3 nas contas que a consulta pediu \u2014 a '\n 'forma anterior agregava as 120.290 contas de raz\u00E3o de cliente para somar as '\n '156 do caixa, e o resumo do painel levava 22 s.';\n\nGRANT SELECT ON public.v_financial_account_balances TO authenticated, service_role;\n\nCREATE VIEW public.v_financial_customer_credit WITH (security_invoker='true') AS\n SELECT b.tenant_id,\n b.person_id,\n b.account_id,\n p.name AS person_name,\n b.credit_total AS credited,\n b.debit_total AS consumed,\n b.balance AS credit,\n b.movement_count,\n b.updated_at\n FROM (public.v_financial_account_balances b\n LEFT JOIN public.people p ON ((p.id = b.person_id)))\n WHERE (b.kind = 'person'::text);\n\nGRANT SELECT ON public.v_financial_customer_credit TO authenticated, service_role;\n";
|
|
80
80
|
export declare const MIGRATION_079_AS_PORTAS_DE_PORTE_NOVAS_NAO_NASCEM_ABERTAS = "-- As portas de porte novas n\u00E3o nascem abertas\n--\n-- As 077\u2013079 trouxeram tr\u00EAs fun\u00E7\u00F5es para o schema `migration`, e toda fun\u00E7\u00E3o\n-- no Postgres nasce com EXECUTE para PUBLIC. O contrato do ledger mede isso e\n-- n\u00E3o abre exce\u00E7\u00E3o, pelo motivo certo: as fun\u00E7\u00F5es de `migration` s\u00E3o escrita\n-- em massa no banco do cliente, por fora da cerca da tela. Uma delas cham\u00E1vel\n-- por `authenticated` \u00E9 uma porta de escrita em massa aberta a quem s\u00F3 tinha\n-- direito de ler a pr\u00F3pria conta.\n--\n-- Idempotente.\n\nREVOKE ALL ON FUNCTION migration.upsert_invoice(uuid, uuid, jsonb, jsonb)\n FROM PUBLIC, anon, authenticated;\nREVOKE ALL ON FUNCTION migration.upsert_fin_movement(uuid, uuid, jsonb, jsonb)\n FROM PUBLIC, anon, authenticated;\nREVOKE ALL ON FUNCTION migration._fin_installment_from_bill(uuid, uuid, uuid, uuid, integer, date, numeric, boolean, boolean)\n FROM PUBLIC, anon, authenticated;\n";
|
|
81
|
+
export declare const MIGRATION_080_A_REMESSA_E_A_COMISSAO_A_PAGAR_TEM_ONDE_MORAR = "-- A remessa banc\u00E1ria e a comiss\u00E3o a pagar t\u00EAm onde morar.\n--\n-- Cinco tabelas do V1 sem destino, dois assuntos:\n--\n-- cnab_remessas 59 o arquivo de remessa enviado ao banco\n-- cnab_remessa_items 700 o pagamento dentro dele\n-- commission_payables 1 a comiss\u00E3o apurada virando conta a pagar\n-- commission_payable_items 3 a linha da apura\u00E7\u00E3o dentro dela\n-- commission_payee_prefs 1 para qual conta cont\u00E1bil vai a comiss\u00E3o\n--\n-- O volume \u00E9 pequeno \u2014 CNAB \u00E9 do Pertinho do C\u00E9u, comiss\u00E3o a pagar mal come\u00E7ou\n-- no Espa\u00E7o Facial. Mas nenhuma das duas \u00E9 deriv\u00E1vel: a remessa \u00E9 um arquivo\n-- que j\u00E1 saiu para o banco com um n\u00FAmero de sequ\u00EAncia que n\u00E3o pode repetir, e a\n-- comiss\u00E3o a pagar \u00E9 a ponte entre o que foi APURADO e o T\u00EDtulo que algu\u00E9m vai\n-- pagar. Reconstituir qualquer uma seria inventar.\n--\n-- \u2500\u2500 O que o V2 j\u00E1 tinha, e por isso n\u00E3o se repete aqui \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- `plg_financial_commission_entries`, `_generations`, `_rules`,\n-- `_rule_criteria` e `_functions` j\u00E1 existem. O que faltava era o PAG\u00C1VEL \u2014 o\n-- elo entre a apura\u00E7\u00E3o e o contas a pagar. Por isso estas duas tabelas e n\u00E3o um\n-- dom\u00EDnio inteiro.\n--\n-- \u2500\u2500 O arquivo de remessa \u00E9 arquivo \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--\n-- `cnab_remessas.file_content` guarda o CNAB inteiro numa coluna de texto.\n-- Mesma decis\u00E3o da caixa de entrada da NF-e: arquivo mora em\n-- `public.documents`, e aqui fica o ponteiro. O que N\u00C3O sai da linha \u00E9\n-- `sequence_number`: ele \u00E9 do banco, n\u00E3o do arquivo \u2014 dois arquivos com o mesmo\n-- n\u00FAmero s\u00E3o uma remessa rejeitada.\n--\n-- Idempotente.\n\nCREATE TABLE IF NOT EXISTS public.plg_financial_cnab_batches (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n unit_id uuid,\n bank_account_id uuid,\n layout text,\n -- O n\u00FAmero que o banco conta. \u00DAnico por conta: repetir \u00E9 remessa rejeitada.\n sequence_number integer,\n total_amount numeric(14,2) DEFAULT 0 NOT NULL,\n items_count integer DEFAULT 0 NOT NULL,\n file_name text,\n -- O CNAB em si vive em public.documents; aqui fica o ponteiro.\n document_id uuid,\n generated_at timestamp with time zone DEFAULT now() NOT NULL,\n owner_id uuid,\n metadata jsonb DEFAULT '{}'::jsonb NOT NULL,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL\n);\n\nCOMMENT ON TABLE public.plg_financial_cnab_batches IS\n 'O arquivo de remessa enviado ao banco. V1: cnab_remessas. O arquivo mora em public.documents; o n\u00FAmero de sequ\u00EAncia mora aqui, porque \u00E9 do banco.';\n\nCREATE TABLE IF NOT EXISTS public.plg_financial_cnab_items (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n batch_id uuid NOT NULL,\n movement_id uuid,\n payment_form text,\n payment_date date,\n amount numeric(14,2) DEFAULT 0 NOT NULL,\n metadata jsonb DEFAULT '{}'::jsonb NOT NULL,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL\n);\n\nCOMMENT ON TABLE public.plg_financial_cnab_items IS\n 'O pagamento dentro da remessa, ligado ao movimento financeiro que ele quita. V1: cnab_remessa_items.';\n\nCREATE TABLE IF NOT EXISTS public.plg_financial_commission_payables (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n unit_id uuid,\n -- O T\u00EDtulo que a apura\u00E7\u00E3o gerou. \u00C9 este elo que faltava no V2.\n invoice_id uuid,\n beneficiary_party_id uuid,\n chart_account_id uuid,\n due_date date,\n total_amount numeric(14,2) DEFAULT 0 NOT NULL,\n entries_count integer DEFAULT 0 NOT NULL,\n status text DEFAULT 'pending'::text NOT NULL,\n launched_at timestamp with time zone,\n canceled_at timestamp with time zone,\n -- Quem cancelou: a tela, o estorno do T\u00EDtulo, ou a reapura\u00E7\u00E3o. O V1 guarda\n -- a palavra e ela explica por que a comiss\u00E3o sumiu do relat\u00F3rio.\n cancel_source text,\n owner_id uuid,\n metadata jsonb DEFAULT '{}'::jsonb NOT NULL,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL\n);\n\nCOMMENT ON TABLE public.plg_financial_commission_payables IS\n 'A comiss\u00E3o apurada virando conta a pagar \u2014 o elo entre plg_financial_commission_entries e o T\u00EDtulo. V1: commission_payables.';\n\nCREATE TABLE IF NOT EXISTS public.plg_financial_commission_payable_items (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n payable_id uuid NOT NULL,\n -- A linha da venda que gerou a comiss\u00E3o, e a entrada de apura\u00E7\u00E3o dela.\n source_item_id uuid,\n item_id uuid,\n aggregate_entry_id uuid,\n description text,\n amount numeric(14,2) DEFAULT 0 NOT NULL,\n -- `entry_ids` do V1 \u00E9 um array de apura\u00E7\u00F5es agregadas numa linha s\u00F3. Vem\n -- como jsonb de refer\u00EAncias: s\u00E3o ids do V1 que s\u00F3 resolvem depois que\n -- commission_entries atravessar, e um array de uuid faria a linha mentir\n -- enquanto isso.\n entry_refs jsonb DEFAULT '[]'::jsonb NOT NULL,\n metadata jsonb DEFAULT '{}'::jsonb NOT NULL,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS public.plg_financial_commission_payee_prefs (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n party_id uuid NOT NULL,\n chart_account_id uuid,\n metadata jsonb DEFAULT '{}'::jsonb NOT NULL,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL\n);\n\nCOMMENT ON TABLE public.plg_financial_commission_payee_prefs IS\n 'Para qual conta cont\u00E1bil a comiss\u00E3o daquela pessoa vai. Uma por pessoa. V1: commission_payee_prefs.';\n\n-- \u2500\u2500 chaves \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\u2500\u2500\u2500\u2500\nDO $$\nDECLARE t text;\nBEGIN\n FOREACH t IN ARRAY ARRAY['plg_financial_cnab_batches', 'plg_financial_cnab_items',\n 'plg_financial_commission_payables', 'plg_financial_commission_payable_items',\n 'plg_financial_commission_payee_prefs'] LOOP\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conrelid = ('public.' || t)::regclass AND contype = 'p') THEN\n EXECUTE format('ALTER TABLE ONLY public.%I ADD CONSTRAINT %I PRIMARY KEY (id)', t, t || '_pkey');\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = t || '_tenant_id_id_key') THEN\n EXECUTE format('ALTER TABLE ONLY public.%I ADD CONSTRAINT %I UNIQUE (tenant_id, id)', t, t || '_tenant_id_id_key');\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = t || '_tenant_fkey') THEN\n EXECUTE format('ALTER TABLE ONLY public.%I ADD CONSTRAINT %I FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE', t, t || '_tenant_fkey');\n END IF;\n END LOOP;\nEND $$;\n\nDO $$ BEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_batches_unit_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_cnab_batches ADD CONSTRAINT plg_financial_cnab_batches_unit_fkey\n FOREIGN KEY (tenant_id, unit_id) REFERENCES app.units(tenant_id, id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_batches_account_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_cnab_batches ADD CONSTRAINT plg_financial_cnab_batches_account_fkey\n FOREIGN KEY (bank_account_id) REFERENCES public.plg_financial_bank_accounts(id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_batches_document_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_cnab_batches ADD CONSTRAINT plg_financial_cnab_batches_document_fkey\n FOREIGN KEY (document_id) REFERENCES public.documents(id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_items_batch_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_cnab_items ADD CONSTRAINT plg_financial_cnab_items_batch_fkey\n FOREIGN KEY (tenant_id, batch_id) REFERENCES public.plg_financial_cnab_batches(tenant_id, id) ON DELETE CASCADE;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_items_movement_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_cnab_items ADD CONSTRAINT plg_financial_cnab_items_movement_fkey\n FOREIGN KEY (movement_id) REFERENCES public.plg_financial_movements(id) ON DELETE SET NULL;\n END IF;\n\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payables_unit_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payables ADD CONSTRAINT plg_financial_commission_payables_unit_fkey\n FOREIGN KEY (tenant_id, unit_id) REFERENCES app.units(tenant_id, id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payables_invoice_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payables ADD CONSTRAINT plg_financial_commission_payables_invoice_fkey\n FOREIGN KEY (invoice_id) REFERENCES public.plg_financial_invoices(id) ON DELETE SET NULL;\n END IF;\n -- S\u00F3 enquanto a coluna existe com ESTE nome. A 082 renomeia\n -- `beneficiary_party_id` para `beneficiary_account_id` (o benefici\u00E1rio da\n -- comiss\u00E3o \u00E9 uma CONTA, n\u00E3o uma pessoa), e num replay este arquivo roda de\n -- novo sobre a tabela j\u00E1 corrigida: sem a guarda, ele estoura com \"column\n -- beneficiary_party_id referenced in foreign key constraint does not exist\" e\n -- derruba a corrente inteira.\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payables_party_fkey')\n AND EXISTS (SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'plg_financial_commission_payables'\n AND column_name = 'beneficiary_party_id') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payables ADD CONSTRAINT plg_financial_commission_payables_party_fkey\n FOREIGN KEY (beneficiary_party_id) REFERENCES public.people(id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payables_chart_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payables ADD CONSTRAINT plg_financial_commission_payables_chart_fkey\n FOREIGN KEY (chart_account_id) REFERENCES public.plg_financial_chart_of_accounts(id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payable_items_payable_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payable_items ADD CONSTRAINT plg_financial_commission_payable_items_payable_fkey\n FOREIGN KEY (tenant_id, payable_id) REFERENCES public.plg_financial_commission_payables(tenant_id, id) ON DELETE CASCADE;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payable_items_item_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payable_items ADD CONSTRAINT plg_financial_commission_payable_items_item_fkey\n FOREIGN KEY (item_id) REFERENCES public.items(id) ON DELETE SET NULL;\n END IF;\n -- Mesma hist\u00F3ria: a 082 renomeia `party_id` para `account_id` aqui.\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payee_prefs_party_fkey')\n AND EXISTS (SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'plg_financial_commission_payee_prefs'\n AND column_name = 'party_id') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payee_prefs ADD CONSTRAINT plg_financial_commission_payee_prefs_party_fkey\n FOREIGN KEY (party_id) REFERENCES public.people(id) ON DELETE CASCADE;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payee_prefs_chart_fkey') THEN\n ALTER TABLE ONLY public.plg_financial_commission_payee_prefs ADD CONSTRAINT plg_financial_commission_payee_prefs_chart_fkey\n FOREIGN KEY (chart_account_id) REFERENCES public.plg_financial_chart_of_accounts(id) ON DELETE SET NULL;\n END IF;\nEND $$;\n\n-- Dois arquivos de remessa com o mesmo n\u00FAmero na mesma conta \u00E9 remessa\n-- rejeitada pelo banco. O \u00EDndice \u00E9 a trava que o V1 n\u00E3o tinha.\nCREATE UNIQUE INDEX IF NOT EXISTS plg_financial_cnab_batches_sequence_uidx\n ON public.plg_financial_cnab_batches USING btree (tenant_id, bank_account_id, sequence_number)\n WHERE bank_account_id IS NOT NULL AND sequence_number IS NOT NULL;\nCREATE INDEX IF NOT EXISTS plg_financial_cnab_items_batch_idx\n ON public.plg_financial_cnab_items USING btree (tenant_id, batch_id);\nDO $$ BEGIN\n IF EXISTS (SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'plg_financial_commission_payables'\n AND column_name = 'beneficiary_party_id') THEN\n CREATE INDEX IF NOT EXISTS plg_financial_commission_payables_party_idx\n ON public.plg_financial_commission_payables USING btree (tenant_id, beneficiary_party_id, due_date DESC);\n END IF;\nEND $$;\nCREATE INDEX IF NOT EXISTS plg_financial_commission_payables_open_idx\n ON public.plg_financial_commission_payables USING btree (tenant_id, unit_id, due_date)\n WHERE canceled_at IS NULL;\nCREATE INDEX IF NOT EXISTS plg_financial_commission_payable_items_payable_idx\n ON public.plg_financial_commission_payable_items USING btree (tenant_id, payable_id);\n-- Uma prefer\u00EAncia por pessoa: duas seriam duas respostas para \"onde lan\u00E7ar\".\n-- Guardado pelo mesmo motivo da FK acima: a 082 renomeia esta coluna.\nDO $$ BEGIN\n IF EXISTS (SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'plg_financial_commission_payee_prefs'\n AND column_name = 'party_id') THEN\n CREATE UNIQUE INDEX IF NOT EXISTS plg_financial_commission_payee_prefs_party_uidx\n ON public.plg_financial_commission_payee_prefs USING btree (tenant_id, party_id);\n END IF;\nEND $$;\n\n-- \u2500\u2500 gatilho de updated_at \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\nDO $$\nDECLARE t text;\nBEGIN\n FOREACH t IN ARRAY ARRAY['plg_financial_cnab_batches', 'plg_financial_cnab_items',\n 'plg_financial_commission_payables', 'plg_financial_commission_payable_items',\n 'plg_financial_commission_payee_prefs'] LOOP\n EXECUTE format('DROP TRIGGER IF EXISTS %I ON public.%I', t || '_updated_at', t);\n EXECUTE format('CREATE TRIGGER %I BEFORE UPDATE ON public.%I FOR EACH ROW EXECUTE FUNCTION public.handle_updated_at()', t || '_updated_at', t);\n END LOOP;\nEND $$;\n\n-- \u2500\u2500 quem enxerga: o scaffold, e n\u00E3o policy escrita \u00E0 m\u00E3o \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- `app.scaffold_table` \u00E9 a porta \u00FAnica de autoriza\u00E7\u00E3o do financeiro: ele\n-- registra a tabela em `app.scaffold_registry`, gera as pol\u00EDticas com o nome\n-- que o gate cobra (`*_authz_*`) e liga a permiss\u00E3o do plugin junto com as\n-- escotilhas de compartilhamento. Escrever a policy \u00E0 m\u00E3o criaria a SEGUNDA\n-- regra de autoriza\u00E7\u00E3o do financeiro \u2014 e foi exatamente o que este arquivo fez\n-- na primeira vers\u00E3o: 41 asser\u00E7\u00F5es de `004_negative_authz` viraram 40, porque\n-- as cinco tabelas tinham pol\u00EDtica e n\u00E3o tinham declara\u00E7\u00E3o.\n--\n-- `unit_optional` nas que t\u00EAm `unit_id` anul\u00E1vel (a remessa pode ser da rede, a\n-- comiss\u00E3o pode n\u00E3o ter filial); `tenant` nas tr\u00EAs que n\u00E3o t\u00EAm unidade nenhuma\n-- \u2014 declarar `unit` numa coluna que n\u00E3o existe esconde a tabela inteira.\nSELECT app.scaffold_table('public.plg_financial_cnab_batches'::regclass,\n 'financial.cnab_batch', 'financial', false, 'enforce');\nSELECT app.scaffold_scope('public.plg_financial_cnab_batches'::regclass, 'unit_optional', true);\n\nSELECT app.scaffold_table('public.plg_financial_cnab_items'::regclass,\n 'financial.cnab_item', 'financial', false, 'enforce');\nSELECT app.scaffold_scope('public.plg_financial_cnab_items'::regclass, 'tenant', true);\n\nSELECT app.scaffold_table('public.plg_financial_commission_payables'::regclass,\n 'financial.commission_payable', 'financial', false, 'enforce');\nSELECT app.scaffold_scope('public.plg_financial_commission_payables'::regclass, 'unit_optional', true);\n\nSELECT app.scaffold_table('public.plg_financial_commission_payable_items'::regclass,\n 'financial.commission_payable_item', 'financial', false, 'enforce');\nSELECT app.scaffold_scope('public.plg_financial_commission_payable_items'::regclass, 'tenant', true);\n\nSELECT app.scaffold_table('public.plg_financial_commission_payee_prefs'::regclass,\n 'financial.commission_payee_pref', 'financial', false, 'enforce');\nSELECT app.scaffold_scope('public.plg_financial_commission_payee_prefs'::regclass, 'tenant', true);\n";
|
|
82
|
+
export declare const MIGRATION_081_A_REMESSA_E_A_COMISSAO_ATRAVESSAM = "-- A remessa e a comiss\u00E3o atravessam.\n--\n-- A 080 fez as cinco tabelas. Esta escreve o de-para, com o writer gen\u00E9rico\n-- `by_shape` (spine 123) \u2014 as colunas do destino t\u00EAm o nome que o de-para\n-- produz, ent\u00E3o o que falta \u00E9 a tradu\u00E7\u00E3o, n\u00E3o uma fun\u00E7\u00E3o por tabela.\n--\n-- \u2500\u2500 O arquivo de remessa n\u00E3o vem por aqui \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--\n-- `cnab_remessas.file_content` guarda o CNAB inteiro em texto. Sai com `-`:\n-- arquivo atravessa pelo est\u00E1gio de assets e vira `public.documents`. O que\n-- FICA na linha \u00E9 `sequence_number`, porque ele \u00E9 do banco \u2014 dois arquivos com\n-- o mesmo n\u00FAmero s\u00E3o uma remessa rejeitada, e isso \u00E9 dado, n\u00E3o anexo.\n--\n-- \u2500\u2500 As apura\u00E7\u00F5es agregadas ficam como refer\u00EAncia \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--\n-- `commission_payable_items.entry_ids` \u00E9 um array de ids de apura\u00E7\u00E3o agregados\n-- numa linha s\u00F3. Vem como `entry_refs` jsonb com os ids do V1 dentro: eles s\u00F3\n-- resolvem depois que `commission_entries` atravessar, e um array de uuid faria\n-- a linha mentir enquanto isso.\n--\n-- Idempotente.\n\n-- \u2500\u2500 `by_shape` volta ao vocabul\u00E1rio \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--\n-- O spine 123 acrescenta `by_shape` ao `allowlist_writer_check`. Ele N\u00C3O\n-- sobrevive at\u00E9 aqui: `financial/061` reescreve a restri\u00E7\u00E3o com uma lista\n-- LITERAL, e a lista dele foi escrita antes de o spine 123 existir. Toda\n-- palavra que o spine acrescenta morre na passagem por 061 \u2014 foi assim que a\n-- corrente do zero parou nesta linha com\n-- `new row for relation \"allowlist\" violates check constraint`.\n--\n-- A ironia est\u00E1 no cabe\u00E7alho do pr\u00F3prio 061: \"A LISTA \u00C9 A UNI\u00C3O, E N\u00C3O UMA\n-- LISTA LITERAL\". Ele descreve a regra e faz o contr\u00E1rio.\n--\n-- O acr\u00E9scimo \u00E9 refeito aqui porque este \u00E9 o PRIMEIRO consumidor de `by_shape`\n-- depois de 061 \u2014 fiscal_br/003, inventory/007 e tables/007 v\u00EAm adiante e\n-- herdam o conserto. A corre\u00E7\u00E3o de verdade \u00E9 converter 061 para o splice, e\n-- isso \u00E9 do dono daquele arquivo.\nDO $$\nDECLARE v_def text;\nBEGIN\n SELECT pg_get_constraintdef(oid) INTO v_def\n FROM pg_constraint WHERE conname = 'allowlist_writer_check';\n IF v_def IS NULL OR strpos(v_def, 'by_shape') > 0 THEN RETURN; END IF;\n ALTER TABLE migration.allowlist DROP CONSTRAINT allowlist_writer_check;\n EXECUTE replace(\n 'ALTER TABLE migration.allowlist ADD CONSTRAINT allowlist_writer_check ' || v_def,\n '''person''::text', '''person''::text, ''by_shape''::text');\nEND $$;\n\nSET LOCAL migration.allowlist_unlock = 'on';\n\nSELECT migration._allow(\n 'cnab_remessas', 'public.plg_financial_cnab_batches', 'financial', 'by_shape',\n jsonb_build_object('target', 'public.plg_financial_cnab_batches'),\n NULL::text[],\n jsonb_build_object(\n 'uuid', 'id',\n 'unit_id', 'unit_id@companies',\n 'bank_account_id', 'bank_account_id@bank_accounts',\n 'layout', 'layout',\n 'sequence_number', 'sequence_number',\n 'total_amount', 'total_amount',\n 'items_count', 'items_count',\n 'file_name', 'file_name',\n 'created_at', 'generated_at',\n 'updated_at', 'updated_at',\n 'tenant_id', '-',\n 'generated_by', '-',\n 'file_content', '-',\n 'id', 'jsonb:financial.v1_ref'),\n 'O arquivo de remessa enviado ao banco. O CNAB em si vai pelo est\u00E1gio de '\n 'assets; o n\u00FAmero de sequ\u00EAncia fica na linha porque \u00E9 do banco.'\n);\n\nSELECT migration._allow(\n 'cnab_remessa_items', 'public.plg_financial_cnab_items', 'financial', 'by_shape',\n jsonb_build_object('target', 'public.plg_financial_cnab_items'),\n NULL::text[],\n jsonb_build_object(\n 'remessa_id', 'batch_id@cnab_remessas',\n 'financial_movement_id', 'movement_id@financial_movements',\n 'payment_form', 'payment_form',\n 'payment_date', 'payment_date',\n 'amount', 'amount',\n 'created_at', 'created_at',\n 'tenant_id', '-',\n 'id', 'jsonb:financial.v1_ref'),\n 'O pagamento dentro da remessa. Sem `uuid` na origem \u2014 o id do destino nasce '\n 'determin\u00EDstico da chave num\u00E9rica.'\n);\n\nSELECT migration._allow(\n 'commission_payables', 'public.plg_financial_commission_payables', 'financial', 'by_shape',\n jsonb_build_object('target', 'public.plg_financial_commission_payables'),\n NULL::text[],\n jsonb_build_object(\n 'uuid', 'id',\n 'unit_id', 'unit_id@companies',\n 'invoice_id', 'invoice_id@invoices',\n 'beneficiary_account_central_id', 'beneficiary_party_id@account_central',\n 'chart_account_id', 'chart_account_id@chart_of_accounts',\n 'due_date', 'due_date',\n 'total_amount', 'total_amount',\n 'entries_count', 'entries_count',\n 'status', 'status',\n 'launched_at', 'launched_at',\n 'canceled_at', 'canceled_at',\n 'cancel_source', 'cancel_source',\n 'created_at', 'created_at',\n 'updated_at', 'updated_at',\n 'tenant_id', '-',\n 'invoice_uuid', '-',\n 'launched_by', '-',\n 'id', 'jsonb:financial.v1_ref'),\n 'A comiss\u00E3o apurada virando conta a pagar \u2014 o elo entre a apura\u00E7\u00E3o e o '\n 'T\u00EDtulo, que era o que faltava no V2. `cancel_source` vem junto porque \u00E9 ele '\n 'que explica por que a comiss\u00E3o sumiu do relat\u00F3rio.'\n);\n\nSELECT migration._allow(\n 'commission_payable_items', 'public.plg_financial_commission_payable_items', 'financial', 'by_shape',\n jsonb_build_object('target', 'public.plg_financial_commission_payable_items'),\n NULL::text[],\n jsonb_build_object(\n 'uuid', 'id',\n 'payable_id', 'payable_id@commission_payables',\n 'source_invoice_item_id', 'source_item_id@invoice_items',\n 'invoice_item_id', 'item_id@invoice_items',\n 'description', 'description',\n 'amount', 'amount',\n 'entry_ids', 'entry_refs',\n 'aggregate_entry_id', 'jsonb:financial.v1_aggregate_entry_ref',\n 'created_at', 'created_at',\n 'updated_at', 'updated_at',\n 'tenant_id', '-',\n 'id', 'jsonb:financial.v1_ref'),\n 'A linha da apura\u00E7\u00E3o dentro do pag\u00E1vel. `entry_ids` vira `entry_refs` jsonb '\n 'com os ids do V1: eles s\u00F3 resolvem quando commission_entries atravessar.'\n);\n\nSELECT migration._allow(\n 'commission_payee_prefs', 'public.plg_financial_commission_payee_prefs', 'financial', 'by_shape',\n jsonb_build_object('target', 'public.plg_financial_commission_payee_prefs'),\n NULL::text[],\n jsonb_build_object(\n 'account_central_id', 'party_id@account_central',\n 'chart_account_id', 'chart_account_id@chart_of_accounts',\n 'updated_at', 'updated_at',\n 'tenant_id', '-',\n 'id', 'jsonb:financial.v1_ref'),\n 'Para qual conta cont\u00E1bil a comiss\u00E3o daquela pessoa vai. Uma por pessoa \u2014 '\n 'duas seriam duas respostas para \"onde lan\u00E7ar\".'\n);\n\nDELETE FROM migration.excluded_tables\n WHERE source_table IN ('cnab_remessas', 'cnab_remessa_items', 'commission_payables',\n 'commission_payable_items', 'commission_payee_prefs');\n\nRESET migration.allowlist_unlock;\n";
|
|
83
|
+
export declare const MIGRATION_082_O_BENEFICIARIO_DA_COMISSAO_E_UMA_CONTA = "-- O benefici\u00E1rio da comiss\u00E3o \u00E9 uma CONTA, n\u00E3o uma pessoa.\n--\n-- A 080 declarou `beneficiary_party_id uuid \u2192 public.people` e a 081 mapeou\n-- `commission_payables.beneficiary_account_central_id` para ela. As duas\n-- estavam erradas, e a FK cobrou na primeira onda:\n--\n-- 23503: insert or update on table \"plg_financial_commission_payables\"\n-- violates foreign key constraint \"plg_financial_commission_payables_party_fkey\"\n--\n-- `account_central` do V1 n\u00E3o \u00E9 pessoa: \u00E9 o raz\u00E3o de QUEM RECEBE, e ele\n-- atravessa para `public.plg_financial_accounts` (writer `fin_account`). O id\n-- que o ledger devolveu \u00E9 de uma conta, e a coluna exigia uma pessoa.\n--\n-- N\u00E3o \u00E9 um detalhe de nome. Uma comiss\u00E3o pode ser paga a uma conta que n\u00E3o \u00E9 de\n-- ningu\u00E9m \u2014 um centro, um fundo, a pr\u00F3pria casa \u2014 e for\u00E7ar uma pessoa ali faria\n-- essas linhas n\u00E3o existirem. A mesma corre\u00E7\u00E3o vale para\n-- `commission_payee_prefs`, que responde \"para qual conta cont\u00E1bil a comiss\u00E3o\n-- daquele benefici\u00E1rio vai\".\n--\n-- S\u00E3o 5 linhas no Espa\u00E7o Facial. O volume \u00E9 irrelevante; o modelo, n\u00E3o.\n--\n-- Idempotente.\n\nDO $$ BEGIN\n IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payables_party_fkey') THEN\n ALTER TABLE public.plg_financial_commission_payables\n DROP CONSTRAINT plg_financial_commission_payables_party_fkey;\n END IF;\n IF EXISTS (SELECT 1 FROM pg_attribute a\n WHERE a.attrelid = 'public.plg_financial_commission_payables'::regclass\n AND a.attname = 'beneficiary_party_id' AND NOT a.attisdropped) THEN\n ALTER TABLE public.plg_financial_commission_payables\n RENAME COLUMN beneficiary_party_id TO beneficiary_account_id;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payables_account_fkey') THEN\n ALTER TABLE public.plg_financial_commission_payables\n ADD CONSTRAINT plg_financial_commission_payables_account_fkey\n FOREIGN KEY (beneficiary_account_id) REFERENCES public.plg_financial_accounts(id) ON DELETE SET NULL;\n END IF;\n\n IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payee_prefs_party_fkey') THEN\n ALTER TABLE public.plg_financial_commission_payee_prefs\n DROP CONSTRAINT plg_financial_commission_payee_prefs_party_fkey;\n END IF;\n IF EXISTS (SELECT 1 FROM pg_attribute a\n WHERE a.attrelid = 'public.plg_financial_commission_payee_prefs'::regclass\n AND a.attname = 'party_id' AND NOT a.attisdropped) THEN\n ALTER TABLE public.plg_financial_commission_payee_prefs\n RENAME COLUMN party_id TO account_id;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_commission_payee_prefs_account_fkey') THEN\n ALTER TABLE public.plg_financial_commission_payee_prefs\n ADD CONSTRAINT plg_financial_commission_payee_prefs_account_fkey\n FOREIGN KEY (account_id) REFERENCES public.plg_financial_accounts(id) ON DELETE CASCADE;\n END IF;\nEND $$;\n\nDROP INDEX IF EXISTS public.plg_financial_commission_payables_party_idx;\nDROP INDEX IF EXISTS public.plg_financial_commission_payee_prefs_party_uidx;\nCREATE INDEX IF NOT EXISTS plg_financial_commission_payables_account_idx\n ON public.plg_financial_commission_payables USING btree (tenant_id, beneficiary_account_id, due_date DESC);\nCREATE UNIQUE INDEX IF NOT EXISTS plg_financial_commission_payee_prefs_account_uidx\n ON public.plg_financial_commission_payee_prefs USING btree (tenant_id, account_id);\n\nCOMMENT ON COLUMN public.plg_financial_commission_payables.beneficiary_account_id IS\n 'V1: commission_payables.beneficiary_account_central_id \u2014 o raz\u00E3o de quem recebe, que pode n\u00E3o ser uma pessoa.';\n\nSET LOCAL migration.allowlist_unlock = 'on';\n\nUPDATE migration.allowlist\n SET columns = columns\n - 'beneficiary_account_central_id'\n || jsonb_build_object('beneficiary_account_central_id', 'beneficiary_account_id@account_central')\n WHERE source_table = 'commission_payables';\n\nUPDATE migration.allowlist\n SET columns = columns\n - 'account_central_id'\n || jsonb_build_object('account_central_id', 'account_id@account_central')\n WHERE source_table = 'commission_payee_prefs';\n\nRESET migration.allowlist_unlock;\n";
|
|
84
|
+
export declare const MIGRATION_083_A_CONTA_DO_BANCO_E_UMA_CONTA_E_A_FATURA_TEM_DOIS_DESTINOS = "-- A conta do banco \u00E9 uma conta, e a fatura tem dois destinos.\n--\n-- Duas corre\u00E7\u00F5es que a primeira onda cobrou, das mesmas 59 + 1 linhas.\n-- (A terceira, do \u00EDndice de grupo fiscal, mudou de arquivo: ela toca uma\n-- tabela do fiscal_br, e o fiscal_br roda DEPOIS do financeiro na corrente \u2014\n-- um arquivo do financeiro que mexe na tabela de outro plugin quebra do zero.\n-- Ver fiscal_br/004.)\n--\n-- \u2500\u2500 1. `bank_accounts` do V1 n\u00E3o vira `plg_financial_bank_accounts` \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- A 080 declarou `plg_financial_cnab_batches.bank_account_id` apontando para\n-- `public.plg_financial_bank_accounts`. Mas o de-para manda `bank_accounts` do\n-- V1 para `public.plg_financial_accounts` \u2014 o mesmo destino de\n-- `account_central`, porque no V2 a conta banc\u00E1ria \u00E9 uma CONTA do raz\u00E3o, n\u00E3o\n-- uma tabela paralela. As 59 remessas do Pertinho do C\u00E9u bateram na FK.\n--\n-- \u00C9 o mesmo erro da 082, no arquivo ao lado: supor o destino pelo nome da\n-- tabela de origem em vez de ler a allowlist.\n--\n-- \u2500\u2500 2. `invoices` resolve para DOIS destinos \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--\n-- `invoices` do V1 tem duas linhas de de-para: `public.orders` (a Venda) e\n-- `public.plg_financial_invoices` (o T\u00EDtulo). `migration.resolve_ref` sem alvo\n-- declarado l\u00EA `SELECT target_table ... WHERE source_table = 'invoices'` e pega\n-- UMA das duas, sem ordem \u2014 ent\u00E3o `invoice_id@invoices` devolvia \u00E0s vezes o id\n-- de uma Venda para uma coluna que exige um T\u00EDtulo.\n--\n-- O de-para j\u00E1 tem a sintaxe para isso e a 081 n\u00E3o a usou:\n-- `coluna@tabela_de_origem:tabela_de_destino`. Uma refer\u00EAncia a uma origem de\n-- dois destinos SEM o alvo \u00E9 amb\u00EDgua por constru\u00E7\u00E3o, e acerta por acidente\n-- enquanto houver sorte.\n--\n-- Idempotente.\n\nDO $$ BEGIN\n IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_batches_account_fkey') THEN\n ALTER TABLE public.plg_financial_cnab_batches DROP CONSTRAINT plg_financial_cnab_batches_account_fkey;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_financial_cnab_batches_ledger_account_fkey') THEN\n ALTER TABLE public.plg_financial_cnab_batches\n ADD CONSTRAINT plg_financial_cnab_batches_ledger_account_fkey\n FOREIGN KEY (bank_account_id) REFERENCES public.plg_financial_accounts(id) ON DELETE SET NULL;\n END IF;\nEND $$;\n\nCOMMENT ON COLUMN public.plg_financial_cnab_batches.bank_account_id IS\n 'A conta do raz\u00E3o de onde a remessa sai. V1: cnab_remessas.bank_account_id \u2192 bank_accounts, que atravessa para plg_financial_accounts.';\n\nSET LOCAL migration.allowlist_unlock = 'on';\n\n-- `:public.plg_financial_invoices` \u00E9 o alvo declarado. Sem ele a resolu\u00E7\u00E3o\n-- escolhe entre a Venda e o T\u00EDtulo, e escolher n\u00E3o \u00E9 resolver.\nUPDATE migration.allowlist\n SET columns = columns - 'invoice_id'\n || jsonb_build_object('invoice_id', 'invoice_id@invoices:public.plg_financial_invoices')\n WHERE source_table = 'commission_payables';\n\nRESET migration.allowlist_unlock;\n";
|
|
85
|
+
export declare const MIGRATION_084_A_NOTA_DE_ENTRADA_TEM_UM_TITULO_A_PAGAR = "-- A nota de entrada tem um t\u00EDtulo a pagar.\n--\n-- `danfe_payments` \u00E9 o plano de pagamento que o operador montou ao importar a\n-- DANFE: 895 linhas (657 no Pertinho do C\u00E9u, 238 no Espa\u00E7o Facial),\n-- R$ 1.293.490,86, e nenhuma delas atravessava. \u00C9 a \u00FAltima das quatro tabelas\n-- da entrada de notas; as outras tr\u00EAs v\u00E3o para o invent\u00E1rio\n-- (plugin-inventory/010). Esta mora aqui porque o destino dela \u00E9 uma tabela do\n-- FINANCEIRO, e o financeiro roda ANTES do invent\u00E1rio na corrente\n-- (packages/db/chain.json) \u2014 um arquivo do invent\u00E1rio que criasse a parcela\n-- quebraria a aplica\u00E7\u00E3o do zero.\n--\n-- \u2500\u2500 O t\u00EDtulo n\u00E3o existe no V1, e a parcela n\u00E3o vive sem ele \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- `plg_financial_invoice_installments.invoice_id` \u00E9 NOT NULL, e no V1 n\u00E3o h\u00E1\n-- nada para resolver: `danfe_payments` aponta para `danfe_imports`, e nenhuma\n-- linha de `invoices` referencia uma nota de entrada \u2014 as tr\u00EAs FKs que chegam\n-- em `danfe_imports` s\u00E3o `danfe_import_items`, `danfe_payments` e `dfe_inbox`.\n-- No V1 a conta a pagar do fornecedor simplesmente n\u00E3o \u00E9 um t\u00EDtulo: \u00E9 uma lista\n-- de vencimentos pendurada na tela de importa\u00E7\u00E3o.\n--\n-- Ent\u00E3o o t\u00EDtulo nasce aqui, um por nota, determin\u00EDstico:\n--\n-- id md5('danfe-invoice:' || uuid da nota)::uuid\n-- direction payable\n-- idempotency_key danfe:<chave de acesso>\n--\n-- \u00C9 o mesmo padr\u00E3o de id derivado que o porte j\u00E1 usa para o anexo (spine 054).\n-- Determin\u00EDstico importa duas vezes: a segunda parcela da mesma nota encontra o\n-- t\u00EDtulo que a primeira criou, e a segunda ONDA encontra o mesmo id.\n--\n-- \u2500\u2500 O total do t\u00EDtulo \u00E9 a soma das PARCELAS, n\u00E3o o total da nota \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- Medido em 21/09/2026: em 38 das 607 notas (6,3%) a soma das parcelas n\u00E3o bate\n-- com `danfe_imports.total_value` \u2014 R$ 926.668,06 de notas contra R$ 850.454,65\n-- de parcelas no tenant 8. Um t\u00EDtulo cujo total n\u00E3o \u00E9 a soma das parcelas nasce\n-- com saldo em aberto errado em toda tela que faz \"total \u2212 pago\", e o total da\n-- nota continua leg\u00EDvel em `metadata.danfe.total_value` e na caixa de entrada\n-- fiscal. A soma vem do extrator (`note_payments_total`), j\u00E1 pronta na primeira\n-- parcela, porque `plg_financial_invoices` \u00E9 IMUT\u00C1VEL depois de emitido: o\n-- gatilho recusa alterar `total`, e acumular parcela a parcela n\u00E3o \u00E9 op\u00E7\u00E3o.\n--\n-- \u2500\u2500 `number` do t\u00EDtulo fica nulo de prop\u00F3sito \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--\n-- `plg_financial_invoices_number_uq` \u00E9 UNIQUE (tenant_id, number). O n\u00FAmero da\n-- NF-e do fornecedor n\u00E3o \u00E9 \u00FAnico dentro do tenant \u2014 dois fornecedores emitem a\n-- nota 1234 no mesmo ano, e ele ainda colidiria com o n\u00FAmero das vendas. O\n-- n\u00FAmero vai para `description` e para `metadata`, e a identidade \u00FAnica \u00E9 a\n-- chave de acesso, em `idempotency_key`.\n--\n-- \u2500\u2500 `number` da PARCELA \u00E9 a ordem dentro da nota \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--\n-- `(invoice_id, number)` \u00E9 UNIQUE, e 251 das 895 parcelas n\u00E3o t\u00EAm\n-- `installment_number` no V1 (o pagamento \u00E0 vista \u2014 pix, dinheiro \u2014 n\u00E3o numera).\n-- Usar `coalesce(installment_number, 1)` colidiria na nota que tem pix E\n-- boleto 1/2. O extrator traz a ordem pelo id da pr\u00F3pria origem\n-- (`payment_rank`), que \u00E9 \u00FAnica por constru\u00E7\u00E3o, e o `installment_number` do V1\n-- fica em metadata.\n--\n-- E 58 das 895 n\u00E3o t\u00EAm vencimento: o pagamento \u00E0 vista vence no dia da nota, e\n-- \u00E9 a data de emiss\u00E3o que entra \u2014 `due_date` \u00E9 NOT NULL no destino.\n--\n-- Idempotente.\n\n-- \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- 1. O writer\n-- \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nCREATE OR REPLACE FUNCTION migration.upsert_fin_danfe_installment(\n p_tenant uuid, p_id uuid, p_row jsonb, p_args jsonb DEFAULT '{}'::jsonb\n) RETURNS jsonb\nLANGUAGE plpgsql SECURITY DEFINER SET search_path TO ''\nAS $function$\nDECLARE\n v_meta jsonb := coalesce(p_row -> 'metadata', '{}'::jsonb);\n v_danfe jsonb := coalesce(v_meta -> 'danfe', '{}'::jsonb);\n v_note uuid;\n v_unit uuid := (p_row ->> 'unit_id')::uuid;\n v_invoice uuid;\n v_issue date;\n v_due date;\n v_amount numeric := round(coalesce((p_row ->> 'amount')::numeric, 0), 2);\n v_number integer := coalesce((p_row ->> 'number')::integer, 1);\n v_total numeric;\n v_desc text;\n v_existing uuid;\n v_created boolean := false;\n v_standalone boolean := migration._standalone();\nBEGIN\n IF v_standalone THEN PERFORM migration._assert_fence(p_tenant); PERFORM set_config('migration.writer', 'on', true); END IF;\n\n IF p_id IS NULL THEN\n RETURN jsonb_build_object('status', 'quarantined', 'kind', 'state',\n 'reason', 'uma parcela precisa de id');\n END IF;\n\n BEGIN v_note := (v_danfe ->> 'import_uuid')::uuid; EXCEPTION WHEN OTHERS THEN v_note := NULL; END;\n IF v_note IS NULL THEN\n RETURN jsonb_build_object('status', 'quarantined', 'kind', 'state',\n 'reason', 'parcela de nota de entrada sem a nota \u2014 o t\u00EDtulo dela n\u00E3o tem de que nascer');\n END IF;\n\n -- A emiss\u00E3o da nota \u00E9 timestamptz na origem e date no destino. Data que n\u00E3o\n -- converte vira nulo aqui e o vencimento cai para hoje, em vez de derrubar a\n -- parcela inteira: o valor e a nota s\u00E3o o dado, a data \u00E9 o enfeite.\n BEGIN v_issue := (v_danfe ->> 'issue_date')::timestamptz::date; EXCEPTION WHEN OTHERS THEN v_issue := NULL; END;\n BEGIN v_due := (p_row ->> 'due_date')::date; EXCEPTION WHEN OTHERS THEN v_due := NULL; END;\n v_due := coalesce(v_due, v_issue, current_date);\n\n IF v_amount < 0 THEN\n RETURN jsonb_build_object('status', 'quarantined', 'kind', 'value',\n 'reason', format('parcela de valor negativo (%s) \u2014 o destino exige amount >= 0', v_amount));\n END IF;\n\n -- O T\u00CDTULO. `total` \u00E9 a soma das parcelas da nota (vem do extrator); sem ela,\n -- o valor desta parcela, que \u00E9 o m\u00EDnimo verdadeiro.\n v_total := round(coalesce((v_danfe ->> 'payments_total')::numeric, v_amount), 2);\n v_desc := btrim('NF-e ' || coalesce(v_danfe ->> 'nfe_number', 's/n')\n || coalesce('/' || (v_danfe ->> 'nfe_series'), '')\n || coalesce(' \u2014 ' || (v_danfe ->> 'supplier_name'), ''));\n v_invoice := md5('danfe-invoice:' || v_note::text)::uuid;\n\n INSERT INTO public.plg_financial_invoices\n (id, tenant_id, unit_id, direction, number, competence_date, issue_date, total,\n description, idempotency_key, metadata)\n VALUES (v_invoice, p_tenant, v_unit, 'payable', NULL,\n coalesce(v_issue, v_due), coalesce(v_issue, v_due), v_total,\n nullif(v_desc, ''),\n 'danfe:' || coalesce(v_danfe ->> 'access_key', v_note::text),\n jsonb_build_object('danfe', v_danfe - 'payment'))\n ON CONFLICT (id) DO NOTHING;\n\n SELECT tenant_id INTO v_existing FROM public.plg_financial_invoice_installments WHERE id = p_id;\n IF v_existing IS NOT NULL AND v_existing <> p_tenant THEN\n RETURN jsonb_build_object('status', 'quarantined', 'kind', 'tenant',\n 'reason', format('a parcela %s j\u00E1 existe em outro tenant', p_id));\n END IF;\n v_created := v_existing IS NULL;\n\n INSERT INTO public.plg_financial_invoice_installments\n (id, tenant_id, unit_id, invoice_id, number, due_date, amount, metadata, created_at)\n VALUES (p_id, p_tenant, v_unit, v_invoice, v_number, v_due, v_amount, v_meta,\n coalesce((p_row ->> 'created_at')::timestamptz, now()))\n ON CONFLICT (id) DO UPDATE SET\n unit_id = coalesce(EXCLUDED.unit_id, public.plg_financial_invoice_installments.unit_id),\n invoice_id = EXCLUDED.invoice_id,\n number = EXCLUDED.number,\n due_date = EXCLUDED.due_date,\n amount = EXCLUDED.amount,\n metadata = migration._merge_meta(public.plg_financial_invoice_installments.metadata, EXCLUDED.metadata),\n updated_at = now();\n\n IF v_standalone THEN\n PERFORM migration._audit(p_tenant, 'public.plg_financial_invoice_installments', p_id,\n jsonb_build_object('reason', CASE WHEN v_created THEN 'created' ELSE 'updated' END,\n 'invoice_id', v_invoice));\n END IF;\n RETURN jsonb_build_object('status', 'migrated', 'target_id', p_id,\n 'reason', CASE WHEN v_created THEN 'created' ELSE 'updated' END);\nEND $function$;\n\nCOMMENT ON FUNCTION migration.upsert_fin_danfe_installment(uuid, uuid, jsonb, jsonb) IS\n 'A parcela do plano de pagamento de uma DANFE importada. Cria, uma vez por nota '\n 'e com id derivado da nota, o t\u00EDtulo a pagar que o V1 n\u00E3o tem \u2014 sem ele a '\n 'parcela n\u00E3o existe, porque invoice_id \u00E9 NOT NULL.';\n\n-- \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- 2. O vocabul\u00E1rio de writers aceita o nome novo\n-- \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- Lendo e costurando o CHECK que est\u00E1 l\u00E1: reescrev\u00EA-lo com lista literal\n-- apagaria as palavras que os outros passos da corrente acrescentaram.\n\nDO $$\nDECLARE v_def text;\nBEGIN\n SELECT pg_get_constraintdef(oid) INTO v_def\n FROM pg_constraint WHERE conname = 'allowlist_writer_check';\n IF v_def IS NULL OR strpos(v_def, 'fin_danfe_installment') > 0 THEN RETURN; END IF;\n ALTER TABLE migration.allowlist DROP CONSTRAINT allowlist_writer_check;\n EXECUTE replace(\n 'ALTER TABLE migration.allowlist ADD CONSTRAINT allowlist_writer_check ' || v_def,\n '''person''::text', '''person''::text, ''fin_danfe_installment''::text');\nEND $$;\n\n-- \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- 3. O de-para\n-- \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n--\n-- Tudo que o t\u00EDtulo precisa chega pelo augment do extrator, a partir da pr\u00F3pria\n-- nota. \u00C9 de prop\u00F3sito: este writer \u00E9 do financeiro, e o financeiro roda antes\n-- do invent\u00E1rio \u2014 ler `plg_inventory_operations` daqui seria depender de uma\n-- tabela que ainda n\u00E3o existe quando este arquivo \u00E9 aplicado.\n\nSET LOCAL migration.allowlist_unlock = 'on';\n\nSELECT migration._allow(\n 'danfe_payments', 'public.plg_financial_invoice_installments', 'financial',\n 'fin_danfe_installment', '{}'::jsonb, ARRAY['amount'],\n jsonb_build_object(\n 'uuid', 'id',\n 'note_unit_id', 'unit_id@companies',\n 'payment_rank', 'number',\n 'due_date', 'due_date',\n 'value', 'amount',\n 'created_at', 'created_at',\n 'tenant_id', '-',\n -- O que o writer l\u00EA para montar o t\u00EDtulo. Vem em metadata e n\u00E3o em coluna:\n -- \u00E9 a nota, n\u00E3o a parcela, e duplic\u00E1-la em coluna daria duas respostas para\n -- \"de que nota \u00E9 este vencimento\".\n 'note_uuid', 'jsonb:danfe.import_uuid',\n 'note_access_key', 'jsonb:danfe.access_key',\n 'note_number', 'jsonb:danfe.nfe_number',\n 'note_series', 'jsonb:danfe.nfe_series',\n 'note_issue_date', 'jsonb:danfe.issue_date',\n 'note_supplier', 'jsonb:danfe.supplier_name',\n 'note_total', 'jsonb:danfe.total_value',\n 'note_payments_total', 'jsonb:danfe.payments_total',\n 'import_id', 'jsonb:danfe.v1_import_ref',\n 'payment_type', 'jsonb:danfe.payment.type',\n 'payment_type_code', 'jsonb:danfe.payment.type_code',\n 'installment_number', 'jsonb:danfe.payment.v1_installment_number',\n 'installment_ref', 'jsonb:danfe.payment.v1_installment_ref',\n 'barcode', 'jsonb:danfe.payment.barcode',\n 'pix_key', 'jsonb:danfe.payment.pix_key',\n 'raw_json', 'jsonb:danfe.payment.raw',\n 'id', 'jsonb:danfe.payment.v1_ref'),\n 'O plano de pagamento da nota de entrada: 895 parcelas, R$ 1.293.490,86, que '\n 'hoje n\u00E3o chegam a lugar nenhum. O t\u00EDtulo a pagar nasce com a primeira '\n 'parcela, um por nota, com id derivado do uuid dela \u2014 no V1 ele n\u00E3o existe, e '\n 'invoice_id \u00E9 NOT NULL. O boleto e a chave pix ficam em metadata: cobran\u00E7a de '\n 'fornecedor \u00E9 evid\u00EAncia, n\u00E3o mais uma coluna do t\u00EDtulo.'\n);\n\nDELETE FROM migration.excluded_tables WHERE source_table = 'danfe_payments';\n\nRESET migration.allowlist_unlock;\n\n\n-- \u2500\u2500 quem pode executar \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--\n-- Fun\u00E7\u00E3o nova nasce execut\u00E1vel por PUBLIC, e `anon`/`authenticated` herdam\n-- dali. Esta \u00E9 de PORTE: SECURITY DEFINER, escreve dados de qualquer inquilino,\n-- e alcan\u00E7\u00E1vel pela chave an\u00F4nima seria a base inteira alcan\u00E7\u00E1vel pela chave\n-- an\u00F4nima. S\u00F3 o service_role, que \u00E9 quem roda a onda.\nREVOKE ALL ON FUNCTION migration.upsert_fin_danfe_installment(uuid, uuid, jsonb, jsonb) FROM PUBLIC, anon, authenticated;\nGRANT EXECUTE ON FUNCTION migration.upsert_fin_danfe_installment(uuid, uuid, jsonb, jsonb) TO service_role;\n";
|
|
86
|
+
export declare const MIGRATION_085_O_RESUMO_LE_CINCO_MIL_LINHAS_E_NAO_DUZENTAS_E_OITENTA_MIL = "-- O resumo l\u00EA cinco mil linhas, n\u00E3o duzentas e oitenta mil.\n--\n-- `financial_summary` (migra\u00E7\u00E3o 077) j\u00E1 soma no banco em vez de baixar a tabela\n-- para o navegador, e ainda assim o painel devolvia 500: \"canceling statement\n-- due to statement timeout\". Somar no lugar certo n\u00E3o basta se para somar for\n-- preciso LER tudo.\n--\n-- O que a fun\u00E7\u00E3o pede, e o que a tabela obrigava:\n--\n-- \u00B7 aberto \u2192 `status IN ('pending','partial','overdue')`: 5.100 linhas de\n-- 281.174. Nenhum \u00EDndice come\u00E7a por `status`, ent\u00E3o era varredura\n-- sequencial em 287 MB.\n-- \u00B7 caixa \u2192 `movement_kind = 'payment'` numa janela de 30 dias: 870 linhas.\n-- O \u00EDndice `(tenant_id, payment_date)` existente \u00E9 parcial e vale\n-- s\u00F3 para concilia\u00E7\u00E3o banc\u00E1ria (`external_source IS NOT NULL`),\n-- ent\u00E3o este caminho tamb\u00E9m varria tudo.\n-- \u00B7 a view `v_financial_cash_movements` faz LEFT JOIN da tabela COM ELA MESMA\n-- em `reverses_id`, e n\u00E3o havia \u00EDndice nessa coluna \u2014 a segunda\n-- varredura dos mesmos 287 MB, por chamada.\n--\n-- E a cerca de RLS cobra por linha: `app.has_unit(unit_id)` e\n-- `app.has_permission('financial.read', unit_id)` dependem da LINHA, ent\u00E3o n\u00E3o\n-- saem do la\u00E7o. Com 281 mil linhas a pergunta \u00E9 feita 281 mil vezes; com 5 mil,\n-- cinco mil. O \u00EDndice n\u00E3o muda a pol\u00EDtica, muda quantas vezes ela \u00E9 consultada\n-- \u2014 \u00E9 a mesma corre\u00E7\u00E3o que levou /clients de 10s para 15ms.\n--\n-- `INCLUDE` carrega as colunas que a soma usa (valor, pago, e as duas que a RLS\n-- precisa ler) para a varredura terminar no \u00EDndice e n\u00E3o voltar \u00E0 heap 5.100\n-- vezes.\n--\n-- S\u00F3 \u00EDndices: nenhuma pol\u00EDtica, coluna ou dado muda. Idempotente.\n\n-- T\u00EDtulos em aberto \u2014 o \"a receber\", o \"a pagar\" e os dois vencidos.\nCREATE INDEX IF NOT EXISTS plg_financial_movements_open_idx\n ON public.plg_financial_movements (tenant_id, direction, due_date)\n INCLUDE (amount, paid_amount, status, unit_id, owner_id)\n WHERE status IN ('pending', 'partial', 'overdue');\n\n-- Eventos de dinheiro na janela \u2014 a entrada e a sa\u00EDda do per\u00EDodo.\nCREATE INDEX IF NOT EXISTS plg_financial_movements_payment_idx\n ON public.plg_financial_movements (tenant_id, payment_date, direction)\n INCLUDE (paid_amount, unit_id, owner_id)\n WHERE movement_kind = 'payment';\n\n-- A auto-jun\u00E7\u00E3o da view de caixa. Parcial porque estorno \u00E9 exce\u00E7\u00E3o: o \u00EDndice\n-- fica pequeno e o planejador o usa para o lado que de fato tem valor.\nCREATE INDEX IF NOT EXISTS plg_financial_movements_reverses_idx\n ON public.plg_financial_movements (reverses_id)\n WHERE reverses_id IS NOT NULL;\n\n-- O saldo por conta. `v_financial_account_balances` soma, POR CONTA, os\n-- movimentos que entram e os que saem dela. Os \u00EDndices existentes s\u00E3o de uma\n-- coluna s\u00F3 (`debit_account_id`, `credit_account_id`), ent\u00E3o o planejador\n-- cruzava um deles com o \u00EDndice de `tenant_id` \u2014 46.862 linhas de bitmap por\n-- conta, vezes o n\u00FAmero de contas. Compostos e com as colunas da soma dentro,\n-- cada conta \u00E9 uma varredura curta do pr\u00F3prio \u00EDndice.\nCREATE INDEX IF NOT EXISTS plg_financial_movements_debit_balance_idx\n ON public.plg_financial_movements (tenant_id, debit_account_id)\n INCLUDE (paid_amount, amount, unit_id, owner_id, reverses_id)\n WHERE debit_account_id IS NOT NULL\n AND status <> 'cancelled'\n AND movement_kind IN ('payment', 'transfer');\n\nCREATE INDEX IF NOT EXISTS plg_financial_movements_credit_balance_idx\n ON public.plg_financial_movements (tenant_id, credit_account_id)\n INCLUDE (paid_amount, amount, unit_id, owner_id, reverses_id)\n WHERE credit_account_id IS NOT NULL\n AND status <> 'cancelled'\n AND movement_kind IN ('payment', 'transfer');\n";
|
|
87
|
+
export declare const MIGRATION_086_A_CERCA_SE_PERGUNTA_UMA_VEZ_E_NAO_UMA_VEZ_POR_LINHA = "-- A cerca se pergunta uma vez, n\u00E3o uma vez por linha.\n--\n-- `financial_summary` (077) j\u00E1 soma no banco, e os \u00EDndices (085) j\u00E1 a fazem\n-- ler 5.100 linhas em vez de 281.174. Continuava dando 57014 \u2014 \"canceling\n-- statement due to statement timeout\" \u2014 e o custo que sobrou n\u00E3o \u00E9 varredura,\n-- \u00E9 a POL\u00CDTICA.\n--\n-- A pol\u00EDtica de SELECT de `plg_financial_movements` faz, POR LINHA:\n--\n-- (unit_id IS NULL OR app.has_unit(unit_id))\n-- AND CASE unit_id \u2026 app.has_permission('financial.read', unit_id) END\n-- AND (\u2026 app.has_permission('financial.read_all', unit_id) \u2026)\n--\n-- As tr\u00EAs dependem da LINHA, ent\u00E3o n\u00E3o saem do la\u00E7o (as que n\u00E3o dependem j\u00E1\n-- est\u00E3o i\u00E7adas em `(SELECT \u2026)`). `has_unit` e `has_permission` s\u00E3o memoizadas\n-- num GUC, mas memoizado n\u00E3o \u00E9 gr\u00E1tis: cada chamada monta a chave e faz o\n-- parse de um JSONB que cresce. Vezes tr\u00EAs, vezes o n\u00FAmero de linhas \u2014 e o\n-- saldo por conta l\u00EA os movimentos de cada conta, ent\u00E3o ali s\u00E3o milh\u00F5es de\n-- avalia\u00E7\u00F5es.\n--\n-- A mesma pergunta, feita como CONJUNTO, custa uma vez:\n--\n-- app.visible_units() -- exatamente o que has_unit aceita\n-- \u00D7 app.has_permission(perm, u) por UNIDADE -- meia d\u00FAzia, n\u00E3o 281 mil\n--\n-- Da\u00ED em diante o filtro da linha \u00E9 `unit_id = ANY(array)`, que \u00E9 compara\u00E7\u00E3o,\n-- n\u00E3o chamada de fun\u00E7\u00E3o. \u00C9 a corre\u00E7\u00E3o que levou /clients de 10s para 15ms.\n--\n-- \u2500\u2500 O que N\u00C3O muda \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--\n-- A fun\u00E7\u00E3o passa a `SECURITY DEFINER`, ent\u00E3o a cerca \u00E9 responsabilidade DELA, e\n-- est\u00E1 escrita abaixo como tradu\u00E7\u00E3o literal das duas pol\u00EDticas (movimento e\n-- conta) \u2014 mesma ordem, mesmos recursos, mesmas permiss\u00F5es:\n--\n-- \u00B7 tenant \u2192 `tenant_id = app.current_tenant_id()`\n-- \u00B7 unidade \u2192 `unit_id IS NULL` com `financial.read` sem unidade, ou\n-- unidade dentro de `visible_units()` COM `financial.read` nela\n-- \u00B7 dono \u2192 s\u00F3 quando `app.owner_scoped(<recurso>)`; a\u00ED valem, na ordem da\n-- pol\u00EDtica, `owner_id IS NULL`, `owner_id = auth.uid()`, o\n-- compartilhamento (`has_grant`, por linha \u2014 \u00E9 o \u00FAnico que n\u00E3o\n-- tem forma de conjunto, e s\u00F3 \u00E9 avaliado quando o escopo por\n-- dono est\u00E1 ligado, que \u00E9 a exce\u00E7\u00E3o) e `financial.read_all`.\n--\n-- O estorno (`v_financial_cash_movements`) \u00E9 reescrito aqui como uma coluna\n-- calculada, em vez de LEFT JOIN da tabela com ela mesma: mesma regra, sem a\n-- segunda varredura dos mesmos 287 MB por chamada.\n--\n-- Idempotente. Nenhuma pol\u00EDtica, coluna ou dado muda.\n\nCREATE OR REPLACE FUNCTION public.financial_summary(\n p_from date DEFAULT NULL,\n p_to date DEFAULT NULL\n) RETURNS TABLE (\n total_balance numeric,\n total_receivable numeric,\n total_payable numeric,\n monthly_inflow numeric,\n monthly_outflow numeric,\n overdue_receivable_count integer,\n overdue_receivable_amount numeric,\n overdue_payable_count integer,\n overdue_payable_amount numeric\n)\nLANGUAGE sql\nSTABLE\nSECURITY DEFINER\nSET search_path TO ''\nAS $function$\n WITH ctx AS (\n SELECT app.current_tenant_id() AS tenant,\n auth.uid() AS me,\n app.visible_units() AS units,\n app.has_permission('financial.read', NULL::uuid) AS read_null,\n app.has_permission('financial.read_all', NULL::uuid) AS read_all_null,\n app.owner_scoped('financial.movement') AS own_mov,\n app.owner_scoped('financial.account') AS own_acc,\n app.grants_exist('financial.movement', ARRAY['shared_with']) AS grants_mov,\n app.grants_exist('financial.account', ARRAY['shared_with']) AS grants_acc,\n coalesce(p_from, (current_date - 30)) AS de,\n coalesce(p_to, current_date) AS ate\n ),\n -- Uma pergunta por unidade alcan\u00E7\u00E1vel, n\u00E3o uma por linha.\n u_read AS (\n SELECT u FROM ctx, unnest(ctx.units) u\n WHERE app.has_permission('financial.read', u)\n ),\n u_read_all AS (\n SELECT u FROM ctx, unnest(ctx.units) u\n WHERE app.has_permission('financial.read_all', u)\n ),\n -- Movimentos que esta pessoa veria na lista: o WHERE abaixo \u00E9 a pol\u00EDtica de\n -- SELECT de plg_financial_movements, termo por termo.\n -- NOT MATERIALIZED de prop\u00F3sito: a partir do PG12 uma CTE citada mais de uma\n -- vez \u00E9 materializada, e materializar a cerca inteira \u00E9 justamente juntar as\n -- 281 mil linhas numa tabela tempor\u00E1ria. Inlinada, cada uso leva o pr\u00F3prio\n -- \u00EDndice (aberto, pagamento, saldo por conta).\n --\n -- `caixa_visivel` \u00E9 a regra de estorno de v_financial_cash_movements dita\n -- sem a auto-jun\u00E7\u00E3o: quando o movimento estorna outro, quem decide \u00E9 o\n -- estornado; se n\u00E3o estorna ningu\u00E9m, decide ele mesmo. `reverses_id IS NULL`\n -- \u00E9 a esmagadora maioria, ent\u00E3o a subconsulta quase nunca roda \u2014 e quando\n -- roda, \u00E9 pela chave prim\u00E1ria.\n mov AS NOT MATERIALIZED (\n SELECT m.*,\n CASE\n WHEN m.reverses_id IS NULL THEN\n (m.external_source IS NULL\n OR (m.reconciled_at IS NOT NULL AND m.matched_movement_id IS NULL))\n ELSE coalesce(\n (SELECT r.external_source IS NULL\n OR (r.reconciled_at IS NOT NULL AND r.matched_movement_id IS NULL)\n FROM public.plg_financial_movements r\n WHERE r.id = m.reverses_id),\n (m.external_source IS NULL\n OR (m.reconciled_at IS NOT NULL AND m.matched_movement_id IS NULL)))\n END AS caixa_visivel\n FROM public.plg_financial_movements m, ctx\n WHERE m.tenant_id = ctx.tenant\n AND (CASE WHEN m.unit_id IS NULL THEN ctx.read_null\n ELSE m.unit_id IN (SELECT u FROM u_read) END)\n AND (NOT ctx.own_mov\n OR m.owner_id IS NULL\n OR m.owner_id = ctx.me\n OR (ctx.grants_mov\n AND app.has_grant('financial.movement', m.id, ARRAY['shared_with']))\n OR (CASE WHEN m.unit_id IS NULL THEN ctx.read_all_null\n ELSE m.unit_id IN (SELECT u FROM u_read_all) END))\n ),\n -- O mesmo, para as contas.\n acc AS (\n SELECT a.id, a.kind\n FROM public.plg_financial_accounts a, ctx\n WHERE a.tenant_id = ctx.tenant\n AND a.is_active\n AND a.kind IN ('bank', 'cash_physical', 'cash_session',\n 'card_receivable_credit', 'card_receivable_debit')\n AND (CASE WHEN a.unit_id IS NULL THEN ctx.read_null\n ELSE a.unit_id IN (SELECT u FROM u_read) END)\n AND (NOT ctx.own_acc\n OR a.owner_id IS NULL\n OR a.owner_id = ctx.me\n OR (ctx.grants_acc\n AND app.has_grant('financial.account', a.id, ARRAY['shared_with']))\n OR (CASE WHEN a.unit_id IS NULL THEN ctx.read_all_null\n ELSE a.unit_id IN (SELECT u FROM u_read_all) END))\n ),\n -- O saldo de uma conta \u00E9 o que entrou menos o que saiu dela, e s\u00F3 conta\n -- pagamento e transfer\u00EAncia \u2014 a obriga\u00E7\u00E3o n\u00E3o \u00E9 dinheiro. Para os cinco\n -- `kind` de caixa que o cart\u00E3o soma, v_financial_account_balances calcula\n -- `debit_total - credit_total`; \u00E9 esse sinal que est\u00E1 aqui.\n saldo AS (\n SELECT coalesce(sum(\n coalesce((SELECT sum(d.amount) FROM mov d\n WHERE d.debit_account_id = acc.id\n AND d.status <> 'cancelled'\n AND d.movement_kind IN ('payment', 'transfer')\n AND d.caixa_visivel), 0)\n - coalesce((SELECT sum(c.amount) FROM mov c\n WHERE c.credit_account_id = acc.id\n AND c.status <> 'cancelled'\n AND c.movement_kind IN ('payment', 'transfer')\n AND c.caixa_visivel), 0)\n ), 0) AS v\n FROM acc\n ),\n aberto AS (\n SELECT\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'credit'), 0) AS receber,\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'debit'), 0) AS pagar,\n count(*) FILTER (WHERE m.direction = 'credit'\n AND (m.status = 'overdue' OR m.due_date < current_date)) AS venc_receber_n,\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'credit'\n AND (m.status = 'overdue' OR m.due_date < current_date)), 0) AS venc_receber_v,\n count(*) FILTER (WHERE m.direction = 'debit'\n AND (m.status = 'overdue' OR m.due_date < current_date)) AS venc_pagar_n,\n coalesce(sum(m.amount - m.paid_amount) FILTER (WHERE m.direction = 'debit'\n AND (m.status = 'overdue' OR m.due_date < current_date)), 0) AS venc_pagar_v\n FROM mov m\n WHERE m.status IN ('pending', 'partial', 'overdue')\n ),\n caixa AS (\n SELECT\n coalesce(sum(m.paid_amount) FILTER (WHERE m.direction = 'credit'), 0) AS entrada,\n coalesce(sum(m.paid_amount) FILTER (WHERE m.direction = 'debit'), 0) AS saida\n FROM mov m, ctx\n WHERE m.movement_kind = 'payment'\n AND m.payment_date >= ctx.de AND m.payment_date <= ctx.ate\n AND m.caixa_visivel\n )\n SELECT saldo.v, aberto.receber, aberto.pagar, caixa.entrada, caixa.saida,\n aberto.venc_receber_n::integer, aberto.venc_receber_v,\n aberto.venc_pagar_n::integer, aberto.venc_pagar_v\n FROM saldo, aberto, caixa;\n$function$;\n\nCOMMENT ON FUNCTION public.financial_summary(date, date) IS\n 'Os nove numeros do cartao de resumo, somados no banco, com a cerca de '\n 'tenant/unidade/dono perguntada UMA vez em vez de uma vez por linha. '\n 'SECURITY DEFINER: a politica de plg_financial_movements e de '\n 'plg_financial_accounts esta reescrita aqui, termo por termo, em forma de '\n 'conjunto - ver o cabecalho da migracao 086.';\n\nGRANT EXECUTE ON FUNCTION public.financial_summary(date, date) TO authenticated, service_role;\n";
|
|
88
|
+
export declare const MIGRATION_087_O_SALDO_DE_UMA_FATURA_NAO_SOMA_O_RAZAO_INTEIRO = "-- O saldo de uma fatura n\u00E3o soma o raz\u00E3o inteiro.\n--\n-- `v_financial_installment_balances` abre com uma CTE que agrega TUDO:\n--\n-- WITH paid AS (\n-- SELECT a.installment_id, sum(a.amount)\n-- FROM plg_financial_allocations a\n-- JOIN plg_financial_movements m ON m.id = a.payment_movement_id\n-- WHERE m.status <> 'cancelled' AND m.reversed_by_id IS NULL\n-- GROUP BY a.installment_id)\n--\n-- Nenhum predicado do chamador alcan\u00E7a essa CTE: ela agrupa por\n-- `installment_id`, e o `LEFT JOIN paid p ON p.installment_id = i.id` s\u00F3\n-- acontece DEPOIS. O planejador n\u00E3o tem como empurrar `invoice_id = X` para\n-- dentro, ent\u00E3o materializa o raz\u00E3o inteiro \u2014 toda vez, para qualquer pergunta.\n--\n-- Medido no cluster, pedindo UMA fatura:\n--\n-- Index Scan ... plg_financial_invoice_installments 1 linha 0,077 ms\n-- Seq Scan plg_financial_movements 281.113 linhas\n-- Seq Scan plg_financial_allocations 140.073 linhas\n-- HashAggregate 9 lotes, 7.288 kB em disco\n-- \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-- CTE paid 2.251 ms\n-- total 2.627 ms\n--\n-- 2.627 ms como superusu\u00E1rio. Pelo PostgREST, com RLS por cima, passa dos 8 s\n-- e a tela recebe 500 / 57014. A parcela que a pessoa pediu custou 0,077 ms; o\n-- resto \u00E9 o raz\u00E3o de dois tenants sendo somado para ser jogado fora.\n--\n-- \u2500\u2500 O conserto \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--\n-- LATERAL correlacionado em `i.id`. A soma passa a acontecer POR PARCELA, e\n-- `plg_financial_allocations_installment_idx` \u2014 que j\u00E1 existe \u2014 a resolve com\n-- um index scan de poucas linhas. Uma fatura com 8 parcelas faz 8 buscas\n-- pequenas em vez de uma agrega\u00E7\u00E3o de 140 mil linhas.\n--\n-- \u00C9 o mesmo movimento da 085 e da 086: a pergunta \u00E9 de UMA linha, e a resposta\n-- n\u00E3o pode ter custo de tabela inteira.\n--\n-- \u2500\u2500 O que N\u00C3O muda \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--\n-- As colunas, na mesma ordem e com os mesmos tipos \u2014 `CREATE OR REPLACE VIEW`\n-- exige isso, e quem l\u00EA a vista n\u00E3o percebe diferen\u00E7a nenhuma al\u00E9m do tempo.\n-- `security_invoker` continua ligado: a vista \u00E9 uma lente, a RLS \u00E9 das tabelas.\n--\n-- Idempotente.\n\nCREATE OR REPLACE VIEW public.v_financial_installment_balances\nWITH (security_invoker = true) AS\nSELECT i.id AS installment_id,\n i.tenant_id,\n i.unit_id,\n i.invoice_id,\n t.number AS invoice_number,\n t.direction,\n t.counterparty_person_id,\n t.order_id,\n i.number,\n i.due_date,\n i.amount,\n COALESCE(p.paid, 0::numeric)::numeric(14,2) AS paid,\n CASE\n WHEN i.cancelled_at IS NOT NULL OR t.cancelled_at IS NOT NULL THEN 0::numeric\n ELSE GREATEST(i.amount - COALESCE(p.paid, 0::numeric), 0::numeric)\n END::numeric(14,2) AS balance,\n CASE\n WHEN i.cancelled_at IS NOT NULL OR t.cancelled_at IS NOT NULL THEN 'cancelled'::text\n WHEN COALESCE(p.paid, 0::numeric) >= i.amount THEN 'paid'::text\n WHEN COALESCE(p.paid, 0::numeric) > 0::numeric THEN 'partial'::text\n WHEN i.due_date < CURRENT_DATE THEN 'overdue'::text\n ELSE 'pending'::text\n END AS status,\n i.cancelled_at,\n i.metadata,\n i.created_at,\n i.updated_at\n FROM plg_financial_invoice_installments i\n JOIN plg_financial_invoices t ON t.id = i.invoice_id\n -- A soma \u00E9 POR PARCELA. `ON true` mant\u00E9m o LEFT: parcela sem pagamento\n -- continua aparecendo, com `paid` nulo, que o COALESCE zera.\n LEFT JOIN LATERAL (\n SELECT sum(a.amount) AS paid\n FROM plg_financial_allocations a\n JOIN plg_financial_movements m ON m.id = a.payment_movement_id\n WHERE a.installment_id = i.id\n AND m.status <> 'cancelled'::text\n AND m.reversed_by_id IS NULL\n ) p ON true;\n\n-- O movimento \u00E9 olhado uma vez por aloca\u00E7\u00E3o, pelo id \u2014 e o filtro de vivo\n-- (`status`, `reversed_by_id`) cabe no \u00EDndice, ent\u00E3o a visita \u00E0 heap s\u00F3\n-- acontece para o que de fato soma.\nCREATE INDEX IF NOT EXISTS plg_financial_movements_alive_idx\n ON public.plg_financial_movements (id)\n WHERE status <> 'cancelled'::text AND reversed_by_id IS NULL;\n";
|
|
89
|
+
export declare const MIGRATION_088_A_CONTA_SEM_PESSOA_E_DO_SISTEMA_NAO_DE_NINGUEM = "-- A conta sem pessoa \u00E9 do sistema, n\u00E3o de ningu\u00E9m.\n--\n-- `migration.upsert_fin_account` inventa um valor que a tabela n\u00E3o aceita:\n--\n-- IF v_kind = 'person' AND coalesce(v_ref_id, 0) = 0 THEN\n-- v_kind := 'unidentified';\n--\n-- Uma conta de PESSOA sem pessoa referenciada vira `'unidentified'`. S\u00F3 que\n-- `plg_financial_accounts_kind_check` declara dez esp\u00E9cies e essa n\u00E3o \u00E9 uma\n-- delas \u2014 a migration 063 recria o CHECK e ele estoura com `23514` em cima das\n-- linhas que o porte gravou. O efeito \u00E9 pior do que parece: 063 \u00E9 a 64\u00AA de 88\n-- na cadeia do financeiro, ent\u00E3o DUAS linhas travam a aplica\u00E7\u00E3o de todo o resto\n-- do plugin, migrations de desempenho inclusive.\n--\n-- \u2500\u2500 Quem s\u00E3o as duas \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--\n-- Pertinho do C\u00E9u, vindas de `account_central`:\n--\n-- 653309 Cliente n\u00E3o identificado\n-- 654242 M\u00FAltiplos participantes\n--\n-- 94 movimentos creditam nelas. N\u00E3o s\u00E3o erro de dado: s\u00E3o o balc\u00E3o an\u00F4nimo e a\n-- conta dividida \u2014 dois baldes que a CASA mant\u00E9m. Nenhuma das duas \u00E9 pessoa, e\n-- nenhuma \u00E9 banco.\n--\n-- \u2500\u2500 Por que `system` e n\u00E3o mais um valor no CHECK \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--\n-- `system` j\u00E1 existe no vocabul\u00E1rio e significa exatamente isto: conta que o\n-- estabelecimento mant\u00E9m e que n\u00E3o \u00E9 de ningu\u00E9m. Acrescentar `unidentified`\n-- seria criar um d\u00E9cimo primeiro nome para um conceito que j\u00E1 tem o seu, e\n-- alargar um CHECK que outro dono fechou de prop\u00F3sito.\n--\n-- O nome continua leg\u00EDvel \u2014 \"Cliente n\u00E3o identificado\" est\u00E1 em `name`, que \u00E9 o\n-- que a tela mostra. O que muda \u00E9 a ESP\u00C9CIE, que \u00E9 o que o raz\u00E3o classifica,\n-- mais um `code` est\u00E1vel, que \u00E9 como conta de sistema se procura.\n--\n-- \u2500\u2500 Ordem \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\u2500\u2500\u2500\u2500\n--\n-- Numa cadeia do zero isto nunca acontece: sem porte n\u00E3o h\u00E1 linha, e a 063\n-- passa. O conserto aqui \u00E9 para o cluster onde o porte j\u00E1 rodou \u2014 normaliza o\n-- que existe e, sobretudo, corrige o writer para n\u00E3o produzir mais.\n--\n-- Idempotente.\n\n-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n-- 1. O que j\u00E1 est\u00E1 gravado\n-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n-- `plg_financial_accounts_check1` cobra `code` de toda conta de sistema, e\n-- cobra com raz\u00E3o: conta de sistema se endere\u00E7a por c\u00F3digo est\u00E1vel, n\u00E3o por\n-- nome \u2014 o nome \u00E9 o que a tela mostra, o c\u00F3digo \u00E9 o que o raz\u00E3o procura.\n-- Os dois baldes ganham c\u00F3digo no estilo dos que j\u00E1 existem (`legacy`,\n-- `payables`, `receivables`).\nUPDATE public.plg_financial_accounts\n SET kind = 'system',\n code = coalesce(code, CASE\n WHEN name ILIKE '%%ltiplos%%' OR name ILIKE '%%multiple%%' THEN 'multiple_parties'\n ELSE 'unidentified_party'\n END),\n metadata = jsonb_set(coalesce(metadata, '{}'::jsonb), '{v1,account_kind}', '\"unidentified\"'::jsonb, true)\n WHERE kind = 'unidentified';\n\n-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n-- 2. O writer para de produzir\n-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n--\n-- Duas trocas no corpo, nada mais: a atribui\u00E7\u00E3o e a lista de aceitos. Reescrever\n-- a fun\u00E7\u00E3o inteira aqui duplicaria 60 linhas que a 061 j\u00E1 define \u2014 e a c\u00F3pia\n-- envelheceria na pr\u00F3xima vez que algu\u00E9m mexesse l\u00E1.\n\nDO $$\nDECLARE\n v_src text;\n v_new text;\nBEGIN\n SELECT pg_get_functiondef(p.oid) INTO v_src\n FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = 'migration' AND p.proname = 'upsert_fin_account'\n LIMIT 1;\n\n IF v_src IS NULL THEN\n RAISE NOTICE 'migration.upsert_fin_account n\u00E3o existe neste cluster \u2014 nada a corrigir';\n RETURN;\n END IF;\n\n IF position('''unidentified''' in v_src) = 0 THEN\n RAISE NOTICE 'migration.upsert_fin_account j\u00E1 n\u00E3o produz unidentified';\n RETURN;\n END IF;\n\n v_new := replace(v_src, 'v_kind := ''unidentified'';', 'v_kind := ''system'';');\n -- A mesma palavra aparece na lista de esp\u00E9cies aceitas pelo writer; l\u00E1 ela\n -- some, porque `system` j\u00E1 est\u00E1 na lista.\n v_new := replace(v_new, ',' || chr(10) || ' ''unidentified'')', ')');\n v_new := replace(v_new, ', ''unidentified'')', ')');\n\n IF v_new = v_src THEN\n RAISE EXCEPTION 'upsert_fin_account mudou de forma: o conserto de unidentified n\u00E3o casou. Conferir \u00E0 m\u00E3o.';\n END IF;\n\n EXECUTE v_new;\nEND $$;\n\n-- A prova: nenhuma linha fora do vocabul\u00E1rio, e o writer sem a palavra.\nDO $$\nBEGIN\n IF EXISTS (SELECT 1 FROM public.plg_financial_accounts WHERE kind = 'unidentified') THEN\n RAISE EXCEPTION 'ainda h\u00E1 conta com kind=unidentified';\n END IF;\n IF EXISTS (\n SELECT 1 FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = 'migration' AND p.proname = 'upsert_fin_account'\n AND position('''unidentified''' in pg_get_functiondef(p.oid)) > 0\n ) THEN\n RAISE EXCEPTION 'upsert_fin_account ainda produz unidentified';\n END IF;\nEND $$;\n";
|
|
90
|
+
export declare const MIGRATION_089_O_FORNECEDOR_APONTA_PARA_O_PLANO_MIGRADO = "-- A migrated supplier points to the current chart of accounts.\n--\n-- V1 stored supplier defaults and allowlists with legacy numeric IDs. The\n-- migration deliberately preserved those values in people.metadata because\n-- contacts can arrive before chart accounts. The invoice form cannot compare\n-- those values with the UUID primary keys used by V2, so the policy appeared\n-- configured but never matched an option.\n--\n-- This read-only resolver crosses that boundary through migration.ledger. It\n-- accepts current UUIDs too, keeping the runtime contract useful after the\n-- migration is over. Tenant and permission checks stay inside the definer.\n\nCREATE OR REPLACE FUNCTION public.financial_resolve_chart_account_refs(p_refs text[])\nRETURNS TABLE(source_ref text, chart_account_id uuid)\nLANGUAGE sql\nSTABLE\nSECURITY DEFINER\nSET search_path = ''\nAS $$\n WITH wanted AS (\n SELECT DISTINCT btrim(ref) AS ref\n FROM unnest(coalesce(p_refs, ARRAY[]::text[])) AS ref\n WHERE nullif(btrim(ref), '') IS NOT NULL\n ),\n candidates AS (\n SELECT w.ref AS source_ref, c.id AS chart_account_id, 0 AS priority\n FROM wanted w\n JOIN public.plg_financial_chart_of_accounts c\n ON c.tenant_id = app.current_tenant_id()\n AND c.id::text = w.ref\n UNION ALL\n SELECT w.ref AS source_ref, l.target_id AS chart_account_id, 1 AS priority\n FROM wanted w\n JOIN migration.ledger l\n ON l.tenant_id = app.current_tenant_id()\n AND l.source_table = 'chart_of_accounts'\n AND l.target_table = 'public.plg_financial_chart_of_accounts'\n AND (l.source_numeric_id::text = w.ref OR l.source_uuid::text = w.ref)\n JOIN public.plg_financial_chart_of_accounts c\n ON c.tenant_id = l.tenant_id\n AND c.id = l.target_id\n )\n SELECT DISTINCT ON (c.source_ref) c.source_ref, c.chart_account_id\n FROM candidates c\n WHERE auth.role() = 'service_role'\n OR app.has_permission('financial.read', NULL::uuid)\n ORDER BY c.source_ref, c.priority;\n$$;\n\nREVOKE ALL ON FUNCTION public.financial_resolve_chart_account_refs(text[]) FROM PUBLIC, anon;\nGRANT EXECUTE ON FUNCTION public.financial_resolve_chart_account_refs(text[]) TO authenticated, service_role;\n\nCOMMENT ON FUNCTION public.financial_resolve_chart_account_refs(text[]) IS\n 'Resolves current UUIDs and migrated V1 chart-account references for the active tenant.';\n";
|
|
91
|
+
export declare const MIGRATION_090_O_DRE_RECORTA_ANTES_DE_SOMAR = "-- Filter the income statement before aggregating it.\n--\n-- The historical view aggregates every fiscal year before PostgREST applies\n-- the requested range. On large tenants that exceeds the authenticated role\n-- timeout. This function accepts the range, resolves tenant/unit/permission\n-- once, and only then joins line items. It is additive and retains the view as\n-- the analytics contract for existing consumers.\n\nCREATE OR REPLACE FUNCTION public.financial_dre(\n p_from date,\n p_to date,\n p_unit_id uuid DEFAULT NULL\n) RETURNS TABLE (\n unit_id uuid,\n competence_month date,\n account_id uuid,\n account_code text,\n account_name text,\n account_type text,\n account_parent_id uuid,\n statement_code text,\n statement_name text,\n unclassified boolean,\n line_count bigint,\n amount numeric,\n discount numeric\n)\nLANGUAGE sql\nSTABLE\nSECURITY DEFINER\nSET search_path TO ''\nAS $function$\n WITH ctx AS MATERIALIZED (\n SELECT app.current_tenant_id() AS tenant,\n app.visible_units() AS units,\n app.has_permission('financial.read', NULL::uuid) AS read_null,\n p_from AS de,\n p_to AS ate,\n p_unit_id AS unidade\n ),\n u_read AS MATERIALIZED (\n SELECT u\n FROM ctx, unnest(ctx.units) AS u\n WHERE app.has_permission('financial.read', u)\n ),\n inv AS MATERIALIZED (\n SELECT f.*\n FROM public.plg_financial_invoices f, ctx\n WHERE f.tenant_id = ctx.tenant\n AND f.cancelled_at IS NULL\n AND f.competence_date >= ctx.de\n AND f.competence_date <= ctx.ate\n AND (CASE WHEN ctx.unidade IS NOT NULL THEN f.unit_id = ctx.unidade\n WHEN f.unit_id IS NULL THEN ctx.read_null\n ELSE f.unit_id IN (SELECT u FROM u_read) END)\n ),\n line AS (\n SELECT f.tenant_id, f.unit_id, f.competence_date, f.direction,\n i.id AS item_id, i.total, i.discount,\n coalesce(x.chart_account_id, i.chart_account_id) AS chart_account_id\n FROM inv f\n JOIN public.items i ON i.invoice_id = f.id\n LEFT JOIN public.plg_financial_invoice_items x ON x.item_id = i.id\n WHERE i.cancelled_at IS NULL\n UNION ALL\n SELECT f.tenant_id, f.unit_id, f.competence_date, f.direction,\n i.id AS item_id, i.total, i.discount,\n coalesce(x.chart_account_id, i.chart_account_id) AS chart_account_id\n FROM inv f\n JOIN public.items i ON i.order_id = f.order_id\n LEFT JOIN public.plg_financial_invoice_items x ON x.item_id = i.id\n WHERE f.order_id IS NOT NULL\n AND i.invoice_id IS NULL\n AND i.cancelled_at IS NULL\n AND NOT EXISTS (SELECT 1 FROM public.items own WHERE own.invoice_id = f.id)\n ),\n structure AS (\n SELECT NULL::uuid AS unit_id, NULL::date AS competence_month,\n c.id AS account_id, c.code AS account_code, c.name AS account_name,\n c.account_type, c.parent_id AS account_parent_id,\n c.code AS statement_code, c.name AS statement_name,\n false AS unclassified, 0::bigint AS line_count,\n 0::numeric AS amount, 0::numeric AS discount\n FROM public.plg_financial_chart_of_accounts c, ctx\n WHERE c.tenant_id = ctx.tenant\n AND c.is_active\n AND c.account_type IN ('revenue', 'expense')\n AND (ctx.read_null OR EXISTS (SELECT 1 FROM u_read))\n ),\n movement AS (\n SELECT l.unit_id,\n date_trunc('month', l.competence_date)::date AS competence_month,\n c.id AS account_id, c.code AS account_code, c.name AS account_name,\n CASE WHEN l.direction = 'receivable' THEN 'revenue' ELSE 'expense' END AS account_type,\n c.parent_id AS account_parent_id,\n CASE WHEN (l.direction = 'receivable' AND c.account_type = 'revenue')\n OR (l.direction = 'payable' AND c.account_type = 'expense')\n THEN c.code END AS statement_code,\n CASE WHEN (l.direction = 'receivable' AND c.account_type = 'revenue')\n OR (l.direction = 'payable' AND c.account_type = 'expense')\n THEN c.name END AS statement_name,\n (c.id IS NULL OR NOT ((l.direction = 'receivable' AND c.account_type = 'revenue')\n OR (l.direction = 'payable' AND c.account_type = 'expense'))) AS unclassified,\n count(*) AS line_count,\n sum(l.total) AS amount,\n sum(l.discount) AS discount\n FROM line l\n LEFT JOIN public.plg_financial_chart_of_accounts c\n ON c.tenant_id = l.tenant_id AND c.id = l.chart_account_id\n GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n )\n SELECT * FROM structure\n UNION ALL\n SELECT * FROM movement;\n$function$;\n\nREVOKE ALL ON FUNCTION public.financial_dre(date, date, uuid) FROM PUBLIC, anon;\nGRANT EXECUTE ON FUNCTION public.financial_dre(date, date, uuid) TO authenticated, service_role;\n\nCOMMENT ON FUNCTION public.financial_dre(date, date, uuid) IS\n 'Annual/monthly income statement filtered before aggregation with tenant, unit, and financial.read fences.';\n";
|
|
92
|
+
export declare const MIGRATION_091_A_RECORRENCIA_REPETE_OS_ITENS = "-- A recurring rule is a complete invoice template. When an occurrence creates\n-- its invoice, copy every template line with its own accounting dimensions.\n\nCREATE OR REPLACE FUNCTION public.plg_financial_copy_recurring_items()\nRETURNS trigger\nLANGUAGE plpgsql\nSECURITY DEFINER\nSET search_path TO ''\nAS $$\nDECLARE\n v_bill public.plg_financial_recurring_bills%ROWTYPE;\n v_row jsonb;\n v_item_id uuid;\n v_quantity numeric;\n v_unit_price numeric;\n v_discount numeric;\n v_surcharge numeric;\n v_sort integer := 0;\nBEGIN\n IF coalesce(NEW.metadata ->> 'source', '') <> 'financial_recurring_run'\n OR coalesce(NEW.metadata ->> 'recurring_bill_id', '') = '' THEN\n RETURN NEW;\n END IF;\n\n SELECT * INTO v_bill\n FROM public.plg_financial_recurring_bills\n WHERE id = (NEW.metadata ->> 'recurring_bill_id')::uuid\n AND tenant_id = NEW.tenant_id;\n\n IF NOT FOUND OR jsonb_typeof(v_bill.items) <> 'array' THEN\n RETURN NEW;\n END IF;\n\n FOR v_row IN SELECT value FROM jsonb_array_elements(v_bill.items) LOOP\n v_sort := v_sort + 1;\n v_quantity := greatest(coalesce((v_row ->> 'quantity')::numeric, 1), 0.0001);\n v_unit_price := coalesce((v_row ->> 'unitPrice')::numeric, (v_row ->> 'unit_price')::numeric, 0);\n v_discount := coalesce((v_row ->> 'discount')::numeric, 0);\n v_surcharge := coalesce((v_row ->> 'surcharge')::numeric, (v_row ->> 'addition')::numeric, 0);\n\n INSERT INTO public.items\n (tenant_id, unit_id, invoice_id, product_id, name, description, quantity,\n unit_price, discount, total, sort_order, metadata, created_by)\n VALUES\n (NEW.tenant_id, NEW.unit_id, NEW.id,\n CASE WHEN coalesce(v_row ->> 'referenceId', v_row ->> 'reference_id', v_row ->> 'product_id', '')\n ~* '^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'\n THEN coalesce(v_row ->> 'referenceId', v_row ->> 'reference_id', v_row ->> 'product_id')::uuid END,\n nullif(v_row ->> 'description', ''), nullif(v_row ->> 'description', ''),\n v_quantity, v_unit_price, v_discount,\n round(v_quantity * v_unit_price - v_discount + v_surcharge, 2), v_sort,\n jsonb_strip_nulls(jsonb_build_object(\n 'item_kind', coalesce(v_row ->> 'itemKind', v_row ->> 'item_kind', 'other'),\n 'financial', jsonb_build_object('additional', v_surcharge)\n )), NEW.created_by)\n RETURNING id INTO v_item_id;\n\n INSERT INTO public.plg_financial_invoice_items\n (item_id, tenant_id, unit_id, chart_account_id, cost_center_id, owner_id)\n VALUES\n (v_item_id, NEW.tenant_id, NEW.unit_id,\n CASE WHEN coalesce(v_row ->> 'accountId', v_row ->> 'account_id', v_row ->> 'chart_account_id', '')\n ~* '^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'\n THEN coalesce(v_row ->> 'accountId', v_row ->> 'account_id', v_row ->> 'chart_account_id')::uuid END,\n CASE WHEN coalesce(v_row ->> 'costCenterId', v_row ->> 'cost_center_id', '')\n ~* '^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$'\n THEN coalesce(v_row ->> 'costCenterId', v_row ->> 'cost_center_id')::uuid END,\n NEW.created_by);\n END LOOP;\n\n RETURN NEW;\nEND $$;\n\nDROP TRIGGER IF EXISTS plg_financial_recurring_invoice_items ON public.plg_financial_invoices;\nCREATE TRIGGER plg_financial_recurring_invoice_items\n AFTER INSERT ON public.plg_financial_invoices\n FOR EACH ROW EXECUTE FUNCTION public.plg_financial_copy_recurring_items();\n\nREVOKE ALL ON FUNCTION public.plg_financial_copy_recurring_items() FROM PUBLIC, anon, authenticated;\nGRANT EXECUTE ON FUNCTION public.plg_financial_copy_recurring_items() TO service_role;\n\nCOMMENT ON FUNCTION public.plg_financial_copy_recurring_items() IS\n 'Copies every item of a recurring rule into each generated invoice, preserving per-line accounting.';\n";
|
|
81
93
|
export declare const MIGRATIONS: Array<{
|
|
82
94
|
id: string;
|
|
83
95
|
sql: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type MovementStatus = 'pending' | 'paid' | 'partial' | 'overdue' | 'cance
|
|
|
7
7
|
/** Status of an invoice */
|
|
8
8
|
export type InvoiceStatus = 'draft' | 'open' | 'partial' | 'paid' | 'cancelled' | 'overdue';
|
|
9
9
|
/** Type of bank account */
|
|
10
|
-
export type BankAccountType = 'bank' | 'cash_physical' | 'cash_session' | 'card_receivable_credit' | 'card_receivable_debit' | 'card_payable' | 'system';
|
|
10
|
+
export type BankAccountType = 'bank' | 'cash_physical' | 'cash_session' | 'card_receivable_credit' | 'card_receivable_debit' | 'card_payable' | 'person' | 'unit' | 'unidentified' | 'system';
|
|
11
11
|
/** Cash session status */
|
|
12
12
|
export type CashSessionStatus = 'open' | 'closed';
|
|
13
13
|
/** Discount/interest application mode */
|
|
@@ -54,6 +54,11 @@ export interface Invoice {
|
|
|
54
54
|
observations?: string;
|
|
55
55
|
/** Denormalized summary of item descriptions for list display */
|
|
56
56
|
itemsSummary?: string;
|
|
57
|
+
/** Latest active settlement details for this installment in list views. */
|
|
58
|
+
paymentMethodId?: string;
|
|
59
|
+
paymentMethodTypeId?: string;
|
|
60
|
+
paymentAccountId?: string;
|
|
61
|
+
paymentCardInstallments?: number;
|
|
57
62
|
/** If this order has a scheduled time (booking), the start time */
|
|
58
63
|
bookingStartsAt?: string;
|
|
59
64
|
metadata?: Record<string, unknown>;
|
|
@@ -126,6 +131,8 @@ export interface BankAccount {
|
|
|
126
131
|
bankName?: string;
|
|
127
132
|
accountNumber?: string;
|
|
128
133
|
agencyNumber?: string;
|
|
134
|
+
/** Bank-specific CNAB fields live in metadata until every bank shares a stable schema. */
|
|
135
|
+
metadata?: Record<string, unknown>;
|
|
129
136
|
currentBalance: number;
|
|
130
137
|
initialBalance: number;
|
|
131
138
|
creditLimit?: number;
|
|
@@ -327,6 +334,7 @@ export interface InvoiceQuery {
|
|
|
327
334
|
direction?: TransactionDirection;
|
|
328
335
|
status?: InvoiceStatus | InvoiceStatus[];
|
|
329
336
|
contactId?: string;
|
|
337
|
+
unitId?: string;
|
|
330
338
|
accountId?: string;
|
|
331
339
|
costCenterId?: string;
|
|
332
340
|
dateRange?: DateRange;
|
|
@@ -334,6 +342,25 @@ export interface InvoiceQuery {
|
|
|
334
342
|
page?: number;
|
|
335
343
|
pageSize?: number;
|
|
336
344
|
}
|
|
345
|
+
export interface DreQuery {
|
|
346
|
+
year: number;
|
|
347
|
+
unitId?: string;
|
|
348
|
+
}
|
|
349
|
+
export interface DreRow {
|
|
350
|
+
unitId?: string;
|
|
351
|
+
competenceMonth?: string;
|
|
352
|
+
accountId?: string;
|
|
353
|
+
accountCode?: string;
|
|
354
|
+
accountName?: string;
|
|
355
|
+
accountType: 'revenue' | 'expense';
|
|
356
|
+
parentAccountId?: string;
|
|
357
|
+
statementCode?: string;
|
|
358
|
+
statementName?: string;
|
|
359
|
+
unclassified: boolean;
|
|
360
|
+
amount: number;
|
|
361
|
+
discount: number;
|
|
362
|
+
lineCount: number;
|
|
363
|
+
}
|
|
337
364
|
export interface MovementQuery {
|
|
338
365
|
direction?: TransactionDirection;
|
|
339
366
|
status?: MovementStatus | MovementStatus[];
|
|
@@ -774,6 +801,46 @@ export interface MarginRow {
|
|
|
774
801
|
margin: number;
|
|
775
802
|
marginPercent: number;
|
|
776
803
|
}
|
|
804
|
+
export type RecurringBillDirection = 'payable' | 'receivable';
|
|
805
|
+
export type RecurringBillFrequency = 'weekly' | 'monthly' | 'quarterly' | 'yearly';
|
|
806
|
+
/** A rule that creates one financial title per competence when explicitly run. */
|
|
807
|
+
export interface RecurringBill {
|
|
808
|
+
id: string;
|
|
809
|
+
direction: RecurringBillDirection;
|
|
810
|
+
description: string;
|
|
811
|
+
counterpartyPersonId?: string | null;
|
|
812
|
+
counterpartyName?: string | null;
|
|
813
|
+
amount: number;
|
|
814
|
+
items: CreateInvoiceItemInput[];
|
|
815
|
+
unitId?: string | null;
|
|
816
|
+
chartAccountId?: string | null;
|
|
817
|
+
costCenterId?: string | null;
|
|
818
|
+
frequency: RecurringBillFrequency;
|
|
819
|
+
dueDay: number;
|
|
820
|
+
startsOn: string;
|
|
821
|
+
endsOn?: string | null;
|
|
822
|
+
isActive: boolean;
|
|
823
|
+
notes?: string | null;
|
|
824
|
+
createdAt: string;
|
|
825
|
+
updatedAt: string;
|
|
826
|
+
}
|
|
827
|
+
export interface SaveRecurringBillInput {
|
|
828
|
+
id?: string;
|
|
829
|
+
direction: RecurringBillDirection;
|
|
830
|
+
description: string;
|
|
831
|
+
counterpartyPersonId: string;
|
|
832
|
+
amount: number;
|
|
833
|
+
items: CreateInvoiceItemInput[];
|
|
834
|
+
unitId?: string | null;
|
|
835
|
+
chartAccountId?: string | null;
|
|
836
|
+
costCenterId?: string | null;
|
|
837
|
+
frequency: RecurringBillFrequency;
|
|
838
|
+
dueDay: number;
|
|
839
|
+
startsOn: string;
|
|
840
|
+
endsOn?: string | null;
|
|
841
|
+
isActive?: boolean;
|
|
842
|
+
notes?: string | null;
|
|
843
|
+
}
|
|
777
844
|
/**
|
|
778
845
|
* A posição financeira de um CLIENTE, que é a pergunta que a recepção faz com a
|
|
779
846
|
* pessoa na frente dela — e não a de um atendimento isolado.
|
|
@@ -789,6 +856,13 @@ export interface ClientAccount {
|
|
|
789
856
|
paid: number;
|
|
790
857
|
open: number;
|
|
791
858
|
paidToExecute?: number;
|
|
859
|
+
/**
|
|
860
|
+
* Contratado, ainda não executado e ainda não pago. Irmão do `paidToExecute`:
|
|
861
|
+
* um é dívida da casa (recebeu e deve prestar), o outro é dívida do cliente
|
|
862
|
+
* (vai receber quando prestar). Somar os dois num só número apagaria de que
|
|
863
|
+
* lado está o risco.
|
|
864
|
+
*/
|
|
865
|
+
openToExecute?: number;
|
|
792
866
|
credits?: number;
|
|
793
867
|
invoices: ClientAccountInvoice[];
|
|
794
868
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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":"ClientAccountPanel.d.ts","sourceRoot":"","sources":["../../src/views/ClientAccountPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ClientAccountPanel.d.ts","sourceRoot":"","sources":["../../src/views/ClientAccountPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA4BzB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACvC,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5D;AAcD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAc,GAC1D,EAAE,uBAAuB,qBA2SzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommissionRulesView.d.ts","sourceRoot":"","sources":["../../src/views/CommissionRulesView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CommissionRulesView.d.ts","sourceRoot":"","sources":["../../src/views/CommissionRulesView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAsG1D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,qBAAqB,CAAA;CAChC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAwB,qBAmTzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommissionsView.d.ts","sourceRoot":"","sources":["../../src/views/CommissionsView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CommissionsView.d.ts","sourceRoot":"","sources":["../../src/views/CommissionsView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAuDzB,wBAAgB,eAAe,sBA+Q9B"}
|
|
@@ -13,7 +13,7 @@ export interface ViewIntent {
|
|
|
13
13
|
/** Entrou por "Adicionar despesa" num cartão: a conta de pagamento já vem escolhida. */
|
|
14
14
|
cardId?: string;
|
|
15
15
|
}
|
|
16
|
-
export declare function FinancialPage({ config, provider, store, registries }: {
|
|
16
|
+
export declare function FinancialPage({ config: appConfig, provider, store, registries }: {
|
|
17
17
|
config: ResolvedFinancialConfig;
|
|
18
18
|
provider: FinancialDataProvider;
|
|
19
19
|
store: StoreApi<FinancialUIState>;
|