import { Head, Link } from '@inertiajs/react'; import { ArrowRight, FileText, Link2 } from 'lucide-react'; import { PageTitle, Panel, Status } from '@/components/procurement'; import { Button } from '@/components/ui/button'; import { date, roleLabels } from '@/types/procurement'; type Stage = { label: string; state: string; owner: string; detail: string; href: string | null; }; type Document = { label: string; kind: string; href: string }; type Props = { process: { number: string; status: string; requester: string; department: string; needed_by: string; href: string; }; stages: Stage[]; documents: Document[]; decisions: { area: string; role: string; decision: string; actor: string | null; date: string | null; }[]; history: { id: number; action: string; created_at: string }[]; related: { label: string; href: string }[]; cancellation: { status: string; href: string } | null; future: string[]; }; const labels: Record = { draft: 'Rascunho', pending: 'Em aprovação', approved: 'Aprovada', rejected: 'Rejeitada', cancelled: 'Cancelada', not_started: 'Sem registos', not_required: 'Não aplicável aos artigos actuais', restricted: 'Acesso reservado', recorded: 'Com registos', issued: 'Emitida', }; const events: Record = { 'qualification.defined': 'Versão dos requisitos documentais registada', 'qualification.assessed': 'Versão da análise documental registada', 'admission.adopted': 'Política de admissão adoptada expressamente', 'admission.proposed': 'Tentativa de decisão de admissão registada', 'admission.reviewed': 'Conferência independente de admissão registada', 'recommendation.adopted': 'Política de recomendação adoptada expressamente', 'recommendation.proposed': 'Tentativa de recomendação registada', 'recommendation.reviewed': 'Conferência independente da recomendação registada', 'opening.recorded': 'Versão da acta de abertura registada', 'requisition.created': 'Requisição criada', 'requisition.updated': 'Requisição actualizada', 'requisition.submitted': 'Requisição submetida', 'requisition.revision_created': 'Revisão criada em novo processo', 'approval.approved': 'Etapa da estimativa aprovada', 'approval.rejected': 'Estimativa rejeitada', 'equipment.technical_approved': 'Validação técnica aprovada', 'equipment.technical_rejected': 'Validação técnica rejeitada', 'award.created': 'Adjudicação proposta', 'award.approved': 'Etapa da adjudicação aprovada', 'award.rejected': 'Adjudicação rejeitada', 'purchase_order.issued': 'Ordem emitida', 'receipt.confirmed': 'Recepção registada', 'invoice.created': 'Factura registada', 'invoice.validated': 'Factura validada', 'payment.registered': 'Pagamento externo registado', 'payment.confirmed': 'Pagamento externo confirmado', 'payment.rejected': 'Pagamento externo rejeitado', 'budget.reserve': 'Reserva orçamental registada', 'budget.award': 'Reserva ajustada à adjudicação', 'budget.commit': 'Compromisso registado', 'budget.release': 'Reserva libertada', 'cancellation.requested': 'Cancelamento solicitado', 'cancellation.approved': 'Cancelamento aprovado', 'cancellation.rejected': 'Cancelamento rejeitado', }; export default function PurchaseProcess({ process, stages, documents, decisions, history, related, cancellation, future, }: Props) { return ( <>
Abrir requisição } />

Estado da requisição. As restantes etapas têm estados próprios.

{cancellation && (

Cancelamento da adjudicação:{' '} {labels[cancellation.status]}.{' '} {cancellation.status === 'pending' && 'Novas decisões finais e emissão estão suspensas.'}

Consultar cancelamento e revisão
)}
{stages.map((stage, index) => (
{String(index + 1).padStart(2, '0')}

{stage.label}

{labels[stage.state] ?? stage.state}

Responsável: {stage.owner}

{stage.detail}

{stage.href && ( Consultar etapa )}
))}
    {documents.map((document, index) => (
  • {document.label} {document.kind}
  • ))}
{!decisions.length && (

Ainda não existem etapas de decisão registadas.

)}
    {decisions.map((decision, index) => (
  1. {decision.area} ·{' '} {roleLabels[decision.role] ?? decision.role} {labels[decision.decision] ?? decision.decision}

    {decision.actor ?? 'Por designar na decisão'} {decision.date ? ` · ${date(decision.date)}` : ''}

  2. ))}
{related.length > 0 && (
{related.map((link) => ( {link.label} ))}
)} {history.length ? (
    {history.map((event) => (
  1. {events[event.action] ?? 'Evento do processo'}

    {date(event.created_at)}

  2. ))}
) : (

Sem eventos disponíveis.

)}
{future.length > 0 && (
    {future.map((stage) => (
  • {stage}
  • ))}
)}
); } PurchaseProcess.layout = { breadcrumbs: [ { title: 'Requisições', href: '/requisicoes' }, { title: 'Processo de compra', href: '#' }, ], };