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.'}

}
; }