166 lines
7.1 KiB
TypeScript
166 lines
7.1 KiB
TypeScript
import {
|
||
modeloAFields,
|
||
modeloAPurchaseReferences,
|
||
modeloAReference,
|
||
} from '@/lib/iva-modelo-a';
|
||
|
||
export function SimulationModeloA({
|
||
draft,
|
||
}: {
|
||
draft: Record<string, unknown>;
|
||
}) {
|
||
let purchases: ReturnType<typeof modeloAPurchaseReferences> = [];
|
||
let error = '';
|
||
try {
|
||
purchases = modeloAPurchaseReferences(draft);
|
||
} catch (cause) {
|
||
error =
|
||
cause instanceof Error
|
||
? cause.message
|
||
: 'Não foi possível consultar as aquisições projectadas.';
|
||
}
|
||
return (
|
||
<section
|
||
aria-label="Correspondência com o Modelo A"
|
||
className="space-y-3 rounded border p-3"
|
||
>
|
||
<h4 className="font-semibold">
|
||
Modelo A — correspondência da simulação
|
||
</h4>
|
||
<p>{modeloAReference.status}</p>
|
||
<p>
|
||
Esta correspondência descreve a componente de vendas01/02.
|
||
Consulte o bloco de compras e apuramento parcial para os
|
||
campos08–10 e14–18, que só são determinados com as parcelas
|
||
necessárias completas. O IVA das vendas não é imposto final a
|
||
pagar.
|
||
</p>
|
||
<details>
|
||
<summary>
|
||
Aquisições já projectadas — sem dedução presumida
|
||
</summary>
|
||
<p>
|
||
Reutilizam-se os valores das compras/encomendas para
|
||
existências do plano. O mês da encomenda não prova a data da
|
||
factura, recepção ou pagamento. Valores declarados ainda sem
|
||
indicação de base líquida/IVA incluído não são tratados como
|
||
base tributável. IVA suportado e IVA dedutível continuam por
|
||
determinar; zero de compras não prova inexistência de outras
|
||
aquisições.
|
||
</p>
|
||
{error && <p role="alert">{error}</p>}
|
||
{!purchases.length && !error && (
|
||
<p>
|
||
Sem agenda de compras recuperável do plano empresarial.
|
||
</p>
|
||
)}
|
||
{!!purchases.length && (
|
||
<div className="overflow-x-auto">
|
||
<table className="min-w-full text-sm">
|
||
<caption>
|
||
Pressupostos actuais de compras; sem resultado
|
||
fiscal guardado
|
||
</caption>
|
||
<thead>
|
||
<tr>
|
||
{[
|
||
'Mês do plano',
|
||
'Compras declaradas',
|
||
'Sem IVA',
|
||
'IVA suportado',
|
||
'Com IVA',
|
||
'IVA dedutível',
|
||
].map((name) => (
|
||
<th
|
||
className="p-2 text-left"
|
||
key={name}
|
||
>
|
||
{name}
|
||
</th>
|
||
))}
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{purchases.map((row) => (
|
||
<tr key={row.month}>
|
||
<th className="p-2" scope="row">
|
||
{row.month}
|
||
</th>
|
||
<td>
|
||
{row.declared ?? 'Sem informação'}
|
||
</td>
|
||
<td>Por classificar</td>
|
||
<td>Indeterminado</td>
|
||
<td>Por classificar</td>
|
||
<td>Indeterminado</td>
|
||
</tr>
|
||
))}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
)}
|
||
</details>
|
||
<details>
|
||
<summary>
|
||
Ver campos, cálculos, fundamentos e cobertura do Modelo A
|
||
</summary>
|
||
<p>
|
||
{modeloAReference.file}. {modeloAReference.edition} SHA256:{' '}
|
||
{modeloAReference.sha256}.
|
||
</p>
|
||
<p>
|
||
O exemplar contém divergências de numeração/remissões,
|
||
registadas no confronto documental. Não foram corrigidas no
|
||
original. A existência de um campo não activa uma regra
|
||
fiscal.
|
||
</p>
|
||
<div className="overflow-x-auto">
|
||
<table className="min-w-full text-sm">
|
||
<caption>
|
||
Campo do Modelo A → finalidade → origem → cálculo →
|
||
fundamento → cobertura
|
||
</caption>
|
||
<thead>
|
||
<tr>
|
||
{[
|
||
'Campo',
|
||
'Finalidade',
|
||
'Origem dos dados',
|
||
'Cálculo',
|
||
'Fundamento',
|
||
'Estado',
|
||
].map((name) => (
|
||
<th className="p-2 text-left" key={name}>
|
||
{name}
|
||
</th>
|
||
))}
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{modeloAFields.map((field) => (
|
||
<tr key={field.field}>
|
||
{[
|
||
field.field,
|
||
field.purpose,
|
||
field.origin,
|
||
field.calculation,
|
||
field.basis,
|
||
field.status,
|
||
].map((value, index) => (
|
||
<td
|
||
className="border-t p-2 align-top"
|
||
key={index}
|
||
>
|
||
{value}
|
||
</td>
|
||
))}
|
||
</tr>
|
||
))}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</details>
|
||
</section>
|
||
);
|
||
}
|