Skip to content

Mark vouchers corrected by later corrections - #118

Merged
perNyfelt merged 12 commits into
mainfrom
feature/superseded-voucher-marker
Aug 1, 2026
Merged

Mark vouchers corrected by later corrections#118
perNyfelt merged 12 commits into
mainfrom
feature/superseded-voucher-marker

Conversation

@perNyfelt

Copy link
Copy Markdown
Member

Summary

  • show Corrected by ... markers in the transaction report and voucher editor
  • warn before creating additional corrections in the GUI and MCP tool
  • add localized statuses, bulk correction lookups, and regression coverage

Why

Corrected originals remain ACTIVE and continue to appear in reports, so users need an informational marker when reviewing historical vouchers. Additional corrections are allowed by the existing domain model, but now require explicit confirmation in the GUI or force: true through MCP.

Validation

  • ./gradlew spotlessApply
  • ./gradlew codenarcMain
  • targeted voucher/report/UI/MCP tests
  • ./gradlew build

Spec för att visa "ersatt av korrigering" i transaktionsrapporten och
verifikationsredigeraren, så att man inte råkar återanvända en
verifikation som redan korrigerats som referens.
…ättare fråga, MCP-paritet

Adresserar granskningsfynd: korrigering-av-korrigering är omöjligt idag
(status-guard), original förblir ACTIV och rapporten är inte en historisk
ögonblicksbild, frågan hämtar bara verifikationsnummer istället för hela
Voucher-objekt, och MCP-verktyget får samma varning som GUI:t via en
force-flagga.
- delad bekräftelsehjälpare för både korrigeringsknappen och
  deleteOrCancelVoucher()/voidButton, så inte void-vägen kringgår varningen
- specificera att force måste läggas till i McpToolDefinitions verktygsschema,
  inte bara i verktygslogiken
- rätta felaktig beskrivning av korrigeringsraderna (bara reversering,
  ingen automatisk ersättningsrad)
- lägg till korrigering av refreshCaptionLabels() så etiketten byggs om
  vid språkbyte, likt correctsLabel/correctsOriginalVoucherNumber
- rätta reset-platsen till showEmptyVoucher() (inte showBlankVoucher(),
  som bara är en tunn wrapper) så både tom verifikation och
  utkaståterställning (restoreNavigationDraft) nollställer etiketten
…listan

correctsLabel styrs av originalVoucherId != null, inte status ==
CORRECTION - dokumentera det som en applikationsnivå-invariant (upprätthålls
av createCorrectionVoucher, inte av schemat) snarare än en garanti.
Uppdatera även sammanfattningen i MCP-avsnittet att inkludera void-vägen.
- båda uppslagen filtrerar nu enbart på original_voucher_id (ingen
  status-filtrering), i linje med att kopplingen inte är
  databasenforcerad - annars kunde de två frågorna ge olika svar om
  invarianten någonsin bröts
- rättade felaktiga radnummer (correctsLabel, addCorrectsHeaderLabel,
  correctionButton-lyssnaren, deleteOrCancelVoucher, void-dialogen,
  createCorrectionVoucher) mot nuvarande filinnehåll efter att grenen
  grundades om på uppdaterad main
Sju uppgifter i TDD-ordning: VoucherService-frågan, transaktionsrapportens
statuskolumn, redigerarens etikett, GUI-bekräftelsen (delad mellan
korrigeringsknappen och den låsta voidButton-vägen), MCP-schemat,
MCP-beteendet, och en slutgiltig ./gradlew build + manuell dialogkontroll.
- döp om spec/plan-filerna från superseded- till corrected-voucher-marker
  för att matcha terminologin som faktiskt används
- gör deleteOrCancelVoucher()-vägen fullt testbar (cannotDeleteConfirmer-
  seam + @PackageScope) istället för att lämna den helt otestad, eftersom
  voidButton är permanent inaktiverad
- ersätt magiskt kolumnindex [8] i transaktionsrapportens tester med en
  uppslagning via kolumnrubriken
- förtydliga radnummer i Task 4 som blir inaktuella efter Task 3:s
  redigeringar av samma fil, med metodnamn som primärt ankare
- gör antagandet om räkenskapsårsscope i loadCorrectionVoucherNumbersByOriginal
  explicit med en kodkommentar
- utöka Task 7:s manuella verifiering med svenskt språkbyte och en koll av
  headerlayouten
- correctedByLabel får samma varningsfärg som unsavedLabel
  (new Color(180, 83, 9)), som specen krävde men planen tidigare saknade
- ny test som återanvänder samma prev/next-sekvens som befintliga
  restoreNavigationDraftFallsBackToBlankVoucherForAnUnresolvableRememberedSeries,
  för att bevisa att showEmptyVoucher()-nollställningen även träffas via
  restoreNavigationDraft(), inte bara via en nybyggd panel
@perNyfelt
perNyfelt merged commit 141df7e into main Aug 1, 2026
3 checks passed
@perNyfelt
perNyfelt deleted the feature/superseded-voucher-marker branch August 1, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant