101 lines
4.8 KiB
TypeScript
101 lines
4.8 KiB
TypeScript
import type { OperationTreatment } from './iva-operations.ts';
|
||
|
||
export type SupplyCategory =
|
||
| ''
|
||
| 'provisions'
|
||
| 'beverages'
|
||
| 'fuel'
|
||
| 'cargo_products';
|
||
export const supplyCategories: Array<[Exclude<SupplyCategory, ''>, string]> = [
|
||
[
|
||
'provisions',
|
||
'Provisões de bordo, excepto bebidas — consumo exclusivo da tripulação e passageiros',
|
||
],
|
||
[
|
||
'beverages',
|
||
'Bebidas como provisões de bordo — consumo exclusivo da tripulação e passageiros',
|
||
],
|
||
[
|
||
'fuel',
|
||
'Combustíveis, carburantes, lubrificantes ou outros produtos para propulsão ou aparelhos de uso técnico a bordo',
|
||
],
|
||
[
|
||
'cargo_products',
|
||
'Produtos acessórios para preparação, tratamento ou conservação das mercadorias transportadas a bordo',
|
||
],
|
||
];
|
||
const source =
|
||
'CIVA republicado Lei 13/2016, BR156/10.º suplemento, art.13(1)(c/d/e/h),13(2–3), PDF12/p.1426(270);19(1)(b)(i), PDF15/p.1426(273). Lei22/2022 art.1, PDF3/p.2252(27), e Lei10/2025 art.1, PDF12–13/p.2180(12)–(13), não alteram13 e mantêm19(1)(b)(i). Âmbito2026/MZN; bebidas em c/d/h não têm isenção directa automática:13(2) prevê dedução ou restituição, sem aplicar20(1)(d) para esse efeito.';
|
||
const make = (
|
||
id: string,
|
||
label: string,
|
||
letter: string,
|
||
conditions: string[],
|
||
): OperationTreatment => ({
|
||
id,
|
||
label,
|
||
field: '05',
|
||
rate: 0,
|
||
article: `CIVA arts.13(1)(${letter}),13(2–3),19(1)(b)(i)`,
|
||
source,
|
||
logicVersion: 'onboard-supplies/1',
|
||
conditions: [
|
||
'Transmissão de bens localizada em Moçambique, com territorialidade identificada; não importação nem serviço autónomo',
|
||
'Bens efectivamente postos a bordo do meio identificado; natureza e destino correspondem à categoria escolhida do artigo13(3), sustentados pelo documento ou pressuposto expresso da projecção',
|
||
...conditions,
|
||
],
|
||
});
|
||
export const onboardSupplyTreatments: OperationTreatment[] = [
|
||
make(
|
||
'onboard_seagoing_ship',
|
||
'Abastecimento de embarcação de navegação marítima em alto mar',
|
||
'c',
|
||
[
|
||
'Embarcação identificada que efectua navegação marítima em alto mar e assegura transporte remunerado de passageiros ou actividade comercial, industrial ou de pesca; utilização identificada, não qualquer barco de recreio',
|
||
],
|
||
),
|
||
make(
|
||
'onboard_rescue_coastal_ship',
|
||
'Abastecimento de embarcação de salvamento, assistência marítima ou pesca costeira',
|
||
'd',
|
||
[
|
||
'Embarcação identificada de salvamento, assistência marítima ou pesca costeira; actividade identificada, não presumida pelo nome do operador',
|
||
],
|
||
),
|
||
make(
|
||
'onboard_departing_warship',
|
||
'Abastecimento de embarcação de guerra com destino estrangeiro',
|
||
'e',
|
||
[
|
||
'Embarcação de guerra identificada que deixa o país com destino a porto ou ancoradouro situado no estrangeiro; saída e destino identificados, não simples utilização militar',
|
||
],
|
||
),
|
||
make(
|
||
'onboard_international_aircraft',
|
||
'Abastecimento de avião de companhia principalmente internacional',
|
||
'h',
|
||
[
|
||
'Avião identificado utilizado por companhia de navegação aérea que se dedica principalmente ao tráfego internacional nos termos de13(1)(g); companhia e utilização identificadas, não apenas um voo internacional isolado',
|
||
],
|
||
),
|
||
];
|
||
export function isOnboardSupply(id: string): boolean {
|
||
return onboardSupplyTreatments.some((rule) => rule.id === id);
|
||
}
|
||
export function onboardSupplyIssue(
|
||
id: string,
|
||
category: unknown,
|
||
): string | null {
|
||
if (!isOnboardSupply(id)) return null;
|
||
if (!supplyCategories.some(([value]) => value === category))
|
||
return 'Identifique a natureza do abastecimento segundo o artigo13(3). Informação em falta não significa ausência de bebidas ou provisões; nenhum montante fiscal foi presumido.';
|
||
if (
|
||
id === 'onboard_rescue_coastal_ship' &&
|
||
(category === 'provisions' || category === 'beverages')
|
||
)
|
||
return 'As provisões de bordo estão excluídas da isenção de13(1)(d), incluindo bebidas, nas embarcações de salvamento, assistência marítima e pesca costeira. Esta isenção não se aplica; o tratamento fiscal alternativo deve ser identificado, sem presumir taxa ou zero.';
|
||
if (category === 'beverages' && id !== 'onboard_departing_warship')
|
||
return 'Bebidas em13(1)(c/h):13(2) prevê isenção por dedução ou restituição, não isenção directa deste fornecimento; para esse efeito não se aplica20(1)(d). O montante liquidado e o procedimento aplicável não são determinados neste incremento: sem crédito, restituição, taxa ou zero automáticos. Conserve o preço e identifique o tratamento antes do apuramento.';
|
||
return null;
|
||
}
|