import { prepareEconomicBook, type AnnualBook, } from '@/lib/irpc-annual-settlement'; import { economicSource, newEconomicPosition, type EconomicPosition, } from '@/lib/irpc-economic-credit'; export function SimulationIrpcEconomic({ book, save, residentConfirmed, }: { book: AnnualBook; save: (book: AnnualBook) => void; residentConfirmed: boolean; }) { const c = book.economicCredits; if (!c) return (
Crédito por dupla tributação económica

Para lucros distribuídos por entidade moçambicana sujeita e não isenta de IRPC, distinga o imposto correspondente aos lucros da retenção sofrida e do imposto estrangeiro. Reutiliza a colecta e conserva o resumo de créditos anterior.

); const update = (next: typeof c) => save({ ...book, economicCredits: next }); const rowChange = (r: EconomicPosition) => update({ ...c, rows: c.rows.map((x) => (x.id === r.id ? r : x)) }); return (
Crédito económico — lucros distribuídos

{economicSource}

O detalhe substitui nesta execução o resumo económico anterior, que permanece conservado:{' '} {book.internationalCredits?.economic.state || 'informação em falta'} ; montante{' '} {book.internationalCredits?.economic.amount || 'não preenchido'} . Os benefícios e o crédito internacional mantêm os seus estados próprios.

{(c.state === 'known' || c.rows.length > 0) && ( )} {c.rows.map((r, i) => { const patch = (v: Partial) => rowChange({ ...r, ...v }); const prefix = 'Crédito económico ' + (i + 1) + ' — '; const field = ( key: Exclude< keyof EconomicPosition, 'previousUse' | 'liquidation' | 'association' >, label: string, ) => ( ); const choice = ( key: | 'recipientResident' | 'payerResident' | 'payerIrpc' | 'payerExempt' | 'article40' | 'incomeIncluded', label: string, ) => ( ); const outside = r.article40 === 'yes'; const detail = ( <> {( [ [ 'distributionDocument', 'Documento da distribuição', ], [ 'distributionParcel', 'Parcela dos lucros no documento', ], [ 'distributionDate', 'Data da distribuição (AAAA-MM-DD)', ], [ 'income', 'Lucros incluídos antes do crédito — MZN, ilíquidos de retenção', ], [ 'incomeReference', 'Suporte da inclusão e do valor ilíquido na base corrente', ], [ 'taxIssuer', 'Emitente do comprovativo de IRPC correspondente', ], [ 'taxDocument', 'Documento do IRPC correspondente aos lucros', ], [ 'taxParcel', 'Parcela desse IRPC no documento', ], [ 'parcelReference', 'Suporte da identificação da parcela de imposto', ], ['currency', 'Moeda comprovada'], [ 'proofAmount', 'IRPC comprovado nesta parcela — MZN', ], [ 'taxAmount', 'IRPC correspondente aos lucros seleccionados — MZN', ], [ 'attributionReference', 'Suporte da correspondência entre imposto e lucros', ], [ 'previouslyAttributed', 'IRPC desta parcela já atribuído a outros lucros — MZN', ], [ 'priorAttributionReference', 'Suporte das atribuições anteriores, incluindo zero conhecido', ], [ 'grossUpIncluded', 'Crédito nominal já acrescido à base (art.53) — MZN', ], [ 'grossUpReference', 'Suporte do acréscimo art.53 já incluído em L6', ], [ 'nationalLimit', 'Quota proporcional da colecta após acréscimo — MZN', ], [ 'nationalLimitReference', 'Suporte da quota proporcional da colecta', ], ] as const ) .filter( ([key]) => r.nationalMethod !== 'proportional' || (key !== 'nationalLimit' && key !== 'nationalLimitReference'), ) .map(([key, label]) => field(key, label))} {r.nationalMethod === 'proportional' && (