import { Head, Link, useForm } from '@inertiajs/react'; import { Check, Circle, Pencil, Send } from 'lucide-react'; import { FormErrors, PageTitle, Panel, Status, controlClass, } from '@/components/procurement'; import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { date, money, priorityLabels, roleLabels } from '@/types/procurement'; import type { Requisition } from '@/types/procurement'; type Audit = { id: number; action: string; user_id: number; created_at: string; }; const actions: Record = { 'requisition.created': 'Rascunho criado', 'requisition.updated': 'Rascunho actualizado', 'requisition.submitted': 'Pedido submetido', 'approval.approved': 'Etapa aprovada', 'approval.rejected': 'Pedido rejeitado', }; export default function Show({ requisition: r, canEdit, canDecide, conflictBlocked, audit, technical, }: { requisition: Requisition; canEdit: boolean; canDecide: boolean; conflictBlocked: boolean; audit: Audit[]; technical?: { canReview: boolean; basis_hash: string; reviews: { id: number; decision: string; reason: string; basis_hash: string; snapshot: { reviewer: { name: string } }; }[]; }; }) { const submission = useForm({}); const review = useForm({ basis_hash: technical?.basis_hash ?? '', decision: 'approved', reason: '', }); const decision = useForm<{ decision: string; comment: string }>({ decision: 'approved', comment: '', }); return ( <>
} /> {r.items.some((i) => i.purchase_type === 'equipment') && (

Responsável da área, distinto do solicitante. Finanças é obrigatória para qualquer valor. A adjudicação e a emissão exigem regra de investimento vigente, com duas aprovações administrativas, e reserva em dotação de investimento. Sem estas condições permanecem bloqueadas. O orçamento ainda não é validado; documentos de desenvolvimento não autorizam compras reais.

{technical?.reviews.map((t) => (

{t.decision === 'approved' ? 'Validado' : 'Rejeitado'}{' '} por {t.snapshot.reviewer.name} ·{' '} {t.basis_hash === technical.basis_hash ? 'Versão actual' : 'Versão anterior, decisão preservada'}{' '} · {t.reason}

))} {technical?.canReview && (
{ e.preventDefault(); review.transform((d) => ({ ...d, basis_hash: technical.basis_hash, })); review.post( `/requisicoes/${r.id}/validacao-tecnica`, ); }} >