# #024 Calendar v1.0.227 – verified voucher save (Candidate)

The voucher Save action is async. It checks nonzero balanced integer-yen entries, requires the mounted Calendar Standard SQLite adapter on the owning Calendar root, calls `upsertStandaloneFinanceVoucher` (or legacy task path), then awaits `binding.saveAll`. It re-reads the SQLite store through `binding.getData()` and matches ID, date, number, description and ledger line records before reporting saved.

If the DB is disconnected, loading, write fails, or read-back differs, the UI reports an explicit save failure, does not claim persistence, and does not destroy in-progress voucher data. Zero-yen vouchers are rejected with instructions to transfer amounts from the payroll/PDF screen first. The voucher chooser displays the count; its refresh action does not reset in-progress edits. No database migration/reset or changes to frozen #029/#048 are made.

Windows/Apache localhost persistent storage requires verification in the user's environment. A previous click on Save is not proof of a successful write.
