import { SimulationIrpcPtCdt } from './simulation-irpc-pt-cdt'; import { FiscalProofParcelFields } from './fiscal-proof-parcel'; import CountrySelect, { type Country } from '@/components/country-select'; import { countryIsoCodes } from '@/lib/country-iso-codes'; import { newInternationalProof, prepareInternationalBook, type AnnualBook, } from '@/lib/irpc-annual-settlement'; import { newInternationalPosition, internationalCreditSource, type CreditEvidence, type InternationalCredits, type InternationalPosition, type InternationalTaxProof, } from '@/lib/irpc-international-credit'; const pt = new Intl.DisplayNames(['pt'], { type: 'region' }), 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')); function Evidence({ value, label, change, }: { value: CreditEvidence; label: string; change: (value: CreditEvidence) => void; }) { return (
{label} {(value.state === 'known' || value.amount) && ( )}
); } export function SimulationIrpcInternational({ book, save, }: { book: AnnualBook; save: (book: AnnualBook) => void; }) { const c = book.internationalCredits; if (!c) return (
Crédito internacional — próprio exercício

Prepare a inclusão do imposto estrangeiro comprovado e dos limites documentados, antes do PEC. O resumo anterior de créditos e os históricos ficam conservados. A escolha do país não confirma uma convenção ou benefício.

); const update = (next: InternationalCredits) => save({ ...book, internationalCredits: next }); const positionChange = (p: InternationalPosition) => update({ ...c, positions: c.positions.map((x) => (x.id === p.id ? p : x)), }); return (
Crédito por dupla tributação internacional

{internationalCreditSource}

{c.positions.some((p) => p.nationalMethod === 'proportional') && (

No modo de derivação ordinária abaixo, o portal calcula a fracção nacional a partir da colecta e matéria colectável L6 correntes e da parcela líquida correspondida. Mantêm-se as restantes condições e limites do modo documentado; não determina a convenção aplicável.

)}

Reúna os comprovativos de cada país numa posição por exercício. Indique a fracção nacional e a convenção conforme o suporte do caso. Limites admitem decimal ou fracção exacta n/d; a apresentação não constitui arredondamento fiscal. Valores MZN exigem correspondência documental; uma previsão de câmbio ou de pagamento não comprova o crédito.

{book.economicCredits ? (

Resumo económico anterior conservado:{' '} {c.economic.state || 'Informação em falta'};{' '} {c.economic.amount || 'Montante não preenchido'}. Nesta execução é usado o detalhe económico acima.

) : ( update({ ...c, economic })} /> )} update({ ...c, benefits })} />

{book.economicCredits ? 'Benefícios positivos exigem regras próprias; o crédito económico tem o seu detalhe separado. Informação em falta mantém o saldo dependente indeterminado.' : 'Créditos económicos e benefícios positivos exigem regras próprias; informação em falta mantém o saldo dependente indeterminado.'}

{c.positions.map((p, index) => { const patch = (v: Partial) => positionChange({ ...p, ...v }); const paymentChange = (r: InternationalTaxProof) => patch({ payments: p.payments.map((x) => x.id === r.id ? r : x, ), }); return (
Posição internacional {index + 1} patch({ country })} allowLegacyValue /> {p.nationalMethod === 'proportional' && (