feat: derin analiz & yol haritasi + ihale dosyasi hazirlama; docx/xlsx/zip okunuyor
Doküman panelindeki "Tum Evraki Derin Analiz Et" dugmesi EKAP ilan metnini ve
ihaleye yuklenmis butun belgeleri TEK metinde birlestirip gonderiyor; model
sartnameyi ilanla ve eklerle capraz okuyabiliyor.
Derin analiz (mode='derin', ayri sistem istemi + 8000 token):
- Teklifi gecersiz kilabilecek noktalar (kirmizi uyari, en ustte)
- Gozden kacan ince detaylar (Kritik/Yuksek/Orta + madde no + neden onemli)
- Alinacak kalemler: aranan evsaflar, miktar, sartnamede geciyorsa fiyat
(modele "TAHMIN URETME" talimati verildi, yoksa null)
- Belge kontrol listesi, kritik tarihler, maliyet kalemleri
- Teklife kadar yol haritasi (faz / kim / ne zaman / cikti)
- Idareye sorulacak belirsizlikler
Standart hizli ozet modu aynen duruyor.
Ihale Dosyasi Hazirla (rapor sonunda, acilir bolum):
- Eksik firma bilgileri kullaniciya sorulur, profilden gelenler sorulmaz,
girilenler tarayicida saklanir
- Kalem fiyatlandirma tablosu, canli toplam + yaziyla karsiligi
- Teklif Mektubu, Birim Fiyat Teklif Cetveli, Evrak Kontrol Listesi
- Belgeler yazdirilabilir HTML: jsPDF'in gomulu fontlari WinAnsi, s/g/i/I
tasimiyor (bkz. services/pdf.js ASCII basliklari) — resmi teklif mektubunda
bozuk Turkce kabul edilemez
docx/xlsx/zip metin cikarimi (server/office-text.mjs):
- ihaleab projesindeki officeText.ts'ten tasindi, harici bagimlilik yok
- Sunucuda: tarayicida cozucu yok, baytlar zaten BELGE_DIR'de
- Tablolar " | " ile korunuyor, ic ice zip aciliyor, ~$ gecici dosyalari atlanir
- Yeni uc: GET /api/me/documents/text
- Yukleme kabul listesi .doc/.rar cikarildi (karsiligi yok), .xlsx eklendi
fix: yuklenen belgelerdeki "AI analiz" dugmesi bozuktu — extractText nesne
donduruyor ({text,pageCount,usedPages}), kod onu duz metin sanip gonderiyordu;
sunucuya "[object Object]" gidiyor ve analiz reddediliyordu. Uzunluk kontrolu
de nesne uzerinde undefined verdigi icin hatayi yutuyordu.
fix: analiz dokuman panelinden baslatildiginda modal kendi isAnalyzing'ini
bilmiyordu, kullanici 1-2 dakika bos modal goruyordu — ortak aiAnalyzing sinyali
This commit is contained in:
@@ -196,6 +196,9 @@ export const AppProvider = ({ children }) => {
|
||||
const [isAiSpecAnalyzerOpen, setIsAiSpecAnalyzerOpen] = useState(false);
|
||||
|
||||
const [aiAnalysisResults, setAiAnalysisResults] = useState(null);
|
||||
// Analiz modal dışından (ör. doküman panelindeki derin analiz düğmesi) da
|
||||
// tetiklenebiliyor; modalın beklerken boş görünmemesi için ortak sinyal.
|
||||
const [aiAnalyzing, setAiAnalyzing] = useState(false);
|
||||
|
||||
// Enterprise Module States
|
||||
// Rakip izleme listesi — kullanıcı gerçek kazanan firma analizinden ekler (localStorage)
|
||||
@@ -335,11 +338,16 @@ export const AppProvider = ({ children }) => {
|
||||
|
||||
// Gerçek AI analizi — backend /api/ai/analyze üzerinden, admin panelde
|
||||
// seçilen model zinciri (fallback) ile.
|
||||
const analyzeSpecPdfWithGemini = async ({ text, fileName, tender } = {}) => {
|
||||
// mode='derin' → ince detaylar, belge kontrol listesi ve yol haritası da üretilir
|
||||
const analyzeSpecPdfWithGemini = async ({ text, fileName, tender, mode } = {}) => {
|
||||
setAiAnalyzing(true);
|
||||
setAiAnalysisResults(null);
|
||||
try {
|
||||
const { analyzeSpecText } = await import('../services/ai');
|
||||
const data = await analyzeSpecText({ text, fileName, tender, chain: aiModelConfig.chain });
|
||||
const data = await analyzeSpecText({ text, fileName, tender, chain: aiModelConfig.chain, mode });
|
||||
const result = {
|
||||
...data.result,
|
||||
mode: data.mode || (mode === 'derin' ? 'derin' : 'standart'),
|
||||
fileName,
|
||||
model: `${data.model.label} (${data.model.provider})`,
|
||||
modelId: data.model.model,
|
||||
@@ -349,6 +357,9 @@ export const AppProvider = ({ children }) => {
|
||||
};
|
||||
setAiAnalysisResults(result);
|
||||
return result;
|
||||
} finally {
|
||||
setAiAnalyzing(false);
|
||||
}
|
||||
};
|
||||
|
||||
const [userProfile, setUserProfile] = useState({
|
||||
@@ -537,6 +548,7 @@ export const AppProvider = ({ children }) => {
|
||||
setIsAiSpecAnalyzerOpen,
|
||||
analyzeSpecPdfWithGemini,
|
||||
aiAnalysisResults,
|
||||
aiAnalyzing,
|
||||
competitorWatchlist,
|
||||
setCompetitorWatchlist,
|
||||
vaultDocuments,
|
||||
|
||||
Reference in New Issue
Block a user