import type { AdvanceFiscalPeriod } from '@/lib/irpc-ppc-obligation'; import { SimulationIrpcPecCorrection } from './simulation-irpc-pec-correction'; import { SimulationIrpcPecPlan } from './simulation-irpc-pec-plan'; import { newPecObligation, calculatePecObligation, type PecObligation, } from '@/lib/irpc-pec-obligation'; import { fractionPresentation } from '@/lib/fiscal-rational'; import type { AnnualBook } from '@/lib/irpc-annual-settlement'; export function SimulationIrpcPecObligation({ book, period, onChange, }: { book: AnnualBook; period?: AdvanceFiscalPeriod; onChange: (p: PecObligation) => void; }) { const p = book.pecObligation; if (!p) return (
Estimativa PEC

Preparar o total e os meses previstos conserva os comprovativos pagos em separado.

); const m = calculatePecObligation( p, book.subjectNuit, book.year, book.assessment, period, ), patch = (changes: Partial) => onChange({ ...p, ...changes }); const field = ( key: Exclude< keyof PecObligation, 'version' | 'scope' | 'plan' | 'correction' | 'lastAmount' >, label: string, ) => ( ); return (
Estimativa PEC — preparação
{p.scope === 'ordinary_resident' && ( <> {field('subjectNuit', 'NUIT — estimativa PEC')} {field('year', 'Exercício — estimativa PEC')} {field( 'activityStartYear', 'Ano de início efectivo da actividade — PEC', )} {field( 'activityReference', 'Fonte do início de actividade — PEC', )} {p.activityStartYear !== book.year && ( <> {field('previousYear', 'Exercício anterior — PEC')} {field( 'previousTurnover', 'Volume de negócios anterior — MZN', )} {field( 'turnoverReference', 'Fonte do volume de negócios — PEC', )} patch({ correction })} /> {(m.requiresLastAmount || p.lastAmount) && (
Sem volume anterior — referência PEC dos anos anteriores

Indique o último montante PEC já determinado, com suporte do mesmo titular, ano civil e MZN. Não introduza volume de negócios ou somatório de pagamentos. A hipótese conserva o valor documental sem nova percentagem ou segunda dedução de PPC.

{!p.lastAmount ? ( ) : ( <> {( [ 'subjectNuit', 'year', 'amount', 'reference', ] as const ).map((key) => { const names = { subjectNuit: 'NUIT do montante PEC anterior', year: 'Exercício do último montante PEC', amount: 'Último montante PEC já determinado — MZN', reference: 'Fonte e fundamento do último montante PEC', }; return ( ); })}

Alterar a referência exige nova conferência. Guardar conserva o original e o histórico; não certifica a situação fiscal.

)}
)} {field( 'previousPpcPaid', 'PPC efectivamente pagos no ano anterior — MZN', )} {field( 'ppcReference', 'Fonte dos PPC anteriores — PEC', )} )} )} {m.pending.length ? (

{m.pending.join(' ')}

) : m.notApplicable ? (

Não aplicável no ano de início da actividade29(4).

) : ( <>

Total estimado: {fractionPresentation(m.total!).decimal}{' '} MZN.

    {m.months.map((month) => (
  • {month}
  • ))}
)} {m.ppcExcess && (

Os PPC anteriores cobrem a base limitada desta hipótese. Estimativa PEC: 0 MZN;diferença documental:{' '} {fractionPresentation(m.ppcExcess).decimal} MZN. Esta diferença não cria reembolso,crédito ou dedução anual.

)} patch({ plan })} />

Guardar o rascunho conserva esta preparação. Calcular o fecho anual inclui-a no relatório. Não regista pagamentos,cria deduções ou executa guias. Os comprovativos efectivos permanecem no detalhe PEC existente.

Fonte e limites PEC

{m.source}

); }