# 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.