diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index c43143e..c9d080e 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -1271,6 +1271,11 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö - Açıklamadaki “otomatik güncellenmez” ifadesi, kaynak sürümü ve resmi doğrulama gereğini belirten güncelleme yönlendirmesiyle değiştirildi. ICS’nin kendisi hâlâ resmi takvim servisine otomatik gönderim yapmaz. - Regresyon testi UID sürekliliğini ve 3→4 sürüm artışını doğruluyor. 278 test ve build başarılı. Google/Outlook gerçek test takvimlerine aktarım henüz yapılmadı; genel plan açık. +### 2026-09-06 — ICS son değişiklik zamanı + +- ICS olayına `LAST-MODIFIED` alanı eklendi. `DTSTAMP`, `LAST-MODIFIED` ve `SEQUENCE` aynı kaynak üretim anı/sürümüyle birlikte yazılıyor; takvim istemcileri değişiklik zamanını ve sürüm ilerlemesini ayırt edebiliyor. +- Tarih değişimi ve UID sürekliliği testine son değişiklik zamanı kontrolü eklendi. 283 test ve build başarılı. Gerçek Google/Outlook senkronizasyonu hâlâ yapılmadı; genel plan açık. + ### 2026-09-06 — Kayıtlı filtre formu ön doldurma - Kayıtlı filtre oluşturma formu artık mevcut anahtar kelime, kurum adı, İKN, şehir, bölge, alım türü, kurum tipi ve ilk sektör ölçütünü başlangıç değeri olarak gösteriyor. Kullanıcı aynı aramayı tekrar elle kurmadan ad verip kaydedebiliyor. diff --git a/src/services/tenderCalendar.js b/src/services/tenderCalendar.js index ec43e3c..88284c6 100644 --- a/src/services/tenderCalendar.js +++ b/src/services/tenderCalendar.js @@ -32,7 +32,7 @@ export function createTenderICS(t, now = new Date()) { const rawSequence=Number(t.icsSequence ?? t.documentVersion ?? 0); const sequence=Number.isSafeInteger(rawSequence)&&rawSequence>=0 ? rawSequence : 0; return ['BEGIN:VCALENDAR','VERSION:2.0','PRODID:-//Ihaleist//Tender Calendar//TR','CALSCALE:GREGORIAN', - 'BEGIN:VEVENT',`UID:${uid}@ihaleist.com`,`DTSTAMP:${stamp(now)}`, + 'BEGIN:VEVENT',`UID:${uid}@ihaleist.com`,`DTSTAMP:${stamp(now)}`,`LAST-MODIFIED:${stamp(now)}`, `SEQUENCE:${sequence}`,`DTSTART:${stamp(start)}`,'TRANSP:TRANSPARENT', `SUMMARY:${escapeICS('İhale son teklif: '+t.baslik)}`, `DESCRIPTION:${escapeICS('İKN: '+t.ikn+' — '+t.kurum+'\nKaynak sürümünü ve ihale tarihini resmi kaynaktan doğrulayın; zeyilname veya tarih değişikliğinde aynı UID ve artan sürümle takvimi güncelleyin.')}`, diff --git a/tests/calendar.test.mjs b/tests/calendar.test.mjs index 9e1940f..1d4e019 100644 --- a/tests/calendar.test.mjs +++ b/tests/calendar.test.mjs @@ -64,6 +64,7 @@ test('ICS exposes a stable event version for calendar updates',()=>{ const first=createTenderICS({...t,documentVersion:3},new Date('2026-09-01T00:00:00Z')); const changed=createTenderICS({...t,tarih:'12.09.2026',saat:'14:30',documentVersion:4},new Date('2026-09-02T00:00:00Z')); assert.match(first,/SEQUENCE:3/); assert.match(changed,/SEQUENCE:4/); + assert.match(changed,/LAST-MODIFIED:20260902T000000Z/); assert.equal(first.match(/UID:[^\r\n]+/)[0],changed.match(/UID:[^\r\n]+/)[0]); assert.match(changed,/art%C4%B1?an|artan sürüm|artan/); });