Commit Graph
54 Commits
Author SHA1 Message Date
thomas 4baf2f3368 feat(events): store before/after as diffs, not full snapshots
AppendEvent now reduces the before/after snapshots to the changed keys:
identical values on both sides are omitted, a key on one side only is an
addition or a deletion. The imported, corrected and validated payloads all
follow the same rule (an import is a diff from nothing, a validation keeps
carrying the status alone). arch.md section 4 updated accordingly.
2026-11-03 23:05:34 +01:00
thomas 5d09e7a780 feat(config): add frDate helper for French natural-language dates
Go date layouts only know English month names, so date(value, layout)
cannot parse "le 19 janvier 2026". frDate(text) extracts and parses such
dates (day optional, abbreviated months, accents optional) into a native
date; no match is a rule error routing the document to pending/.

Documented in arch.md §5, covered by unit tests.
2026-11-03 22:56:47 +01:00
thomas 09d0c9b99b fix(pipeline): skip rule evaluation when PDF extraction fails (US-13)
An unreadable PDF was still passed to cfg.Evaluate with nil pages, producing
a cascade of spurious errors (index out of range on pages[0], missing
mandatory fields) in the imported event. Route straight to pending/ with the
extraction failure as the single error.
2026-11-03 22:53:16 +01:00
thomas 02f7fd99bb Corrections after first run 2026-11-03 22:36:27 +01:00
thomas 6f94674fc9 archivist: migrate to PocketBase v0.41.1 (module ganigeorgiev.com/pocketbase/pocketbase); dbx moved to ganigeorgiev.com/pocketbase/dbx; go 1.27 and golang:1.27-alpine builder 2026-11-03 21:01:00 +01:00
thomas 7829d73cd4 archivist: scratch runtime Dockerfile (static binary only, non-root, CA bundle + tzdata); .dockerignore; README build section; arch.md packaging; fix ARCHIVIST_HTTP_ADDR doc row 2026-11-02 13:28:50 +01:00
thomas 233c153072 archivist: single-file E2E regression gate (Garage + image under test); superuser-only poll route; ARCHIVIST_S3_REGION 2026-11-02 12:28:58 +01:00
thomas 1cbe96b173 archivist: fix README spacing before Troubleshooting section 2026-11-02 11:27:57 +01:00
thomas 67c337eb14 archivist: runtime logs through PocketBase logger (Dashboard > Logs); stderr kept for pre-bootstrap fatals 2026-11-02 11:27:00 +01:00
thomas 61586a670a archivist: clarify Remove() comment re optional versioning 2026-11-02 11:13:02 +01:00
thomas 3bba6a82db archivist: versioning check becomes a startup warning in code 2026-11-02 11:12:31 +01:00
thomas 72fe21c9c1 archivist: brief aligned with versioning-optional decision 2026-11-02 11:12:23 +01:00
thomas 20385eafca archivist: README aligned with versioning-optional decision 2026-11-02 11:12:15 +01:00
thomas e667ee7203 archivist: US-01/US-12/US-17 aligned with versioning-optional decision 2026-11-02 11:12:08 +01:00
thomas fd35991397 archivist: versioning no longer required, warning at startup instead (recommended) 2026-11-02 11:11:59 +01:00
thomas 24b22c5815 archivist: render template from stored fields when recovering interrupted filings 2026-11-01 23:02:52 +01:00
thomas a9b4fa5eca archivist: initial Go implementation of the written user stories (US-01..US-23) 2026-11-01 23:02:24 +01:00
thomas 7de824d797 archivist: correction and validation through the standard PocketBase UI via the update hook 2026-11-01 22:52:40 +01:00
thomas ce19e97711 archivist: allow document correction and validation through the standard PocketBase UI via the update hook (US-22, US-23) 2026-11-01 22:52:32 +01:00
thomas d04134d8cd archivist: enforce document_events append-only via request hooks instead of API rules (superusers bypass rules) 2026-11-01 22:46:02 +01:00
thomas a2f448873a archivist: add user stories for startup, configuration, polling/classification and PocketBase UI visualization 2026-11-01 19:16:17 +01:00
thomas a9d6af7f9c archivist: add user-facing README (docker deployment, configuration, dashboard) 2026-11-01 18:43:34 +01:00
thomas fe9ba799b9 archivist: document firstMatch empty-string semantics, interrupted-filing recovery, log-only duplicates 2026-11-01 18:37:27 +01:00
thomas d6cf724878 archivist: move status into before/after snapshots in document_events payloads 2026-11-01 16:15:04 +01:00
thomas b4e7c983a8 archivist: document document_events payload format (imported/corrected/validated) 2026-11-01 16:11:04 +01:00
thomas 348c69224d archivist: drop original_filename and size columns 2026-11-01 11:54:40 +01:00
thomas b6f23a30f9 archivist: firstMatch examples use pages expressions 2026-11-01 11:51:49 +01:00
thomas bfc02c626f archivist: firstMatch takes a pages expression, not page numbers 2026-11-01 11:51:42 +01:00
thomas 3b743345f1 archivist: update examples for pages array and firstMatch scope 2026-11-01 11:45:11 +01:00
thomas 7e1b53adf0 archivist: page-by-page text storage and firstMatch pages argument 2026-11-01 11:45:04 +01:00
thomas e080bc3069 archivist: brief wording for page-based extraction 2026-11-01 11:44:57 +01:00
thomas 21d727c9a3 archivist: use backtick raw strings in expression examples 2026-11-01 11:37:51 +01:00
thomas fe497fb6d8 archivist: document period() and use it in bank statement example 2026-11-01 11:23:48 +01:00
thomas 84557434d4 archivist: document period() helper for period-based naming 2026-11-01 11:23:40 +01:00
thomas daa1d4f0b5 archivist: {expr} placeholder templates, rename date field to emissionDate 2026-11-01 11:13:36 +01:00
thomas 8eb69367c0 archivist: templates keep {expr} placeholders whose content is an expr expression 2026-11-01 11:13:29 +01:00
thomas 6a92127d20 archivist: fix date field type (string -> date) in example config 2026-11-01 11:07:37 +01:00
thomas d6678aa1e3 archivist: use expr standard date(value, layout) builtin instead of custom parseDate 2026-11-01 11:07:19 +01:00
thomas a17de3c004 archivist: drop custom parseDate helper, use expr standard date(value, layout) builtin 2026-11-01 11:07:12 +01:00
thomas db90657598 archivist: field types in example config, native date via parseDate helper 2026-11-01 11:05:37 +01:00
thomas 36d79a188d archivist: field types (text/number/date/boolean/enum), native time.Time dates, parseDate helper, enum vocabulary dropdown 2026-11-01 11:05:30 +01:00
thomas 7f1fbb7f4b archivist: fix invalid JSON (unescaped quotes), use expr raw strings (backticks) in expressions 2026-10-31 12:58:25 +01:00
thomas c5373da667 archivist: add example config.jsonc (banks, tax notices, invoices) with firstMatch extraction 2026-10-31 11:05:08 +01:00
thomas 105a762579 archivist: rule structure (when/set/delete/rules), eval expressions, firstMatch helper, date normalization 2026-10-31 11:05:04 +01:00
thomas 1417ceb4bf archivist: simplify brief, remove redundancies 2026-10-30 16:49:24 +01:00
thomas dd20b63a79 archivist: correction implies validation, save blocked on unresolvable template, template renders full path 2026-10-30 14:56:03 +01:00
thomas 99c3d4a050 archivist: explicit filing order, extraction failure reason in classified event, drop redundant timestamps 2026-10-30 14:45:18 +01:00
thomas b01e19534c archivist: template as a declared field, first-page-only rule context, duplicate handled via logs 2026-10-30 14:37:36 +01:00
thomas 01b6dc2c4b archivist: align scope wording with rules-based extraction 2026-10-30 14:28:41 +01:00
thomas 6f65fe141d archivist: drop lists section, template chosen via rules, log-based rule trace, crash-safe pipeline ordering 2026-10-30 14:28:36 +01:00