174 lines
5.9 KiB
Markdown
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.
|