59 lines
5.9 KiB
TypeScript
59 lines
5.9 KiB
TypeScript
import type { OperationTreatment } from './iva-operations.ts';
|
||
|
||
export const specialRegimeOptions = [
|
||
['economic_zone', 'Zona económica especial'],
|
||
['free_zone', 'Zona franca'],
|
||
['free_warehouse', 'Depósito franco'],
|
||
['general_free_warehouse', 'Depósito geral franco'],
|
||
['customs_warehouse', 'Depósito de regime aduaneiro'],
|
||
['duty_free_shop', 'Loja franca'],
|
||
['transit', 'Trânsito'],
|
||
['drawback', 'Draubaque'],
|
||
['temporary_import', 'Importação temporária'],
|
||
] as const;
|
||
export type SpecialRegime = '' | typeof specialRegimeOptions[number][0];
|
||
const zoneRegimes: readonly string[] = specialRegimeOptions.slice(0,6).map(([id])=>id);
|
||
const transitRegimes: readonly string[] = ['transit','drawback','temporary_import'];
|
||
const source = 'CIVA republicado Lei13/2016, BR156/10.º suplemento,14(1)(b/c/d) e condição inicial de14(1),PDF13/p.1426(271);19(1)(b)(iv),PDF15/p.1426(273). Lei22/2022art.1,PDF1, e Lei10/2025art.1,PDF12–13/p.2180(12)–(13),não alteram14 nem19(1)(b)(iv). Âmbito2026/MZN; não calcula importação14(1)(a), aquisição14(2), saída de regime, direitos aduaneiros ou dedução automática de compras.';
|
||
const make = (id:string,label:string,letter:string,conditions:string[]):OperationTreatment => ({id,label,field:'05',rate:0,article:`CIVA arts.14(1)(${letter}),19(1)(b)(iv)`,source,logicVersion:'special-regimes/1',conditions:[
|
||
'Transmissão de bens ou prestação de serviços abrangida pelo CIVA em Moçambique, com territorialidade identificada; não o próprio acto de importação nem aquisição pelo beneficiário',
|
||
'Os bens a que a operação se refere não têm utilização nem consumo finais nas áreas mencionadas em14(1); destino efectivo ou pressuposto expresso da projecção identificado, sem o presumir pela localização no mapa',
|
||
...conditions,
|
||
]});
|
||
export const specialRegimeTreatments:OperationTreatment[] = [
|
||
make('regime_dispatch_goods','Bens expedidos para zona ou depósito elegível','b',[
|
||
'Transmissão de bens expedidos ou transportados para zona ou depósito mencionado em14(1)(a); bens, destino e regime identificados no documento ou pressuposto expresso. A indicação de loja franca por si não comprova esse destino: identifique a zona ou depósito aplicável a esta expedição',
|
||
'A colocação/introdução dos bens corresponde ao regime escolhido, sob controlo alfandegário e disposições especificamente aplicáveis de14(1)(a); não basta o endereço do destinatário ou o cadastro da zona',
|
||
]),
|
||
make('regime_dispatch_transport','Transporte directamente conexo à expedição para zona ou depósito','b',[
|
||
'Prestação de serviço de transporte directamente conexa à transmissão de bens expedidos ou transportados para zona ou depósito de14(1)(a); transmissão, bens, destino e ligação concreta identificados. A indicação de loja franca por si não comprova esse destino: identifique a zona ou depósito aplicável a esta expedição',
|
||
'Regime de destino e disposições especificamente aplicáveis de14(1)(a) identificados; preço desta linha é apenas o transporte, sem duplicar o valor dos bens; não qualquer serviço ao destinatário',
|
||
]),
|
||
make('regime_internal_goods','Transmissão de bens dentro de regime de zona ou depósito','c',[
|
||
'Transmissão de bens efectuada num regime de14(1)(a),com bens, regime e controlo/disposições aplicáveis identificados no documento ou pressuposto expresso',
|
||
'Os bens permanecem nessa situação no momento/período da operação; não saída do regime nem venda para consumo final na área',
|
||
]),
|
||
make('regime_internal_services','Serviço directamente conexo à transmissão de bens em regime','c',[
|
||
'Prestação de serviços directamente conexa a transmissão de bens efectuada em regime de14(1)(a); bens, transmissão, regime e ligação concreta identificados, não qualquer serviço executado na zona',
|
||
'Os bens permanecem nessa situação no momento/período da operação; preço desta linha é apenas o serviço, sem duplicar o valor dos bens; não saída do regime nem consumo final',
|
||
]),
|
||
make('regime_transit_goods','Bens em trânsito, draubaque ou importação temporária','d',[
|
||
'Transmissão de bens que se encontram no regime escolhido de trânsito, draubaque ou importação temporária; bens e enquadramento identificados no documento ou pressuposto expresso, não o próprio acto de importação',
|
||
'A operação continua considerada abrangida pelo regime no momento/período indicado; não regime terminado nem mera passagem geográfica dos bens',
|
||
]),
|
||
make('regime_transit_transport','Transporte directamente conexo a bens em trânsito, draubaque ou importação temporária','d',[
|
||
'Prestação de serviço de transporte directamente conexa à transmissão de bens em trânsito, draubaque ou importação temporária; bens, operação e ligação concreta identificados',
|
||
'A operação continua abrangida pelo regime no momento/período indicado; preço desta linha é apenas o transporte, sem duplicar o valor dos bens; não transporte genérico nem regime terminado',
|
||
]),
|
||
];
|
||
export function isSpecialRegime(id:string):boolean { return specialRegimeTreatments.some(rule=>rule.id===id); }
|
||
export function specialRegimesFor(id:string):Array<typeof specialRegimeOptions[number]> {
|
||
const allowed=id.startsWith('regime_transit_')?transitRegimes:zoneRegimes;
|
||
return isSpecialRegime(id)?specialRegimeOptions.filter(([value])=>allowed.includes(value)):[];
|
||
}
|
||
export function specialRegimeIssue(id:string,regime:unknown):string|null {
|
||
if(!isSpecialRegime(id))return null;
|
||
if(!specialRegimesFor(id).some(([value])=>value===regime))return 'Identifique o regime aplicável a esta operação do artigo14(1). Regime desconhecido ou de outra alínea não comprova isenção; a localização não o substitui. Conserve preço, moeda e período; apuramento indeterminado.';
|
||
return null;
|
||
}
|