Analyze server-resolved document reviews with revision checks

This commit is contained in:
2026-09-06 09:49:30 +03:00
parent e49593be46
commit 742e05933e
11 changed files with 87 additions and 18 deletions
+13 -6
View File
@@ -1,4 +1,4 @@
import {documentReview,saveDocumentReview} from './document-review.mjs';
import {documentReview,saveDocumentReview,reviewedAnalysisSource} from './document-review.mjs';
import { documentMetadataPatch, decodeDocumentUpload } from './document-metadata.mjs';
import { deadlineInfo } from '../src/services/tenderCalendar.js';
import { exchangeRates } from './exchange-rates.mjs';
@@ -1300,20 +1300,27 @@ const server = http.createServer(async (req, res) => {
}
try {
const body = await readBody(req, 2 * 1024 * 1024);
if (!body.text || String(body.text).trim().length < 40) {
const reviewed=body.reviewedSource ? reviewedAnalysisSource(user.email,body.reviewedSource,body.tender?.ikn) : null;
const sourceText=reviewed ? reviewed.text : body.text;
if (!sourceText || String(sourceText).trim().length < 40) {
return json(res, 400, { success: false, error: 'Analiz için yeterli metin yok (en az 40 karakter).' });
}
const out = await analyzeSpec({
text: body.text,
fileName: body.fileName,
extraction: body.extraction,
text: sourceText,
fileName: reviewed?.fileName || body.fileName,
extraction: reviewed ? {fileName:reviewed.fileName,complete:true,ocr:false} : body.extraction,
tender: body.tender,
chain: body.chain,
mode: body.mode === 'derin' ? 'derin' : undefined,
});
if (reviewed) {
const latest=reviewedAnalysisSource(user.email,body.reviewedSource,body.tender?.ikn);
if(latest.humanReview.textHash!==reviewed.humanReview.textHash) throw Object.assign(new Error('İnceleme analiz sırasında değişti.'),{status:409});
out.result.sourceReview={...out.result.sourceReview,humanReview:reviewed.humanReview};
}
return json(res, 200, { success: true, ...out, analyzedAt: new Date().toISOString() });
} catch (e) {
return json(res, 502, { success: false, error: e.message, attempts: e.attempts || null });
return json(res, e.status || 502, { success: false, error: e.message, attempts: e.attempts || null });
}
}