Case: Byggematerialefirma sparede 500 timer/år på fakturabehandling
Problem:
Et distributionsfirma for byggematerialer havde:
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:
csharp
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:
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:
csharp
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:
Resultat:
3. Én-kliks godkendelse for 80% af fakturaer
Flow:
flowchart
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:
csharp
// 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:
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:
Kvalitetsgevinster:
Hvorfor det virkede
"Den største innovation var ikke teknologien - men at genoverveje, hvad der faktisk var nødvendigt at validere."