From f88a0c7bfeadb40e244a0b665b7ef8d93bb8c2c4 Mon Sep 17 00:00:00 2001 From: ht Date: Sun, 6 Sep 2026 09:02:28 +0300 Subject: [PATCH] fix: persist explicit review status and align review counters --- .../evidence/qa-reviewed-after-reload.txt | 328 ++++++++++++++++++ docs/quality/uygulama-durumu.md | 9 +- src/components/TenderDetailModal.jsx | 6 +- src/context/AppContext.jsx | 2 +- src/services/analytics.js | 2 +- src/services/tenderState.js | 2 +- tests/review-state.test.mjs | 16 + 7 files changed, 360 insertions(+), 5 deletions(-) create mode 100644 docs/quality/evidence/qa-reviewed-after-reload.txt create mode 100644 tests/review-state.test.mjs diff --git a/docs/quality/evidence/qa-reviewed-after-reload.txt b/docs/quality/evidence/qa-reviewed-after-reload.txt new file mode 100644 index 0000000..5f5552c --- /dev/null +++ b/docs/quality/evidence/qa-reviewed-after-reload.txt @@ -0,0 +1,328 @@ +- banner: + - text: İhale + - generic: ist + - textbox "İhale, kurum veya İKN no ile arayın..." + - button "ARA": + - generic: ARA + - button "ÜRÜN ARA": + - generic: ÜRÜN ARA + - button "Detaylı İhale Arama": + - button "AI Şartname Analizi": + - generic: AI Şartname Analizi + - button "Web Siteni Tara (AI)": + - generic: Web Siteni Tara (AI) + - generic: 7 gün + - button: + - button "L Laboratuvar": + - generic: L + - generic: Laboratuvar +- generic: "5" +- generic: Canlı İhale Havuzu +- generic: "5" +- generic: Yüklü İhale +- generic: "0" +- generic: Bugün Eklenen +- generic: "5" +- generic: Kalem +- generic: "0" +- generic: Sonuç Arşivi +- generic: "5" +- generic: Takibimdeki +- button "Sonraki sekmeler": +- button "Ana İhale Listesi": + - generic: Ana İhale Listesi +- button "Günlük Bülten": + - generic: Günlük Bülten +- button "Sonuç Sorgula": + - generic: Sonuç Sorgula +- button "İhale Takvimi": + - generic: İhale Takvimi +- button "Sözleşme Sorgula": + - generic: Sözleşme Sorgula +- button "KDV Hesapla": + - generic: KDV Hesapla +- button "Sınır Değer": + - generic: Sınır Değer +- button "Fiyat Analizi": + - generic: Fiyat Analizi +- button "Kanban Pano Sürükle Takip": + - generic: Kanban Pano + - generic: Sürükle Takip +- button "Rakip Radar Canlı Uyar": + - generic: Rakip Radar + - generic: Canlı Uyar +- button "Doküman Deposu": + - generic: Doküman Deposu +- button "Analitik Dashboard": + - generic: Analitik Dashboard +- button "Kırmızı Bayrak Şeffaflık": + - generic: Kırmızı Bayrak + - generic: Şeffaflık +- button "KİK Kurul Kararları": + - generic: KİK Kurul Kararları +- button "AB İhaleleri (TED)": + - generic: AB İhaleleri (TED) +- button "Planlar": + - generic: Planlar +- button "API & Webhooks": + - generic: API & Webhooks +- button "Mobil PWA": + - generic: Mobil PWA +- main: + - paragraph: AKTİF İHALELER + - paragraph: "5" + - paragraph: BUGÜN EKLENENLER + - paragraph: "0" + - paragraph: TAKİP ETTİKLERİM + - paragraph: "5" + - generic "İlk ziyaretiniz — bugün yayımlanan ilanlar gösteriliyor": + - paragraph: SON GİRİŞTEN BERİ + - paragraph: "0" + - paragraph: İNCELENMEMİŞ + - paragraph: "4" + - complementary: + - text: Hızlı Erişim + - button "Güncel Tüm İhaleler": + - generic: Güncel Tüm İhaleler + - button "Favori Kurumlarım": + - generic: Favori Kurumlarım + - button "Doğrudan Temin Popüler": + - generic: Doğrudan Temin + - generic: Popüler + - button "İhaleler (Açık/Pazarlık)": + - generic: İhaleler (Açık/Pazarlık) + - button "Bugün Eklenenler": + - generic: Bugün Eklenenler + - button "İncelediğim İhaleler": + - generic: İncelediğim İhaleler + - button "İncelemediklerim": + - generic: İncelemediklerim + - button "Sözleşme İmzalananlar": + - generic: Sözleşme İmzalananlar + - button "Sonuçlananlar": + - generic: Sonuçlananlar + - button "İptal Edilenler": + - generic: İptal Edilenler + - button "İhale Arşivi": + - generic: İhale Arşivi + - text: Kayıtlı Filtrelerim + - generic: 0 Bot + - paragraph: Henüz aktif bir filtre yok. + - button "Yeni Filtre Kur": + - generic: Yeni Filtre Kur + - button "Alım Türü": + - text: Alım Türü + - radio "Tümü" [checked] + - generic: Tümü + - radio "Doğrudan Temin" + - generic: Doğrudan Temin + - radio "Açık İhale" + - generic: Açık İhale + - radio "Pazarlık Usulü" + - generic: Pazarlık Usulü + - button "Sektörler": + - text: Sektörler + - textbox "Sektör ara…" + - button "Tüm Sektörler" + - checkbox "Akaryakıt & Yakıt" + - generic: Akaryakıt & Yakıt + - checkbox "Altyapı & Yol" + - generic: Altyapı & Yol + - checkbox "Asansör & Yürüyen Sistem" + - generic: Asansör & Yürüyen Sistem + - checkbox "Atölye & Makine Ekipmanı" + - generic: Atölye & Makine Ekipmanı + - checkbox "Bilişim & Yazılım" + - generic: Bilişim & Yazılım + - checkbox "Danışmanlık & Proje" + - generic: Danışmanlık & Proje + - checkbox "Elektrik & Enerji" + - generic: Elektrik & Enerji + - checkbox "Gıda & Catering" + - generic: Gıda & Catering + - checkbox "Güvenlik Sistemleri" + - generic: Güvenlik Sistemleri + - checkbox "Isıtma & İklimlendirme" + - generic: Isıtma & İklimlendirme + - checkbox "İnşaat & Bakım" + - generic: İnşaat & Bakım + - checkbox "Kırtasiye & Büro" + - generic: Kırtasiye & Büro + - checkbox "Laboratuvar & Ölçüm" + - generic: Laboratuvar & Ölçüm + - checkbox "Mobilya & Donatı" + - generic: Mobilya & Donatı + - checkbox "Otomotiv & İş Makinesi" + - generic: Otomotiv & İş Makinesi + - checkbox "Personel Hizmet Alımı" + - generic: Personel Hizmet Alımı + - checkbox "Peyzaj & Park" + - generic: Peyzaj & Park + - checkbox "Reklam & Organizasyon" + - generic: Reklam & Organizasyon + - checkbox "Sağlık / Tıbbi Malzeme" + - generic: Sağlık / Tıbbi Malzeme + - checkbox "Sigorta" + - generic: Sigorta + - checkbox "Spor Tesisleri" + - generic: Spor Tesisleri + - checkbox "Su & Arıtma" + - generic: Su & Arıtma + - checkbox "Tarım & Hayvancılık" + - generic: Tarım & Hayvancılık + - checkbox "Taşımacılık & Kiralama" + - generic: Taşımacılık & Kiralama + - checkbox "Taşınmaz & Kiralama" + - generic: Taşınmaz & Kiralama + - checkbox "Tekstil & Giyim" + - generic: Tekstil & Giyim + - checkbox "Temizlik & Hijyen" + - generic: Temizlik & Hijyen + - checkbox "Yayın & Arşiv" + - generic: Yayın & Arşiv + - checkbox "Genel" + - generic: Genel + - button "CPV Kodu": + - text: CPV Kodu + - button "Kurum Tipleri": + - text: Kurum Tipleri + - button "Şehir Seçimi": + - text: Şehir Seçimi + - heading "İhale Listesi (5 Sonuç)" [level=2]: + - text: İhale Listesi + - generic: (5 Sonuç) + - 'generic "Kapalı: ihale tarihi geçmiş ilanlar da listelenir"': + - checkbox "Sadece açık ihaleler" [checked] + - text: Sadece açık ihaleler + - combobox: + - option "Şirketime En Uyumlu" + - option "En Yeni Eklenenler" [selected] + - option "Tarihi Yaklaşanlar (Acil)" + - option "Tarihi Uzak Olanlar" + - button "Excel İndir": + - generic: Excel İndir + - generic: İhale + - generic: "10" + - generic: "09" + - generic: 10:00 + - heading "QA — Giresun laboratuvar" [level=3] + - button "Takibi Bırak": + - generic: Giresun TEST KURUMU + - button "Kurumu favorilere ekle": + - generic: Giresun + - generic "İhalenin yapılacağı tarih": + - generic: "İhale: 10.09.2026 10:00" + - generic: "# 2026/1582991" + - generic: Mal Alımı + - generic: Laboratuvar & Ölçüm + - generic: Sentetik test kalemi + - generic: 2 adet + - generic: İhale + - generic: "09" + - generic: "09" + - generic: 10:00 + - heading "QA — Aksaray laboratuvar" [level=3] + - button "Takibi Bırak": + - generic: Aksaray TEST KURUMU + - button "Kurumu favorilere ekle": + - generic: Aksaray + - generic "İhalenin yapılacağı tarih": + - generic: "İhale: 09.09.2026 10:00" + - generic: "# 2026/1573235" + - generic: Mal Alımı + - generic: Laboratuvar & Ölçüm + - generic: Sentetik test kalemi + - generic: 2 adet + - generic: İhale + - generic: "22" + - generic: "09" + - generic: 11:00 + - heading "QA — Kayseri laboratuvar" [level=3] + - button "Takibi Bırak": + - generic: Kayseri TEST KURUMU + - button "Kurumu favorilere ekle": + - generic: Kayseri + - generic "İhalenin yapılacağı tarih": + - generic: "İhale: 22.09.2026 11:00" + - generic: "# 2026/1534665" + - generic: Mal Alımı + - generic: Laboratuvar & Ölçüm + - generic: Sentetik test kalemi + - generic: 2 adet + - generic: İhale + - generic: "11" + - generic: "09" + - generic: 10:00 + - heading "QA — Tepecik laboratuvar" [level=3] + - button "Takibi Bırak": + - generic: Tepecik TEST KURUMU + - button "Kurumu favorilere ekle": + - generic: Tepecik + - generic "İhalenin yapılacağı tarih": + - generic: "İhale: 11.09.2026 10:00" + - generic: "# 2026/1523851" + - generic: Mal Alımı + - generic: Laboratuvar & Ölçüm + - generic: Sentetik test kalemi + - generic: 2 adet + - generic: İhale + - generic: "22" + - generic: "09" + - generic: 10:30 + - heading "QA — Akdeniz laboratuvar" [level=3] + - button "Takibi Bırak": + - generic: Akdeniz TEST KURUMU + - button "Kurumu favorilere ekle": + - generic: Akdeniz + - generic "İhalenin yapılacağı tarih": + - generic: "İhale: 22.09.2026 10:30" + - generic: "# 2026/1499061" + - generic: Mal Alımı + - generic: Laboratuvar & Ölçüm + - generic: Sentetik test kalemi + - generic: 2 adet + - paragraph: Tüm kayıtlar gösterildi — 5 ihale + - complementary: + - text: Firmanıza Ait Kayıtlar + - generic: İncelediklerim + - generic: "1" + - generic: Sözleşmelerim + - generic: "0" + - generic: Sonuçlarım + - generic: "0" + - generic: Takibimdekiler + - generic: "5" + - text: Yaklaşan İhale Tarihleri + - button "QA — Aksaray laboratuvar 3 gün": + - generic "QA — Aksaray laboratuvar" + - generic: 3 gün + - button "QA — Giresun laboratuvar 4 gün": + - generic "QA — Giresun laboratuvar" + - generic: 4 gün + - button "QA — Tepecik laboratuvar 5 gün": + - generic "QA — Tepecik laboratuvar" + - generic: 5 gün + - text: İhale Durumlarım + - paragraph: Takibe aldığınız ihalelere durum atayabilir, ekip içinde sürükle-bırak ile iş dağıtabilirsiniz. + - button "Kanban Panosunu Aç": + - generic: Kanban Panosunu Aç + - text: Rakip Radar & Pazar Payı + - generic: Sektör Analizi + - paragraph: Kazanan firma verisi biriktikçe (doğrudan temin & sonuç ilanları) gerçek pazar payları burada listelenir. + - button "Tüm Rakip Sözleşmelerini İncele": + - generic: Tüm Rakip Sözleşmelerini İncele + - heading "Ekip Yönetimi (0)" [level=3]: + - text: Ekip Yönetimi (0) + - textbox "Ad Soyad" + - textbox "E-posta (ops.)" + - combobox: + - option "Uzman" [selected] + - option "Yönetici" + - option "Saha" + - option "Muhasebe" + - button "Ekip Üyesi Ekle": + - text: Ekip Üyesi Ekle +- button +- button "Kullanım kılavuzu (? tuşu)": +- region "Notifications (F8)": + - list \ No newline at end of file diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 3389c70..70fb745 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -89,7 +89,7 @@ Tarayıcı kanıtı: [Yenileme sonrası beş kart](evidence/qa-kanban-after-relo ## Doğrulama -`npm test`: 43/43 geçti (son yeniden çalıştırma: 6 Eylül 2026). +`npm test`: 45/45 geçti (son yeniden çalıştırma: 6 Eylül 2026). `npm run build`: geçti; mevcut büyük paket/dinamik import uyarıları sürüyor. `node --check server/index.js`, `node --check server/user-store.mjs`, `git diff --check`: geçti. @@ -142,3 +142,10 @@ AI çıktısına kaynak içerik özeti (SHA-256 sürümü), kaynak/işlenen kara Modelden bulguya bağlı birebir kaynak alıntısı istenir. Sunucu, bulgu indeksinin mevcut olduğunu ve alıntının gerçekten işlenen metinde yer aldığını denetler; tekil konum, tekrarlı alıntı ve bulunamayan alıntı ayrılır. Uzun analiz birleştirmesi bulgu indekslerini yeniden eşler. Raporda okunabilir bulgu başlığıyla alıntılar ve doğrulanamayan bulgu sayısı gösterilir. Modelin verdiği sayfa numarası doğrulanmış kabul edilmez. Bir test mevcut olmayan bulgu, yanlış kaynak, doğru alıntı ve tekrarlı konumu kapsar. Bu özellik anlamsal/hukuki çıkarımı doğrulamaz; belge görüntüsüne sayfa/madde bağlantısı ve gerçek sağlayıcı çıktılarıyla kabul ayrıca bekler. 43 test ve derleme geçti. + + +## İnceleme kaydı ve sayaçlar + +Detayda açık kullanıcı işlemiyle incelendi/yeniden aç durumu sunucuya kaydedilir. Sadece pencerenin açılması incelemenin tamamlandığı iddiasını oluşturmaz. Sağ panel Kanban durumundan inceleme sonucu çıkarmayı bıraktı; aynı incelendi alanını ve filtre ölçütünü kullanır. İncelenmiş kayıt güncel havuzdan düşerse kayıtlı snapshot korunur. Aynı ihalede süren kayıt nedeniyle reddedilen işlem artık sessiz kalmaz. + +İki test sayaç/filtre eşitliği ve havuz dışı kaydı kapsar. Tarayıcıda sentetik Giresun kaydı incelendi olarak işaretlenip yenilendi: incelenen1, incelenmemiş4 kaldı. [Kanıt](evidence/qa-reviewed-after-reload.txt). 45 test ve derleme geçti. diff --git a/src/components/TenderDetailModal.jsx b/src/components/TenderDetailModal.jsx index 76d429b..c2e7523 100644 --- a/src/components/TenderDetailModal.jsx +++ b/src/components/TenderDetailModal.jsx @@ -97,7 +97,11 @@ export const TenderDetailModal = () => {
- İnceleyen: {userProfile.name} +