import { useState } from 'react'; import { ispcEligibilityBook, ispcEligibilityCurrent, } from '@/lib/ispc-eligibility'; import { ispcQuarterBook, saveIspcQuarterBook, recordIspcQuarter, ispcQuarterReportRows, type IspcQuarterInput, type IspcQuarterBook, } from '@/lib/ispc-quarter'; export function SimulationIspcQuarter({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); if (draft.fiscal_component !== 'ispc') return null; try { if (ispcEligibilityBook(draft).input.mode === 'occasional') return (

Actividade habitual:campos trimestrais conservados no histórico. Use o percurso de operações ocasionais próprias abaixo.

); } catch { /* Preserve the existing explicit recovery error below. */ } let book: IspcQuarterBook; try { book = ispcQuarterBook(draft); } catch (e) { return

{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: Partial) => save({ ...book, input: { ...i, ...patch } }); let service = false, ready = false; try { const e = ispcEligibilityBook(draft); ready = ispcEligibilityCurrent(draft, e) && e.result?.status === 'compatible'; service = e.input.activities.some((a) => ['services12', 'liberal15'].includes(a), ); } catch { /* Show explicit preparation issue below, never fabricate eligibility. */ } return (

ISPC — apuramento trimestral

Reutiliza 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}

}
{i.sales.map( (v, n) => (n < Number(i.quarter) || (i.annualBandOrigin === 'closed_year' && !service)) && (
Trimestre {n + 1} {n + 1 === Number(i.quarter) ? ' — a apurar' : ' — acumulado anterior'}
), )}
{!service && (
Escalão anual da actividade — distinto do volume de acesso

Os limites de 1.000.000 / 2.500.000 / 4.000.000 MZN são anuais. A taxa do escalão é aplicada à base do trimestre; não dividir os limites por quatro. O excesso anual tem taxa própria de 20%.

)} {ispcQuarterReportRows(draft).map((r, n) => (

{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.

); }