bmc_hub/fremtidige planer/sikker-fakturaudtraek-hybrid-ai.md

174 lines
5.9 KiB
Markdown

# Sikkert fakturaudtræk med layoutanalyse og AI
## Status
Under udvikling. Første hybridlag med universel linjeudtrækning, AI-sammenligning,
matematisk validering og review-status er implementeret lokalt. Koordinatbaseret
PDF-evidens og visuel markering i originaldokumentet mangler fortsat.
## Formål
Erstat den nuværende tekst- og regex-tunge fakturabehandling med en revisionssikker hybridpipeline. Kritiske værdier må ikke accepteres alene på baggrund af et AI-svar.
## Integration i eksisterende flow
Den eksisterende behandling bevares som orkestrering, men ændres fra en fallback-kæde til flere uafhængige analyser:
```text
PDF
├─ original og checksum
├─ layoutudtræk med ordkoordinater
├─ deterministisk felt- og tabelparser
├─ kendt leverandørprofil/template
└─ AI-strukturering
sammenligning
matematisk validering
høj sikkerhed / manuel kontrol
```
## Nye komponenter
### `invoice_document_service`
- Åbner PDF'en én gang.
- Afgør om den har et brugbart tekstlag.
- Udtrækker ord, koordinater, sider og tabelkandidater.
- Renderer og OCR-behandler kun sider uden brugbart tekstlag.
- Gemmer et fælles dokumentformat til de øvrige analysatorer.
### `invoice_layout_parser`
- Finder labels og værdier ud fra position, ikke kun læserækkefølge.
- Genopbygger varetabeller ud fra kolonneoverskrifter og x-positioner.
- Samler fortsættelseslinjer under korrekt varelinje.
- Knytter model, EAN, KN8 og serienumre til den relevante position.
- Returnerer kildehenvisning og bounding box for hvert felt.
### `invoice_ai_analyzer`
- Modtager renset dokumenttekst og layoutparserens kandidater.
- Returnerer et fast JSON-schema.
- Bruges til semantisk strukturering og løsning af tvetydigheder.
- Må ikke overskrive sikre deterministiske værdier uden at skabe en konflikt.
### `invoice_validator`
- Sammenligner resultater fra layout, template og AI.
- Kontrollerer antal gange pris mod linjetotal.
- Kontrollerer subtotal, momsgrundlag, moms og total.
- Understøtter omvendt betalingspligt pr. varelinje.
- Kontrollerer sidetal, positionshuller, dubletter, valuta og fortegn.
- Afviser BMC's egne CVR-numre som leverandør-CVR.
### `invoice_review_service`
- Beregner samlet sikkerhed ud fra dokumenteret enighed og validering.
- Opretter konkrete review-punkter ved uenighed.
- Tillader manuel rettelse uden at slette det oprindelige resultat.
## Fælles resultatformat
Hvert kritisk felt skal indeholde:
- Normaliseret værdi
- Oprindelig tekst
- Side og bounding box
- Udtræksmetode
- AI-enighed
- Sikkerhed
- Eventuelle konflikter
Eksempel:
```json
{
"value": 17512.25,
"source_text": "Totalbeløb DKK 17.512,25",
"page": 2,
"bounding_box": [470, 315, 560, 332],
"methods": ["layout", "ai"],
"confidence": 0.99,
"validated": true
}
```
## Database
Bevar eksisterende faktura- og extraction-tabeller. Tilføj særskilt revisionsdata til:
- Dokumentudtræk og parser-version
- Felt-evidens
- Valideringsresultater
- Konflikter og advarsler
- Manuel korrektion
- Model- og prompt-version
Gem ikke store OCR-/layoutobjekter direkte i hovedtabellen, hvis de kan placeres i en separat analyse-/evidenstabel.
## Eksisterende templates
- Kendte invoice2data- og database-templates beholdes.
- De bliver en af flere kilder, ikke automatisk facit.
- Leverandørprofiler kan gemme tabelkolonner, labels, momsregler og kendte sideelementer.
- En profil aktiveres kun ved sikker identifikation af leverandør og dokumenttype.
## Brugerflade
Review-visningen skal vise PDF og udtrukne data side om side.
- Klik på et felt fremhæver kilden i PDF'en.
- Grøn betyder dokumenteret og valideret.
- Gul betyder lav sikkerhed eller mindre afvigelse.
- Rød betyder konflikt eller matematisk fejl.
- Brugeren ser den konkrete årsag til manuel kontrol.
- Manuelle rettelser gemmes med bruger og tidspunkt.
## Godkendelsesregler
Automatisk behandling må først ske, når alle følgende krav er opfyldt:
- Kendt og valideret leverandør
- Leverandør-CVR er ikke BMC's eget CVR
- Fakturanummer, dato, valuta og total har dokumenteret kilde
- Kritiske felter er bekræftet af mindst to metoder eller én metode plus matematisk bevis
- Alle relevante summer stemmer inden for afrundingstolerance
- Ingen manglende sider eller varepositioner
- Ingen ændrede betalingsoplysninger
- Ingen uløste konflikter
- Samlet sikkerhed over den fastsatte grænse
Indtil løsningen er evalueret på et repræsentativt datasæt, er manuel godkendelse standard.
## Fejlhåndtering
- AI-nedbrud må ikke stoppe deterministisk udtræk.
- OCR-fejl skal føre til manuel kontrol, ikke tomme værdier accepteret som succes.
- Ugyldig AI-JSON må aldrig gemmes som godkendt resultat.
- Parserfejl logges med dokument-, side-, parser- og modelversion.
- Genbehandling må ikke overskrive tidligere revisionsdata.
## Leveringsfaser
1. Fælles dokumentmodel med tekst, ordkoordinater og sider.
2. Koordinatbaseret parser for DCS-fakturaer og regressionstest med faktura 5509938.
3. Felt-evidens og matematisk validator.
4. AI-analyse med låst JSON-schema og konfliktsammenligning.
5. Review-UI med fremhævelse i PDF'en.
6. Pilot på historiske fakturaer uden automatisk bogføring.
7. Måling af præcision pr. leverandør og felttype.
8. Kontrolleret aktivering af automatisk behandling for godkendte leverandørprofiler.
## Acceptkriterier for DCS 5509938
- Alle otte varepositioner findes.
- Fakturanummer `5509938` og dato `2026-09-08` findes.
- DCS ApS og CVR `26686091` identificeres som leverandør.
- BMC CVR `29522790` identificeres som køber og ignoreres som leverandør.
- Varebeløb `17379.00`, momsgrundlag `533.00`, moms `133.25` og total `17512.25` findes.
- Omvendt betalingspligt knyttes til de relevante linjer.
- Kontrollen dokumenterer `17379.00 + 133.25 = 17512.25`.
- Hvert kritisk felt kan spores til side og placering i originaldokumentet.