Resumos financeiros
Escolha de design Aedifica (Frente 2); não é um endpoint observado do Plancraft.
Callable financialSummary, disponível no código por omissão, sem flag ou configuração nova. Este trabalho não publica a função.
Autenticação: conta completa e membership actual owner/admin/office. Worker, portal (mesmo após promoção) e papéis desconhecidos são recusados. A organização vem exclusivamente da identidade autenticada; não é aceite orgId no input.
Input estrito: {} para a empresa; {"projectId":"id-da-obra"} para uma obra que exista em organizations/{org}/projects. Sem filtro temporal: acumulado de todas as obras, incluindo arquivadas, no relatório da empresa.
Resposta validada por financialSummarySchema:
| Campo | Significado |
|---|---|
currency | EUR, convenção dos documentos legados. Moeda explícita incompatível torna os totais afectados null; sem conversão. |
vatBasis | net-and-gross; os sufixos identificam a base de cada campo. |
budgetedNet, budgetedGross | Propostas offer publicadas e aceites; sem/com IVA. |
invoicedNet, invoicedGross | Faturas emitidas válidas, excluindo draft/canceled e deduzindo creditNote/invoiceCancellation. Correção exige origem válida na mesma obra; origem já canceled não é deduzida novamente. Fases cumulativas usam somente incrementos partialInvoiceTotal*. |
receivedGross | Soma de invoicePayments.payedAmount, com data válida, de faturas emitidas ou posteriormente anuladas; com IVA. Ausência opcional significa sem pagamentos na convenção existente; valor explicitamente inválido é null. Anulação não inventa um reembolso nem apaga pagamentos já registados. |
outstandingGross | invoicedGross - receivedGross, com IVA; pode ser negativo (saldo a regularizar). Deduções e retenções não são recebimentos. |
constructionMarginNet | Sempre null no domínio actual: não existe base de custo cuja completude esteja evidenciada. Não usa custos IA nem presume custo zero. |
costBasis | incomplete. Custos registados, horas sem valorização e compras/consumos potencialmente sobrepostos não permitem certificar uma margem de construção. |
Valores monetários usam duas casas decimais. null representa N/A e nunca é formatado como zero. 0 só resulta de leitura bem-sucedida com total realmente vazio/zero. Pagamentos registados não são uma prova de reconciliação bancária; não há modelo de reembolsos neste resumo.
Limite síncrono: até 1000 documentos e 1000 publicações por organização. Exceder o limite devolve resource-exhausted, inclusive no relatório por obra; nunca devolve total truncado. not-found para obra inexistente/alheia; invalid-argument para input inválido; identidade e membership usam os erros existentes. A UI oferece nova tentativa e indica o limite. Leituras simultâneas não constituem fecho contabilístico transaccional.
Implementação e testes só usam dados locais/emulador demo. Sem env/índices/webhooks novos, transporte externo ou afirmações sobre totais de produção.