164 lines
6.1 KiB
TypeScript
164 lines
6.1 KiB
TypeScript
import type { FiscalClaimEvents } from '@/lib/fiscal-claim-events';
|
|
export function FiscalClaimEventsFields({
|
|
value: r,
|
|
onChange,
|
|
}: {
|
|
value: FiscalClaimEvents;
|
|
onChange: (p: Partial<FiscalClaimEvents>) => void;
|
|
}) {
|
|
return (
|
|
<>
|
|
<label>
|
|
Referência do pedido ou preparação
|
|
<input
|
|
value={r.requestReference}
|
|
onChange={(e) =>
|
|
onChange({ requestReference: e.target.value })
|
|
}
|
|
/>
|
|
</label>
|
|
<label>
|
|
Data do pedido ou prevista
|
|
<input
|
|
type="date"
|
|
value={r.requestDate}
|
|
onChange={(e) => onChange({ requestDate: e.target.value })}
|
|
/>
|
|
</label>
|
|
<label>
|
|
Situação do pedido
|
|
<select
|
|
value={r.stage}
|
|
onChange={(e) =>
|
|
onChange({
|
|
stage: e.target.value as FiscalClaimEvents['stage'],
|
|
})
|
|
}
|
|
>
|
|
<option value="preparation">
|
|
Em preparação — sem submissão
|
|
</option>
|
|
<option value="submitted">
|
|
Apresentado fora doInvesteMoz — registo declarado
|
|
</option>
|
|
</select>
|
|
</label>
|
|
<label>
|
|
Decisão recebida
|
|
<select
|
|
value={r.decision}
|
|
onChange={(e) =>
|
|
onChange({
|
|
decision: e.target
|
|
.value as FiscalClaimEvents['decision'],
|
|
})
|
|
}
|
|
>
|
|
<option value="pending">Ainda não identificada</option>
|
|
<option value="approved">Deferimento integral</option>
|
|
<option value="partial">Deferimento parcial</option>
|
|
<option value="rejected">Indeferimento</option>
|
|
</select>
|
|
</label>
|
|
{r.decision !== 'pending' && (
|
|
<>
|
|
<label>
|
|
Número ou referência da decisão
|
|
<input
|
|
value={r.decisionReference}
|
|
onChange={(e) =>
|
|
onChange({ decisionReference: e.target.value })
|
|
}
|
|
/>
|
|
</label>
|
|
<label>
|
|
Data da decisão
|
|
<input
|
|
type="date"
|
|
value={r.decisionDate}
|
|
onChange={(e) =>
|
|
onChange({ decisionDate: e.target.value })
|
|
}
|
|
/>
|
|
</label>
|
|
<label>
|
|
Entidade emitente da decisão
|
|
<input
|
|
value={r.decisionIssuer}
|
|
onChange={(e) =>
|
|
onChange({ decisionIssuer: e.target.value })
|
|
}
|
|
/>
|
|
</label>
|
|
<label>
|
|
Montante reconhecido na decisão (MZN)
|
|
<input
|
|
value={r.approvedAmount}
|
|
onChange={(e) =>
|
|
onChange({ approvedAmount: e.target.value })
|
|
}
|
|
/>
|
|
</label>
|
|
</>
|
|
)}
|
|
{r.receipts.map((p) => (
|
|
<fieldset key={p.id}>
|
|
<legend>Recebimento identificado</legend>
|
|
{(['reference', 'date', 'amount'] as const).map((k) => (
|
|
<label key={k}>
|
|
{k === 'reference'
|
|
? 'Referência do recebimento'
|
|
: k === 'date'
|
|
? 'Data do recebimento'
|
|
: 'Montante recebido (MZN)'}
|
|
<input
|
|
type={k === 'date' ? 'date' : 'text'}
|
|
value={p[k]}
|
|
onChange={(e) =>
|
|
onChange({
|
|
receipts: r.receipts.map((q) =>
|
|
q.id === p.id
|
|
? { ...q, [k]: e.target.value }
|
|
: q,
|
|
),
|
|
})
|
|
}
|
|
/>
|
|
</label>
|
|
))}
|
|
<button
|
|
type="button"
|
|
onClick={() =>
|
|
onChange({
|
|
receipts: r.receipts.filter(
|
|
(q) => q.id !== p.id,
|
|
),
|
|
})
|
|
}
|
|
>
|
|
Remover recebimento desta preparação
|
|
</button>
|
|
</fieldset>
|
|
))}
|
|
<button
|
|
type="button"
|
|
onClick={() =>
|
|
onChange({
|
|
receipts: [
|
|
...r.receipts,
|
|
{
|
|
id: crypto.randomUUID(),
|
|
reference: '',
|
|
date: '',
|
|
amount: '',
|
|
},
|
|
],
|
|
})
|
|
}
|
|
>
|
|
Registar recebimento identificado
|
|
</button>
|
|
</>
|
|
);
|
|
}
|