feat: takip izleme (zeyilname + sonuc bildirimi), hazirlik gorevi, belge sure uyarisi, Telegram, OCR, yasakli sorgu
28 depo taramasindan alinan alti ozellik. Kod kopyalanmadi (depolar lisanssiz), fikirler uygulandi. 1) Zeyilname / duzeltme ilani takibi (server/zeyilname.mjs): takipteki IKN'ler sunucuya yazilir; 3 saatte bir EKAP detayindan ilan sayisi ve ihale tarihi karsilastirilir, degisince "ne degisti" bildirimi (uygulama ici + e-posta + Telegram). Test: anlik kaydi eskitilince tur "yeni ilan yayimlandi; ihale tarihi 01.01.2026 → 08.10.2026" bildirimi uretti. 2) Sonuc bildirimi: takipteki ihale sonuclaninca "X firmasi Y'ye aldi, %Z kirim". Yalniz takiptekiler; kismi ihalede oran yazilmaz. 3) Ihaleden goreve (MOBIT-DURT): detayda "Hazirlik Gorevi Ac" → teslim tarihi ihale saati, pano "Teklif Hazirlaniyor", derin analizden gelen belge kontrol listesi gorevde; Kanban kartinda geri sayim rozeti. 4) Sirket belgesi sure takibi: Belge Kasasi'nda son kullanma tarihi girisi, dolmus / 30 gun icinde dolacak uyarisi; girise gunde bir bildirim. PATCH /api/me/documents/meta. 5) Telegram (server/telegram.mjs): TELEGRAM_BOT_TOKEN sunucuda; kullanici 6 haneli kodu bota yazar, "Dogrula" → getUpdates ile chat id baglanir. Arayuzde adim adim kurulum rehberi (BotFather → env → Redeploy → kod). Ihale ozeti, zeyilname ve sonuc bildirimleri Telegram'a da gider. 6) OCR (tesseract.js, tur): PDF metin katmani bossa (taranmis) ilk 8 sayfa OCR. Olcum: sentetik cetvelde guven 87, ~0,3 sn/sayfa; IKN ve kalemler dogru okundu. Kalem havuzu ve derin analiz artik taranmis PDF'ten de besleniyor. 7) Rakip Radari'nda KIK yasakli sorgusu baglantisi (firma adi panoya kopyalanir; EKAP sorguyu API'den vermiyor). Sinir deger hesaplayici KURULMADI: Kamu Ihale Genel Tebligi'ne ulasilamadi (mevzuat.gov.tr / ihale.gov.tr bu makineden erisilemiyor); formul kaynaksiz yazilmadi. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -155,6 +155,10 @@ const IZINLI_ANAHTARLAR = new Set([
|
||||
'favori_kurumlar', 'ekip', 'saved_filters', 'reminder',
|
||||
'rakip_izleme', 'ciro_hedefi', 'ai_model_config', 'kanban',
|
||||
'iptal_geri_bildirim',
|
||||
'firma_profil', // yetkinlikler + uyum eşiği
|
||||
'takip', // takipteki İKN'ler — zeyilname/sonuç izleme sunucuda çalışır
|
||||
'gorevler', // ihaleden açılan hazırlık görevleri
|
||||
'telegram', // { chatId, ad, baglanma }
|
||||
]);
|
||||
|
||||
export function getData(email, anahtar) {
|
||||
@@ -244,6 +248,20 @@ export function getDocument(email, id) {
|
||||
return withDb((db) => db.prepare('SELECT * FROM belgeler WHERE id=? AND email=?').get(id, email) || null);
|
||||
}
|
||||
|
||||
/** Belge üst verisi: son kullanma / kategori (süre takibi için). */
|
||||
export function updateDocument(email, id, { sonKullanma, kategori } = {}) {
|
||||
return withDb((db) => {
|
||||
const r = db.prepare(`UPDATE belgeler SET
|
||||
son_kullanma = COALESCE(?, son_kullanma),
|
||||
kategori = COALESCE(?, kategori)
|
||||
WHERE id=? AND email=?`).run(sonKullanma ?? null, kategori ?? null, id, email);
|
||||
return r.changes > 0;
|
||||
}, false);
|
||||
}
|
||||
/** Arka plan işleri için tüm kullanıcılar (zeyilname/sonuç izleme). */
|
||||
export function listUsers() {
|
||||
return withDb((db) => db.prepare('SELECT email, ad FROM kullanicilar').all(), []);
|
||||
}
|
||||
export function deleteDocument(email, id) {
|
||||
const rec = getDocument(email, id);
|
||||
if (!rec) return false;
|
||||
|
||||
Reference in New Issue
Block a user