163 lines
47 KiB
TypeScript
163 lines
47 KiB
TypeScript
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<Record<Condition,Choice>>;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<string,unknown>;importExemptions?:Record<string,ImportExemptionBook>;[key:string]:unknown};
|
||
function store(draft:Record<string,unknown>):Store {
|
||
const value:Store=draft.modelo_a_snapshot?JSON.parse(String(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<string,unknown>):ImportExemptionBook {return store(draft).importExemptions?.[acquisitionScope(draft)]??{rows:[]};}
|
||
export function saveImportExemptionBook(draft:Record<string,unknown>,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<string,unknown>,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<string,unknown>,book:ImportExemptionBook):boolean {return !!book.result&&book.result.sourceKey===key(draft,book);}
|
||
export function recordImportExemptions(draft:Record<string,unknown>,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<string,unknown>):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.']];}
|
||
}
|