diff --git a/scratch.js b/scratch.js new file mode 100644 index 0000000..c907b1e --- /dev/null +++ b/scratch.js @@ -0,0 +1,16 @@ +import fs from 'fs'; +import { validateCertificateAgainstStandard } from './services/validationEngine.js'; // Need to mock or transpile + +const std = JSON.parse(fs.readFileSync('./data/standards.json', 'utf8'))[0]; +const report = { + identification: { product: "PERFIL I" }, + compliance: { + mechanical: [ + { property: "Yield Strength (Limite de Escoamento)", certificate: "415 MPa", status: "OK" }, + { property: "Tensile Strength", certificate: "547 MPa", status: "OK" } + ], + chemical: [] + } +}; + +// We can't import typescript directly in node easily without tsx or ts-node. diff --git a/scratch.ts b/scratch.ts new file mode 100644 index 0000000..ff2104d --- /dev/null +++ b/scratch.ts @@ -0,0 +1,17 @@ +import fs from 'fs'; +import { validateCertificateAgainstStandard } from './services/validationEngine'; + +const std = JSON.parse(fs.readFileSync('./data/standards.json', 'utf8'))[0]; +const report: any = { + identification: { product: "PERFIL I", standards: "ASTM A572 GR50" }, + compliance: { + mechanical: [ + { property: "Yield Strength (Limite de Escoamento)", certificate: "415 MPa", status: "OK" }, + { property: "Tensile Strength (Limite de ResistĂȘncia)", certificate: "547 MPa", status: "OK" } + ], + chemical: [] + } +}; + +const result = validateCertificateAgainstStandard(report, std); +console.log(JSON.stringify(result.compliance.mechanical, null, 2)); diff --git a/services/validationEngine.ts b/services/validationEngine.ts index dbe9916..74f4d47 100644 --- a/services/validationEngine.ts +++ b/services/validationEngine.ts @@ -198,19 +198,29 @@ export function validateCertificateAgainstStandard(extractedReport: ReportData, let status: 'OK' | 'FALHA' = 'OK'; let normStr = []; - if (minLimit !== null) { + if (minLimit !== null && maxLimit !== null) { + normStr.push(`Min: ${minLimit} - Max: ${maxLimit}`); + if (val < minLimit) { + status = 'FALHA'; + item.differencePercentage = `${(((val - minLimit) / minLimit) * 100).toFixed(1)}%`; + } else if (val > maxLimit) { + status = 'FALHA'; + item.differencePercentage = `+${(((val - maxLimit) / maxLimit) * 100).toFixed(1)}%`; + } else { + item.differencePercentage = `+${(((val - minLimit) / minLimit) * 100).toFixed(1)}%`; + } + } else if (minLimit !== null) { normStr.push(`Min: ${minLimit}`); if (val < minLimit) status = 'FALHA'; item.differencePercentage = `${val >= minLimit ? '+' : ''}${(((val - minLimit) / minLimit) * 100).toFixed(1)}%`; - } - - if (maxLimit !== null) { + } else if (maxLimit !== null) { normStr.push(`Max: ${maxLimit}`); if (val > maxLimit) status = 'FALHA'; + item.differencePercentage = `${val <= maxLimit ? '-' : '+'}${Math.abs(((val - maxLimit) / maxLimit) * 100).toFixed(1)}%`; } if (normStr.length > 0) { - item.norm = normStr.join(' - '); + item.norm = normStr.join(' | '); } else { item.norm = '-'; } diff --git a/vite.config.ts b/vite.config.ts index ee5fb8d..65860a2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -8,6 +8,9 @@ export default defineConfig(({ mode }) => { server: { port: 3000, host: '0.0.0.0', + proxy: { + '/api': 'http://localhost:8081' + } }, plugins: [react()], define: {