@@ -56,6 +56,7 @@ export function AppSidebar() {
|
||||
...(canReadPurchases
|
||||
? [
|
||||
{ title: 'Fornecedores', href: '/fornecedores', icon: Users },
|
||||
{ title: 'Avaliação de fornecedores', href: '/fornecedores/avaliacoes', icon: Users },
|
||||
{ title: 'Cotações', href: '/cotacoes', icon: Scale },
|
||||
{
|
||||
title: 'Ordens de compra',
|
||||
|
||||
@@ -113,6 +113,12 @@ export function procurementNavigation(
|
||||
path: '/fornecedores',
|
||||
roles: readers,
|
||||
},
|
||||
{
|
||||
id: 'supplier_evaluations',
|
||||
label: 'Avaliação de fornecedores',
|
||||
path: '/fornecedores/avaliacoes',
|
||||
roles: readers,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,39 @@
|
||||
import { Head } from '@inertiajs/react';
|
||||
import { useState } from 'react';
|
||||
import { PageTitle, Panel } from '@/components/procurement';
|
||||
import proposal from './evaluation-proposal';
|
||||
|
||||
const areas = [
|
||||
['Avaliações planeadas', 'Definir fornecedor, período, âmbito e responsáveis pela avaliação.'],
|
||||
['Nova avaliação', 'Identificar contratos e ordens abrangidas, escolher a grelha de bens ou serviços e reunir notas, justificações e evidências.'],
|
||||
['Rascunhos', 'Preparar a avaliação e completar evidências antes de submeter para revisão.'],
|
||||
['Avaliações em revisão', 'Conferência independente, com devolução para correcção ou aprovação documentada.'],
|
||||
['Avaliações aprovadas', 'Consultar versões aprovadas; rectificações devem gerar revisão identificável.'],
|
||||
['Histórico por fornecedor', 'Consultar a evolução, observações e contestações com decisão documentada. Comparar apenas âmbitos e grelhas equivalentes.'],
|
||||
['Planos de melhoria', 'Acompanhar acções, responsáveis, prazos, evidências de conclusão e validação de eficácia.'],
|
||||
['Relatórios de avaliação', 'Ficha por fornecedor e período, resultados por critério, ocorrências críticas e cobertura de evidências.'],
|
||||
];
|
||||
export default function SupplierEvaluations() {
|
||||
const [selected, setSelected] = useState(0);
|
||||
return <>
|
||||
<Head title="Avaliação de fornecedores" />
|
||||
<div className="space-y-6 p-4 md:p-8">
|
||||
<PageTitle eyebrow="Fornecedores" title="Avaliação de fornecedores" description="Acompanhamento da prestação da entidade fornecedora durante ou após o fornecimento." />
|
||||
<div className="rounded-xl border border-amber-300 bg-amber-50 p-4 text-sm text-amber-950">
|
||||
Proposta funcional para validação da organização. As áreas abaixo descrevem o circuito previsto; o registo e a aprovação de avaliações ainda não estão disponíveis. Pesos, escala e limiares são ilustrativos.
|
||||
</div>
|
||||
<nav aria-label="Áreas da avaliação de fornecedores" className="flex flex-wrap gap-2">
|
||||
{areas.map(([label], index) => <button key={label} type="button" aria-pressed={selected === index} onClick={() => setSelected(index)} className={`rounded-lg border px-4 py-2 text-sm ${selected === index ? 'bg-primary text-primary-foreground' : 'bg-card hover:bg-muted'}`}>{label}</button>)}
|
||||
</nav>
|
||||
<Panel title={areas[selected][0]} description={areas[selected][1]}>
|
||||
<p className="text-sm text-muted-foreground">Área prevista na proposta. Não são apresentados resultados de fornecedores reais.</p>
|
||||
</Panel>
|
||||
<Panel title="Proposta funcional completa" description="Qualificação verifica elegibilidade; avaliação analisa o cumprimento efectivo. Uma pontuação não suspende nem exclui automaticamente um fornecedor.">
|
||||
<details><summary className="cursor-pointer font-medium">Consultar campos, grelhas, evidências e regras propostas</summary>
|
||||
<div className="mt-4 whitespace-pre-wrap text-sm leading-7">{proposal}</div>
|
||||
</details>
|
||||
</Panel>
|
||||
</div>
|
||||
</>;
|
||||
}
|
||||
SupplierEvaluations.layout = { breadcrumbs: [{ title: 'Fornecedores', href: '/fornecedores' }, { title: 'Avaliação de fornecedores', href: '/fornecedores/avaliacoes' }] };
|
||||
Reference in New Issue
Block a user