import {useState} from 'react'; import {newExclusionBase,newExclusionPart,switchExclusionPart,exclusionBook,exclusionConditions,exclusionCurrent,exclusionReportRows,exclusionBaseSource,exclusionTreatments,partConditions,recordExclusions,saveExclusionBook,type ExclusionBook,type ExclusionRow,type ExclusionPart} from '@/lib/iva-exclusion-base'; export function SimulationExclusionBase({draft,onChange}:{draft:Record;onChange:(field:string,value:string)=>void}){ const[error,setError]=useState('');let book:ExclusionBook; try{book=exclusionBook(draft);}catch(cause){return

{String(cause)}

;} const save=(next:ExclusionBook)=>{try{onChange('modelo_a_snapshot',saveExclusionBook(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 — exclusões da contraprestação

Oportunidade: {String(draft.context_opportunity||'entrada geral')}. Prepare uma composição por operação,partindo do montante sem próprio IVA e com as inclusões aplicáveis já consideradas. Identifique as parcelas e se ainda estão incluídas;subtraia apenas essas parcelas,sem segunda exclusão.

Cada tratamento tem condições próprias. Indemnização judicial não é qualquer compensação;desconto deve estar concedido;pagamento por conta alheia exige nome/conta do adquirente e adequadas contas de terceiros. Nas embalagens,não se exige devolução já realizada:confira a não transmissão,a indicação separada e a menção de devolução acordada. Reutilize documentos ou declare pressupostos de projecção. Base não é IVA nem regularização.

{exclusionBaseSource}

{error&&

{error}

} {book.rows.map(row=>{const partChange=(id:string,patch:Partial)=>change(row.id,{parts:row.parts.map(p=>p.id===id?{...p,...patch}:p)});return
{row.description||'Operação por identificar'} — {row.period||'mês por indicar'}
{([['description','Operação identificada'],['operationRef','Referência da operação / pressuposto'],['initialAmount','Montante inicial sem próprio IVA (moeda indicada)'],['initialRef','Referência do montante inicial e da sua composiçã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'],['exclusionRef','Referência da composição e exclusões aplicáveis'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=>)}
Condições das exclusões{exclusionConditions.map(([key,label])=>)}
{row.parts.map(part=>
{part.description||'Parcela por identificar'} {([['description','Descrição da parcela'],['amount','Montante da parcela sem próprio IVA (moeda indicada)'],['reference','Referência da parcela / pressuposto']] as const).map(([field,label])=>)} {part.treatment==='third_party_payment'&&<>} {part.treatment==='returnable_packaging'&&} {partConditions(part.treatment).map(([key,label])=>)}

Mudar a natureza conserva os montantes e referências,mas exige rever a correspondência da parcela. Cada parcela será excluída uma única vez nesta operação. Os campos sem aplicação ficam ocultos e conservados.

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

{exclusionCurrent(draft,book)?'Exclusões correspondentes às entradas guardadas.':'Entradas alteradas;exclusões 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.

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