import { inputText } from '../lib/input-text.ts'; 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:{' '} {inputText(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}
), )}
)}
); }