import { verifyAnalysisCitations } from './analysis-citations.mjs'; import { validateAnalysisShape } from './analysis-schema.mjs'; import {createHash} from 'node:crypto'; import {extractBidValidity} from '../src/services/bidTerms.js'; export function qualifyAnalysis(result,{text='',limit=60000,fileName='',expectedItems=0,repaired=false}={}) { if(!result || typeof result !== 'object' || Array.isArray(result)) throw new Error('Analiz nesne biçiminde değil.'); const clean={...result};delete clean._outputRepaired; if(clean.citations != null && !Array.isArray(clean.citations)) throw new Error('Kaynak alıntıları liste biçiminde değil.'); const sections={}; for(const key of ['itemsAndSpecs','documentChecklist','qualificationCriteria','risksAndPenalties','roadmap']) { if(clean[key] != null && !Array.isArray(clean[key])) throw new Error(`${key} liste biçiminde değil.`); sections[key]=clean[key]?.length ? 'extracted' : 'not_extracted'; } const source=String(text),issues=validateAnalysisShape(clean); if(source.length>limit)issues.push('Kaynak metnin tamamı analiz edilmedi.'); if(repaired)issues.push('Analiz yanıtı kesildi; yalnız kurtarılabilen alanlar gösteriliyor.'); if(expectedItems>0 && (clean.itemsAndSpecs?.length || 0)