Teknisk Vist · Hvordan AI-en leser tid
En full gjennomgang av deterministiske datohint, rutet LLM-uttak, juridiske frister, live SSE-oppdateringer og eksport til DOCX/ICS.
Arkitektur
Tidslinje finner først deterministiske datohint, sender dokumentet gjennom én rutet strukturert uttaksflyt, og lar deretter PHP filtrere, vurdere, beregne frister og klargjøre eksport.
Før noe modellkall skanner PHP hele teksten for datoer som matcher 12+ norske formater og normaliserer dem til ISO 8601 når det er mulig:
dd.mm.yyyy → YYYY-MM-DDNormaliserte anker legges inn i uttaksprompten for å redusere oppdiktede eller feiltolkede datoer. De er hint, ikke et eget AI-resultat.
Valgt rute leser dokumentet sammen med datohintene. For hver tidsreferanse returneres et strukturert JSON-hendelsesobjekt med fristfelter:
date — resolved ISO date, or verbatim string if unresolvabledate_type — absolute | relative | recurring | conditional | periodconfidence — high | medium | lowactor — attributed entity (from source text, not inferred)description — one-sentence event summarysource_excerpt — verbatim text fragment (max 200 chars)is_deadline / deadline_kind — eksplisitte juridiske fristmarkører når de finnesPrompten instruerer modellen tydelig om ikke å finne på datoer eller aktører som ikke finnes i kilden. Lange tekster deles server-side og settes sammen igjen i samme skjema.
PHP anvender aktive filtre og avledet fristlogikk før resultatet returneres:
Etterbehandlingen bygger også deadlines[], listen what_remains_uncertain og anbefalingen next_practical_step.
Dato gjenkjenning
Norske juridiske dokumenter bruker mange datonotasjoner. Tidslinje gjenkjenner disse deterministisk før modellen ser teksten, og ber deretter modellen løse de gjenværende kontekstuelle referansene.
| Format | Eksempel | Notater |
|---|---|---|
dd.mm.yyyy |
30.07.2015 | Standard norsk numerisk |
dd.mm.yy |
09.04.25 | To-sifret år → alltid 20YY |
d. månedsnavn yyyy |
3. mars 2024 | Skriftlig måned på bokmål/nynorsk |
d. månedsnavn |
15. januar | År utledet ved nærhetsskanning |
yyyy-mm-dd |
2024-03-12 | ISO 8601 |
månedsnavn yyyy |
mars 2024 | Måned + år kun |
yyyy |
2024 | År-referanse |
| Season + year | høsten 2023 | Sesongreferanse → Q3/Q4 |
| Diary-format line | 18.09.2025: Møte avholdt | Dato + kolon → automatisk merket som hendelse |
| Relative reference | tre uker etter vedtaket | Forankret til nærmeste løste hendelse |
| Recurring pattern | hver mandag | Klassifisert som gjentakende |
| Period / range | fra mars til juni 2024 | Gir start_dato + slutt_dato |
Klassifiseringsskjema
| date_type | Definisjon | Eksempel |
|---|---|---|
absolute |
En spesifikk, løselig kalenderdato | 30.07.2015 → 2015-07-30 |
relative |
En dato uttrykt relativt til en annen hendelse | tre uker etter vedtaket |
recurring |
Et mønster som gjentar seg etter en timeplan | each Monday, every 6 months |
conditional |
En dato avhengig av at en betingelse er oppfylt | if no response within 14 days |
period |
Et datointervall eller varighet med start og slutt | fra mars til juni 2024 |
| konfidens | Betydning | Visuell i tidslinje |
|---|---|---|
high |
Datoen er eksplisitt og entydig angitt i kildeteksten | Grønn merkelapp |
medium |
Datoen er utledet, omtrentlig, eller angitt med liten tvetydighet | Amber merkelapp |
low |
Datoen er implisert, uten dato, eller hentet fra et forringet/tvetydig avsnitt | Grå merkelapp |
| Regel | Eksempel |
|---|---|
| Navngitt enhet i samme setning | “Trude [saksbehandler] ringte 14. mars” → actor: Trude |
| Rollemerkelapp uten navn | “Barnevernet fattet vedtak” → actor: Barnevernet |
| Ingen klar attribusjon i setningen | actor: [unattributed] |
| Standard på dokumentnivå | Hvis ingen aktør per hendelse, standardiseres til dokumentets avsender/utstedende organ |
Motorer
Rask, Standard og Dyp returnerer samme JSON-skjema, slik at etterbehandlingen håndterer dem likt. Rutevalg påvirker hastighet, kvalitet, kredittkostnad og fallback-rapportering.
| Motor | Modell | Forsinkelse | Best for |
|---|---|---|---|
| Rask | nova-lite (egen GPU via LiteLLM) |
~10-25 s | Raske utkast og kortere dokumenter der hastighet er viktigst. |
| Standard ★ | Claude Haiku 4.5 (Amazon Bedrock EU; gpt-4o-mini bare hvis Bedrock er deaktivert) |
~20-45 s | Standardruten for de fleste juridiske dokumenter; balansert hastighet, kvalitet og kostnad. |
| Dyp | Claude Sonnet 4.6 (Amazon Bedrock EU) |
~45-90 s | Tette eller komplekse saker med mange aktører, overlappende hendelser eller svak kildekvalitet. |
Live oppdateringer og eksport
Tidslinje bruker Server-Sent Events (SSE) for å strømme statusmeldinger til nettleseren mens uttaket kjører, inkludert klargjøring, uttak, parsing og sluttmontering.
Når uttaket er ferdig, kan du eksportere en formatert .docx med merkede hendelser og kildeutdrag, eller laste ned en .ics-kalenderfil for daterte hendelser og frister.
Personvern & sikkerhet
Personvern ved design
nova-lite via LiteLLM; Standard og Dyp bruker Amazon Bedrock EU når det er aktivert, med eksisterende rutet sky-fallback hvis Bedrock er deaktivert.Tilgjengelig for Do Better Norge-medlemmer med synlig ruting, kredittestimat og prosess-og-glem-håndtering.