import {FiscalProofParcelFields} from './fiscal-proof-parcel';
import {newPecPayment, pecSource, type PecPayment} from '@/lib/irpc-pec';
import type {AnnualBook} from '@/lib/irpc-annual-settlement';
export function SimulationIrpcPec({book, save}: {book: AnnualBook; save: (book: AnnualBook) => void}) {
const detail = book.pecPayments;
if (!detail) return
PEC — comprovativos do próprio exercício O resumo anterior fica conservado. Preparar o detalhe permite reconciliar os pagamentos efectivos e deduzi-los até à colecta disponível, sem reembolso do excedente PEC.
save({...book, pecPayments: {version: 1, state: book.pec.state, reference: book.pec.reference, rows: []}})}>Preparar detalhe PEC ;
const update = (next: typeof detail) => save({...book, pecPayments: next});
return PEC — pagamentos efectivamente comprovados
{pecSource}
Identifique a natureza PEC no comprovativo. As utilizações anteriores exigem valor e suporte; zero conhecido é diferente de informação em falta. A parcela seleccionada não pode exceder o comprovado menos o já utilizado. Saldos de anos anteriores, cálculo da obrigação e créditos próprios permanecem separados.
Estado dos PEC update({...detail, state: e.target.value as typeof detail.state})}>Informação em falta Pagamentos conhecidos Ausência declarada com suporte
Suporte do inventário PEC update({...detail, reference: e.target.value})}/>
update({...detail, state: 'known', rows: [...detail.rows, {...newPecPayment(crypto.randomUUID()), subjectNuit: book.subjectNuit, year: book.year}]})}>Registar comprovativo PEC
{detail.rows.map((r, index) => {
const change = (p: Partial) => update({...detail, rows: detail.rows.map(x => x.id === r.id ? {...x, ...p} : x)});
return PEC {index + 1}
{([['document', 'Comprovativo PEC'], ['issuer', 'Emitente'], ['date', 'Data (AAAA-MM-DD)'], ['subjectNuit', 'NUIT beneficiário'], ['year', 'Exercício de origem'], ['currency', 'Moeda'], ['proofAmount', 'Montante comprovado'], ['previouslyUsed', 'Já utilizado fora destas parcelas'], ['priorUseReference', 'Suporte das utilizações anteriores ou do zero conhecido'], ['amount', 'Parcela disponível seleccionada'], ['reference', 'Suporte do pagamento PEC e afectação']] as const).map(([key, label]) => {label} change({[key]: e.target.value})}/> )}
Pagamento PEC efectivamente comprovado change({effective: e.target.value as PecPayment['effective']})}>Informação em falta Sim — natureza PEC e pagamento reconciliados Não — previsão ou outra natureza
update({...detail, rows: detail.rows.filter(x => x.id !== r.id)})}>Retirar selecção PEC {index + 1}
;
})}
O detalhe substitui o resumo PEC apenas nesta execução. Os comprovativos e resultados de execuções anteriores permanecem no histórico; não há consumo automático de saldos oficiais.
;
}