Carry OCR and missing-source warnings into analysis readiness

This commit is contained in:
2026-09-06 09:45:33 +03:00
parent 49965a2688
commit f073438922
12 changed files with 75 additions and 21 deletions
+14 -7
View File
@@ -120,10 +120,11 @@ export const TenderDocuments = ({ tender }) => {
setBusy('belge'); setError(null);
try {
if (!okunabilirMi(b.ad)) throw new Error('Bu dosya türünden metin çıkarılamıyor (PDF, DOCX, XLSX, ZIP ve TXT destekleniyor).');
const metin = await belgeMetni(b);
const reading = await inspectStoredDocument(b);
const metin = reading.text;
if (!metin || metin.length < 100) throw new Error('Belgeden analiz için yeterli metin çıkarılamadı (taranmış PDF olabilir).');
setIsAiSpecAnalyzerOpen(true);
await analyzeSpecPdfWithGemini({ text: metin, fileName: b.ad, tender, mode: mod });
await analyzeSpecPdfWithGemini({ text: metin, fileName: b.ad, extraction:{ocr:reading.ocr,pageCount:reading.pageCount,usedPages:reading.usedPages,complete:reading.complete,fileName:b.ad}, tender, mode: mod });
} catch (e) {
setError(e.message);
} finally { setBusy(null); }
@@ -188,6 +189,7 @@ export const TenderDocuments = ({ tender }) => {
const tumEvrakiTopla = async () => {
const parcalar = [];
const atlanan = [];
const extraction = [];
if (ekapIhalesi) {
setIlerleme('EKAP ilan metni alınıyor…');
@@ -198,28 +200,32 @@ export const TenderDocuments = ({ tender }) => {
}
} catch {
atlanan.push('EKAP ilan metni (alınamadı)');
extraction.push({fileName:'EKAP ilan metni',complete:false});
}
}
for (const b of belgeler) {
if (!okunabilirMi(b.ad)) { atlanan.push(`${b.ad} (metin çıkarılamıyor)`); continue; }
if (!okunabilirMi(b.ad)) { atlanan.push(`${b.ad} (metin çıkarılamıyor)`); extraction.push({fileName:b.ad,complete:false}); continue; }
setIlerleme(`${b.ad} okunuyor…`);
try {
const t = await belgeMetni(b);
const reading = await inspectStoredDocument(b);
const t = reading.text;
extraction.push({ocr:reading.ocr,pageCount:reading.pageCount,usedPages:reading.usedPages,complete:reading.complete,fileName:b.ad});
if (t && t.length >= 200) parcalar.push(`===== BELGE: ${b.ad} =====\n${t}`);
else atlanan.push(`${b.ad} (yeterli metin yok — taranmış olabilir)`);
else { atlanan.push(`${b.ad} (yeterli metin yok — taranmış olabilir)`); extraction.push({fileName:b.ad,complete:false}); }
} catch (e) {
atlanan.push(`${b.ad} (${e.message})`);
extraction.push({fileName:b.ad,complete:false});
}
}
return { metin: parcalar.join('\n\n'), parcaSayisi: parcalar.length, atlanan };
return { metin: parcalar.join('\n\n'), parcaSayisi: parcalar.length, atlanan, extraction };
};
const derinAnalizEt = async () => {
setBusy('derin'); setError(null); setBilgi(null);
try {
const { metin, parcaSayisi, atlanan } = await tumEvrakiTopla();
const { metin, parcaSayisi, atlanan, extraction } = await tumEvrakiTopla();
if (!metin || metin.length < 200) {
throw new Error('Derin analiz için yeterli metin toplanamadı. EKAP dokümanını indirip PDF olarak yükleyin.');
}
@@ -228,6 +234,7 @@ export const TenderDocuments = ({ tender }) => {
setIsAiSpecAnalyzerOpen(true);
await analyzeSpecPdfWithGemini({
text: metin,
extraction,
fileName: `${ikn || 'ihale'} — ${parcaSayisi} evrak birlikte`,
tender,
mode: 'derin',