feat: show nonComplianceReason detail banner under identification section when report is NÃO CONFORME
This commit is contained in:
@@ -114,6 +114,19 @@ export const ReportDisplay: React.FC<ReportDisplayProps> = ({ report }) => {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
{/* Banner de Não Conformidade se aplicável */}
|
||||||
|
{compliance.status === 'NÃO CONFORME' && compliance.nonComplianceReason && (
|
||||||
|
<div className="mb-4 bg-rose-50 dark:bg-rose-950/20 border border-rose-200 dark:border-rose-800/50 rounded-lg p-3 text-[10px] text-rose-800 dark:text-rose-300 leading-normal flex gap-2.5 items-start">
|
||||||
|
<svg className="w-4 h-4 shrink-0 text-rose-600 dark:text-rose-400 mt-0.5" fill="none" viewBox="0 0 24 24" strokeWidth="2.5" stroke="currentColor">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
||||||
|
</svg>
|
||||||
|
<div>
|
||||||
|
<h4 className="font-black uppercase tracking-wider text-[9px] text-rose-900 dark:text-rose-200 mb-0.5">Motivo da Não Conformidade Normativa</h4>
|
||||||
|
<p className="font-medium">{compliance.nonComplianceReason}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* Seções 2 e 3: Propriedades (Lado a Lado no Desktop) */}
|
{/* Seções 2 e 3: Propriedades (Lado a Lado no Desktop) */}
|
||||||
<section className="grid grid-cols-1 md:grid-cols-12 gap-2 mb-3 flex-grow">
|
<section className="grid grid-cols-1 md:grid-cols-12 gap-2 mb-3 flex-grow">
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ const reportSchema = {
|
|||||||
type: Type.OBJECT,
|
type: Type.OBJECT,
|
||||||
properties: {
|
properties: {
|
||||||
status: { type: Type.STRING, enum: ["CONFORME", "NÃO CONFORME"], description: "Status geral de conformidade." },
|
status: { type: Type.STRING, enum: ["CONFORME", "NÃO CONFORME"], description: "Status geral de conformidade." },
|
||||||
|
nonComplianceReason: { type: Type.STRING, description: "Se o status for 'NÃO CONFORME', explique detalhadamente o motivo da não conformidade, citando quais propriedades ou elementos químicos falharam e quais eram os limites da norma técnica analisada. Se for 'CONFORME', retorne uma string vazia." },
|
||||||
mechanical: {
|
mechanical: {
|
||||||
type: Type.ARRAY,
|
type: Type.ARRAY,
|
||||||
items: {
|
items: {
|
||||||
@@ -196,6 +197,7 @@ FORMATO DO RETORNO:
|
|||||||
},
|
},
|
||||||
"compliance": {
|
"compliance": {
|
||||||
"status": "CONFORME",
|
"status": "CONFORME",
|
||||||
|
"nonComplianceReason": "",
|
||||||
"mechanical": [
|
"mechanical": [
|
||||||
{ "property": "Yield Strength (Limite de Escoamento)", "norm": "Min: 345 MPa", "certificate": "415 MPa", "status": "OK", "differencePercentage": "+20.3%" }
|
{ "property": "Yield Strength (Limite de Escoamento)", "norm": "Min: 345 MPa", "certificate": "415 MPa", "status": "OK", "differencePercentage": "+20.3%" }
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export interface ComplianceItem {
|
|||||||
|
|
||||||
export interface ComplianceData {
|
export interface ComplianceData {
|
||||||
status: 'CONFORME' | 'NÃO CONFORME';
|
status: 'CONFORME' | 'NÃO CONFORME';
|
||||||
|
nonComplianceReason?: string;
|
||||||
mechanical: ComplianceItem[];
|
mechanical: ComplianceItem[];
|
||||||
chemical: ComplianceItem[];
|
chemical: ComplianceItem[];
|
||||||
otherTests: ComplianceItem[];
|
otherTests: ComplianceItem[];
|
||||||
|
|||||||
Reference in New Issue
Block a user