import { inputText } from './input-text.ts'; import { acquisitionScope } from './iva-acquisitions.ts'; import { internationalShipEligibility, internationalAircraftEligibility, } from './iva-international-assets.ts'; type Choice = '' | 'yes' | 'no'; export const importExemptionVersion = 'import-exemptions/1'; export const importExemptionSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(d/f),PDF11/p.1426(269). Lei22/2022,PDF2/p.2252(26),mantém d/f; Lei10/2025,PDF12–13/p.2180(12–13),mantém d/f. Cobertura2026/MZN; classificação do IVA na importação,sem cálculo de direitos aduaneiros ou dedução no campo11.'; export const importBeneficiaryVersion = 'import-beneficiaries/1'; export const importBeneficiarySource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(j/l),PDF11/p.1426(269). Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm j/l. Cobertura2026/MZN; importação de objectos de arte e veículo de combate a incêndios nas condições próprias,sem dedução no campo11 nem cálculo de direitos aduaneiros.'; export const importAssetVersion = 'import-assets/1'; export const importAssetSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(h/i),PDF11/p.1426(269),por referência a13(1)(f/g),PDF12/p.1426(270),e actividades de13(1)(c/d). Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm h/i;13 não alterado nesses diplomas. Cobertura2026/MZN; importação de embarcação/avião elegível ou objecto incorporado/utilizado na respectiva exploração,sem dedução no campo11,base aduaneira ou cálculo de direitos aduaneiros.'; export const importCustomsVersion = 'import-customs-regimes/1'; export const importCustomsSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.12(1)(c),PDF11/p.1426(269): importações de bens nos regimes de trânsito, importação temporária ou draubaque que sejam isentas totalmente de direitos aduaneiros. Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm c) por remissão,sem nova redacção expandida neste recorte. Cobertura2026/MZN; classificação de IVA na importação,sem cálculo de direitos,base aduaneira,saída de regime ou dedução no campo11.'; export const importSpecialRegimeVersion = 'import-special-regimes/1'; export const importSpecialRegimeSource = 'CIVA republicado pela Lei13/2016, BR156/10.º suplemento, art.14(1)(a) e condição inicial14(1),PDF13/p.1426(271). Lei22/2022 e Lei10/2025 não alteram14 neste acervo. Importações sob controlo alfandegário e disposições especificamente aplicáveis, enquanto os bens permanecem nos regimes enumerados, sem utilização nem consumo finais nas áreas mencionadas. Cobertura2026/MZN; sem dedução/campo11, cálculo de direitos ou saída do regime.'; export const importSupplyVersion = 'import-onboard-supplies/1'; export const importSupplySource = 'CIVA republicado pela Lei13/2016,BR156/10.º suplemento,12(1)(g),12(3)(a)(i–iv)/(b),PDF11–12/p.1426(269–270),e definição13(3). Lei22/2022PDF2/p.2252(26) e Lei10/2025PDF13/p.2180(13) mantêm g/3 por remissão. Cobertura2026/MZN; abastecimentos importados na janela própria,consumidos ou a bordo de embarcação de navegação internacional marítima/fluvial/lacustre ou avião de navegação aérea internacional;exclusões próprias de provisões e depósitos normais. Sem exigir companhia principalmente internacional,sem dedução/campo11,direitos ou base aduaneira.'; export const importServiceVersion = 'import-included-services/1'; export const importInvestmentVersion = 'import-investment-equipment/1'; export const importDevelopmentVersion = 'import-un-development/1'; export const importDevelopmentSource = 'CIVA republicado Lei13/2016,12(2)(c),PDF11/p.1426(269): materiais/equipamentos de projectos de desenvolvimento financiados pelas agências e instituições especializadas das Nações Unidas,devidamente acreditadas junto do Governo Moçambicano,destinados exclusivamente à implementação dos projectos;isenção ou redução de IVA na mesma proporção da redução de direitos. Art12(4),PDF12/p.1426(270): despacho favorável do Ministro que superintende Finanças,requerimento prévio da entidade promotora com lista discriminada e plano de importações;concessão pelos serviços aduaneiros segundo o plano e após confronto com a lista aprovada. Lei22/2022PDF2–3 eLei10/2025PDF13 mantêm12(2)/4 por remissão. Cobertura2026/MZN;sem calcular direitos/base aduaneira/taxa normal ou dedução/campo11;pedido não equivale a concessão.'; export const importDevelopmentFields = [ ['developmentProject', 'Projecto de desenvolvimento identificado'], [ 'developmentAgency', 'Agência ou instituição especializada das Nações Unidas e referência da acreditação', ], [ 'developmentDecisionRef', 'Despacho favorável / pressuposto expresso da projecção', ], [ 'developmentListRef', 'Lista discriminada aprovada / referência da previsão', ], ['developmentPlanRef', 'Plano de importações / referência da previsão'], [ 'developmentScope', 'Âmbito nesta importação: bens, operação, período e condições abrangidos', ], [ 'developmentRightsRef', 'Fundamento da isenção ou redução de direitos / pressuposto expresso', ], ] as const; const developmentConditions = [ [ 'developmentMaterials', 'Os bens desta importação são materiais ou equipamentos do projecto de desenvolvimento identificado', ], [ 'developmentUNFunding', 'O projecto é financiado pela agência ou instituição especializada das Nações Unidas identificada; não basta financiamento externo genérico', ], [ 'developmentAccredited', 'A agência ou instituição especializada identificada está devidamente acreditada junto do Governo Moçambicano', ], [ 'developmentExclusiveUse', 'Os materiais ou equipamentos destinam-se exclusivamente à implementação deste projecto', ], [ 'developmentFavourableDecision', 'Existe despacho favorável do Ministro que superintende a área de Finanças para este âmbito, ou esse despacho é pressuposto expresso da projecção; requerimento apresentado não equivale a decisão favorável', ], [ 'developmentPriorRequest', 'A entidade promotora apresentou requerimento prévio acompanhado de lista discriminada dos bens a importar e respectivo plano de importações, ou estes elementos são pressupostos expressos da projecção', ], [ 'developmentCustomsConformity', 'A concessão pelos serviços aduaneiros para esta importação segue o plano e o confronto com a lista aprovada no despacho, ou tal conformidade é pressuposto expresso da projecção; não se estende a outros bens ou operações', ], ] as const; export const importInvestmentSource = 'CIVA republicado Lei13/2016,12(1)(k),PDF11/p.1426(269): importações de bens de equipamento classificados na classe K da Pauta Aduaneira destinados a investimentos em empreendimentos autorizados ao abrigo da Lei de Investimentos e respectivo Regulamento. Lei22/2022,PDF2/p.2252(26),e Lei10/2025,PDF13/p.2180(13),mantêm k por remissão. Cobertura2026/MZN; classificação do IVA desta importação nas condições próprias,sem conceder autorização de investimento,classificar automaticamente mercadorias,estender o âmbito da autorização,calcular direitos/base aduaneira ou dedução/campo11.'; export const importServiceSource = 'CIVA republicado Lei13/2016,12(1)(e),PDF11/p.1426(269): prestações de serviços cujo valor esteja incluído na base tributável da importação de bens,conforme16. Art16(1)/16(1)(b)/16(2),PDF14/p.1426(272): valor aduaneiro e despesas acessórias até primeiro destino,do documento de transporte ou,na falta,primeira ruptura de carga no interior do País. Lei22/2022PDF1–2 e Lei10/2025PDF12–13 mantêm e por remissão e não alteram16. Cobertura2026/MZN; IVA do serviço,sem calcular base aduaneira,direitos,IVA dos bens,dedução/campo11 ou rectificação automática de factura.'; export const importExemptionRules = [ { id: 'un_development_exemption', branch: 'P060', label: 'Projecto de desenvolvimento ONU — isenção integral', article: '12(2)(c)/12(4)', conditions: [ ...developmentConditions, [ 'developmentFullRightsExemption', 'Esta importação beneficia de isenção integral de direitos no fundamento identificado; uma redução parcial não equivale a isenção integral de IVA', ], ], }, { id: 'un_development_reduction', branch: 'P060', label: 'Projecto de desenvolvimento ONU — redução proporcional', article: '12(2)(c)/12(4)', conditions: [ ...developmentConditions, [ 'developmentRightsReduction', 'Esta importação beneficia da redução parcial de direitos na percentagem identificada; não é uma taxa aduaneira nem a fracção de direitos ainda a pagar', ], ], }, { id: 'authorized_investment_equipment', branch: 'P056', label: 'Equipamento classe K para empreendimento autorizado', article: '12(1)(k)', conditions: [ [ 'investmentEquipment', 'Os bens importados são bens de equipamento; não basta uma compra de materiais, consumíveis ou serviços para um investimento', ], [ 'investmentClassK', 'Os bens de equipamento identificados estão classificados na classe K da Pauta Aduaneira; uma descrição genérica ou código isolado não é classificação automática pelo portal', ], [ 'investmentAuthorized', 'O empreendimento está autorizado ao abrigo da Lei de Investimentos e respectivo Regulamento; a referência identifica a autorização aplicável ou o pressuposto expresso da projecção, não apenas um pedido apresentado', ], [ 'investmentDestination', 'Estes bens destinam-se ao investimento no empreendimento autorizado identificado; a operação, período e condições correspondem ao âmbito aplicável da autorização, sem o estender automaticamente a outros bens ou operações', ], ], }, { id: 'service_in_customs_value', branch: 'P050', label: 'Serviço já compreendido no valor aduaneiro', article: '12(1)(e)', conditions: [ [ 'serviceImportLinked', 'A prestação está ligada à importação de bens identificada na referência própria; não basta tratar-se de serviço prestado a um importador', ], [ 'serviceFullValueIncluded', 'O valor integral do serviço desta linha está incluído na base tributável da importação identificada, nos termos do artigo16; documento ou pressuposto discrimina a inclusão, não apenas a intenção de a incluir', ], [ 'serviceInCustomsValue', 'O valor deste serviço já está compreendido no valor aduaneiro que integra a base do artigo16(1); não é uma nova parcela a somar pelo simulador', ], ], }, { id: 'accessory_service_first_destination', branch: 'P050', label: 'Serviço acessório até ao primeiro destino', article: '12(1)(e)', conditions: [ [ 'serviceImportLinked', 'A prestação está ligada à importação de bens identificada na referência própria; não basta tratar-se de serviço prestado a um importador', ], [ 'serviceFullValueIncluded', 'O valor integral do serviço desta linha está incluído na base tributável da importação identificada, nos termos do artigo16; documento ou pressuposto discrimina a inclusão, não apenas a intenção de a incluir', ], [ 'serviceAccessoryCost', 'O serviço é uma despesa acessória da importação (embalagem, transporte, seguro ou outro encargo) adicionada à base por ainda não estar compreendida no valor aduaneiro, conforme16(1)(b)', ], [ 'serviceToFirstDestination', 'A despesa verifica-se até ao primeiro lugar de destino no interior do País: o constante do documento de transporte ou, na sua falta, o local da primeira ruptura de carga no interior do País, conforme16(2); destino e percurso identificados no fundamento', ], ], }, { id: 'ship_provisions_import', branch: 'P052', label: 'Embarcação internacional — Provisões de bordo', article: '12(1)(g)', conditions: [ [ 'supplyInternationalShip', 'A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima', ], [ 'supplyProvisions', 'São provisões de bordo: produtos destinados exclusivamente ao consumo da tripulação e dos passageiros', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], [ 'supplyNoDismantleOtherUse', 'As provisões não se encontram em embarcação a desmantelar ou utilizada para fins diferentes da navegação internacional, durante essa situação', ], [ 'supplyNoFloatingHospitality', 'As provisões não se encontram em embarcação utilizada em hotel, restaurante, sala de jogos flutuante ou fim semelhante, durante permanência em porto ou águas territoriais/interiores nacionais', ], [ 'supplyNoRecreation', 'As provisões não se encontram em embarcação de recreio durante permanência em porto ou águas territoriais/interiores nacionais', ], [ 'supplyNoCoastalFishing', 'As provisões não se encontram em embarcação de pesca costeira', ], ], }, { id: 'ship_fuel_import', branch: 'P052', label: 'Embarcação internacional — Combustíveis ou carburantes', article: '12(1)(g)', conditions: [ [ 'supplyInternationalShip', 'A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima', ], [ 'supplyFuel', 'São combustíveis ou carburantes destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], [ 'supplyNormalTanks', 'Os combustíveis/carburantes importados são os contidos nos depósitos normais; depósitos suplementares ou externos não cumprem esta condição', ], ], }, { id: 'ship_technical_products_import', branch: 'P052', label: 'Embarcação internacional — Lubrificantes e outros produtos de funcionamento técnico', article: '12(1)(g)', conditions: [ [ 'supplyInternationalShip', 'A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima', ], [ 'supplyTechnicalProducts', 'São lubrificantes ou outros produtos, distintos dos combustíveis/carburantes, destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], ], }, { id: 'ship_cargo_accessories_import', branch: 'P052', label: 'Embarcação internacional — Produtos acessórios para mercadorias transportadas', article: '12(1)(g)', conditions: [ [ 'supplyInternationalShip', 'A embarcação identificada efectua navegação marítima, fluvial ou lacustre internacional; não basta pertencer a uma empresa marítima', ], [ 'supplyCargoAccessories', 'São produtos acessórios destinados à preparação, tratamento e conservação das mercadorias transportadas a bordo', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], ], }, { id: 'aircraft_provisions_import', branch: 'P052', label: 'Avião internacional — Provisões de bordo', article: '12(1)(g)', conditions: [ [ 'supplyInternationalAircraft', 'O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo', ], [ 'supplyProvisions', 'São provisões de bordo: produtos destinados exclusivamente ao consumo da tripulação e dos passageiros', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], ], }, { id: 'aircraft_fuel_import', branch: 'P052', label: 'Avião internacional — Combustíveis ou carburantes', article: '12(1)(g)', conditions: [ [ 'supplyInternationalAircraft', 'O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo', ], [ 'supplyFuel', 'São combustíveis ou carburantes destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], [ 'supplyNormalTanks', 'Os combustíveis/carburantes importados são os contidos nos depósitos normais; depósitos suplementares ou externos não cumprem esta condição', ], ], }, { id: 'aircraft_technical_products_import', branch: 'P052', label: 'Avião internacional — Lubrificantes e outros produtos de funcionamento técnico', article: '12(1)(g)', conditions: [ [ 'supplyInternationalAircraft', 'O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo', ], [ 'supplyTechnicalProducts', 'São lubrificantes ou outros produtos, distintos dos combustíveis/carburantes, destinados ao funcionamento das máquinas de propulsão ou de outros aparelhos de uso técnico instalados a bordo', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], ], }, { id: 'aircraft_cargo_accessories_import', branch: 'P052', label: 'Avião internacional — Produtos acessórios para mercadorias transportadas', article: '12(1)(g)', conditions: [ [ 'supplyInternationalAircraft', 'O avião identificado efectua navegação aérea internacional; não se exige que a companhia se dedique principalmente ao tráfego internacional neste ramo', ], [ 'supplyCargoAccessories', 'São produtos acessórios destinados à preparação, tratamento e conservação das mercadorias transportadas a bordo', ], [ 'supplyImportWindow', 'Os bens são importados desde a entrada no território nacional até à chegada ao porto ou aeroporto nacionais de destino, ou durante a permanência nesses locais pelo período normal necessário ao cumprimento das tarefas; trajecto e datas constam do fundamento', ], [ 'supplyOnboard', 'Os bens importados são consumidos ou encontram-se a bordo da embarcação ou avião identificados no fundamento factual', ], ], }, { id: 'special_economic_zone_import', branch: 'P080', label: 'Importação — Zona económica especial', article: '14(1)(a)', conditions: [ [ 'specialEconomicZone', 'Os bens importados são colocados no regime de zona económica especial identificado no documento; a localização geográfica, por si só, não comprova o regime', ], [ 'specialCustomsControl', 'Esta importação encontra-se sob controlo alfandegário', ], [ 'specialApplicableProvisions', 'A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis', ], [ 'specialRegimePermanence', 'Os bens permanecem sob o regime identificado no período desta classificação', ], [ 'specialNoFinalUseConsumption', 'Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime', ], ], }, { id: 'free_zone_import', branch: 'P080', label: 'Importação — Zona franca', article: '14(1)(a)', conditions: [ [ 'freeZone', 'Os bens importados são colocados no regime de zona franca identificado no documento', ], [ 'specialCustomsControl', 'Esta importação encontra-se sob controlo alfandegário', ], [ 'specialApplicableProvisions', 'A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis', ], [ 'specialRegimePermanence', 'Os bens permanecem sob o regime identificado no período desta classificação', ], [ 'specialNoFinalUseConsumption', 'Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime', ], ], }, { id: 'free_warehouse_import', branch: 'P080', label: 'Importação — Depósito franco', article: '14(1)(a)', conditions: [ [ 'freeWarehouse', 'Os bens importados são colocados no regime de depósito franco identificado no documento', ], [ 'specialCustomsControl', 'Esta importação encontra-se sob controlo alfandegário', ], [ 'specialApplicableProvisions', 'A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis', ], [ 'specialRegimePermanence', 'Os bens permanecem sob o regime identificado no período desta classificação', ], [ 'specialNoFinalUseConsumption', 'Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime', ], ], }, { id: 'general_free_warehouse_import', branch: 'P080', label: 'Importação — Depósito geral franco', article: '14(1)(a)', conditions: [ [ 'generalFreeWarehouse', 'Os bens importados são colocados no regime de depósito geral franco identificado no documento', ], [ 'specialCustomsControl', 'Esta importação encontra-se sob controlo alfandegário', ], [ 'specialApplicableProvisions', 'A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis', ], [ 'specialRegimePermanence', 'Os bens permanecem sob o regime identificado no período desta classificação', ], [ 'specialNoFinalUseConsumption', 'Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime', ], ], }, { id: 'customs_warehouse_import', branch: 'P080', label: 'Importação — Depósito de regime aduaneiro', article: '14(1)(a)', conditions: [ [ 'customsWarehouse', 'Os bens importados são introduzidos no depósito de regime aduaneiro identificado no documento', ], [ 'specialCustomsControl', 'Esta importação encontra-se sob controlo alfandegário', ], [ 'specialApplicableProvisions', 'A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis', ], [ 'specialRegimePermanence', 'Os bens permanecem sob o regime identificado no período desta classificação', ], [ 'specialNoFinalUseConsumption', 'Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime', ], ], }, { id: 'duty_free_shop_import', branch: 'P080', label: 'Importação — Loja franca', article: '14(1)(a)', conditions: [ [ 'dutyFreeShop', 'Os bens importados são introduzidos na loja franca identificada no documento', ], [ 'specialCustomsControl', 'Esta importação encontra-se sob controlo alfandegário', ], [ 'specialApplicableProvisions', 'A importação está sujeita às disposições especificamente aplicáveis ao regime identificado; indicar no fundamento factual o regime e documento aplicáveis', ], [ 'specialRegimePermanence', 'Os bens permanecem sob o regime identificado no período desta classificação', ], [ 'specialNoFinalUseConsumption', 'Os bens não têm utilização nem consumo finais nas áreas mencionadas no regime', ], ], }, { id: 'reimport_same_state', branch: 'P049', label: 'Reimportação por quem exportou, no mesmo estado', article: '12(1)(d)', conditions: [ [ 'sameExporter', 'A reimportação é efectuada por quem exportou os bens', ], [ 'sameState', 'Os bens regressam no mesmo estado em que foram exportados', ], [ 'customsExempt', 'Esta reimportação beneficia de isenção de direitos aduaneiros', ], ], }, { id: 'central_bank_gold', branch: 'P051', label: 'Importação de ouro pelo Banco de Moçambique', article: '12(1)(f)', conditions: [ ['gold', 'Os bens importados são ouro'], [ 'centralBank', 'A importação é efectuada pelo Banco de Moçambique', ], ], }, { id: 'author_art_import', branch: 'P055', label: 'Objectos de arte pelos artistas-autores, herdeiros ou legatários', article: '12(1)(j)', conditions: [ ['artObjects', 'Os bens importados são objectos de arte'], [ 'eligibleArtImporter', 'A importação é efectuada pelos próprios artistas-autores, residentes no território nacional, seus herdeiros ou legatários; a identidade, residência e relação aplicáveis estão identificadas no fundamento factual', ], ], }, { id: 'fire_brigade_vehicle', branch: 'P057', label: 'Veículo de combate a incêndios por corporação de bombeiros', article: '12(1)(l)', conditions: [ [ 'fireVehicle', 'O bem importado é um veículo de combate a incêndios', ], [ 'fireBrigade', 'A importação é efectuada por uma corporação de bombeiros', ], [ 'exclusiveOwnUse', 'O veículo destina-se exclusivamente a ser utilizado na actividade própria da corporação', ], ], }, { id: 'eligible_ship_import', branch: 'P053', label: 'Importação de embarcação elegível', article: '12(1)(h)', conditions: [ ['eligibleShip', internationalShipEligibility], [ 'importedShip', 'O bem importado é a própria embarcação elegível identificada; não um serviço nem qualquer bem adquirido pelo operador', ], ], }, { id: 'ship_operation_object_import', branch: 'P053', label: 'Importação de objecto incorporado ou utilizado na exploração de embarcação elegível', article: '12(1)(h)', conditions: [ ['eligibleShip', internationalShipEligibility], [ 'shipObjectLink', 'O objecto importado está incorporado na embarcação elegível identificada ou é utilizado na sua exploração; objecto, embarcação e ligação concreta identificados no documento ou pressuposto, não um fornecimento genérico ao operador', ], ], }, { id: 'eligible_aircraft_import', branch: 'P054', label: 'Importação de avião de companhia principalmente internacional', article: '12(1)(i)', conditions: [ ['eligibleAircraft', internationalAircraftEligibility], [ 'importedAircraft', 'O bem importado é o próprio avião elegível identificado; não um serviço nem qualquer bem adquirido pela companhia', ], ], }, { id: 'aircraft_operation_object_import', branch: 'P054', label: 'Importação de objecto incorporado ou utilizado na exploração de avião elegível', article: '12(1)(i)', conditions: [ ['eligibleAircraft', internationalAircraftEligibility], [ 'aircraftObjectLink', 'O objecto importado está incorporado no avião elegível identificado ou é utilizado na sua exploração; objecto, avião e ligação concreta identificados no documento ou pressuposto, não um fornecimento genérico à companhia', ], ], }, { id: 'customs_transit_import', branch: 'P048', label: 'Importação de bens em trânsito com isenção total de direitos', article: '12(1)(c)', conditions: [ [ 'customsTransit', 'Os bens identificados são importados sob regime de trânsito; regime e operação constam do documento ou pressuposto expresso, não apenas passagem geográfica', ], [ 'fullCustomsExemption', 'Esta importação beneficia de isenção total de direitos aduaneiros, identificada no fundamento factual; redução parcial ou mera suspensão não comprovam esta condição', ], ], }, { id: 'customs_temporary_import', branch: 'P048', label: 'Importação temporária de bens com isenção total de direitos', article: '12(1)(c)', conditions: [ [ 'customsTemporary', 'Os bens identificados são importados sob regime de importação temporária; regime e operação constam do documento ou pressuposto expresso, não apenas intenção de utilização temporária', ], [ 'fullCustomsExemption', 'Esta importação beneficia de isenção total de direitos aduaneiros, identificada no fundamento factual; redução parcial ou mera suspensão não comprovam esta condição', ], ], }, { id: 'customs_drawback_import', branch: 'P048', label: 'Importação de bens em draubaque com isenção total de direitos', article: '12(1)(c)', conditions: [ [ 'customsDrawback', 'Os bens identificados são importados sob regime de draubaque; regime e operação constam do documento ou pressuposto expresso, não qualquer promessa de restituição futura', ], [ 'fullCustomsExemption', 'Esta importação beneficia de isenção total de direitos aduaneiros, identificada no fundamento factual; redução parcial ou mera suspensão não comprovam esta condição', ], ], }, ] as const; type Condition = | 'developmentMaterials' | 'developmentUNFunding' | 'developmentAccredited' | 'developmentExclusiveUse' | 'developmentFavourableDecision' | 'developmentPriorRequest' | 'developmentCustomsConformity' | 'developmentFullRightsExemption' | 'developmentRightsReduction' | 'investmentEquipment' | 'investmentClassK' | 'investmentAuthorized' | 'investmentDestination' | 'serviceImportLinked' | 'serviceFullValueIncluded' | 'serviceInCustomsValue' | 'serviceAccessoryCost' | 'serviceToFirstDestination' | 'supplyCargoAccessories' | 'supplyFuel' | 'supplyImportWindow' | 'supplyInternationalAircraft' | 'supplyInternationalShip' | 'supplyNoCoastalFishing' | 'supplyNoDismantleOtherUse' | 'supplyNoFloatingHospitality' | 'supplyNoRecreation' | 'supplyNormalTanks' | 'supplyOnboard' | 'supplyProvisions' | 'supplyTechnicalProducts' | 'specialEconomicZone' | 'freeZone' | 'freeWarehouse' | 'generalFreeWarehouse' | 'customsWarehouse' | 'dutyFreeShop' | 'specialCustomsControl' | 'specialApplicableProvisions' | 'specialRegimePermanence' | 'specialNoFinalUseConsumption' | 'sameExporter' | 'sameState' | 'customsExempt' | 'gold' | 'centralBank' | 'artObjects' | 'eligibleArtImporter' | 'fireVehicle' | 'fireBrigade' | 'exclusiveOwnUse' | 'eligibleShip' | 'importedShip' | 'shipObjectLink' | 'eligibleAircraft' | 'importedAircraft' | 'aircraftObjectLink' | 'customsTransit' | 'customsTemporary' | 'customsDrawback' | 'fullCustomsExemption'; function beneficiaryImport(id: string): boolean { return id === 'author_art_import' || id === 'fire_brigade_vehicle'; } function assetImport(id: string): boolean { return [ 'eligible_ship_import', 'ship_operation_object_import', 'eligible_aircraft_import', 'aircraft_operation_object_import', ].includes(id); } function customsImport(id: string): boolean { return [ 'customs_transit_import', 'customs_temporary_import', 'customs_drawback_import', ].includes(id); } function specialRegimeImport(id: string): boolean { return [ 'special_economic_zone_import', 'free_zone_import', 'free_warehouse_import', 'general_free_warehouse_import', 'customs_warehouse_import', 'duty_free_shop_import', ].includes(id); } function supplyImport(id: string): boolean { return [ 'ship_provisions_import', 'ship_fuel_import', 'ship_technical_products_import', 'ship_cargo_accessories_import', 'aircraft_provisions_import', 'aircraft_fuel_import', 'aircraft_technical_products_import', 'aircraft_cargo_accessories_import', ].includes(id); } export function isImportService(id: string): boolean { return [ 'service_in_customs_value', 'accessory_service_first_destination', ].includes(id); } export function isDevelopmentImport(id: string): boolean { return ['un_development_exemption', 'un_development_reduction'].includes( id, ); } export function importRuleSource(id: string): string { return isDevelopmentImport(id) ? importDevelopmentSource : id === 'authorized_investment_equipment' ? importInvestmentSource : isImportService(id) ? importServiceSource : supplyImport(id) ? importSupplySource : specialRegimeImport(id) ? importSpecialRegimeSource : customsImport(id) ? importCustomsSource : assetImport(id) ? importAssetSource : beneficiaryImport(id) ? importBeneficiarySource : importExemptionSource; } export type ImportExemptionRow = { id: string; treatment: string; description: string; period: string; origin: 'projected' | 'effective'; currency: string; declaredValue: string; goodsCode: string; originCountry: string; importer: string; documentRef: string; documentDate: string; evidence: string; conditions: Partial>; serviceImportRef?: string; serviceBaseRef?: string; serviceFirstDestination?: string; serviceProvider?: string; investmentAuthorizationRef?: string; investmentScope?: string; } & Partial< Record< | (typeof importDevelopmentFields)[number][0] | 'developmentReductionPercent' | 'developmentNormalVat' | 'developmentNormalVatRef', string > >; type ImportResult = { id: string; status: 'exempt' | 'reduced' | 'not_applicable' | 'indeterminate'; importVat: string | null; serviceVat?: string | null; reason: string; }; export type ImportExemptionCalculation = { version: string; revision: number; calculatedAt: string; opportunity: string; location: string; sourceKey: string; source: string; inputs: ImportExemptionRow[]; rows: ImportResult[]; }; export type ImportExemptionBook = { rows: ImportExemptionRow[]; result?: ImportExemptionCalculation; history?: ImportExemptionCalculation[]; }; type Store = { version: 1; books: Record; importExemptions?: Record; [key: string]: unknown; }; function store(draft: Record): Store { const value: Store = draft.modelo_a_snapshot ? JSON.parse(inputText(draft.modelo_a_snapshot)) : { version: 1, books: {} }; if ( value?.version !== 1 || !value.books || typeof value.books !== 'object' || Array.isArray(value.books) ) throw new Error( 'Dados fiscais não recuperáveis; originais preservados, sem substituição.', ); if ( value.importExemptions !== undefined && (!value.importExemptions || typeof value.importExemptions !== 'object' || Array.isArray(value.importExemptions)) ) throw new Error( 'Importações guardadas não recuperáveis; originais preservados.', ); for (const book of Object.values(value.importExemptions ?? {})) { if ( Array.isArray(book?.rows) && book.rows.some( (row) => row && [ ...importDevelopmentFields.map(([key]) => key), 'developmentReductionPercent', 'developmentNormalVat', 'developmentNormalVatRef', ].some( (key) => row[key as keyof ImportExemptionRow] !== undefined && typeof row[key as keyof ImportExemptionRow] !== 'string', ), ) ) throw new Error( 'Referências do projecto de desenvolvimento não recuperáveis; originais preservados.', ); if ( Array.isArray(book?.rows) && book.rows.some( (row) => row && ['investmentAuthorizationRef', 'investmentScope'].some( (key) => row[key as keyof ImportExemptionRow] !== undefined && typeof row[key as keyof ImportExemptionRow] !== 'string', ), ) ) throw new Error( 'Referências do investimento não recuperáveis; originais preservados.', ); if ( Array.isArray(book?.rows) && book.rows.some( (row) => row && [ 'serviceImportRef', 'serviceBaseRef', 'serviceFirstDestination', 'serviceProvider', ].some( (key) => row[key as keyof ImportExemptionRow] !== undefined && typeof row[key as keyof ImportExemptionRow] !== 'string', ), ) ) throw new Error( 'Referências do serviço associado à importação não recuperáveis; originais preservados.', ); if ( !book || !Array.isArray(book.rows) || (book.history !== undefined && !Array.isArray(book.history)) || book.rows.some( (row) => !row || [ 'id', 'treatment', 'description', 'period', 'origin', 'currency', 'declaredValue', 'goodsCode', 'originCountry', 'importer', 'documentRef', 'documentDate', 'evidence', ].some( (k) => typeof row[k as keyof ImportExemptionRow] !== 'string', ) || !row.conditions || typeof row.conditions !== 'object' || Array.isArray(row.conditions), ) ) throw new Error( 'Linhas de importação não recuperáveis; sem substituição por lista vazia.', ); } return value; } export function importExemptionBook( draft: Record, ): ImportExemptionBook { return ( store(draft).importExemptions?.[acquisitionScope(draft)] ?? { rows: [] } ); } export function saveImportExemptionBook( draft: Record, book: ImportExemptionBook, ): string { const current = store(draft), encoded = JSON.stringify({ ...current, importExemptions: { ...current.importExemptions, [acquisitionScope(draft)]: book, }, }); store({ ...draft, modelo_a_snapshot: encoded }); return encoded; } export function newImportExemption( id: string, currency: string, ): ImportExemptionRow { return { id, treatment: '', description: '', period: '', origin: 'projected', currency, declaredValue: '', goodsCode: '', originCountry: '', importer: '', documentRef: '', documentDate: '', evidence: '', conditions: {}, }; } function validDate(value: string): boolean { const d = new Date(value + 'T00:00:00Z'); return ( /^\d{4}-\d{2}-\d{2}$/.test(value) && Number.isFinite(d.getTime()) && d.toISOString().slice(0, 10) === value ); } export function evaluateImportExemption( row: ImportExemptionRow, currency: unknown, ): ImportResult { const result: ImportResult = { id: row.id, status: 'indeterminate', importVat: null, reason: '', ...(isImportService(row.treatment) ? { serviceVat: null } : {}), }; const stop = ( reason: string, status: ImportResult['status'] = 'indeterminate', ) => ({ ...result, status, reason }); const rule = importExemptionRules.find((r) => r.id === row.treatment); if (!rule) return stop( 'Escolha o ramo aplicável; referência desconhecida ou em falta não concede isenção.', ); if (currency !== 'MZN' || row.currency !== currency) return stop( 'Moeda fora do âmbito MZN ou divergente do projecto; valores conservados, sem conversão.', ); if (!/^2026-(0[1-9]|1[0-2])$/.test(row.period)) return stop( isImportService(row.treatment) ? 'Indique o período do serviço em2026; a importação é identificada separadamente, sem inferir o mês do orçamento.' : 'Indique o período da importação em2026; não é inferido do mês do orçamento.', ); if (!['projected', 'effective'].includes(row.origin)) return stop('Indique dados efectivos ou pressupostos de projecção.'); const failed = rule.conditions.filter( ([key]) => row.conditions[key] === 'no', ); if (failed.length) return stop( 'Não se aplica esta isenção: ' + failed.map(([, label]) => label).join('; ') + '. O IVA fora deste fundamento permanece por enquadrar, sem taxa presumida.', 'not_applicable', ); const missing = rule.conditions.filter( ([key]) => row.conditions[key] !== 'yes', ); if (missing.length) return stop( 'Condições por indicar: ' + missing.map(([, label]) => label).join('; ') + '. Desconhecido não significa não aplicável nem IVA zero.', ); if ( isDevelopmentImport(row.treatment) && importDevelopmentFields.some(([key]) => !row[key]?.trim()) ) return stop( 'Identifique projecto, agência/acreditação, despacho favorável, lista aprovada, plano, âmbito desta importação e fundamento aduaneiro, ou os pressupostos expressos da projecção. Reutilize as referências documentais disponíveis; não é exigido novo certificado.', ); if ( row.treatment === 'authorized_investment_equipment' && (!row.investmentAuthorizationRef?.trim() || !row.investmentScope?.trim()) ) return stop( 'Identifique a autorização aplicável ao empreendimento e o seu âmbito nesta importação, ou os pressupostos expressos da projecção. Um pedido em preparação ou apresentado não equivale a autorização.', ); if ( isImportService(row.treatment) && (!row.serviceImportRef?.trim() || !row.serviceBaseRef?.trim() || !row.declaredValue.trim() || (row.treatment === 'accessory_service_first_destination' && !row.serviceFirstDestination?.trim())) ) return stop( 'Identifique a importação de bens, a referência da base que inclui o valor do serviço e o montante desta linha; no serviço acessório, indique o primeiro destino e o fundamento documental ou pressuposto.', ); if ( !row.description.trim() || !row.importer.trim() || !row.documentRef.trim() || !row.evidence.trim() ) return stop( isImportService(row.treatment) ? 'Identifique o serviço, importador destinatário, documento/previsão e fundamento factual da inclusão; sem exigir segunda validação da fonte oficial.' : 'Identifique bens, importador, documento aduaneiro ou previsão e o fundamento factual das condições; não é exigida segunda validação da fonte oficial.', ); if (!validDate(row.documentDate)) return stop( 'Data do documento/previsão em falta ou inválida; o período da importação é indicado separadamente.', ); if ( row.declaredValue.trim() && !/^\d{1,15}(\.\d{1,6})?$/.test(row.declaredValue.trim()) ) return stop( 'Valor declarado/previsional inválido; conserve o original e reveja, sem presumir base aduaneira ou imposto normal.', ); if (row.treatment === 'un_development_reduction') { const normal = developmentDecimal(row.developmentNormalVat), percent = developmentDecimal(row.developmentReductionPercent); if (percent === null) return stop( 'Indique a percentagem da redução de direitos identificada no fundamento; não é inferida da taxa aduaneira, do financiador ou do valor dos bens.', ); if (percent === 0n) return stop( 'Redução de direitos de0% não concede benefício proporcional de IVA neste fundamento; não se presume o imposto normal.', 'not_applicable', ); if (percent >= 100000000n) return stop( 'A redução parcial deve ser superior a0% e inferior a100%; para isenção integral use o tratamento próprio e as suas condições.', ); if (normal === null || !row.developmentNormalVatRef?.trim()) return stop( 'Indique o IVA desta importação sem benefício e a sua referência documental ou pressuposto; montante desconhecido não é zero e o portal não presume taxa/base aduaneira.', ); const vat = developmentExactMoney(normal * (100000000n - percent)); return { ...result, status: 'reduced', importVat: vat, reason: `Redução proporcional ${rule.article} nas condições ${row.origin === 'projected' ? 'expressamente assumidas na projecção' : 'efectivas declaradas'}. IVA informado sem benefício ${row.developmentNormalVat}MZN × (1 − ${row.developmentReductionPercent}/100) = ${vat}MZN. Proporção da redução de direitos, não taxa de IVA; aritmética decimal exacta, sem arredondamento fiscal presumido. Não calcula direitos/base aduaneira nem dedução.`, }; } if (isImportService(row.treatment)) return { ...result, status: 'exempt', serviceVat: '0.00', reason: `Isenção do serviço ${rule.article} nas condições ${row.origin === 'projected' ? 'expressamente assumidas na projecção' : 'efectivas declaradas'}. IVA do serviço:0.00MZN; não é o IVA dos bens importados, não soma novamente o serviço à base nem corrige factura ou dedução.`, }; return { ...result, status: 'exempt', importVat: '0.00', reason: `Isenção ${rule.article} nas condições ${row.origin === 'projected' ? 'expressamente assumidas na projecção' : 'efectivas declaradas'}. IVA na importação:0.00MZN por isenção, sem inferir direitos aduaneiros, certificação pela AT ou dedução.`, }; } function developmentDecimal(raw: unknown): bigint | null { if (typeof raw !== 'string' || !/^\d{1,15}(\.\d{1,6})?$/.test(raw.trim())) return null; const [whole, decimal = ''] = raw.trim().split('.'); return BigInt(whole) * 1000000n + BigInt(decimal.padEnd(6, '0')); } function developmentExactMoney(numerator: bigint): string { const scale = 100000000000000n; return `${numerator / scale}.${(numerator % scale).toString().padStart(14, '0').replace(/0+$/, '').padEnd(2, '0')}`; } function key( draft: Record, book: ImportExemptionBook, ): string { const base = { version: importExemptionVersion, scope: acquisitionScope(draft), location: draft.selection_labels ?? {}, currency: draft.currency, rows: book.rows, }; return JSON.stringify({ ...base, ...(book.rows.some((row) => isDevelopmentImport(row.treatment)) ? { developmentVersion: importDevelopmentVersion } : {}), ...(book.rows.some( (row) => row.treatment === 'authorized_investment_equipment', ) ? { investmentVersion: importInvestmentVersion } : {}), ...(book.rows.some((row) => beneficiaryImport(row.treatment)) ? { beneficiaryVersion: importBeneficiaryVersion } : {}), ...(book.rows.some((row) => assetImport(row.treatment)) ? { assetVersion: importAssetVersion } : {}), ...(book.rows.some((row) => customsImport(row.treatment)) ? { customsVersion: importCustomsVersion } : {}), ...(book.rows.some((row) => specialRegimeImport(row.treatment)) ? { specialRegimeVersion: importSpecialRegimeVersion } : {}), ...(book.rows.some((row) => supplyImport(row.treatment)) ? { supplyVersion: importSupplyVersion } : {}), ...(book.rows.some((row) => isImportService(row.treatment)) ? { serviceVersion: importServiceVersion } : {}), }); } export function importExemptionCurrent( draft: Record, book: ImportExemptionBook, ): boolean { return !!book.result && book.result.sourceKey === key(draft, book); } export function recordImportExemptions( draft: Record, book: ImportExemptionBook, ): ImportExemptionBook { if ( !book.rows.length || new Set(book.rows.map((r) => r.id)).size !== book.rows.length ) throw new Error( 'Indique importações com identificadores distintos; versões anteriores conservadas.', ); const result: ImportExemptionCalculation = { version: importExemptionVersion, revision: (book.result?.revision ?? 0) + 1, calculatedAt: new Date().toISOString(), opportunity: acquisitionScope(draft), location: JSON.stringify(draft.selection_labels ?? {}), sourceKey: key(draft, book), source: [ ...new Set(book.rows.map((row) => importRuleSource(row.treatment))), ].join(' | '), inputs: structuredClone(book.rows), rows: book.rows.map((row) => evaluateImportExemption(row, draft.currency), ), }; return { ...book, result, history: [ ...(book.history ?? []), ...(book.result ? [book.result] : []), ], }; } export function importExemptionReportRows( draft: Record, ): Array<[string, string, string, string]> { try { const book = importExemptionBook(draft), result = book.result; if (!result) return []; const context = `${result.opportunity}; ${result.location}; ${importExemptionCurrent(draft, book) ? 'Resultado actual' : 'Entradas alteradas; resultado histórico conservado'}; versão${result.revision}; ${result.calculatedAt}; ${result.source}`; return result.inputs.map((row, index) => [ 'IVA mensal', `${isImportService(row.treatment) ? 'Serviço associado à importação' : 'Importação'} ${importExemptionRules.find((r) => r.id === row.treatment)?.branch ?? row.treatment} — ${row.period} — ${row.id}`, `${row.description}; ${isImportService(row.treatment) ? 'IVA do serviço' : 'IVA na importação'}: ${(isImportService(row.treatment) ? result.rows[index].serviceVat : result.rows[index].importVat) ?? 'Indeterminado'} ${row.currency}; ${result.rows[index].reason}`, `${context}; ${row.origin === 'projected' ? 'Projecção' : 'Dados efectivos declarados'}; importador ${row.importer}; valor declarado/previsional ${row.declaredValue || 'Não informado'} ${row.currency}, sem fixar base aduaneira; ${isImportService(row.treatment) ? `importação associada ${row.serviceImportRef || 'por indicar'}; base com inclusão do serviço ${row.serviceBaseRef || 'por indicar'}; prestador ${row.serviceProvider || 'por indicar'}${row.treatment === 'accessory_service_first_destination' ? `; primeiro destino ${row.serviceFirstDestination || 'por indicar'}` : ''}` : `código ${row.goodsCode || 'não indicado'}; origem ${row.originCountry || 'não indicada'}`}${row.treatment === 'authorized_investment_equipment' ? `; autorização/pressuposto ${row.investmentAuthorizationRef || 'por indicar'}; âmbito aplicável ${row.investmentScope || 'por indicar'}` : ''}${isDevelopmentImport(row.treatment) ? `; ${importDevelopmentFields.map(([key, label]) => label + ': ' + (row[key] || 'por indicar')).join('; ')}${row.treatment === 'un_development_reduction' ? `; redução dos direitos ${row.developmentReductionPercent || 'por indicar'}%; IVA informado sem benefício ${row.developmentNormalVat || 'por indicar'} ${row.currency}; referência do IVA sem benefício ${row.developmentNormalVatRef || 'por indicar'}` : ''}` : ''}; documento ${row.documentRef},${row.documentDate}; condições ${(importExemptionRules.find((rule) => rule.id === row.treatment)?.conditions ?? []).map(([key, label]) => label + ': ' + (row.conditions[key] === 'yes' ? 'Sim' : row.conditions[key] === 'no' ? 'Não' : 'Por indicar')).join('; ')}; fundamento factual ${row.evidence}; campo11 e totaisModeloA não preenchidos por esta classificação.`, ]); } catch { return [ [ 'IVA mensal', 'Importações', 'Dados não recuperáveis', 'Originais preservados; sem substituir por zero.', ], ]; } }