Case: Fakturabehandling
Case: Byggematerialefirma sparede 500 timer/år på fakturabehandling
01 — Problem
Et distributionsfirma for byggematerialer havde:
- 12 forskellige fakturalinjer pr. ordre
- Manuel matching af indkøbsordrer mod fakturaer
- 3 medarbejdere brugte 15 timer/uge på fejlrettelser
02 — Vores tiltag
1. Standardisering af fakturalinjer (Fra 12 → 3 kategorier)
Problem:
Fakturaer indeholdt overflødige detaljer:
- 6-8 linjer for emballagegebyrer (kasse, tape, polstring, etc.)
- 4 linjer for forskellige fragttyper
- 2 linjer for "diverse tillæg"
Løsning:
Vi implementerede en faktura-normaliseringsengine:
public class InvoiceNormalizer
{
public NormalizedInvoice Normalize(SupplierInvoice rawInvoice)
{
return new NormalizedInvoice
{
Materials = SumAllMaterialLines(rawInvoice.Lines),
Shipping = CalculateShippingTotal(rawInvoice.Lines),
Surcharges = CalculateSurcharges(rawInvoice.Lines)
};
}
private decimal SumAllMaterialLines(List<InvoiceLine> lines)
{
// Antager InvoiceLine har Amount og Category properties
return lines.Where(l => l.Category == "MATERIAL")
.Sum(l => l.Amount);
}
// ... tilsvarende for Shipping og Surcharges
}
Effekt:
- 90% færre linjekonflikter ved matching
- Enkelt sted at opdatere priser (ingen "jagten" på specifikke linjer)
- Automatisk validering af afvigelser (f.eks. hvis "MATERIAL" beløb > ordreværdi)
2. Automatisk matching baseret på ordrenummer
Gammel proces:
Medarbejdere skulle manuelt:
- Åbne ordresystem
- Søge på leverandørnavn
- Matche datoer og beløb
Ny løsning:
Vi byggede en faktura-auto-matcher med:
public async Task<MatchResult> MatchInvoiceAsync(string orderNumber, decimal amount)
{
// Antager _orderRepo findes og har GetByNumberAsync
var order = await _orderRepo.GetByNumberAsync(orderNumber);
if (order == null)
return MatchResult.NotFound();
// Tolerance for 2% afvigelse i beløb
// Antager order har TotalAmount property
if (Math.Abs(order.TotalAmount - amount) > order.TotalAmount * 0.02m)
return MatchResult.AmountMismatch();
return MatchResult.Success(order);
}
Optimeringer:
- Fuzzy matching på ordrenumre (f.eks. "PO-1234" ≡ "1234")
- Automatisk valutaomregning for internationale ordrer
- Machine learning til at identificere hyppige matching-mønstre
Resultat:
- Fra 15 → 2 minutter pr. faktura
- False positives < 0,5%
3. Én-kliks godkendelse for 80% af fakturaer
Flow:
graph TD
A[Faktura modtaget] --> B{Automatisk match?}
B -->|Ja| C[Vis "Godkend" knap]
B -->|Nej| D[Send til manuel review]
C --> E[Log godkendelse i blockchain]
Teknisk implementering:
// Antager ASP.NET Core Controller kontekst
[HttpPost]
public async Task<IActionResult> ApproveInvoice(string invoiceId, [FromServices] IBlockchainService blockchain)
{
// Antager _invoiceRepo findes
var invoice = await _invoiceRepo.GetAsync(invoiceId);
// Valider at fakturaen er klar til godkendelse
// Antager Invoice har Status property og Approve metode
if (invoice.Status != InvoiceStatus.PendingApproval)
return BadRequest();
// Gem uforanderlig transaktion
// Antager IBlockchainService findes
var txHash = await blockchain.LogApprovalAsync(
invoiceId,
User.Identity.Name, // Kræver bruger er logget ind
DateTime.UtcNow
);
invoice.Approve(txHash);
await _invoiceRepo.UpdateAsync(invoice);
return Ok();
}
Sikkerhedsforanstaltninger:
- Fire-and-forget arkitektur - Godkendelser behandles asynkront
- Blockchain-audit trail - Uforfalskelig logning
- Separat godkendelsesflow for fakturaer > 50.000 kr
03 — Samlet virkning
Disse tiltag sammen bidrog til:
Tidsbesparelser:
| Aktivitet | Før | Efter | Besparelse |
|---|---|---|---|
| Fakturabehandling | 12 min | 2 min | 83% |
| Fejlrettelse | 3 timer/uge | 0,5 timer/uge | 85% |
Økonomi:
- 500 timer/år ⇨ ~375.000 kr sparet (ved 750 kr/time)
- Reduceret cashflow-tid fra 45 → 22 dage
- Nul papirfakturaer efter 6 måneder
Kvalitetsgevinster:
- Leverandørers tilfredshed: +40%
- Regnskabsfejl: Fra 5% → 0,8%
04 — Hvorfor det virkede
- Vi angreb kompleksiteten ved kilden (fakturalinjer) i stedet for at bygge komplekse workarounds
- Brugte eksisterende data smartere (ordrenumre var allerede unikke nøgler)
- Designet for "happy path" - optimerede 80% af tilfældene i stedet for at overengineere for edge cases
Den største innovation var ikke teknologien - men at genoverveje, hvad der faktisk var nødvendigt at validere.
Læs også
Mere fra os.
Case: Returproces fra 14 til 3 trin
En modevirksomhed skar sin returproces fra 14 til 3 trin ved at fjerne RMA-numre og automatisere flowet. Færre fejl og gladere kunder.
Læs casen →Case: AI-dokumentanalyse i forsikring
Nordisk Pension & Forsikring skar 68% af sagsbehandlingstiden med AI, der læser komplekse policedokumenter og sikrer ensartede vurderinger.
Læs casen →Systemintegration med Azure
Vi forbinder CRM, ERP, webshop og andre systemer, så data flyder frit, arbejdsgange automatiseres og fejl minimeres. Med Azure Integration Services.
Læs artiklen →Ring. Vi tager den.
Ring eller skriv — vi lytter og hjælper gerne.