{String(e)}
;} + const i=book.input,save=(next:IspcEligibilityBook)=>{try{onChange('modelo_a_snapshot',saveIspcEligibilityBook(draft,next));setError('');}catch(e){setError(String(e));}},change=(patch:PartialAvaliação preliminar para 2026, em MZN, segundo a Lei 9/2025. Distingue condições de acesso, opção e cálculo do imposto. Guarde esta avaliação e prossiga no apuramento trimestral abaixo.
+ {error&&{error}
} + {diff.length>0&&} + {reusePreview&&} +{ispcEligibilityCurrent(draft,book)?'Resultado correspondente às entradas guardadas.':'Entradas alteradas; resultado histórico preservado. Reveja e guarde nova avaliação.'}
} + {ispcEligibilityReportRows(draft).map((r,index)=>{r[1]}: {r[2]}{r[3]}
)} +{String(e)}
;} + const i=book.input,save=(b:IspcQuarterBook)=>{try{onChange('modelo_a_snapshot',saveIspcQuarterBook(draft,b));setError('');}catch(e){setError(String(e));}},change=(patch:PartialReutiliza o enquadramento e a opção guardados. Declare o volume de todas as actividades do sujeito passivo em MZN; custos e IVA de aquisições não reduzem esta base. Dados em falta permanecem indeterminados.
{!ready&&Reveja e guarde primeiro a avaliação de enquadramento acima. As entradas trimestrais e o histórico ficam conservados.
}{error&&{error}
} + + +{r[1]}: {r[2]}{r[3]}
)} +Preparação para a declaração periódica dos artigos 10/11. Este cálculo não submete formulários nem efectua pagamentos. Retenção na fonte em aquisições ocasionais tem registo e base próprios.
Registe apenas aquisições do mesmo trimestre. O acumulado anterior cobre todas as aquisições desta via no ano e evita reutilizar o limite por fornecedor ou oportunidade.
{(['quarter','base','priorAnnualPurchases','reference'] as const).map(k=>)}{(['naturalOccasional','unregistered','related']as const).map(k=>)}>}{ispcWithholdingReportRows(draft).map((r,n)=>{r[1]}: {r[2]}{r[3]}
)}{String(e)}
;} +} diff --git a/resources/js/lib/ispc-eligibility.ts b/resources/js/lib/ispc-eligibility.ts new file mode 100644 index 00000000..d87e1665 --- /dev/null +++ b/resources/js/lib/ispc-eligibility.ts @@ -0,0 +1,63 @@ +import {acquisitionScope} from './iva-acquisitions.ts'; +import {decimalFraction,fractionPresentation,type FiscalFraction} from './fiscal-rational.ts'; + +export const ispcEligibilitySource='L4-A:Lei9/2025,BR248/1.ºsuplemento,republicaçãoISPC,arts2–5,9-A/13;PDF10–11/p2180(10–11);vigência2026art6/PDF9. Enquadramento preliminar de actividade habitual;opção separada;sem liquidação trimestral,retenção,submissão ou alteração de IVA/IRPC/IRPS.'; +export const ispcActivities=[['forestry','Silvícola'],['fishery','Pesqueira'],['livestock','Pecuária'],['agriculture','Agrícola'],['poultry','Avícola'],['beekeeping','Apícola'],['industry','Industrial'],['commerce','Comercial'],['craft','Artesanato'],['services12','Serviços do artigo8(1)b'],['liberal15','Profissão liberal do artigo8(1)c'],['other','Outra actividade,fora dos âmbitos identificados']] as const; +export type IspcActivity=typeof ispcActivities[number][0]; +type Choice=''|'yes'|'no'; +export type IspcEligibilityInput={entityRef:string;personType:''|'singular'|'collective';origin:'projected'|'effective';assessmentDate:string;currency:string;mode:'regular'|'occasional';activities:IspcActivity[];activityDescription:string;territory:Choice;establishments:string;basis:''|'previous_year'|'start_forecast';referenceYear:string;annualReference:string;annualReferenceRef:string;forecastConfirmed:Choice;forecastConfirmationRef:string;organizedRequired:Choice;sharesInIspc:Choice;sharesAnonymous:Choice;otherActivities:Choice;unlistedServices:Choice;liberalDaysSameEntity:string;liberalClientRef:string;generalRegimeChosen:Choice;generalThreeYearsCompleted:Choice;generalRegimeRef:string;option:'preparation'|'opted'|'not_opted';optionReference:string;optionDate:string}; +export type IspcEligibilityResult={calculatedAt:string;key:string;scope:string;input:IspcEligibilityInput;status:'compatible'|'incompatible'|'indeterminate';reason:string;missing:string[];annualReference:FiscalFraction|null;optionStatus:'preparation'|'recorded'|'not_opted'|'indeterminate';optionReason:string;source:string}; +export type IspcEligibilityBook={version:1;input:IspcEligibilityInput;result?:IspcEligibilityResult;history?:IspcEligibilityResult[]}; +const scope=(d:Record