diff --git a/bin/eventPredicates.ml b/bin/eventPredicates.ml index e49e1f9..a98b075 100644 --- a/bin/eventPredicates.ml +++ b/bin/eventPredicates.ml @@ -1,152 +1,6 @@ open Icalendar open Utils -(* CASE ANALYSIS PREDICATES - - id: P00 ✅ - pattern: Ha un SUMMARY? - ics: "SUMMARY:…" - remind_support: nativo - strategia: "REM MSG " - snippet: 'REM 2025-12-25 MSG Natale' - priorita: Subito - - - id: P01 ✅ - pattern: All-day singolo - ics: "DTSTART;VALUE=DATE, opzionale DTEND=giorno+1" - remind_support: nativo - strategia: "REM MSG " - snippet: 'REM 2025-12-25 MSG Natale' - priorita: Subito - - - id: P02 ✅ - pattern: All-day multi-giorno - ics: "DTSTART;VALUE=DATE + DTEND;VALUE=DATE esclusivo" - remind_support: nativo+accorgimenti - strategia: "espandi in eventi giornalieri; stesso SUMMARY" - snippet: 'REM 2025-08-10 THROUGH 2025-08-15 MSG Ferie # oppure espansione per-giorno' - priorita: Subito - - - id: P03 ✅ - pattern: Evento a orario locale - ics: "DTSTART;TZID=… + DTEND oppure DURATION" - remind_support: nativo - strategia: "REM AT [DURATION] MSG …" - snippet: 'REM 2025-10-05 AT 09:00 DURATION 1:00 MSG Riunione' - priorita: Subito - - - id: P04 ✅ - pattern: Evento a orario in UTC - ics: "DTSTART/DTEND con suffisso Z" - remind_support: nativo+accorgimenti - strategia: "converti a fuso locale prima di emettere AT" - snippet: 'REM 2025-09-03 AT 06:45 MSG Treno' - priorita: Subito - - - id: P05 ✅ - pattern: Ricorrenza settimanale semplice - ics: "RRULE:FREQ=WEEKLY;BYDAY=…;[UNTIL|COUNT]" - remind_support: nativo - strategia: "REM FROM [UNTIL ] AT MSG …" - snippet: 'REM Mon Wed FROM 2025-09-01 UNTIL 2025-10-31 AT 09:00 MSG Standup' - priorita: Subito - - - id: P06 ✅ - pattern: Ricorrenza giornaliera semplice - ics: "RRULE:FREQ=DAILY;[UNTIL|COUNT]" - remind_support: nativo - strategia: "REM FROM UNTIL AT EVERY 1 MSG …" - snippet: 'REM FROM 2025-10-01 UNTIL 2025-10-10 AT 08:30 MSG Daily' - priorita: Subito - - - id: P07 ✅ - pattern: Ricorrenza mensile per giorno fisso - ics: "RRULE:FREQ=MONTHLY;BYMONTHDAY=…" - remind_support: nativo - strategia: "REM AT FROM/UNTIL" - snippet: 'REM 15 AT 10:00 FROM 2025-01-01 MSG Fatture' - priorita: Dopo - - - id: P08 ✅ - pattern: Ricorrenza “n-esimo weekday” del mese - ics: "RRULE:FREQ=MONTHLY;BYDAY=MO;BYSETPOS=3" - remind_support: espansione - strategia: "materializza occorrenze in singoli REM o calcola in codice" - snippet: '# genera REM per ciascuna data calcolata' - priorita: Dopo - - - id: P09 ✅ - pattern: Ricorrenza annuale semplice - ics: "RRULE:FREQ=YEARLY;[BYMONTH][BYMONTHDAY]" - remind_support: nativo - strategia: "REM MSG …" - snippet: 'REM Jul 29 MSG Compleanno' - priorita: Dopo - - - id: P10 ✅ - pattern: Eccezioni - ics: "EXDATE (una o più), RDATE aggiuntive" - remind_support: nativo+accorgimenti - strategia: "usa OMIT per rimuovere date; aggiungi REM singoli per RDATE" - snippet: 'REM Mon AT 09:00 FROM 2025-09-01 UNTIL 2025-10-31 MSG Standup\nOMIT 2025-10-13' - priorita: Subito - - - id: P11 ✅ - pattern: Override/cancellazioni per istanza - ics: "RECURRENCE-ID con contenuto modificato o STATUS:CANCELLED" - remind_support: espansione - strategia: "OMIT la data dalla serie; aggiungi REM singolo con i campi override" - snippet: '# serie + REM specifico per l’istanza' - priorita: Subito - - - id: P12 ✅ - pattern: DURATION al posto di DTEND - ics: "DURATION:PT…" - remind_support: nativo - strategia: "mappa su DURATION in REM" - snippet: 'REM 2025-10-05 AT 14:00 DURATION 2:30 MSG Workshop' - priorita: Subito - - - id: P13 - pattern: Allarmi - ics: "VALARM DISPLAY/AUDIO/EMAIL; TRIGGER relativo" - remind_support: parziale - strategia: "mappa 1 allarme principale su WARN; multipli opzionali come REM duplicati HIDE" - snippet: 'REM 2025-10-05 AT 09:00 WARN 15 MSG Riunione' - priorita: Dopo - - - id: P14 ✅ - pattern: Fusi orari dichiarati (VTIMEZONE, TZID diversi) - ics: "VTIMEZONE + DTSTART;TZID=…" - remind_support: nativo+accorgimenti - strategia: "normalizza tutto al fuso locale del sistema prima dell’output" - snippet: '# conversione in pre-processing' - priorita: Subito - - - id: P15 ❌ WILL NOT SUPPORT - pattern: Partecipanti/organizzatore - ics: "ORGANIZER, ATTENDEE*, PARTSTAT…" - remind_support: non previsto - strategia: "appendi a DESCRIPTION/MSG come testo" - snippet: '# nessuna semantica in Remind' - priorita: Quando serve - - - id: P16 ❌ WILL NOT SUPPORT - pattern: Allegati/URL esterni - ics: "ATTACH, URL" - remind_support: non previsto - strategia: "conserva URL in coda al MSG" - snippet: '# link nel testo' - priorita: Quando serve - - - id: P17 ✅ - pattern: Meeting online (Google/Teams metadati) - ics: "X-GOOGLE-CONFERENCE, X-MICROSOFT-*" - remind_support: non previsto - strategia: "estrai solo URL di join nel MSG" - snippet: '# riduci al link' - priorita: Quando serve -*) - type error = Invalid_date of string | Skip let invalid_date s e = Error (Invalid_date (spf "Invalid date: %s, error: %s" s (show_error e)))