import { prepareCreditCarry, type AnnualBook, } from '@/lib/irpc-annual-settlement'; import { carrySource, newCarryLot, newCarryUse, type CarryLot, type CreditCarry, } from '@/lib/irpc-credit-carry'; import CountrySelect, { type Country } from '@/components/country-select'; import { countryIsoCodes } from '@/lib/country-iso-codes'; const pt = new Intl.DisplayNames(['pt'], { type: 'region' }); const en = new Intl.DisplayNames(['en'], { type: 'region' }); const countries: Country[] = countryIsoCodes .filter((code) => code !== 'MZ') .map((code) => ({ code, name: pt.of(code) ?? code, name_en: en.of(code) ?? code, })) .sort((a, b) => a.name.localeCompare(b.name, 'pt')); export function SimulationIrpcCarry({ book, save, }: { book: AnnualBook; save: (book: AnnualBook) => void; }) { const c = book.creditCarry; if (!c) return (
Saldos de exercícios anteriores

Se dispõe de remanescentes documentados de crédito internacional ou PEC, prepare a origem e as utilizações efectivas. Os resultados anteriores ficam conservados.

); const update = (value: CreditCarry) => save({ ...book, creditCarry: value }); const lotChange = (r: CarryLot) => update({ ...c, lots: c.lots.map((x) => (x.id === r.id ? r : x)) }); return (
Crédito internacional e PEC — exercícios anteriores

{carrySource}

{(c.state === 'known' || c.lots.length > 0) && ( <>

Consolide uma origem por natureza, país e exercício. Transcreva o montante elegível apurado e o deduzido na origem, com o suporte da regra desse exercício. Imposto estrangeiro acima dos limites de elegibilidade não é remanescente por insuficiência de colecta. Só se aplica aqui o prazo ordinário a exercícios anuais; situações transitórias ou especiais exigem correspondência própria.

)} {c.lots.map((r, i) => { const patch = (v: Partial) => lotChange({ ...r, ...v }); const prefix = 'Saldo anterior ' + (i + 1) + ' — '; return (
Origem {i + 1} {(r.kind === 'international' || r.country) && ( patch({ country })} allowLegacyValue /> )} {r.kind === 'pec' && (

O PEC não tem país estrangeiro. A escolha da natureza conserva os valores introduzidos; reconcilie qualquer país anterior.

)} {( [ ['subjectNuit', 'NUIT titular'], ['year', 'Exercício de origem'], ['currency', 'Moeda comprovada'], [ 'originDocument', 'Declaração/apuramento de origem', ], [ 'originReference', 'Suporte da origem e insuficiência de colecta', ], [ 'ruleReference', 'Regra e período aplicáveis na origem', ], [ 'eligible', 'Montante elegível na origem — MZN', ], ['originDeducted', 'Deduzido na origem — MZN'], [ 'selected', 'Parcela escolhida para este fecho — MZN', ], ] as const ).map(([key, label]) => ( ))}

Inclua utilizações efectivas já ocorridas neste exercício antes desta parcela. Não registe simulações históricas como utilizações fiscais. Crédito internacional admite fracção exacta n/d; não é aplicado arredondamento fiscal.

{r.usesState === 'known' && ( )} {r.uses.map((u, j) => (
Utilização {i + 1}.{j + 1} {( [ ['year', 'Exercício'], ['amount', 'Montante MZN'], ['document', 'Documento de utilização'], ['reference', 'Suporte'], ] as const ).map(([key, label]) => ( ))}
))}
); })} {(c.state === 'known' || c.currentInternational || c.currentPec || c.allocationReference) && (
Escolha das parcelas entre exercícios

Escolha quanto deduzir dos créditos correntes e de cada origem anterior. Os créditos internacionais precedem o PEC; a soma fica limitada à colecta. Não se presume prioridade entre exercícios e nenhuma parcela é reduzida automaticamente. Valores não escolhidos ficam identificados, sem criação de transporte oficial.

{c.assessmentKey && c.assessmentKey === book.assessmentKey ? 'Escolha vinculada à colecta seleccionada; o cálculo verifica disponibilidade e limites.' : 'Falta confirmar a escolha na colecta seleccionada. Valores conservados.'}

)}
); }