Files
SGF/resources/js/accounting-menu.js
2026-10-29 22:42:37 +02:00

60 lines
8.7 KiB
JavaScript

export const accountingSections=[
{id:'accounting_panel',label:'Painel contabilístico'},
{id:'accounting_daily',label:'Trabalho diário'},
{id:'accounting_review',label:'Conferência'},
{id:'accounting_analysis',label:'Análise'},
{id:'accounting_closing',label:'Fecho'},
{id:'accounting_configuration',label:'Configuração'},
];
export function visibleAccountingSections(can) {
return can('company.view')||can('catalogue_accounting.view')||can('service_fiscal.view')?accountingSections:[];
}
export const accountingFunctions=[
{id:'accounts',section:'accounting_configuration',label:'Plano de contas',description:'Códigos, natureza, hierarquia e estado das contas; versões e aprovação das alterações estruturais.',status:'Existe classificação contabilística com propostas de plano/contas e validação por versão. Não equivale a um razão ou a um plano integral com todos os controlos operacionais.',target:'catalogue_accounting',permission:'catalogue_accounting.view',action:'Abrir plano e classificação existentes'},
{id:'journals',section:'accounting_configuration',label:'Diários',description:'Vendas, compras, bancos, caixa e operações diversas; configuração separada da utilização.',status:'Diários contabilísticos, numeração e contas predefinidas ainda não estão implementados. Séries de facturas não são diários contabilísticos.'},
{id:'entries',section:'accounting_daily',label:'Lançamentos',description:'Data, diário, referência, conta, descrição, débito, crédito, moeda, entidade e dimensão analítica.',status:'Criação, importação, conferência, validação e estorno de lançamentos ainda não estão implementados. Capturar um documento ou uma classificação não gera um lançamento.'},
{id:'recurrences',section:'accounting_daily',label:'Modelos e recorrências',description:'Despesas periódicas, acréscimos e diferimentos com frequência, vigência e responsável.',status:'Não existem modelos nem geração recorrente de lançamentos. A evolução prevista gera rascunhos para revisão, sem publicação automática.'},
{id:'reconciliation',section:'accounting_review',label:'Conferência e reconciliação',description:'Conferir clientes, fornecedores, bancos e impostos, mantendo correspondências parciais, diferenças e justificações.',status:'A reconciliação contabilística ainda não está implementada. O percurso de recebimentos simulados existente é separado do razão e de uma ligação bancária real.',target:'service_receivables',permission:'service_receivables.view',unit:true,action:'Abrir recebimentos e reconciliação de teste'},
{id:'balances',section:'accounting_analysis',label:'Balancetes e extractos',description:'Saldos iniciais, débitos, créditos, saldo final e ligação ao lançamento e ao comprovativo.',status:'Não existe razão contabilístico para produzir balancetes ou extractos. Ausência de fonte não significa saldo zero.'},
{id:'analytics',section:'accounting_analysis',label:'Contabilidade analítica',description:'Centros de custo, projectos, departamentos e repartições, com movimentos por classificar visíveis.',status:'A contabilidade analítica por lançamentos ainda não existe. Custos e orçamento industrial de teste mantêm o seu âmbito próprio e não são um razão analítico.',target:'industrial_budgets',permission:'industrial_budgets.view',unit:true,action:'Consultar orçamento industrial de teste — âmbito distinto'},
{id:'closing',section:'accounting_closing',label:'Operações de fecho',description:'Acréscimos, diferimentos, depreciações, câmbio e resultados, com responsável, evidência e aprovação.',status:'Não existe fecho contabilístico executável. Este menu não gera ajustamentos, depreciações ou apuramentos.'},
{id:'periods',section:'accounting_closing',label:'Períodos e bloqueios',description:'Abertura, fecho mensal/anual, datas de bloqueio e reabertura autorizada, com motivo e histórico.',status:'Os bloqueios e a reabertura de períodos contabilísticos ainda não estão implementados. Os bloqueios actuais de emissão fiscal são um controlo diferente.'},
{id:'statements',section:'accounting_analysis',label:'Demonstrações financeiras',description:'Balanço, resultados e fluxos de caixa com comparativos e ligação às contas de origem.',status:'Não há demonstrações financeiras geradas. São necessários lançamentos validados e modelos adequados ao referencial aplicável; não se apresentam estimativas como saldos reais.'},
{id:'audit',section:'accounting_review',label:'Auditoria e arquivo',description:'Histórico de criação, alteração, validação, estorno e reabertura; consulta de evidência dentro do âmbito autorizado.',status:'Os percursos existentes conservam o seu histórico próprio. Ainda não há um arquivo contabilístico ou uma consulta de auditoria integral agregada.',target:'catalogue_accounting',permission:'catalogue_accounting.view',action:'Consultar classificação e histórico existentes'},
];
export const accountingReports=[
['trial_balance','Balancete geral','Contabilidade','Saldos iniciais, débitos, créditos e saldos finais por conta e período.'],
['ledger','Razão e extractos de contas','Contabilidade','Movimentos, contrapartidas, comprovativos e saldo progressivo.'],
['journal','Diário de lançamentos','Contabilidade','Data, diário, referência e estado, separando rascunhos de lançamentos validados.'],
['balance_sheet','Balanço','Demonstrações','Activo, passivo e capital próprio à data de referência.'],
['income','Demonstração de resultados','Demonstrações','Rendimentos, gastos e resultados do período. Lucro não equivale a dinheiro disponível.'],
['cash_flow','Demonstração de fluxos de caixa','Demonstrações','Fluxos operacionais, de investimento e de financiamento, conferidos com caixa e equivalentes.'],
['equity','Alterações no capital próprio','Demonstrações','Movimentos nas rubricas e reconciliação dos saldos, quando aplicável.'],
['notes','Anexo às demonstrações financeiras','Demonstrações','Notas, políticas contabilísticas e suporte das rubricas relevantes.'],
['customers','Clientes e antiguidade de saldos','Tesouraria','Documento, saldo e vencimento sustentado. Vencimento desconhecido não é atraso zero.'],
['suppliers','Fornecedores e antiguidade de saldos','Tesouraria','Obrigações, vencimentos, moeda e aprovação, sem confundir dívida com pagamento.'],
['cash_bank','Posição de caixa e bancos','Tesouraria','Saldos contabilísticos e de extracto separados, por conta e moeda.'],
['bank_reconciliation','Reconciliação bancária','Tesouraria','Correspondências, pendentes e diferenças, com revisão independente.'],
['forecast','Previsão de tesouraria','Tesouraria','Recebimentos e pagamentos esperados, separados de estimativas e execução efectiva.'],
['payments','Pagamentos e aprovações','Tesouraria','Proposto, aprovado, executado, rejeitado e devolvido são estados distintos.'],
['vat','Apuramento de IVA','Fiscalidade','Operações e imposto reconciliados com contas e declarações aplicáveis. Não é activado por este menu.'],
['withholding','Retenções e obrigações fiscais','Fiscalidade','Bases, retenções e obrigações aplicáveis, sem presumir taxas ou incidências.'],
['payroll','Salários e contribuições','Pessoal','Resumo autorizado e obrigações aplicáveis; dados individuais permanecem restritos.'],
['assets','Activos e depreciações','Património','Cadastro, aquisições, alienações, depreciações e valor líquido.'],
['cost_centres','Centros de custo e projectos','Análise','Rendimentos e gastos por dimensão; movimentos sem classificação identificados.'],
['budget','Orçamento versus realizado','Análise','Desvios por período e dimensão, com base em valores validados.'],
['inventory','Inventário e valorização','Análise','Reconciliação do inventário com a contabilidade, quando aplicável.'],
['fx','Operações em moeda estrangeira','Contabilidade','Moeda, taxa, data de referência e diferenças cambiais.'],
['closing','Fecho e pendências','Fecho','Conferências, ajustamentos, documentos, bloqueios e aprovações do período.'],
['audit','Auditoria de alterações','Fecho','Actor, data, motivo e evidência, com consulta e exportação restritas.'],
].map(([id,label,family,description])=>({id,label,family,description}));
export function filterAccountingReports(search='',family='') {
const normalise=s=>String(s).normalize('NFD').replace(/[\u0300-\u036f]/g,'').toLocaleLowerCase('pt');
const query=normalise(search).trim();
return accountingReports.filter(r=>(!family||r.family===family)&&(!query||normalise(r.label+' '+r.description).includes(query)));
}