Gå til innhold

ADR-001: Blob storage-struktur for saksdokumenter⚓︎

Kontekst⚓︎

Vi har pilotert en MVP for å støtte saksbehandlere i å analysere innkommende filer basert på regelverk. Basert på nye krav og innsikt må vi justere hvordan vi lagrer filer for prosessering.

Et saksnummer er sammensatt av to siffer for år etterfulgt av skråstrek og løpenummer, f.eks. 25/1718. Journalpostnummer følger samme format. En journalpost består av dokumenter — ett hoveddokument og vedlegg.

Nøkkeldrivere⚓︎

  • RAG: Saksbehandler skal kunne søke i dokumenter på tvers av saker
  • Fakta: Vi trenger å ekstrahere strukturert innhold fra dokumenter (f.eks. fakturaer)

Beslutning⚓︎

Vi lagrer blobs i en hierarkisk struktur som speiler arkivstrukturen:

Text Only
1
2
3
4
5
6
7
8
25/                                 # År (første del av saksnummer)
  └── 1718/                         # Andre del av saksnummer
        └── 25/                     # År (journalpostnummer)
              └── 3333/             # Andre del av journalpostnummer
                    ├── originaler/  # Hoveddokument og vedlegg
                    ├── markdown/   # OCR-konvertert til markdown
                    ├── facts/      # Ekstrahert strukturert innhold
                    └── analysis/   # Analyserapporter

Begrunnelse⚓︎

  • Hierarkiet matcher arkivstrukturen i WebSak, noe som gjør det intuitivt å navigere
  • Azure AI Search indexer kan peke direkte på en container og indeksere alle dokumenter
  • Separasjon av originaler, markdown og fakta gjør det mulig å bruke forskjellige pipelines

Konsekvenser⚓︎

Positive:

  • Strukturerte fakta komprimerer dokumenter til mindre prompt-inndata, sparer tokens
  • RAG over saksdokumenter blir mulig
  • Blob-stier er forutsigbare fra saksnummer + journalpostnummer

Avveininger:

  • Dypt hierarki kan gjøre manuell navigering i Storage Explorer tungvint
  • Saksnummerformat med skråstrek (25/1718) må saniteres for bruk som blob-path
  • Segmentet for originaldokumenter heter originaler/ (norsk) i koden (JournalpostBlobPath.Originaler), i tråd med navnekonvensjonen i v1. Diagramet over gjenspeiler den faktiske on-disk-strukturen.