summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
62 min.settings: per-feature voucher series and console invoice number; tui: F9 hintsv0.1.60Anders Betts
8 hourstls: load the system CA bundle explicitly under static OpenSSLv0.1.58Anders Betts
12 hourscommands: db_row_json and db_exec_bound helpersAnders Betts
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12 hoursmail: honor smtp_reply_to; mention payroll in agent instructionsAnders Betts
13 hourspayroll: lönebesked PDF and mail (schema v11)Anders Betts
14 hourspayroll: employees, tax tables and the monthly run (schema v10)Anders Betts
24 hoursdocs: generate the command catalogue from the command tablesAnders Betts
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
25 hourssru: bound the org-nr copy so -Werror builds are cleanAnders Betts
25 hourscommands: shared DB-error helpersAnders Betts
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
27 hourscommands: split the command table by domainAnders Betts
31 hourssettings: allow invoice_our_refAnders Betts
31 hoursinvoice: send the issued PDF over SMTPAnders Betts
31 hourssmtp: send messages with a PDF attachmentAnders Betts
31 hourssecret: build it as its own unitAnders Betts
31 hourssettings: encrypted secrets and SMTP settingsAnders Betts
31 hoursinvoice: allow setting the bankgiro, document wave 1Anders Betts
31 hoursinvoice: customer, sequence, preview and issue commandsAnders Betts
32 hoursinvoice: render the document as PDFAnders Betts
32 hoursdb: schema v9 for invoicing, vouchers source rebuildAnders Betts
32 hoursinvoice: extract the Comfortaa wordmark as vector pathsAnders Betts
32 hourspdf: minimal PDF writer for generated documentsAnders Betts
34 hoursbank: import SEB CSV and match against vouchers (schema v8)Anders Betts
36 hoursdb: make attachments append-only (schema v7)Anders Betts
37 hoursreport: per-org moms rule editor commandsAnders Betts
37 hoursdb: snapshot the database before forward migrationsAnders Betts
When db_open finds an older schema version, write a consistent VACUUM INTO copy to <backup_dir>/pre-migration-v<old>-<UTC>.db before the first migration statement. A taken name gets a numeric suffix; if the snapshot fails, the open and the migration abort.
37 hoursledger: free the default-series string on every post error pathAnders Betts
37 hourscommands: declarative argument schemas with dispatch validationAnders Betts
37 hoursaudit: verify voucher chains and attachment hashesAnders Betts
2 daysårsredovisning: Information om året per räkenskapsår (schema v6)v0.1.34Anders Betts
2 daysbokslut: TUI screen, K2 årsredovisning draft, storable dividend (schema v4)v0.1.33Anders Betts
2 daysattachments: list every link when filtering by voucherv0.1.32Anders Betts
3 dayssru: INK2 report view in the TUI; voucher list tweaksv0.1.31Anders Betts
sru.export now returns the emitted fields as ink2/ink2r/ink2s arrays plus from/to, so Rapporter -> Inkomstdeklaration (INK2/SRU) renders the declaration as a table with the official fältnamn before saving; unmapped accounts are listed in the view. The voucher list puts the verifikat id before the date, widens the column gaps and adds an inner margin.
3 daysbokslut, INK2/SRU export and attachment markersv0.1.30Anders Betts
- bokslut.post: year-end bookings (manual entries, periodiseringsfond, skatt at a given rate, resultatdisposition) with a dry-run plan through the normal ledger path; the resultatrapport separates bokslutsdispositioner and skatt per K2. - sru.export: INFO.SRU + BLANKETTER.SRU (INK2/INK2R/INK2S) from the official 2025P4 field tables and the BAS mapping, with manual INK2S adjustments, submitter defaults and unmapped-account detection; the TUI writes both files from Rapporter -> Inkomstdeklaration. - voucher.list carries attachment_count and the voucher list marks vouchers with underlag with an x column. - date_prompt restores the cursor state so it stops blinking at the bottom after the report date prompts.
3 daysattachments: link/unlink from the TUI, multi-voucher linksv0.1.29Anders Betts
The voucher detail can attach a file to an existing voucher (^F) and the underlag picker (f) can remove a link (d, confirmed). The Underlag inbox links a highlighted item to a voucher picked from a list (k). attachment.link and attachment.unlink are new write commands (dry-run, audited); unlinked files return to the inbox. The same content may now link to several vouchers — only the same voucher/attachment pair is a CONFLICT, matching the table's primary key.
3 dayseskd: generate the momsdeklaration file (eSKDUpload 6.0)v0.1.28Anders Betts
report.vat_eskd builds the ISO-8859-1 XML from report.vat: whole kronor with öre truncated like the blankett, box 48 positive as filed, MomsBetala computed from the whole-krona boxes, and an optional upplysning converted from UTF-8, XML-escaped and capped at 300 characters. The TUI momsrapport gains "s = spara eSKD", prompting for a path and writing the bytes verbatim. Verified against the FY2027 Kapitas report: 05=703200, 10=175800, 20=1453, 30=851, 48=1030, 49=175621.
3 daysreports: huvudbok and verifikationslista; fiscal_year.reopenAnders Betts
report.general_ledger lists every account with activity or IB, its postings in date order with a running saldo, and Omslutning/Utgående saldo; accounts?/from?/to? narrow it. report.voucher_list lists the year's vouchers with rows and totals, with an optional series filter. fiscal_year.reopen undoes a close (owner-only, confirm:true, audited) so the Räkenskapsår screen can toggle the status.
3 daysreports: Kapitas-style TUI tables, corrected moms rules (schema v3)v0.1.26Anders Betts
The report views dumped JSON; they now render Saldobalans, Resultatrapport (previous-year column, 89xx bokfört/ej bokfört), Balansrapport (Ing balans/Ing saldo/Period/Utg balans, Beräknat resultat) and Momsrapport ruta för ruta, with Swedish amount formatting (1 234,56). The moms starter rules missed 33xx sales, sent reverse-charge VAT 2614 to box 10 instead of 30 and had box 48 positive. Rules may now share a box and report.vat sums them; box 49 is the sum of the moms boxes only. Schema v3 replaces the rules for existing orgs. Verified on a copy of the live DB: 05=703 200, 10=175 800, 20=1 453, 30=851, 48=-1 030, 49=175 621, matching the Kapitas 2027 export. Ctrl+R reload passes --socket and auto-login no longer rewrites tui.conf; pty tests now run through scripts/tui-sandbox.sh so they cannot touch the real config, cache or bw session.
3 daysbokfd: re-exec via PATH so a bare argv[0] works; faster healthcheckv0.1.16Anders Betts
4 daysdeploy: --dev hot-reloads the daemon via docker cp + SIGHUPv0.1.14Anders Betts
- bokfd re-execs its own binary on SIGHUP, closing listeners/db first - scripts/deploy.sh --dev cross-builds and copies binaries into the running container, then verifies the reported version
4 daysbokftui: Företagsuppgifter screen; org.update dry-runv0.1.7Anders Betts
- owner-editable company details form (read-only for other roles) - org.update honors dry_run; covered in tests
4 dayssie: import CRLF, #RAR 0, zero rows; skip #IB with prior historyv0.1.6Anders Betts
- tokenizer treats CR as whitespace; closing brace matches with CRLF - only #RAR with year indicator 0 selects the fiscal year - zero-amount #TRANS rows are dropped instead of violating the schema - #IB becomes an IB voucher only when the year has no earlier history
4 daysImplement org.update (owner) and cover it in testsv0.1.5Anders Betts
4 daysAdd token login to bokfctl and enforce admin scope for tokensv0.1.3Anders Betts
- bokfctl: --token / BOKFD_TOKEN via client_token_login - tokens must carry the admin scope for admin commands (was bypassed) - docs: token-based snapshot for restic backups
4 daysAdd native TLS transport, TLS clients and lego cert sidecarv0.1.1Anders Betts
- bokfd: optional TLS listener (OpenSSL), certificate reload on change - clients: tls:host:port targets with chain and host verification - compose: port 8788 and an INWX/lego renewal sidecar - Makefile: header dependency tracking (-MMD -MP)
4 daysInitial commit: daemon, clients, docs, Docker deploy pipelinev0.1.0Anders Betts