Preserve preparation conditions and invalidate outdated source reviews

This commit is contained in:
2026-09-06 10:43:14 +03:00
parent fef6f2ab89
commit fa56e0fe83
5 changed files with 57 additions and 2 deletions
+2
View File
@@ -1,3 +1,4 @@
import { preparationAnalysisSource } from './preparationAnalysis.js';
// Prices belong to a specific source row, never to its current array position.
export function sourceRows(tender, results, preferredSource = 'tender') {
const items = preferredSource !== 'analysis' && tender?.items?.length
@@ -33,6 +34,7 @@ export function bidSourceSnapshot(tender, results, rows = sourceRows(tender, res
deadline: [tender?.tarih || '', tender?.saat || ''],
documentVersion: results?.documentVersion ?? tender?.documentVersion ?? null,
procurementTerms: results?.procurementTerms || null,
analysis: preparationAnalysisSource(results),
humanReview: results?.sourceReview?.humanReview || null,
analyzedItems: results?.itemsAndSpecs || [],
rows: rows.map(r => r.priceKey).sort(),
+21
View File
@@ -0,0 +1,21 @@
export const preparationConditionSections = [
['qualificationCriteria','Yeterlik koşulları'],
['criticalRequirements','Kritik şartlar'],
['risksAndPenalties','Riskler ve cezalar'],
['disqualificationRisks','Değerlendirme dışı kalma riskleri'],
['criticalDetails','Kontrol edilecek ayrıntılar'],
['deadlines','Süreler ve tarihler'],
['costDrivers','Maliyet yükümlülükleri'],
['questionsForAdministration','İdareye sorulacak sorular'],
];
export function preparationAnalysisSource(results = {}) {
const fields = ['itemsAndSpecs','documentChecklist','roadmap',...preparationConditionSections.map(([field])=>field)];
return Object.fromEntries([
...fields.map(field=>[field,results[field] || []]),
...['documentVersion','procurementTerms','sourceReview','sourceEvidence','citations','summary','scopeOfWork'].map(field=>[field,results[field] ?? null]),
]);
}
export function conditionText(row) {
if (typeof row === 'string') return row;
return ['title','label','value','clause','text','detail','where','whyItMatters','note'].map(key=>row?.[key]).filter(Boolean).join(' — ');
}