import { useState } from 'react'; import { digitalBook, digitalConditions, digitalCurrent, digitalReportRows, digitalSource, digitalTreatments, newDigitalRow, recordDigital, saveDigitalBook, switchDigitalKind, switchDigitalTreatment, type DigitalBook, type DigitalRow, } from '@/lib/iva-digital'; export function SimulationDigital({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: DigitalBook; try { book = digitalBook(draft); } catch (e) { return

{String(e)}

; } const save = (next: DigitalBook) => { try { onChange('modelo_a_snapshot', saveDigitalBook(draft, next)); setError(''); } catch (e) { setError(String(e)); } }; const change = (id: string, patch: Partial) => save({ ...book, rows: book.rows.map((r) => (r.id === id ? { ...r, ...patch } : r)), }); return (
Bens e serviços digitais — natureza, localização e obrigações

Distinga o activo transmitido da funcionalidade prestada. O nome comercial, a moeda, a nacionalidade ou um servidor não determinam sozinhos o tratamento. Reutilize as referências da operação e os documentos disponíveis.

Localização não concede isenção nem calcula IVA ou dedução. A identificação do responsável não apresenta uma declaração nem inicia pagamento. As formalidades remetidas para regulamentação ficam assinaladas.

Cobertura digital deste incremento:{' '} identificação da natureza, localização, responsável, rascunho, histórico e relatório. As formalidades regulamentares ainda não cotejadas — modelos da declaração e do mapa de retenções, procedimentos de entrega e pagamento — não estão automatizadas. Não representa cobertura digital integral nem calcula imposto ou dedução.

{digitalSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Operação digital por identificar'}{' '} — {row.period || 'mês por indicar'}
{row.kind && ( )} {( [ [ 'description', 'Operação digital identificada', ], [ 'operationRef', 'Referência da operação / pressuposto', ], [ 'operationDate', 'Data da operação / prevista', ], ['period', 'Mês da operação'], [ 'subjectRef', 'Objecto, direitos transmitidos ou funcionalidade prestada', ], [ 'natureRef', 'Fundamento da distinção bem/serviço e natureza digital', ], [ 'useRef', 'Destinatário e utilização / pressuposto', ], [ 'documentRef', 'Documento existente / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], [ 'scope', 'Âmbito: operação, bens/serviços, período e condições', ], [ 'evidence', 'Factos disponíveis / pressupostos expressos', ], [ 'buyerPlace', 'Estabelecimento ou domicílio do adquirente', ], [ 'buyerRef', 'Referência do estabelecimento ou domicílio adquirente', ], ] as const ).map(([field, label]) => ( ))} {row.buyerCountry !== 'foreign' && ( <> )} {row.buyerCountry === 'MZ' && row.providerCountry === 'foreign' && ( <>

A qualidade fiscal serve para identificar o responsável; a sua falta não transforma a localização nacional em operação estrangeira.

{row.buyerTaxable === 'no' && ( <> {row.representative === 'yes' && ( <> )} {row.representative === 'no' && ( <> )} )} )} {row.buyerCountry === 'MZ' && row.providerCountry === 'MZ' && ( <> {row.kind === 'goods' && ( <> )} )}
Factos próprios da natureza escolhida {digitalConditions(row.kind).map(([key, label]) => ( ))}

Mudar natureza ou tratamento conserva referências e campos ocultos; reveja as confirmações próprias. Os dados não são copiados de outra oportunidade.

))} {!!book.rows.length && ( )} {book.result && ( <>

{digitalCurrent(draft, book) ? 'Resultados correspondem às entradas guardadas.' : 'Entradas alteradas; resultados históricos conservados. Reveja o delta afectado.'}{' '} {book.history?.length ?? 0} versões anteriores. Sem cálculo de IVA ou dedução.

{digitalReportRows(draft).map( ([, label, value, origin], i) => (
{label}
{value} {origin}
), )}
)}
); }