import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newNoncashBase, switchNoncashComposition, noncashBaseBook, noncashBaseConditions, noncashBaseCurrent, noncashBaseReportRows, noncashBaseSource, noncashBaseTreatments, recordNoncashBases, saveNoncashBaseBook, type NoncashBaseBook, type NoncashBaseRow, } from '@/lib/iva-noncash-base'; export function SimulationNoncashBase({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: NoncashBaseBook; try { book = noncashBaseBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: NoncashBaseBook) => { try { onChange('modelo_a_snapshot', saveNoncashBaseBook(draft, next)); setError(''); } catch (cause) { setError(String(cause)); } }; const change = (id: string, patch: Partial) => save({ ...book, rows: book.rows.map((row) => row.id === id ? { ...row, ...patch } : row, ), }); return (
Base tributável — contraprestação não monetária total ou parcial

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Identifique a operação e os bens ou serviços dados em troca como contraprestação. Se houver parte em dinheiro,some o montante recebido ou a receber ao valor normal desses bens ou serviços;se não houver,confirme expressamente a ausência dessa parte.

O valor normal deve ter fundamento e âmbito correspondentes ao artigo15(4),incluindo concorrência normal,fornecedor independente,estádio de comercialização e tempo/lugar da operação ou mais próximos. Reutilize referências existentes ou indique pressupostos de projecção. O portal não avalia automaticamente bens ou serviços. Indique montantes sem o próprio IVA e sem duplicar elementos da composição. Base e IVA são resultados distintos.

{noncashBaseSource}

{error &&

{error}

} {book.rows.map((row) => { const rule = noncashBaseTreatments.find( (item) => item.id === row.treatment, ); return (
{row.description || 'Operação por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ ['description', 'Operação identificada'], [ 'exchangeDescription', 'Bens ou serviços dados em troca como contraprestação', ], [ 'agreementRef', 'Acordo / referência da previsão', ], [ 'documentRef', 'Documento da operação / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], ['period', 'Mês da operação'], ['currency', 'Moeda de origem'], [ 'valuationRef', 'Fundamento do valor normal / pressuposto', ], [ 'valuationScope', 'Âmbito do valor normal: bens/serviços, estádio, tempo, lugar e condições', ], [ 'compositionRef', 'Referência da composição sem IVA — inclusões e exclusões aplicáveis', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {rule && ( )} {row.treatment === 'cash_and_noncash' && ( <> )}

Mudar a composição conserva valores e documentos,mas exige rever a presença ou ausência da parte monetária. Os valores ocultos e as versões anteriores mantêm-se;um campo vazio não confirma ausência de dinheiro.

{rule ? (
Condições próprias desta operação {noncashBaseConditions.map(([key, label]) => ( ))}
) : (

Escolha a composição para apresentar os montantes aplicáveis;os valores anteriores conservam-se.

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

{noncashBaseCurrent(draft, book) ? 'Bases de contraprestação correspondentes às entradas guardadas.' : 'Entradas alteradas;bases de contraprestação históricas conservadas. Reveja e determine novamente.'}{' '} {book.history?.length ?? 0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.

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