Gå til indhold

Verificeret mod app@9d146f9, 16 skal genverificeres, 0 brudt

Tabt kvittering regner øre med round(v * 100)

Fælde

faelde.kvitteringer.tabt-kvittering-oere

LostReceiptService::createAsVoucher omregner beløb til øre med et fast gange 100 på en float, i strid med pengereglen.

Status: live. Verificeret 2026-10-01 mod app@e99eb6a.

Felter

symptom
Et erstatningsbilag i en valuta uden to decimaler får et beløb, der er 100 gange for stort eller for småt, og en halv øre kan runde forkert.
aarsag
Metoden viser beløbet i PDF-bilaget med MinorUnits::toMinor, men gemmer beløbet på bilaget med (int) round((float) $v * 100). Det fejler for valutaer uden to decimaler og for halve øre, fordi floaten ikke er præcis. Pengereglen kræver heltal i mindste enhed og valutabevidst omregning.
saadan undgaas
Brug MinorUnits::toMinor til både visning og lagring. Rettes ikke i Atlas. Bifund fra recon, stadig sandt på main.

Prosa

VoucherPopulator bruger den rigtige omregning, MinorUnits::toMinor, som kalder Money::fromMajor med bcmath og halv op. Kun erstatningsbilaget bruger det faste gange 100. Sporet på denne fælde er også nævnt i PR-teksten.

Kilder

kode: app app/Services/Ap/LostReceiptService.php · LostReceiptService::createAsVoucherverificeretkode: app app/Services/Ap/VoucherPopulator.php · VoucherPopulator::populateverificeret

Bruges af