import { useState } from 'react'; import { importExemptionBook,importExemptionCurrent,importExemptionReportRows,importExemptionRules,importRuleSource,isImportService,isDevelopmentImport,importDevelopmentFields,newImportExemption,recordImportExemptions,saveImportExemptionBook,type ImportExemptionBook,type ImportExemptionRow } from '@/lib/iva-import-exemptions'; export function SimulationImportExemptions({draft,onChange}:{draft:Record;onChange:(field:string,value:string)=>void}) { const [error,setError]=useState(''); let book:ImportExemptionBook; try {book=importExemptionBook(draft);}catch(cause){return

{String(cause)}

;} const save=(next:ImportExemptionBook)=>{try {onChange('modelo_a_snapshot',saveImportExemptionBook(draft,next));setError('');}catch(cause){setError(String(cause));}}; const change=(id:string,patch:Partial)=>save({...book,rows:book.rows.map(row=>row.id===id?{...row,...patch}:row)}); return
IVA na importação e serviços associados — enquadramentos disponíveis

Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Indique apenas importações relevantes: reimportação no mesmo estado, ouro pelo Banco de Moçambique, objectos de arte, veículo de combate a incêndios, embarcação/avião elegível ou objecto da sua exploração, bens em regime aduaneiro com isenção total de direitos, importação sob controlo alfandegário em zona/depósito/loja franca nas condições próprias, equipamento classe K para empreendimento autorizado, materiais/equipamentos para projecto de desenvolvimento ONU nas condições próprias, ou bens de abastecimento a bordo de embarcação/avião de navegação internacional. Escolha o ramo para apresentar as condições aplicáveis. Cobertura2026/MZN; as compras internas e os seus resultados conservam-se.

O valor declarado/previsional é conservado, sem o fixar como base aduaneira. A classificação não preenche o campo11 de dedução nem os totais do ModeloA. Uma condição não cumprida afasta só esta isenção; o imposto normal fica por enquadrar. Nas projecções, as respostas são pressupostos, sem certificação aduaneira.

Nos serviços associados, identifique a importação e a inclusão do valor na sua base, conforme o artigo16. O IVA do serviço é apresentado separadamente do IVA dos bens; o simulador não soma novamente esse valor à base.

{error&&

{error}

} {book.rows.map(row=>{ const rule=importExemptionRules.find(item=>item.id===row.treatment); return
{row.description||'Importação por identificar'} — {row.period||'mês por indicar'}
{(['description','importer','declaredValue','goodsCode','originCountry','documentRef','documentDate','period','evidence'] as const).map((field,index)=>isImportService(row.treatment)&&['goodsCode','originCountry'].includes(field)?null:)} {isImportService(row.treatment)&&(['serviceImportRef','serviceBaseRef','serviceProvider'] as const).map((field,index)=>)} {row.treatment==='accessory_service_first_destination'&&} {row.treatment==='authorized_investment_equipment'&&<>

A classe K e a autorização são condições distintas. O portal conserva a referência e o âmbito aplicável; apresentar um pedido não equivale a obter autorização. Numa projecção, identifique expressamente os pressupostos.

} {isDevelopmentImport(row.treatment)&&<>

Pedido apresentado não equivale a despacho favorável nem a concessão aduaneira. Reutilize as referências dos documentos; numa projecção, identifique os pressupostos. O âmbito do despacho, lista e plano conserva-se nesta importação, sem o estender a outros bens ou operações.

{importDevelopmentFields.map(([field,label])=>)} {row.treatment==='un_development_reduction'&&<>

A redução de IVA acompanha a percentagem de redução de direitos, que não é a taxa aduaneira. Informe o IVA sem benefício já determinado ou expressamente assumido; o portal não presume taxa nem base aduaneira. Resultado decimal exacto, sem arredondamento fiscal presumido.

} }
{rule?<>

{importRuleSource(row.treatment)}

Condições de{rule.article}; respostas conservadas ao mudar de ramo{rule.conditions.map(([key,label])=>)}
:

Escolha o ramo para apresentar apenas as condições aplicáveis; as respostas anteriores mantêm-se.

}

Editar não substitui o resultado anterior. Ao classificar novamente, a versão anterior passa ao histórico.

; })} {!!book.rows.length&&} {book.result&&<>

{importExemptionCurrent(draft,book)?'Classificação correspondente às entradas guardadas.':'Entradas alteradas; classificação histórica preservada. Reveja e classifique novamente.'} {book.history?.length??0} versões anteriores.

{importExemptionReportRows(draft).map(([,label,value,origin],index)=>
{label}
{value}{origin}
)}
}
; }