From 2c5b5a7171b9e501a71918a96c3f2451ebb1a808 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Wed, 21 Oct 2026 17:43:45 -0600 Subject: [PATCH] P3 review: P2 can read the books until the owner consents A schedule-convention setting, the two new tax categories, a disposal before the in-service date and a depreciation catch-up each need their feature now (tax_categories_gain_exempt, disposal_before_service, depreciation_catch_up), so no write before consent leaves books P2 refuses or misreads; replayed names are read with P2's TIN detector (B-28). The cutover runs end to end through the real P2 and P3 binaries in a test. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj --- ...8d47ba27730f9a0503e25abdbd43f94e3a44479e6b | 1 + ...4381d24a65b7feb45a6ed923c5fe10c10d7118e336 | 1 + ...8f0b173dfb2f45eb553528c95b6723d5f13a6b0dba | 1 + ...640e942d497cd2c7eedd46cc49c31116107d63e1af | 1 + ...b129fcf44a3a6c2c4a3214cc0bb6a17311c82d8061 | 1 + ...14137f3ae642dcbf75b8f44443296f32fab855b62a | 1 + ...f9f3decc93c3e093a4985b1153f08d2c18da545b7b | 1 + ...cead476435d5a0bf48cb0f5486569d072b79702e3a | 1 + ...b5da30d3882c2f6bf1dd05d36b81b3f9ab1d7cf8d5 | 1 + ...813d3b0b8373a2eef6dde93ccb201458a74bfdafb1 | 1 + ...382a6c0d020a3eb9ffb2e4f06e6c4208120a2b1dc7 | 1 + ...4c20da90ea14fd7b101894b0c001c7106ead417c20 | 1 + ...fbf7e02b95768dfdcaa3df3fefd684a56a3b2c3d4a | 1 + ...d90ec5b7a35fe8b6e26dba68d15b9c65f60d11e251 | 1 + ...0981d359d8f8494de6b17459fc4d730503b5a19024 | 1 + ...5eef32a5c1e10fb32fa5aced6d07405ab36aeae8a7 | 1 + ...9d554148bec710772fcdac8a85291d1cc6d85fc1a5 | 1 + ...c93da8a3512bcfa45099626c289eca75de84478f0c | 1 + ...e3b270a60573ab89be57f4908623a73572ee0325cb | 1 + ...f61474bff5e8272eb4411654d5d57965b34d65673d | 1 + ...bce53012f75a995b229982457def7312c6547df6f9 | 1 + ...0e7a2f639522bbdb7bceafb7cb3dad36a384c2f4ba | 1 + ...015aa011affd23aad6788939c86a85de028a34df14 | 1 + ...5444f301e052f93f7266845eecf454bc31f053d36f | 1 + ...431ff1de0c91a38a3a609a10b446e92214b12b89c7 | 1 + ...f0c84f5862c9fe3ea33964edc3c4bd6d5a966d91e5 | 1 + ...56659f6dd4d3a02830ba0adcfbe81df0f1b7bd8ff2 | 1 + ...b6f5ea214c193f00a84079b51d811df2cdf35af58c | 1 + ...cc6681b76dba4ea9eff24a5f34ca6e832a1e7dfc97 | 1 + ...0f710d25d20729d276e5bb57963191e07c29c59b7a | 1 + ...824021b731c1e7ab947950b330efaac5c23838a65f | 1 + ...a2dbc8d14ddeb8f9694ec5f393da4b4802fc7462dd | 1 + ...8e20690f48592dfc1e13c91b169d5207e8b3db45ca | 1 + ...207e471c30d07ced60ef8a00827be79dadd9e8948b | 1 + ...714442e0cb16d786386abc15873937a05304dad04a | 1 + ...dfc2c68a2260ad0e311328cd0bda91800600098ed4 | 1 + ...95dc8b298a41e19dc56c6e5a3fdafb3862a1198eeb | 1 + ...a018db9285c9e1e46498eab9dd77535cec612e7708 | 1 + ...7735f9d603ef7d4b69a51fa500aa4f0b70d24fd95e | 1 + ...c399f0df627105673fac9a02f3172af63fae493cc1 | 1 + ...1eb1671f62e598df60d83bb2f3da74f60d85a76d5f | 1 + ...93bc4ef2dcf0b165d42625efe2c50fac9bba78bd7f | 1 + ...e29d7361079db7db662dddcad5363206973983a5ac | 1 + ...6907b55e56fad62a32d8933ecf10fa6ffda0ca4d99 | 1 + ...14ef0493b998d08c941bf8a739edf1237f903d4649 | 1 + ...570194a2ca2ccd95703535299753e773d8ba737d09 | 1 + ...88ba9fd852d57c9e308a8fd8884b5872f5ab65d955 | 1 + ...2c003499e77bea22309d3ca22936c9a3119f951eb8 | 1 + ...9b842a2382f2bda3726357af210626543cc52f1e7c | 1 + ...bd99714794d6a62a089faedb24711f7f7b8ff24091 | 1 + ...0e88465a36f56a842d7878a62222fe2bd29f4d73fd | 1 + ...f0ddf792afdee2da15cb69885b91ae8c12a4a1e59b | 1 + ...989f60a55719db4d91dbdf5c5e60f3ac39c6efd05b | 1 + ...698e33cab20430bd03a877183870c44f037aebd740 | 1 + ...1d6e66a165bb5959bc91519f884f60dd63012b53eb | 1 + ...747868541c636fd110390c977807cbc27ece7fc3f5 | 1 + ...20ee2ba05be74d257a9d0f7ce06e0c16cf6d071dc3 | 1 + ...7ada6605a45e4afd8a09e8e3321b09427cf46fa876 | 1 + ...cdec14c1072de13b8e0dbd63e83518821e8fd4341b | 1 + ...dda829b78c6af7bbaf6d780a4c6ccb2b5fc3847677 | 1 + ...3e93b7ec3aa7b77a41bb21ffd7cfd17a260eb4f915 | 1 + ...e927a05dea2fddf44775f2b9dd2c23366e79d38389 | 1 + ...cb80f32fe860710dd679f917f99686d1171e49964d | 1 + ...39f7ee9c25ffb63e7973bc4dfaf45c3359fe923f1e | 1 + .../tests/fixtures/p2-served/journal.jsonl | 470 ++++++++++++++++++ .../tests/fixtures/p2-served/keys/legacy.key | 1 + .../tests/fixtures/p2-served/vault/tin-1.bin | 1 + .../tests/fixtures/p2-served/vault/tin-3.bin | Bin 0 -> 79 bytes .../tests/fixtures/p2-served/wanderbooks.db | Bin 0 -> 327680 bytes crates/ledger-cli/tests/format_upgrade.rs | 164 ++++++ crates/ledger-core/src/parties.rs | 90 ++++ crates/ledger-mcp/src/server.rs | 8 + crates/ledger-store/src/format.rs | 133 +++++ crates/ledger-store/src/store.rs | 34 ++ crates/ledger-store/tests/format.rs | 24 + crates/ledger-store/tests/p2_compat.rs | 352 +++++++++++++ docs/spec/rules.md | 28 +- fuzz/fuzz_targets/fuzz_store_replay.rs | 10 +- 78 files changed, 1375 insertions(+), 4 deletions(-) create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/01/26/0126c8f9f243e03c0cb71f8d47ba27730f9a0503e25abdbd43f94e3a44479e6b create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/09/0a/090a938b8299df0c5b93304381d24a65b7feb45a6ed923c5fe10c10d7118e336 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/09/d5/09d567fff5b3478f1c5e388f0b173dfb2f45eb553528c95b6723d5f13a6b0dba create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/13/5f/135feedb9b3f3931a9af46640e942d497cd2c7eedd46cc49c31116107d63e1af create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/15/4a/154a2bd5bd5bf103a7a5dbb129fcf44a3a6c2c4a3214cc0bb6a17311c82d8061 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/16/01/160144f9771ebf02e5e5c914137f3ae642dcbf75b8f44443296f32fab855b62a create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/17/ec/17ecf1539551d918be6e6ef9f3decc93c3e093a4985b1153f08d2c18da545b7b create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/1c/cd/1ccdb1535622cb9fd70388cead476435d5a0bf48cb0f5486569d072b79702e3a create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/21/09/210959e4644efeb3e0dec3b5da30d3882c2f6bf1dd05d36b81b3f9ab1d7cf8d5 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/21/81/218116eca79b67dbe85d3d813d3b0b8373a2eef6dde93ccb201458a74bfdafb1 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/23/19/23191deb4999b3f1726e6d382a6c0d020a3eb9ffb2e4f06e6c4208120a2b1dc7 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/26/64/266487055317ad4a9ec8504c20da90ea14fd7b101894b0c001c7106ead417c20 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/28/86/288625ee69e0c00d34b1defbf7e02b95768dfdcaa3df3fefd684a56a3b2c3d4a create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/33/39/3339b8401edf750b6b34d0d90ec5b7a35fe8b6e26dba68d15b9c65f60d11e251 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/34/85/348514bbc9e4a658e2681f0981d359d8f8494de6b17459fc4d730503b5a19024 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/35/0c/350c8d74e3937e0d444fae5eef32a5c1e10fb32fa5aced6d07405ab36aeae8a7 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/36/ff/36ffc77eeb9f51878977e69d554148bec710772fcdac8a85291d1cc6d85fc1a5 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/37/20/372029955692c864bd5f8fc93da8a3512bcfa45099626c289eca75de84478f0c create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/37/fa/37fa15b60bca1e11c46715e3b270a60573ab89be57f4908623a73572ee0325cb create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/3a/cd/3acdde86472882410cc59ff61474bff5e8272eb4411654d5d57965b34d65673d create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/3f/f7/3ff73e7967f4f72c974941bce53012f75a995b229982457def7312c6547df6f9 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/40/7b/407b7b6f86ec969d83c5370e7a2f639522bbdb7bceafb7cb3dad36a384c2f4ba create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/44/ec/44ecd22cf54e2cfe9331fb015aa011affd23aad6788939c86a85de028a34df14 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/4e/2d/4e2d180772eae2ddf0596a5444f301e052f93f7266845eecf454bc31f053d36f create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/50/36/50362975c484841d345e5b431ff1de0c91a38a3a609a10b446e92214b12b89c7 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/53/d0/53d0a291ee3782d571157ef0c84f5862c9fe3ea33964edc3c4bd6d5a966d91e5 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/53/f7/53f7de0945923a52b4fbcd56659f6dd4d3a02830ba0adcfbe81df0f1b7bd8ff2 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/54/84/5484fb84ff7718440c626ab6f5ea214c193f00a84079b51d811df2cdf35af58c create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/54/92/549225ddc356bd1a217220cc6681b76dba4ea9eff24a5f34ca6e832a1e7dfc97 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/57/d7/57d707ac4c8f4987ad0de50f710d25d20729d276e5bb57963191e07c29c59b7a create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/58/13/58132a2be4c24afc7e9fa6824021b731c1e7ab947950b330efaac5c23838a65f create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/5b/a9/5ba9b95dcfaad7cd77f590a2dbc8d14ddeb8f9694ec5f393da4b4802fc7462dd create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/60/3f/603f71cd317e709741b1c58e20690f48592dfc1e13c91b169d5207e8b3db45ca create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/69/7a/697a5b6d8f74f341972c78207e471c30d07ced60ef8a00827be79dadd9e8948b create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/7c/62/7c621c63ab0b77d026b903714442e0cb16d786386abc15873937a05304dad04a create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/7d/85/7d85565514a409a2d8bbacdfc2c68a2260ad0e311328cd0bda91800600098ed4 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/7f/cb/7fcbd4774d24625ed2dd3195dc8b298a41e19dc56c6e5a3fdafb3862a1198eeb create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/80/10/80107280d3e5d99e971770a018db9285c9e1e46498eab9dd77535cec612e7708 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/80/77/80776469bdd56d9957eaef7735f9d603ef7d4b69a51fa500aa4f0b70d24fd95e create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/82/c5/82c5c2c9cb7af39e0859bcc399f0df627105673fac9a02f3172af63fae493cc1 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/86/76/8676902d877e2c45200f351eb1671f62e598df60d83bb2f3da74f60d85a76d5f create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/95/8d95aa1b0d183a31141f7093bc4ef2dcf0b165d42625efe2c50fac9bba78bd7f create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/c1/8dc13ceaede8f28843e0cce29d7361079db7db662dddcad5363206973983a5ac create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/93/0a/930a53802a91886ad895106907b55e56fad62a32d8933ecf10fa6ffda0ca4d99 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/96/7d/967db8ecef54a42031f76d14ef0493b998d08c941bf8a739edf1237f903d4649 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/98/ad/98ad30c16a2f0b8f462702570194a2ca2ccd95703535299753e773d8ba737d09 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/cf/a1cfdbd7df3bd87d040f3f88ba9fd852d57c9e308a8fd8884b5872f5ab65d955 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/fd/a1fd86e4db54256d3cbcc42c003499e77bea22309d3ca22936c9a3119f951eb8 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/a3/8f/a38f2f89b4c09962c99eca9b842a2382f2bda3726357af210626543cc52f1e7c create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/a8/23/a8234e922d52bb6f585639bd99714794d6a62a089faedb24711f7f7b8ff24091 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/ad/b5/adb51e4f7d428927236d250e88465a36f56a842d7878a62222fe2bd29f4d73fd create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/ae/b4/aeb484e66061b3e49eb809f0ddf792afdee2da15cb69885b91ae8c12a4a1e59b create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/af/8c/af8c085ab8779b9ae9fcb3989f60a55719db4d91dbdf5c5e60f3ac39c6efd05b create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/b0/5c/b05c9555f4e49468970319698e33cab20430bd03a877183870c44f037aebd740 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/79/bd7936f79f1b7e603feaa91d6e66a165bb5959bc91519f884f60dd63012b53eb create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/d8/bdd80cf4f88b7072fe957a747868541c636fd110390c977807cbc27ece7fc3f5 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/c0/90/c090474697214b4507cdbb20ee2ba05be74d257a9d0f7ce06e0c16cf6d071dc3 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/c5/ec/c5ec7ae0d321249ce2b1ca7ada6605a45e4afd8a09e8e3321b09427cf46fa876 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/cf/63/cf63d0935c457f42cf6610cdec14c1072de13b8e0dbd63e83518821e8fd4341b create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/d3/62/d362d36ef90e3eaa91a0c8dda829b78c6af7bbaf6d780a4c6ccb2b5fc3847677 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/df/dd/dfdd55e9d11c066afa47ae3e93b7ec3aa7b77a41bb21ffd7cfd17a260eb4f915 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/e2/15/e2150d5a433a641134c1c1e927a05dea2fddf44775f2b9dd2c23366e79d38389 create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/e5/54/e554361bcf2115a5a55b5ccb80f32fe860710dd679f917f99686d1171e49964d create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/blobs/f5/2f/f52f29e9a5eb89e4f0851f39f7ee9c25ffb63e7973bc4dfaf45c3359fe923f1e create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/journal.jsonl create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/keys/legacy.key create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/vault/tin-1.bin create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/vault/tin-3.bin create mode 100644 crates/ledger-cli/tests/fixtures/p2-served/wanderbooks.db create mode 100644 crates/ledger-store/tests/p2_compat.rs diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/01/26/0126c8f9f243e03c0cb71f8d47ba27730f9a0503e25abdbd43f94e3a44479e6b b/crates/ledger-cli/tests/fixtures/p2-served/blobs/01/26/0126c8f9f243e03c0cb71f8d47ba27730f9a0503e25abdbd43f94e3a44479e6b new file mode 100644 index 0000000..e3e8e5a --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/01/26/0126c8f9f243e03c0cb71f8d47ba27730f9a0503e25abdbd43f94e3a44479e6b @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 46 Software paid by member 9 2025-09-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/09/0a/090a938b8299df0c5b93304381d24a65b7feb45a6ed923c5fe10c10d7118e336 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/09/0a/090a938b8299df0c5b93304381d24a65b7feb45a6ed923c5fe10c10d7118e336 new file mode 100644 index 0000000..3bf2844 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/09/0a/090a938b8299df0c5b93304381d24a65b7feb45a6ed923c5fe10c10d7118e336 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 39 Design work 8 2025-08-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/09/d5/09d567fff5b3478f1c5e388f0b173dfb2f45eb553528c95b6723d5f13a6b0dba b/crates/ledger-cli/tests/fixtures/p2-served/blobs/09/d5/09d567fff5b3478f1c5e388f0b173dfb2f45eb553528c95b6723d5f13a6b0dba new file mode 100644 index 0000000..330fc25 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/09/d5/09d567fff5b3478f1c5e388f0b173dfb2f45eb553528c95b6723d5f13a6b0dba @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 42 Bank fee 8 2025-08-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/13/5f/135feedb9b3f3931a9af46640e942d497cd2c7eedd46cc49c31116107d63e1af b/crates/ledger-cli/tests/fixtures/p2-served/blobs/13/5f/135feedb9b3f3931a9af46640e942d497cd2c7eedd46cc49c31116107d63e1af new file mode 100644 index 0000000..c19b652 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/13/5f/135feedb9b3f3931a9af46640e942d497cd2c7eedd46cc49c31116107d63e1af @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 18 Consulting 4 2025-04-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/15/4a/154a2bd5bd5bf103a7a5dbb129fcf44a3a6c2c4a3214cc0bb6a17311c82d8061 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/15/4a/154a2bd5bd5bf103a7a5dbb129fcf44a3a6c2c4a3214cc0bb6a17311c82d8061 new file mode 100644 index 0000000..664437e --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/15/4a/154a2bd5bd5bf103a7a5dbb129fcf44a3a6c2c4a3214cc0bb6a17311c82d8061 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 27 Bank fee 5 2025-05-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/16/01/160144f9771ebf02e5e5c914137f3ae642dcbf75b8f44443296f32fab855b62a b/crates/ledger-cli/tests/fixtures/p2-served/blobs/16/01/160144f9771ebf02e5e5c914137f3ae642dcbf75b8f44443296f32fab855b62a new file mode 100644 index 0000000..e5d8eed --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/16/01/160144f9771ebf02e5e5c914137f3ae642dcbf75b8f44443296f32fab855b62a @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 44 Design work 9 2025-09-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/17/ec/17ecf1539551d918be6e6ef9f3decc93c3e093a4985b1153f08d2c18da545b7b b/crates/ledger-cli/tests/fixtures/p2-served/blobs/17/ec/17ecf1539551d918be6e6ef9f3decc93c3e093a4985b1153f08d2c18da545b7b new file mode 100644 index 0000000..925af76 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/17/ec/17ecf1539551d918be6e6ef9f3decc93c3e093a4985b1153f08d2c18da545b7b @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 6 Software paid by member 1 2025-01-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/1c/cd/1ccdb1535622cb9fd70388cead476435d5a0bf48cb0f5486569d072b79702e3a b/crates/ledger-cli/tests/fixtures/p2-served/blobs/1c/cd/1ccdb1535622cb9fd70388cead476435d5a0bf48cb0f5486569d072b79702e3a new file mode 100644 index 0000000..338c50e --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/1c/cd/1ccdb1535622cb9fd70388cead476435d5a0bf48cb0f5486569d072b79702e3a @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 20 Supplies 4 2025-04-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/21/09/210959e4644efeb3e0dec3b5da30d3882c2f6bf1dd05d36b81b3f9ab1d7cf8d5 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/21/09/210959e4644efeb3e0dec3b5da30d3882c2f6bf1dd05d36b81b3f9ab1d7cf8d5 new file mode 100644 index 0000000..870603d --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/21/09/210959e4644efeb3e0dec3b5da30d3882c2f6bf1dd05d36b81b3f9ab1d7cf8d5 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 36 Software paid by member 7 2025-07-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/21/81/218116eca79b67dbe85d3d813d3b0b8373a2eef6dde93ccb201458a74bfdafb1 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/21/81/218116eca79b67dbe85d3d813d3b0b8373a2eef6dde93ccb201458a74bfdafb1 new file mode 100644 index 0000000..b4cc7ff --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/21/81/218116eca79b67dbe85d3d813d3b0b8373a2eef6dde93ccb201458a74bfdafb1 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 50 Supplies 10 2025-10-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/23/19/23191deb4999b3f1726e6d382a6c0d020a3eb9ffb2e4f06e6c4208120a2b1dc7 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/23/19/23191deb4999b3f1726e6d382a6c0d020a3eb9ffb2e4f06e6c4208120a2b1dc7 new file mode 100644 index 0000000..d9305fa --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/23/19/23191deb4999b3f1726e6d382a6c0d020a3eb9ffb2e4f06e6c4208120a2b1dc7 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 2 Capital in B 2025-01-02 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/26/64/266487055317ad4a9ec8504c20da90ea14fd7b101894b0c001c7106ead417c20 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/26/64/266487055317ad4a9ec8504c20da90ea14fd7b101894b0c001c7106ead417c20 new file mode 100644 index 0000000..1f2ac2b --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/26/64/266487055317ad4a9ec8504c20da90ea14fd7b101894b0c001c7106ead417c20 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 41 Software paid by member 8 2025-08-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/28/86/288625ee69e0c00d34b1defbf7e02b95768dfdcaa3df3fefd684a56a3b2c3d4a b/crates/ledger-cli/tests/fixtures/p2-served/blobs/28/86/288625ee69e0c00d34b1defbf7e02b95768dfdcaa3df3fefd684a56a3b2c3d4a new file mode 100644 index 0000000..6c1aa28 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/28/86/288625ee69e0c00d34b1defbf7e02b95768dfdcaa3df3fefd684a56a3b2c3d4a @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 47 Bank fee 9 2025-09-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/33/39/3339b8401edf750b6b34d0d90ec5b7a35fe8b6e26dba68d15b9c65f60d11e251 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/33/39/3339b8401edf750b6b34d0d90ec5b7a35fe8b6e26dba68d15b9c65f60d11e251 new file mode 100644 index 0000000..6b3cb31 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/33/39/3339b8401edf750b6b34d0d90ec5b7a35fe8b6e26dba68d15b9c65f60d11e251 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 61 Software paid by member 12 2025-12-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/34/85/348514bbc9e4a658e2681f0981d359d8f8494de6b17459fc4d730503b5a19024 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/34/85/348514bbc9e4a658e2681f0981d359d8f8494de6b17459fc4d730503b5a19024 new file mode 100644 index 0000000..3f9a1ad --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/34/85/348514bbc9e4a658e2681f0981d359d8f8494de6b17459fc4d730503b5a19024 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 60 Supplies 12 2025-12-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/35/0c/350c8d74e3937e0d444fae5eef32a5c1e10fb32fa5aced6d07405ab36aeae8a7 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/35/0c/350c8d74e3937e0d444fae5eef32a5c1e10fb32fa5aced6d07405ab36aeae8a7 new file mode 100644 index 0000000..b44be10 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/35/0c/350c8d74e3937e0d444fae5eef32a5c1e10fb32fa5aced6d07405ab36aeae8a7 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 38 Consulting 8 2025-08-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/36/ff/36ffc77eeb9f51878977e69d554148bec710772fcdac8a85291d1cc6d85fc1a5 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/36/ff/36ffc77eeb9f51878977e69d554148bec710772fcdac8a85291d1cc6d85fc1a5 new file mode 100644 index 0000000..6651af1 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/36/ff/36ffc77eeb9f51878977e69d554148bec710772fcdac8a85291d1cc6d85fc1a5 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 10 Supplies 2 2025-02-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/37/20/372029955692c864bd5f8fc93da8a3512bcfa45099626c289eca75de84478f0c b/crates/ledger-cli/tests/fixtures/p2-served/blobs/37/20/372029955692c864bd5f8fc93da8a3512bcfa45099626c289eca75de84478f0c new file mode 100644 index 0000000..dcdcfb6 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/37/20/372029955692c864bd5f8fc93da8a3512bcfa45099626c289eca75de84478f0c @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 31 Software paid by member 6 2025-06-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/37/fa/37fa15b60bca1e11c46715e3b270a60573ab89be57f4908623a73572ee0325cb b/crates/ledger-cli/tests/fixtures/p2-served/blobs/37/fa/37fa15b60bca1e11c46715e3b270a60573ab89be57f4908623a73572ee0325cb new file mode 100644 index 0000000..31e292a --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/37/fa/37fa15b60bca1e11c46715e3b270a60573ab89be57f4908623a73572ee0325cb @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 52 Bank fee 10 2025-10-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/3a/cd/3acdde86472882410cc59ff61474bff5e8272eb4411654d5d57965b34d65673d b/crates/ledger-cli/tests/fixtures/p2-served/blobs/3a/cd/3acdde86472882410cc59ff61474bff5e8272eb4411654d5d57965b34d65673d new file mode 100644 index 0000000..39ff467 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/3a/cd/3acdde86472882410cc59ff61474bff5e8272eb4411654d5d57965b34d65673d @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 34 Design work 7 2025-07-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/3f/f7/3ff73e7967f4f72c974941bce53012f75a995b229982457def7312c6547df6f9 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/3f/f7/3ff73e7967f4f72c974941bce53012f75a995b229982457def7312c6547df6f9 new file mode 100644 index 0000000..ebea25c --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/3f/f7/3ff73e7967f4f72c974941bce53012f75a995b229982457def7312c6547df6f9 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 48 Consulting 10 2025-10-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/40/7b/407b7b6f86ec969d83c5370e7a2f639522bbdb7bceafb7cb3dad36a384c2f4ba b/crates/ledger-cli/tests/fixtures/p2-served/blobs/40/7b/407b7b6f86ec969d83c5370e7a2f639522bbdb7bceafb7cb3dad36a384c2f4ba new file mode 100644 index 0000000..c8939e2 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/40/7b/407b7b6f86ec969d83c5370e7a2f639522bbdb7bceafb7cb3dad36a384c2f4ba @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 64 Insurance year 2025-02-01 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/44/ec/44ecd22cf54e2cfe9331fb015aa011affd23aad6788939c86a85de028a34df14 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/44/ec/44ecd22cf54e2cfe9331fb015aa011affd23aad6788939c86a85de028a34df14 new file mode 100644 index 0000000..14a7eed --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/44/ec/44ecd22cf54e2cfe9331fb015aa011affd23aad6788939c86a85de028a34df14 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 9 Design work 2 2025-02-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/4e/2d/4e2d180772eae2ddf0596a5444f301e052f93f7266845eecf454bc31f053d36f b/crates/ledger-cli/tests/fixtures/p2-served/blobs/4e/2d/4e2d180772eae2ddf0596a5444f301e052f93f7266845eecf454bc31f053d36f new file mode 100644 index 0000000..e82b9d6 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/4e/2d/4e2d180772eae2ddf0596a5444f301e052f93f7266845eecf454bc31f053d36f @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 32 Bank fee 6 2025-06-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/50/36/50362975c484841d345e5b431ff1de0c91a38a3a609a10b446e92214b12b89c7 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/50/36/50362975c484841d345e5b431ff1de0c91a38a3a609a10b446e92214b12b89c7 new file mode 100644 index 0000000..2573010 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/50/36/50362975c484841d345e5b431ff1de0c91a38a3a609a10b446e92214b12b89c7 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 15 Supplies 3 2025-03-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/53/d0/53d0a291ee3782d571157ef0c84f5862c9fe3ea33964edc3c4bd6d5a966d91e5 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/53/d0/53d0a291ee3782d571157ef0c84f5862c9fe3ea33964edc3c4bd6d5a966d91e5 new file mode 100644 index 0000000..49cbb8a --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/53/d0/53d0a291ee3782d571157ef0c84f5862c9fe3ea33964edc3c4bd6d5a966d91e5 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 14 Design work 3 2025-03-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/53/f7/53f7de0945923a52b4fbcd56659f6dd4d3a02830ba0adcfbe81df0f1b7bd8ff2 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/53/f7/53f7de0945923a52b4fbcd56659f6dd4d3a02830ba0adcfbe81df0f1b7bd8ff2 new file mode 100644 index 0000000..2c6bb44 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/53/f7/53f7de0945923a52b4fbcd56659f6dd4d3a02830ba0adcfbe81df0f1b7bd8ff2 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 51 Software paid by member 10 2025-10-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/54/84/5484fb84ff7718440c626ab6f5ea214c193f00a84079b51d811df2cdf35af58c b/crates/ledger-cli/tests/fixtures/p2-served/blobs/54/84/5484fb84ff7718440c626ab6f5ea214c193f00a84079b51d811df2cdf35af58c new file mode 100644 index 0000000..5b0deea --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/54/84/5484fb84ff7718440c626ab6f5ea214c193f00a84079b51d811df2cdf35af58c @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 21 Software paid by member 4 2025-04-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/54/92/549225ddc356bd1a217220cc6681b76dba4ea9eff24a5f34ca6e832a1e7dfc97 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/54/92/549225ddc356bd1a217220cc6681b76dba4ea9eff24a5f34ca6e832a1e7dfc97 new file mode 100644 index 0000000..e2b7682 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/54/92/549225ddc356bd1a217220cc6681b76dba4ea9eff24a5f34ca6e832a1e7dfc97 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 43 Consulting 9 2025-09-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/57/d7/57d707ac4c8f4987ad0de50f710d25d20729d276e5bb57963191e07c29c59b7a b/crates/ledger-cli/tests/fixtures/p2-served/blobs/57/d7/57d707ac4c8f4987ad0de50f710d25d20729d276e5bb57963191e07c29c59b7a new file mode 100644 index 0000000..9426401 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/57/d7/57d707ac4c8f4987ad0de50f710d25d20729d276e5bb57963191e07c29c59b7a @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 8 Consulting 2 2025-02-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/58/13/58132a2be4c24afc7e9fa6824021b731c1e7ab947950b330efaac5c23838a65f b/crates/ledger-cli/tests/fixtures/p2-served/blobs/58/13/58132a2be4c24afc7e9fa6824021b731c1e7ab947950b330efaac5c23838a65f new file mode 100644 index 0000000..30080ef --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/58/13/58132a2be4c24afc7e9fa6824021b731c1e7ab947950b330efaac5c23838a65f @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 57 Bank fee 11 2025-11-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/5b/a9/5ba9b95dcfaad7cd77f590a2dbc8d14ddeb8f9694ec5f393da4b4802fc7462dd b/crates/ledger-cli/tests/fixtures/p2-served/blobs/5b/a9/5ba9b95dcfaad7cd77f590a2dbc8d14ddeb8f9694ec5f393da4b4802fc7462dd new file mode 100644 index 0000000..2162694 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/5b/a9/5ba9b95dcfaad7cd77f590a2dbc8d14ddeb8f9694ec5f393da4b4802fc7462dd @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 53 Consulting 11 2025-11-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/60/3f/603f71cd317e709741b1c58e20690f48592dfc1e13c91b169d5207e8b3db45ca b/crates/ledger-cli/tests/fixtures/p2-served/blobs/60/3f/603f71cd317e709741b1c58e20690f48592dfc1e13c91b169d5207e8b3db45ca new file mode 100644 index 0000000..6b441ca --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/60/3f/603f71cd317e709741b1c58e20690f48592dfc1e13c91b169d5207e8b3db45ca @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 23 Consulting 5 2025-05-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/69/7a/697a5b6d8f74f341972c78207e471c30d07ced60ef8a00827be79dadd9e8948b b/crates/ledger-cli/tests/fixtures/p2-served/blobs/69/7a/697a5b6d8f74f341972c78207e471c30d07ced60ef8a00827be79dadd9e8948b new file mode 100644 index 0000000..acfb53e --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/69/7a/697a5b6d8f74f341972c78207e471c30d07ced60ef8a00827be79dadd9e8948b @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 17 Bank fee 3 2025-03-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/7c/62/7c621c63ab0b77d026b903714442e0cb16d786386abc15873937a05304dad04a b/crates/ledger-cli/tests/fixtures/p2-served/blobs/7c/62/7c621c63ab0b77d026b903714442e0cb16d786386abc15873937a05304dad04a new file mode 100644 index 0000000..9c49988 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/7c/62/7c621c63ab0b77d026b903714442e0cb16d786386abc15873937a05304dad04a @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 19 Design work 4 2025-04-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/7d/85/7d85565514a409a2d8bbacdfc2c68a2260ad0e311328cd0bda91800600098ed4 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/7d/85/7d85565514a409a2d8bbacdfc2c68a2260ad0e311328cd0bda91800600098ed4 new file mode 100644 index 0000000..0579548 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/7d/85/7d85565514a409a2d8bbacdfc2c68a2260ad0e311328cd0bda91800600098ed4 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 7 Bank fee 1 2025-01-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/7f/cb/7fcbd4774d24625ed2dd3195dc8b298a41e19dc56c6e5a3fdafb3862a1198eeb b/crates/ledger-cli/tests/fixtures/p2-served/blobs/7f/cb/7fcbd4774d24625ed2dd3195dc8b298a41e19dc56c6e5a3fdafb3862a1198eeb new file mode 100644 index 0000000..cf8900d --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/7f/cb/7fcbd4774d24625ed2dd3195dc8b298a41e19dc56c6e5a3fdafb3862a1198eeb @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 45 Supplies 9 2025-09-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/80/10/80107280d3e5d99e971770a018db9285c9e1e46498eab9dd77535cec612e7708 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/80/10/80107280d3e5d99e971770a018db9285c9e1e46498eab9dd77535cec612e7708 new file mode 100644 index 0000000..c0c95be --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/80/10/80107280d3e5d99e971770a018db9285c9e1e46498eab9dd77535cec612e7708 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 58 Consulting 12 2025-12-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/80/77/80776469bdd56d9957eaef7735f9d603ef7d4b69a51fa500aa4f0b70d24fd95e b/crates/ledger-cli/tests/fixtures/p2-served/blobs/80/77/80776469bdd56d9957eaef7735f9d603ef7d4b69a51fa500aa4f0b70d24fd95e new file mode 100644 index 0000000..7a917b7 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/80/77/80776469bdd56d9957eaef7735f9d603ef7d4b69a51fa500aa4f0b70d24fd95e @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 30 Supplies 6 2025-06-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/82/c5/82c5c2c9cb7af39e0859bcc399f0df627105673fac9a02f3172af63fae493cc1 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/82/c5/82c5c2c9cb7af39e0859bcc399f0df627105673fac9a02f3172af63fae493cc1 new file mode 100644 index 0000000..3dcf140 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/82/c5/82c5c2c9cb7af39e0859bcc399f0df627105673fac9a02f3172af63fae493cc1 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 56 Software paid by member 11 2025-11-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/86/76/8676902d877e2c45200f351eb1671f62e598df60d83bb2f3da74f60d85a76d5f b/crates/ledger-cli/tests/fixtures/p2-served/blobs/86/76/8676902d877e2c45200f351eb1671f62e598df60d83bb2f3da74f60d85a76d5f new file mode 100644 index 0000000..1481094 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/86/76/8676902d877e2c45200f351eb1671f62e598df60d83bb2f3da74f60d85a76d5f @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 63 Laptop 2025-03-01 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/95/8d95aa1b0d183a31141f7093bc4ef2dcf0b165d42625efe2c50fac9bba78bd7f b/crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/95/8d95aa1b0d183a31141f7093bc4ef2dcf0b165d42625efe2c50fac9bba78bd7f new file mode 100644 index 0000000..a8879ce --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/95/8d95aa1b0d183a31141f7093bc4ef2dcf0b165d42625efe2c50fac9bba78bd7f @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 62 Bank fee 12 2025-12-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/c1/8dc13ceaede8f28843e0cce29d7361079db7db662dddcad5363206973983a5ac b/crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/c1/8dc13ceaede8f28843e0cce29d7361079db7db662dddcad5363206973983a5ac new file mode 100644 index 0000000..e927526 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/8d/c1/8dc13ceaede8f28843e0cce29d7361079db7db662dddcad5363206973983a5ac @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 12 Bank fee 2 2025-02-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/93/0a/930a53802a91886ad895106907b55e56fad62a32d8933ecf10fa6ffda0ca4d99 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/93/0a/930a53802a91886ad895106907b55e56fad62a32d8933ecf10fa6ffda0ca4d99 new file mode 100644 index 0000000..616b933 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/93/0a/930a53802a91886ad895106907b55e56fad62a32d8933ecf10fa6ffda0ca4d99 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 25 Supplies 5 2025-05-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/96/7d/967db8ecef54a42031f76d14ef0493b998d08c941bf8a739edf1237f903d4649 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/96/7d/967db8ecef54a42031f76d14ef0493b998d08c941bf8a739edf1237f903d4649 new file mode 100644 index 0000000..bf3731d --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/96/7d/967db8ecef54a42031f76d14ef0493b998d08c941bf8a739edf1237f903d4649 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 4 Design work 1 2025-01-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/98/ad/98ad30c16a2f0b8f462702570194a2ca2ccd95703535299753e773d8ba737d09 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/98/ad/98ad30c16a2f0b8f462702570194a2ca2ccd95703535299753e773d8ba737d09 new file mode 100644 index 0000000..a23d0c4 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/98/ad/98ad30c16a2f0b8f462702570194a2ca2ccd95703535299753e773d8ba737d09 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 49 Design work 10 2025-10-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/cf/a1cfdbd7df3bd87d040f3f88ba9fd852d57c9e308a8fd8884b5872f5ab65d955 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/cf/a1cfdbd7df3bd87d040f3f88ba9fd852d57c9e308a8fd8884b5872f5ab65d955 new file mode 100644 index 0000000..4d0e8c8 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/cf/a1cfdbd7df3bd87d040f3f88ba9fd852d57c9e308a8fd8884b5872f5ab65d955 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 22 Bank fee 4 2025-04-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/fd/a1fd86e4db54256d3cbcc42c003499e77bea22309d3ca22936c9a3119f951eb8 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/fd/a1fd86e4db54256d3cbcc42c003499e77bea22309d3ca22936c9a3119f951eb8 new file mode 100644 index 0000000..551590a --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a1/fd/a1fd86e4db54256d3cbcc42c003499e77bea22309d3ca22936c9a3119f951eb8 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 3 Consulting 1 2025-01-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/a3/8f/a38f2f89b4c09962c99eca9b842a2382f2bda3726357af210626543cc52f1e7c b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a3/8f/a38f2f89b4c09962c99eca9b842a2382f2bda3726357af210626543cc52f1e7c new file mode 100644 index 0000000..f829528 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a3/8f/a38f2f89b4c09962c99eca9b842a2382f2bda3726357af210626543cc52f1e7c @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 5 Supplies 1 2025-01-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/a8/23/a8234e922d52bb6f585639bd99714794d6a62a089faedb24711f7f7b8ff24091 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a8/23/a8234e922d52bb6f585639bd99714794d6a62a089faedb24711f7f7b8ff24091 new file mode 100644 index 0000000..6d94969 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/a8/23/a8234e922d52bb6f585639bd99714794d6a62a089faedb24711f7f7b8ff24091 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 28 Consulting 6 2025-06-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/ad/b5/adb51e4f7d428927236d250e88465a36f56a842d7878a62222fe2bd29f4d73fd b/crates/ledger-cli/tests/fixtures/p2-served/blobs/ad/b5/adb51e4f7d428927236d250e88465a36f56a842d7878a62222fe2bd29f4d73fd new file mode 100644 index 0000000..63b0af7 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/ad/b5/adb51e4f7d428927236d250e88465a36f56a842d7878a62222fe2bd29f4d73fd @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 11 Software paid by member 2 2025-02-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/ae/b4/aeb484e66061b3e49eb809f0ddf792afdee2da15cb69885b91ae8c12a4a1e59b b/crates/ledger-cli/tests/fixtures/p2-served/blobs/ae/b4/aeb484e66061b3e49eb809f0ddf792afdee2da15cb69885b91ae8c12a4a1e59b new file mode 100644 index 0000000..e76f534 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/ae/b4/aeb484e66061b3e49eb809f0ddf792afdee2da15cb69885b91ae8c12a4a1e59b @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 1 Capital in A 2025-01-02 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/af/8c/af8c085ab8779b9ae9fcb3989f60a55719db4d91dbdf5c5e60f3ac39c6efd05b b/crates/ledger-cli/tests/fixtures/p2-served/blobs/af/8c/af8c085ab8779b9ae9fcb3989f60a55719db4d91dbdf5c5e60f3ac39c6efd05b new file mode 100644 index 0000000..33461c3 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/af/8c/af8c085ab8779b9ae9fcb3989f60a55719db4d91dbdf5c5e60f3ac39c6efd05b @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 37 Bank fee 7 2025-07-23 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/b0/5c/b05c9555f4e49468970319698e33cab20430bd03a877183870c44f037aebd740 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/b0/5c/b05c9555f4e49468970319698e33cab20430bd03a877183870c44f037aebd740 new file mode 100644 index 0000000..f8715c8 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/b0/5c/b05c9555f4e49468970319698e33cab20430bd03a877183870c44f037aebd740 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 33 Consulting 7 2025-07-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/79/bd7936f79f1b7e603feaa91d6e66a165bb5959bc91519f884f60dd63012b53eb b/crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/79/bd7936f79f1b7e603feaa91d6e66a165bb5959bc91519f884f60dd63012b53eb new file mode 100644 index 0000000..0ca9419 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/79/bd7936f79f1b7e603feaa91d6e66a165bb5959bc91519f884f60dd63012b53eb @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 29 Design work 6 2025-06-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/d8/bdd80cf4f88b7072fe957a747868541c636fd110390c977807cbc27ece7fc3f5 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/d8/bdd80cf4f88b7072fe957a747868541c636fd110390c977807cbc27ece7fc3f5 new file mode 100644 index 0000000..2d2eb1a --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/bd/d8/bdd80cf4f88b7072fe957a747868541c636fd110390c977807cbc27ece7fc3f5 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 13 Consulting 3 2025-03-03 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/c0/90/c090474697214b4507cdbb20ee2ba05be74d257a9d0f7ce06e0c16cf6d071dc3 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/c0/90/c090474697214b4507cdbb20ee2ba05be74d257a9d0f7ce06e0c16cf6d071dc3 new file mode 100644 index 0000000..7673111 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/c0/90/c090474697214b4507cdbb20ee2ba05be74d257a9d0f7ce06e0c16cf6d071dc3 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 35 Supplies 7 2025-07-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/c5/ec/c5ec7ae0d321249ce2b1ca7ada6605a45e4afd8a09e8e3321b09427cf46fa876 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/c5/ec/c5ec7ae0d321249ce2b1ca7ada6605a45e4afd8a09e8e3321b09427cf46fa876 new file mode 100644 index 0000000..1f37ba4 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/c5/ec/c5ec7ae0d321249ce2b1ca7ada6605a45e4afd8a09e8e3321b09427cf46fa876 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 26 Software paid by member 5 2025-05-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/cf/63/cf63d0935c457f42cf6610cdec14c1072de13b8e0dbd63e83518821e8fd4341b b/crates/ledger-cli/tests/fixtures/p2-served/blobs/cf/63/cf63d0935c457f42cf6610cdec14c1072de13b8e0dbd63e83518821e8fd4341b new file mode 100644 index 0000000..e6170e0 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/cf/63/cf63d0935c457f42cf6610cdec14c1072de13b8e0dbd63e83518821e8fd4341b @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 54 Design work 11 2025-11-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/d3/62/d362d36ef90e3eaa91a0c8dda829b78c6af7bbaf6d780a4c6ccb2b5fc3847677 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/d3/62/d362d36ef90e3eaa91a0c8dda829b78c6af7bbaf6d780a4c6ccb2b5fc3847677 new file mode 100644 index 0000000..c056aa5 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/d3/62/d362d36ef90e3eaa91a0c8dda829b78c6af7bbaf6d780a4c6ccb2b5fc3847677 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 16 Software paid by member 3 2025-03-18 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/df/dd/dfdd55e9d11c066afa47ae3e93b7ec3aa7b77a41bb21ffd7cfd17a260eb4f915 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/df/dd/dfdd55e9d11c066afa47ae3e93b7ec3aa7b77a41bb21ffd7cfd17a260eb4f915 new file mode 100644 index 0000000..444e27b --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/df/dd/dfdd55e9d11c066afa47ae3e93b7ec3aa7b77a41bb21ffd7cfd17a260eb4f915 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 55 Supplies 11 2025-11-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/e2/15/e2150d5a433a641134c1c1e927a05dea2fddf44775f2b9dd2c23366e79d38389 b/crates/ledger-cli/tests/fixtures/p2-served/blobs/e2/15/e2150d5a433a641134c1c1e927a05dea2fddf44775f2b9dd2c23366e79d38389 new file mode 100644 index 0000000..b06a203 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/e2/15/e2150d5a433a641134c1c1e927a05dea2fddf44775f2b9dd2c23366e79d38389 @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 24 Design work 5 2025-05-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/e5/54/e554361bcf2115a5a55b5ccb80f32fe860710dd679f917f99686d1171e49964d b/crates/ledger-cli/tests/fixtures/p2-served/blobs/e5/54/e554361bcf2115a5a55b5ccb80f32fe860710dd679f917f99686d1171e49964d new file mode 100644 index 0000000..9e90b78 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/e5/54/e554361bcf2115a5a55b5ccb80f32fe860710dd679f917f99686d1171e49964d @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 59 Design work 12 2025-12-08 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/blobs/f5/2f/f52f29e9a5eb89e4f0851f39f7ee9c25ffb63e7973bc4dfaf45c3359fe923f1e b/crates/ledger-cli/tests/fixtures/p2-served/blobs/f5/2f/f52f29e9a5eb89e4f0851f39f7ee9c25ffb63e7973bc4dfaf45c3359fe923f1e new file mode 100644 index 0000000..cf0aee2 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/blobs/f5/2f/f52f29e9a5eb89e4f0851f39f7ee9c25ffb63e7973bc4dfaf45c3359fe923f1e @@ -0,0 +1 @@ +%PDF-1.4 fictional receipt 40 Supplies 8 2025-08-13 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/journal.jsonl b/crates/ledger-cli/tests/fixtures/p2-served/journal.jsonl new file mode 100644 index 0000000..b3ad2c7 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/journal.jsonl @@ -0,0 +1,470 @@ +{"payload":{"base_currency":"USD"},"prev":"0000000000000000000000000000000000000000000000000000000000000000","seq":1,"ts":"2026-10-21T21:28:50Z","type":"store.created"} +{"payload":{"features":[],"format":2},"prev":"6f671350b51dcf342c70a96d74fe2e7a51201bf076f8fdf9f56e91ae713b1b93","seq":2,"ts":"2026-10-21T21:28:50Z","type":"journal.format_set"} +{"payload":{"changes":[{"key":"company.name","value":"Fernhill Labs LLC"},{"key":"company.entity_type","value":"multi_member_llc"},{"key":"company.fiscal_year_start","value":"01-01"}],"source":{"decided_by":"Avery Quill","decided_on":"2026-10-21"}},"prev":"0553dd22c23902d6585f2bbaed018c059a9aea58df7406d404bf4137d5ecede1","seq":3,"ts":"2026-10-21T21:28:50Z","type":"settings.set"} +{"payload":{"account_type":"Asset","code":"1000","currency":"USD","id":1,"name":"Bank","parent":null,"placeholder":false},"prev":"108d387a4869358c663077990d942b4ffb5644635236c93a8ad344a298a50227","seq":4,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Asset","code":"1300","currency":"USD","id":2,"name":"Prepaid","parent":null,"placeholder":false},"prev":"44a88cabb5d1cf52f7d20efd8faf2ffaac5b2bd65a54988899e27e05cc4deecf","seq":5,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Asset","code":"1500","currency":"USD","id":3,"name":"Equipment","parent":null,"placeholder":false},"prev":"e3a5983c198273610292fd01475cf9b94597fad49941dc143ff78c156226cc36","seq":6,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Asset","code":"1510","currency":"USD","id":4,"name":"Accumulated depreciation","parent":null,"placeholder":false},"prev":"7776e448d58efadfdb096e404dd3eec87310b250b25fc97630679346f6b4172f","seq":7,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Asset","code":"1200","currency":"USD","id":5,"name":"Accounts receivable","parent":null,"placeholder":false},"prev":"58ca33a2fb8230622c6df46c491accbbe82e52d8be43a49a96f599dee1c9460d","seq":8,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Liability","code":"2000","currency":"USD","id":6,"name":"Accounts payable","parent":null,"placeholder":false},"prev":"630e419ad2afbcb3171177430d8701e4931a571ac10f0d5f635c4f37e8bbd965","seq":9,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Liability","code":"2050","currency":"USD","id":7,"name":"Company card","parent":null,"placeholder":false},"prev":"dca477176282fc4b6f9adbf3ad5450198c24647eec5ece472127faa0d256f012","seq":10,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Liability","code":"2100","currency":"USD","id":8,"name":"Due to members","parent":null,"placeholder":false},"prev":"d635bc76135ad344c1b6151ecff322849af89e0ea159124704af70dfdeaadff2","seq":11,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Equity","code":"3000","currency":"USD","id":9,"name":"Capital A","parent":null,"placeholder":false},"prev":"ebe9968feff05860f2da8a2e3cd4bc07d7d3f0c3922f037e238fcedfc10f00d7","seq":12,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Equity","code":"3001","currency":"USD","id":10,"name":"Capital B","parent":null,"placeholder":false},"prev":"3ae241ef0c699d888c8c50f5bcf6b141ff10963cb4ed3880b6b02eec5268cbdc","seq":13,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Equity","code":"3900","currency":"USD","id":11,"name":"Retained earnings","parent":null,"placeholder":false},"prev":"6d13b74f8e9ef3b15f1ea75751fa8070ec0f83f073fc091be0c154a019f030c6","seq":14,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Revenue","code":"4000","currency":"USD","id":12,"name":"Consulting revenue","parent":null,"placeholder":false},"prev":"a0db3c9413975175f75fe1c37e6831c4758d331f52fb9378863180162c5ca8ad","seq":15,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Expense","code":"6000","currency":"USD","id":13,"name":"Supplies","parent":null,"placeholder":false},"prev":"78a4ebd277a2f9e3ea76414a0bf8f7406cc3e30dbfa48754366752f940b15075","seq":16,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Expense","code":"6100","currency":"USD","id":14,"name":"Software","parent":null,"placeholder":false},"prev":"5b6f921b6731bddc951abd2912231e2282111b9ad2e1ddb12e108846cd396d44","seq":17,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Expense","code":"6200","currency":"USD","id":15,"name":"Depreciation","parent":null,"placeholder":false},"prev":"41b76a17cf130608e358df070a5917f86eeb3c229ba02a7e06322355a3bfaaea","seq":18,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Expense","code":"6300","currency":"USD","id":16,"name":"Insurance","parent":null,"placeholder":false},"prev":"2d13667fdebc469d0d59bee761e650325d7a402186dbb84890168adf8d741f7d","seq":19,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"account_type":"Expense","code":"6400","currency":"USD","id":17,"name":"Contract labor","parent":null,"placeholder":false},"prev":"819cfd940a1b72d4e4a6e3c9283579cc8c06cf5ff4339a28f88f2c16b24fe88f","seq":20,"ts":"2026-10-21T21:28:50Z","type":"account.added"} +{"payload":{"changes":[{"key":"company.members","value":[{"capital_account":"3000","name":"Avery Quill","share":"0.5"},{"capital_account":"3001","name":"Rowan Pike","share":"0.5"}]},{"key":"books.cash_accounts","value":["1000"]},{"key":"books.financing_accounts","value":["2100"]},{"key":"backup.git_remote","value":"file:///home/swaits/.cache/wanderbooks/p3-rev-data-e2e/p2home/remote.git"},{"key":"backup.folder","value":"/home/swaits/.cache/wanderbooks/p3-rev-data-e2e/p2home/usb"}],"source":{"decided_by":"Avery Quill","decided_on":"2026-10-21"}},"prev":"92acb98bfa80e1e722c6158bbe6e9ed4c8c2fc31ad1adb14b9f61d304043ca6d","seq":21,"ts":"2026-10-21T21:28:50Z","type":"settings.set"} +{"payload":{"id":1,"name":"Avery Quill","roles":["member"]},"prev":"a182ca8fabcebddef6818143575d3749d0e8fc036baf6e312bd0a849f78436cf","seq":22,"ts":"2026-10-21T21:28:50Z","type":"party.added"} +{"payload":{"id":2,"name":"Rowan Pike","roles":["member"]},"prev":"fa48b3d8f4372ee6ae38661251659ce4b4374f54fa51329e974a09ba16815448","seq":23,"ts":"2026-10-21T21:28:50Z","type":"party.added"} +{"payload":{"id":1,"name":"Harbor Design LLC"},"prev":"596325a7614846296dd6d073baf2f543107b665c35328447459012c74855c461","seq":24,"ts":"2026-10-21T21:28:50Z","type":"vendor.added"} +{"payload":{"id":2,"name":"Bigco Supply"},"prev":"c424a9910d582b5f0359b5b6705e7d96dc5bcb1914ced459a4276f27d0e36f01","seq":25,"ts":"2026-10-21T21:28:50Z","type":"vendor.added"} +{"payload":{"id":1,"name":"Cedar Client Co"},"prev":"46c8d1500320b40b9666a5a42d931822f05cf054165d410c5cf5732250bed40f","seq":26,"ts":"2026-10-21T21:28:51Z","type":"customer.added"} +{"payload":{"facts":{"last4":"6780","purged":null,"tin_type":"ein","vault_record":"69788eb06e09d55ca50e3ec73dd403baa06fc5818ce36d34547aa8de3563df43"},"id":3},"prev":"80907e1ddb276655db6cdea50222daa46b589455b4a4d5394bc53d62dc48fcd0","seq":27,"ts":"2026-10-21T21:28:51Z","type":"party.tin_set"} +{"payload":{"facts":{"last4":"3456","purged":null,"tin_type":"ssn","vault_record":"18a2ba28ac3346b30598fb86d645d75b756bc43116cf0c5a78b3ffbd168e537a"},"id":1},"prev":"6be2d55137906b67c54034f40be01ad0d7736c7057ff4b4285a2f0494e920a63","seq":28,"ts":"2026-10-21T21:28:51Z","type":"party.tin_set"} +{"payload":{"form_1099":"nec","tin_on_file":true,"vendor_id":1},"prev":"1607945e13e8fa9b142a7a089d5679a544384d5e44e051042690bac65fdc4f7f","seq":29,"ts":"2026-10-21T21:28:51Z","type":"vendor.1099_set"} +{"payload":{"form_1099":null,"tin_on_file":false,"vendor_id":2},"prev":"8d815aad8481d577c28fd177765464119020cd3223240c3d8a9449eca05763e8","seq":30,"ts":"2026-10-21T21:28:51Z","type":"vendor.1099_set"} +{"payload":{"date":"2025-01-02","description":"Capital in A","id":1},"prev":"e21b02f65b2d01347d2280a81d5c684947acf795a902bc6329c63b48fb636468","seq":31,"ts":"2026-10-21T21:28:51Z","type":"entry.created"} +{"payload":{"entry_id":1,"party_id":1},"prev":"4ada99e48cccb19f70a89f57cc2fe28c9d8a38a7b7c204b2c64c8511304e4dc0","seq":32,"ts":"2026-10-21T21:28:51Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"5000.00","currency":"USD","id":1,"side":"debit"},"prev":"89bd45cc0937030d7d7cfb81d816d341b000bfb020d7bfda50b8b84f89536675","seq":33,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"account":9,"amount":"5000.00","currency":"USD","id":1,"side":"credit"},"prev":"2dd8bcd4901d1c419d862293a52c42a42c4e77d415df5f623db0d4b4a0d4e484","seq":34,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"attachment_id":1,"blob_sha":"aeb484e66061b3e49eb809f0ddf792afdee2da15cb69885b91ae8c12a4a1e59b","category":"receipts","description":null,"entry_id":1,"file_name":"r1.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"441c5859752bfa9639bef24b417d2b43a7c99d5a755e4820fd987664e3b93910","seq":35,"ts":"2026-10-21T21:28:51Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-02","description":"Capital in A","id":1,"lines":[{"account":1,"amount":"5000.00","currency":"USD","side":"debit"},{"account":9,"amount":"5000.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"dc86cc21e1409de4aa1fe4b966d96e7de7dbb065eaad7852d6782d02d2f8310c","seq":36,"ts":"2026-10-21T21:28:51Z","type":"entry.posted"} +{"payload":{"date":"2025-01-02","description":"Capital in B","id":2},"prev":"45e788b2c6173364749d188be75732039813e67ea27ce66d2203cb10906e1832","seq":37,"ts":"2026-10-21T21:28:51Z","type":"entry.created"} +{"payload":{"entry_id":2,"party_id":2},"prev":"78bf42bcd02c0fa6e5f028baa69f13b3490be06db837734b944a2c63f3acf4c9","seq":38,"ts":"2026-10-21T21:28:51Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"5000.00","currency":"USD","id":2,"side":"debit"},"prev":"5d56e32e035b1305e9aa7bcef55f2fcaf6958f25869c99b958d1f8e82a4f7520","seq":39,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"account":10,"amount":"5000.00","currency":"USD","id":2,"side":"credit"},"prev":"8d722949f628f0e20e87aaa8b024cbf9987e773b4f7113a37a0ba17d4386d6d1","seq":40,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"attachment_id":2,"blob_sha":"23191deb4999b3f1726e6d382a6c0d020a3eb9ffb2e4f06e6c4208120a2b1dc7","category":"receipts","description":null,"entry_id":2,"file_name":"r2.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"7298f2f2b297b9025d4203a7a07dde44fb99ae473d5d7f0fbab1967a585a133b","seq":41,"ts":"2026-10-21T21:28:51Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-02","description":"Capital in B","id":2,"lines":[{"account":1,"amount":"5000.00","currency":"USD","side":"debit"},{"account":10,"amount":"5000.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"f1b98f8e16280ce39da64198a583957caa67585c96db16a30d5dc697c1549457","seq":42,"ts":"2026-10-21T21:28:51Z","type":"entry.posted"} +{"payload":{"date":"2025-01-03","description":"Consulting 1","id":3},"prev":"6816748843a8a19a8327aa5756c751706dee3f93e41a5c13816e5642072f8896","seq":43,"ts":"2026-10-21T21:28:51Z","type":"entry.created"} +{"payload":{"entry_id":3,"party_id":5},"prev":"2e9fb36852fca6384a4eed6289e66659453943c0d7c2988d3cdae83abb3352ce","seq":44,"ts":"2026-10-21T21:28:51Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"425.45","currency":"USD","id":3,"side":"debit"},"prev":"a55a24cf00fcfd9097f868cfaa432a4b1d274ffc4c777d8b460e01a71a714aac","seq":45,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"425.45","currency":"USD","id":3,"side":"credit"},"prev":"d5fe8b6df89d5df23335d2292cac76e3200d3e96020a3be40cb819ce71565e95","seq":46,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"attachment_id":3,"blob_sha":"a1fd86e4db54256d3cbcc42c003499e77bea22309d3ca22936c9a3119f951eb8","category":"receipts","description":null,"entry_id":3,"file_name":"r3.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"b0f2ab24fac7904b1c1cd1f98d8043fe94f2300259476149fabdfe728a31f8b3","seq":47,"ts":"2026-10-21T21:28:51Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-03","description":"Consulting 1","id":3,"lines":[{"account":1,"amount":"425.45","currency":"USD","side":"debit"},{"account":12,"amount":"425.45","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"9299ff9a6d7d14512b050e9e37bbf6fd0880c8bd4211f0f1c2579236e9a585b0","seq":48,"ts":"2026-10-21T21:28:51Z","type":"entry.posted"} +{"payload":{"date":"2025-01-08","description":"Design work 1","id":4},"prev":"dabd38384f06af507b8b6440966c7591ec779586137a07d0af17dc49288bf3a1","seq":49,"ts":"2026-10-21T21:28:51Z","type":"entry.created"} +{"payload":{"entry_id":4,"party_id":3},"prev":"741fa40bc0e48646e50d6223d5051bf77d472834f462464f57e8560365a21904","seq":50,"ts":"2026-10-21T21:28:51Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"198.72","currency":"USD","id":4,"side":"debit"},"prev":"3d1fc1b51c92da1e773b9c45f83102ca73b79bdb29b39346ff298e50da7f83cf","seq":51,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"198.72","currency":"USD","id":4,"side":"credit"},"prev":"a5e24ac9d61aa1c8f077b1dc2afa4d54d2193035c61d6a5afb909ee0c3d09e84","seq":52,"ts":"2026-10-21T21:28:51Z","type":"entry.line_added"} +{"payload":{"attachment_id":4,"blob_sha":"967db8ecef54a42031f76d14ef0493b998d08c941bf8a739edf1237f903d4649","category":"receipts","description":null,"entry_id":4,"file_name":"r4.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"5dd3bf41b20fa2d306e946df90d519ec2e187dbc22d3f007206fee08fce75c94","seq":53,"ts":"2026-10-21T21:28:51Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-08","description":"Design work 1","id":4,"lines":[{"account":17,"amount":"198.72","currency":"USD","side":"debit"},{"account":1,"amount":"198.72","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"052111cbc65ecee4c26cd5b628101afbe96dc7cdcfd8e6401515f4f5435cf242","seq":54,"ts":"2026-10-21T21:28:51Z","type":"entry.posted"} +{"payload":{"date":"2025-01-13","description":"Supplies 1","id":5},"prev":"edd15c9fc1945f0b8cce5cd7a595433830fd1eef2788b6b9b0f09e7e2e0b9555","seq":55,"ts":"2026-10-21T21:28:52Z","type":"entry.created"} +{"payload":{"entry_id":5,"party_id":4},"prev":"314ccb3da1e29adfde995b4aa48ba4de31ec4bdb5bb905abaa4307017865b6f7","seq":56,"ts":"2026-10-21T21:28:52Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"518.50","currency":"USD","id":5,"side":"debit"},"prev":"329b80dad0d3ddfbf70b48903836835e85b908ec9374fd0843f04b2216dddfdb","seq":57,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"518.50","currency":"USD","id":5,"side":"credit"},"prev":"693c0aa1c33cb0c1bfec75eca43bf0ce7fe078110dc8387b9e8daee72246c698","seq":58,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"attachment_id":5,"blob_sha":"a38f2f89b4c09962c99eca9b842a2382f2bda3726357af210626543cc52f1e7c","category":"receipts","description":null,"entry_id":5,"file_name":"r5.pdf","mime_type":"application/pdf","size_bytes":51},"prev":"794a8c3d0292339a0b8cacd6fa57e14dad135466963c2ed994341edac2f4dccd","seq":59,"ts":"2026-10-21T21:28:52Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-13","description":"Supplies 1","id":5,"lines":[{"account":13,"amount":"518.50","currency":"USD","side":"debit"},{"account":7,"amount":"518.50","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"b66e18803ac268c5f2ddd31f076ec3198a4d29375619a8b40a2d7b0edb5992d3","seq":60,"ts":"2026-10-21T21:28:52Z","type":"entry.posted"} +{"payload":{"date":"2025-01-18","description":"Software paid by member 1","id":6},"prev":"d52c34b2f167deb3492e8a7d2e2b50ed8a592e47c5b7a8b1f7cf41d263b15b10","seq":61,"ts":"2026-10-21T21:28:52Z","type":"entry.created"} +{"payload":{"entry_id":6,"party_id":1},"prev":"12dd3a4a341d12ec13b2735e91081655de1d76c45b350cbdb1b25e0743aab0e8","seq":62,"ts":"2026-10-21T21:28:52Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"854.19","currency":"USD","id":6,"side":"debit"},"prev":"58a015bb07e9ce1d353eef832298587ffe4d0ef5cfd70b80b25888137ae4e5f4","seq":63,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"854.19","currency":"USD","id":6,"side":"credit"},"prev":"e58d9f1c7e5b0533a7a82455b0cb7a8d60d7eb1ce87c9b03ecf1695517d7c63f","seq":64,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"attachment_id":6,"blob_sha":"17ecf1539551d918be6e6ef9f3decc93c3e093a4985b1153f08d2c18da545b7b","category":"receipts","description":null,"entry_id":6,"file_name":"r6.pdf","mime_type":"application/pdf","size_bytes":66},"prev":"21934f4937d4bf5ccdaca3c967d8ae75d9f03379a9afbe158ffa7f7d12a0a4e0","seq":65,"ts":"2026-10-21T21:28:52Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-18","description":"Software paid by member 1","id":6,"lines":[{"account":14,"amount":"854.19","currency":"USD","side":"debit"},{"account":8,"amount":"854.19","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"51a777f27ddcf09ad862b622bd53e185907af1338799a4d06cb412b3845c8deb","seq":66,"ts":"2026-10-21T21:28:52Z","type":"entry.posted"} +{"payload":{"date":"2025-01-23","description":"Bank fee 1","id":7},"prev":"197bde02ee7ed2a3a12a378984865819548cdb778b6a33c57dac74552f5522c5","seq":67,"ts":"2026-10-21T21:28:52Z","type":"entry.created"} +{"payload":{"entry_id":7,"reason":"bank fee"},"prev":"e50d6c5f0b1c2c497dc2f37dd889365e9fc2d7b0a00a35a89c66c9d39b332c3e","seq":68,"ts":"2026-10-21T21:28:52Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":7,"side":"debit"},"prev":"c95c400f054caae9bd95457abb2f534d6ec693e8a826dddc3136d4b25ba37851","seq":69,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":7,"side":"credit"},"prev":"9e6be2d5eea5fbc795e421c3e4f35275ee5d1e8a68d9d18e99eb1492ffac343f","seq":70,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"attachment_id":7,"blob_sha":"7d85565514a409a2d8bbacdfc2c68a2260ad0e311328cd0bda91800600098ed4","category":"receipts","description":null,"entry_id":7,"file_name":"r7.pdf","mime_type":"application/pdf","size_bytes":51},"prev":"ce4ff33af6791a860889ff147bb7725b3e256925f421a9d98d29cd105771dc61","seq":71,"ts":"2026-10-21T21:28:52Z","type":"receipt.attached"} +{"payload":{"date":"2025-01-23","description":"Bank fee 1","id":7,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"4416f011c27bcc9dafb26d68f4a989df6973c49b86aa396277c990994a29aa19","seq":72,"ts":"2026-10-21T21:28:52Z","type":"entry.posted"} +{"payload":{"date":"2025-02-03","description":"Consulting 2","id":8},"prev":"86f329829a794b9337f0a756d6dcc8fab39ba4ae96fc3d30201693a39ba050c4","seq":73,"ts":"2026-10-21T21:28:52Z","type":"entry.created"} +{"payload":{"entry_id":8,"party_id":5},"prev":"e1ce616977d845dab6738b3753469116c3f773a510389b84fff4f7879a223283","seq":74,"ts":"2026-10-21T21:28:52Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"95.94","currency":"USD","id":8,"side":"debit"},"prev":"8e54df62ea15c54668a59912517daf3655c0d095ddc8ef7d64b2fd13dcef9892","seq":75,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"95.94","currency":"USD","id":8,"side":"credit"},"prev":"245ec39fe29eb8be7ca72c83a0dc45f88bb58dbc0a75a7aa2e8cf0de973697ed","seq":76,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"attachment_id":8,"blob_sha":"57d707ac4c8f4987ad0de50f710d25d20729d276e5bb57963191e07c29c59b7a","category":"receipts","description":null,"entry_id":8,"file_name":"r8.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"a4d90d26d8c94e3d6e8c4861e8b78ad02aca3305fbd1ea4ff3ccef611f9851a4","seq":77,"ts":"2026-10-21T21:28:52Z","type":"receipt.attached"} +{"payload":{"date":"2025-02-03","description":"Consulting 2","id":8,"lines":[{"account":1,"amount":"95.94","currency":"USD","side":"debit"},{"account":12,"amount":"95.94","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"aa51bf5a3c0b3b357a3c9b27619f538c5efe9cf1415c402279b23f4dc930133e","seq":78,"ts":"2026-10-21T21:28:52Z","type":"entry.posted"} +{"payload":{"date":"2025-02-08","description":"Design work 2","id":9},"prev":"515e776c06c84b658bd6775a915942c25c35d5b5dbc85085647f17bcb8bfe14f","seq":79,"ts":"2026-10-21T21:28:52Z","type":"entry.created"} +{"payload":{"entry_id":9,"party_id":3},"prev":"01e212769b1b8a6ff8a60bb62f2315b651a888d095cc91b7e9328743901dc71f","seq":80,"ts":"2026-10-21T21:28:52Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"703.39","currency":"USD","id":9,"side":"debit"},"prev":"7ba725f7b5db6995c5388ffe70ade057eb195cbefa6f849a7dd0b2657ed2ab26","seq":81,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"703.39","currency":"USD","id":9,"side":"credit"},"prev":"99228fcdcfc3dfccfdf6692ca4474c05ecd9b479ad6dbf1dab58c7b8b58e1b35","seq":82,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"attachment_id":9,"blob_sha":"44ecd22cf54e2cfe9331fb015aa011affd23aad6788939c86a85de028a34df14","category":"receipts","description":null,"entry_id":9,"file_name":"r9.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"6d944d78bb57b1556b6b8e07b5f7f2a3286e408efad2ff116b28f1e48514fe29","seq":83,"ts":"2026-10-21T21:28:52Z","type":"receipt.attached"} +{"payload":{"date":"2025-02-08","description":"Design work 2","id":9,"lines":[{"account":17,"amount":"703.39","currency":"USD","side":"debit"},{"account":1,"amount":"703.39","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"8ecdbd55959498b2ac506e96ce3cd31f0c4bd715bf78decc97fb300b6bc3d9fb","seq":84,"ts":"2026-10-21T21:28:52Z","type":"entry.posted"} +{"payload":{"date":"2025-02-13","description":"Supplies 2","id":10},"prev":"eb4c97113391df5c0a12a8ad1b745b7bb40b528c87dae70b235aa873034d46b6","seq":85,"ts":"2026-10-21T21:28:52Z","type":"entry.created"} +{"payload":{"entry_id":10,"party_id":4},"prev":"0ff6a2037bfc1949862708059d124a80c1fd8863a7822593ecd51bcc8ff0ec10","seq":86,"ts":"2026-10-21T21:28:52Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"124.37","currency":"USD","id":10,"side":"debit"},"prev":"4f596d265ad21904214fe768fa6d813b5b91684bb1f57e21e68a7a2aac4ea597","seq":87,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"124.37","currency":"USD","id":10,"side":"credit"},"prev":"c21eb19cd2ac7da02f3e563c2e43470cf6243d0526bac2c31051990f6a1a7cc7","seq":88,"ts":"2026-10-21T21:28:52Z","type":"entry.line_added"} +{"payload":{"attachment_id":10,"blob_sha":"36ffc77eeb9f51878977e69d554148bec710772fcdac8a85291d1cc6d85fc1a5","category":"receipts","description":null,"entry_id":10,"file_name":"r10.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"45bedecd2fd71a2d2f6e28c04ebe9b07bd69e90a19551f15ef589229c23c92e5","seq":89,"ts":"2026-10-21T21:28:52Z","type":"receipt.attached"} +{"payload":{"date":"2025-02-13","description":"Supplies 2","id":10,"lines":[{"account":13,"amount":"124.37","currency":"USD","side":"debit"},{"account":7,"amount":"124.37","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"c73b6e6219916b20250550d10023467b2608ed6a871294e5ffd19f81589f6638","seq":90,"ts":"2026-10-21T21:28:52Z","type":"entry.posted"} +{"payload":{"date":"2025-02-18","description":"Software paid by member 2","id":11},"prev":"3bcea4d211bccb6c3f965b63ed9926e0a2ff8e03e524671e5d16bccbf8c7f2b2","seq":91,"ts":"2026-10-21T21:28:53Z","type":"entry.created"} +{"payload":{"entry_id":11,"party_id":1},"prev":"593b7a10014a3aae4db791dc88f01059de5dba30e0c3d8d81d8981919426fad0","seq":92,"ts":"2026-10-21T21:28:53Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"480.31","currency":"USD","id":11,"side":"debit"},"prev":"0d0c93ffcf4737d6b2aed0f6ac106b168731acf3ac9c8dfe1ebe58a07b500ee4","seq":93,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"480.31","currency":"USD","id":11,"side":"credit"},"prev":"c62930589fd64363d19044508091db6f1a7a31bc2d6229392d293175c6dd43b6","seq":94,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"attachment_id":11,"blob_sha":"adb51e4f7d428927236d250e88465a36f56a842d7878a62222fe2bd29f4d73fd","category":"receipts","description":null,"entry_id":11,"file_name":"r11.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"9e909f641d42f42854e4d2569d10aca5210336d4a266416fab450c2b9ad2d328","seq":95,"ts":"2026-10-21T21:28:53Z","type":"receipt.attached"} +{"payload":{"date":"2025-02-18","description":"Software paid by member 2","id":11,"lines":[{"account":14,"amount":"480.31","currency":"USD","side":"debit"},{"account":8,"amount":"480.31","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"e3ea21147baef2177949040be10c4a4a2ce12f82c1e1f1c9e7ed4a0fae93c655","seq":96,"ts":"2026-10-21T21:28:53Z","type":"entry.posted"} +{"payload":{"date":"2025-02-23","description":"Bank fee 2","id":12},"prev":"1f1994c6bb186155ff6c1e452247eff373ce903fcb04bd0a2c670160c5a639f7","seq":97,"ts":"2026-10-21T21:28:53Z","type":"entry.created"} +{"payload":{"entry_id":12,"reason":"bank fee"},"prev":"5b275e93057427c467c4790c51432a25180f6b02ec28db4fd3ea516bbccff9d8","seq":98,"ts":"2026-10-21T21:28:53Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":12,"side":"debit"},"prev":"3b0e4b89a80cc27b5d471c5db255b01ea8941f335d47d0355361f4162828c806","seq":99,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":12,"side":"credit"},"prev":"4847abf2d56ce8584c9f9b9ff581d8fdbe76b4f7931ac4f03a1a059c224c187d","seq":100,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"attachment_id":12,"blob_sha":"8dc13ceaede8f28843e0cce29d7361079db7db662dddcad5363206973983a5ac","category":"receipts","description":null,"entry_id":12,"file_name":"r12.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"8fbd785163460476a7f249b8a186388ace63db4126ce98b251fcb85f8446b6c6","seq":101,"ts":"2026-10-21T21:28:53Z","type":"receipt.attached"} +{"payload":{"date":"2025-02-23","description":"Bank fee 2","id":12,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"741e73614fc19a61c148919eadaac97feccfe63e10dd033a37e1a4278749dff2","seq":102,"ts":"2026-10-21T21:28:53Z","type":"entry.posted"} +{"payload":{"date":"2025-03-03","description":"Consulting 3","id":13},"prev":"bcded4e6928cb1d98cfecad9418c88868173a31715d9c7258fd1ac43f47eeb50","seq":103,"ts":"2026-10-21T21:28:53Z","type":"entry.created"} +{"payload":{"entry_id":13,"party_id":5},"prev":"4ae7dbfad307311ffd842c853b5c38e490f1cf90337feadf063a1f8a11094d01","seq":104,"ts":"2026-10-21T21:28:53Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"77.02","currency":"USD","id":13,"side":"debit"},"prev":"4a5a7d56822cefdfa32825eeea6649f8d5fe417bd6af61bf25572c3321c4dc8a","seq":105,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"77.02","currency":"USD","id":13,"side":"credit"},"prev":"f480211077e50b34ed8d410b94a2a896e3aa41e5e976ac23d026956c925f5846","seq":106,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"attachment_id":13,"blob_sha":"bdd80cf4f88b7072fe957a747868541c636fd110390c977807cbc27ece7fc3f5","category":"receipts","description":null,"entry_id":13,"file_name":"r13.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"37e9bdee99d55fbca6ee1ed3a5c7b5930a07f63726b25e01e4f5d3f8f6332d39","seq":107,"ts":"2026-10-21T21:28:53Z","type":"receipt.attached"} +{"payload":{"date":"2025-03-03","description":"Consulting 3","id":13,"lines":[{"account":1,"amount":"77.02","currency":"USD","side":"debit"},{"account":12,"amount":"77.02","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"75b43dc62ba4de561993dac61fa66b6cb36f25db4ee76f9c44b37186b20799dc","seq":108,"ts":"2026-10-21T21:28:53Z","type":"entry.posted"} +{"payload":{"date":"2025-03-08","description":"Design work 3","id":14},"prev":"6787e29c68214763e273f8c51a03f6eb7e9e8325beab276dcf057a5d2e1c5257","seq":109,"ts":"2026-10-21T21:28:53Z","type":"entry.created"} +{"payload":{"entry_id":14,"party_id":3},"prev":"fd970f288cd034209f01fe016b5c14d6fdb63059b7db0fcf90a064d1274f0b41","seq":110,"ts":"2026-10-21T21:28:53Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"666.10","currency":"USD","id":14,"side":"debit"},"prev":"361e3e012906190157032b7f1e266f4ffbb3a44c3220dccbd42bca8fc8acf43e","seq":111,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"666.10","currency":"USD","id":14,"side":"credit"},"prev":"31d5b169b81aa9feb3df1c3b9f736601e1c82de28be4c54723fc0d50cb3f68d8","seq":112,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"attachment_id":14,"blob_sha":"53d0a291ee3782d571157ef0c84f5862c9fe3ea33964edc3c4bd6d5a966d91e5","category":"receipts","description":null,"entry_id":14,"file_name":"r14.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"48d9582f794a39423947fe63c4bc1f954413f8aa0d8b0a20d7e7ca1a7945dd2c","seq":113,"ts":"2026-10-21T21:28:53Z","type":"receipt.attached"} +{"payload":{"date":"2025-03-08","description":"Design work 3","id":14,"lines":[{"account":17,"amount":"666.10","currency":"USD","side":"debit"},{"account":1,"amount":"666.10","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"65233a70ad796f6819b5f3b142db86baee2f534df196c647ed9d64524815e651","seq":114,"ts":"2026-10-21T21:28:53Z","type":"entry.posted"} +{"payload":{"date":"2025-03-13","description":"Supplies 3","id":15},"prev":"fef2b0e474a659625d01ae2eb4546bd2e320331e47a5493c07a453f7e7f2e60f","seq":115,"ts":"2026-10-21T21:28:53Z","type":"entry.created"} +{"payload":{"entry_id":15,"party_id":4},"prev":"d232fa4453f161809c08271b5f2da9ef6abe5a88658309e6eb874630cd8d815d","seq":116,"ts":"2026-10-21T21:28:53Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"282.40","currency":"USD","id":15,"side":"debit"},"prev":"329b0488d4a9da17b537ca08c02848943e31cd33634cb15ae2ded821ca026936","seq":117,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"282.40","currency":"USD","id":15,"side":"credit"},"prev":"c7951f1954727979a4b4f22a21b3582c889324a17257a16e30dc5ca51bf1fb2f","seq":118,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"attachment_id":15,"blob_sha":"50362975c484841d345e5b431ff1de0c91a38a3a609a10b446e92214b12b89c7","category":"receipts","description":null,"entry_id":15,"file_name":"r15.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"3c47ea24e1c379899e0959dedbea581010b89520066efda366a503c42b9ea429","seq":119,"ts":"2026-10-21T21:28:53Z","type":"receipt.attached"} +{"payload":{"date":"2025-03-13","description":"Supplies 3","id":15,"lines":[{"account":13,"amount":"282.40","currency":"USD","side":"debit"},{"account":7,"amount":"282.40","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"5be04d392a8bb37c8f46eaf40b9475596780b133c089fbf2c55611aa514e881b","seq":120,"ts":"2026-10-21T21:28:53Z","type":"entry.posted"} +{"payload":{"date":"2025-03-18","description":"Software paid by member 3","id":16},"prev":"e144d0ead638ccef5dbb3515ce9fcf44847ff1572b51f4e0333db8d6ed9b742b","seq":121,"ts":"2026-10-21T21:28:53Z","type":"entry.created"} +{"payload":{"entry_id":16,"party_id":1},"prev":"13fc8211de63981e31fe6636cb8cbfd133c330f63233fc72378425677c1463fb","seq":122,"ts":"2026-10-21T21:28:53Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"50.14","currency":"USD","id":16,"side":"debit"},"prev":"e1a1ded0ba49a9db6cde6792e1b714366a00671549adf4324a4598b1d74a5c55","seq":123,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"50.14","currency":"USD","id":16,"side":"credit"},"prev":"c6e25c989a0b701eb022c2ba61ca3fb87889035ec3a41504f1f0c05202a4e882","seq":124,"ts":"2026-10-21T21:28:53Z","type":"entry.line_added"} +{"payload":{"attachment_id":16,"blob_sha":"d362d36ef90e3eaa91a0c8dda829b78c6af7bbaf6d780a4c6ccb2b5fc3847677","category":"receipts","description":null,"entry_id":16,"file_name":"r16.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"8d896806acde9e0d97d7858b61e300f6952744ddb6d35605ed64dac5254e140a","seq":125,"ts":"2026-10-21T21:28:54Z","type":"receipt.attached"} +{"payload":{"date":"2025-03-18","description":"Software paid by member 3","id":16,"lines":[{"account":14,"amount":"50.14","currency":"USD","side":"debit"},{"account":8,"amount":"50.14","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"3e65cb179dde4a39b10434b8c68b4de5afe0e31de2427367b37b72472d852e61","seq":126,"ts":"2026-10-21T21:28:54Z","type":"entry.posted"} +{"payload":{"date":"2025-03-23","description":"Bank fee 3","id":17},"prev":"01d5f1f87c958891490e89de23951f85d0e60ad048d9057be9c843ddf2a8624d","seq":127,"ts":"2026-10-21T21:28:54Z","type":"entry.created"} +{"payload":{"entry_id":17,"reason":"bank fee"},"prev":"4d765897ebb1b5caa54ccc9da98db76071dba2d990a3ad508d3d35c10e4842de","seq":128,"ts":"2026-10-21T21:28:54Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":17,"side":"debit"},"prev":"d900fa39a22dc0af4519b5b24d271a874058d348a19ab91edc7c5b978bd34774","seq":129,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":17,"side":"credit"},"prev":"54c9aa19896f483d6611034b2fabd50368127f65b3f5b14fa7b859d5afad739f","seq":130,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"attachment_id":17,"blob_sha":"697a5b6d8f74f341972c78207e471c30d07ced60ef8a00827be79dadd9e8948b","category":"receipts","description":null,"entry_id":17,"file_name":"r17.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"898692b09d5bcce584af16f0e0dc2897481796bc7a607558c3e71da57fdef6a6","seq":131,"ts":"2026-10-21T21:28:54Z","type":"receipt.attached"} +{"payload":{"date":"2025-03-23","description":"Bank fee 3","id":17,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"117202b822b0090e7c45baabdcbf9cace96d6d64760776fcef1d71e815b2c8bc","seq":132,"ts":"2026-10-21T21:28:54Z","type":"entry.posted"} +{"payload":{"date":"2025-04-03","description":"Consulting 4","id":18},"prev":"98b756a3cf8dc05c724889a67a011f587dd0f528547fb085ee40d23fe92c9b83","seq":133,"ts":"2026-10-21T21:28:54Z","type":"entry.created"} +{"payload":{"entry_id":18,"party_id":5},"prev":"b460b4e56a6c09995d0765b0f728acd5252808587aaab153af0980ed9eb29bdd","seq":134,"ts":"2026-10-21T21:28:54Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"569.38","currency":"USD","id":18,"side":"debit"},"prev":"f25e935d9606f16026377498d191ee8fb6fc84e06e7b1acbf308b46d4465ddf0","seq":135,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"569.38","currency":"USD","id":18,"side":"credit"},"prev":"405ea8804c75f2a21bce3abe2c5ae46c74a833c04c32df66fa05976586757e7e","seq":136,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"attachment_id":18,"blob_sha":"135feedb9b3f3931a9af46640e942d497cd2c7eedd46cc49c31116107d63e1af","category":"receipts","description":null,"entry_id":18,"file_name":"r18.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"10aa42e5c28659af0088f3f2bdfb76f9cf16f7f96697409c43ee35e79e0eb31e","seq":137,"ts":"2026-10-21T21:28:54Z","type":"receipt.attached"} +{"payload":{"date":"2025-04-03","description":"Consulting 4","id":18,"lines":[{"account":1,"amount":"569.38","currency":"USD","side":"debit"},{"account":12,"amount":"569.38","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"9cd8f1fc5f278e051552cac6a067bfdea4462c2a16998c87d4ee9fb229f5a9b1","seq":138,"ts":"2026-10-21T21:28:54Z","type":"entry.posted"} +{"payload":{"date":"2025-04-08","description":"Design work 4","id":19},"prev":"81b61a711735d100665af0f90f66427fa58b12c2609a4366c92eb595aa54bfe7","seq":139,"ts":"2026-10-21T21:28:54Z","type":"entry.created"} +{"payload":{"entry_id":19,"party_id":3},"prev":"0b06a1d6e8db2b3d1541c41653104843e37a5e9c9403869f850b3b23ce4ff318","seq":140,"ts":"2026-10-21T21:28:54Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"549.10","currency":"USD","id":19,"side":"debit"},"prev":"de1602a62459badaca7c86d11a80fb8fb077efbb4c0e0a96aa5f57fa4d46e69b","seq":141,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"549.10","currency":"USD","id":19,"side":"credit"},"prev":"c4fd94a05cec6453bda42d40960b8ab1648faa17a73f85298aff2d02f9d674cd","seq":142,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"attachment_id":19,"blob_sha":"7c621c63ab0b77d026b903714442e0cb16d786386abc15873937a05304dad04a","category":"receipts","description":null,"entry_id":19,"file_name":"r19.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"78d0f1a293a59f415181156b936e46d37a2d9d445f5692eb308b615990fbcb27","seq":143,"ts":"2026-10-21T21:28:54Z","type":"receipt.attached"} +{"payload":{"date":"2025-04-08","description":"Design work 4","id":19,"lines":[{"account":17,"amount":"549.10","currency":"USD","side":"debit"},{"account":1,"amount":"549.10","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"155d95bc1fe3bb903e700a0ee45a1a78be072e67df5a3a83ecbda62413526b54","seq":144,"ts":"2026-10-21T21:28:54Z","type":"entry.posted"} +{"payload":{"date":"2025-04-13","description":"Supplies 4","id":20},"prev":"bebb19d5b7bb2ff595ec01c3fd236202e0317d9173b54cef1d3539ec6efbae54","seq":145,"ts":"2026-10-21T21:28:54Z","type":"entry.created"} +{"payload":{"entry_id":20,"party_id":4},"prev":"c5a504b1fab56ae93e77357100fe56af642434409293f5bacaa281e19befc344","seq":146,"ts":"2026-10-21T21:28:54Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"92.56","currency":"USD","id":20,"side":"debit"},"prev":"542ee36d9463ffa01d276fcc5479b656a8617393d1c61f53fecf78ccb2632da8","seq":147,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"92.56","currency":"USD","id":20,"side":"credit"},"prev":"b03b1f3cb6cb871a4da589887226b65415677c75b92ba0d0e8aace71bb0a7940","seq":148,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"attachment_id":20,"blob_sha":"1ccdb1535622cb9fd70388cead476435d5a0bf48cb0f5486569d072b79702e3a","category":"receipts","description":null,"entry_id":20,"file_name":"r20.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"b0561a03b062d4b99c583d3bde744eccb66df3b8bbfff0ffd00a8151a92563ca","seq":149,"ts":"2026-10-21T21:28:54Z","type":"receipt.attached"} +{"payload":{"date":"2025-04-13","description":"Supplies 4","id":20,"lines":[{"account":13,"amount":"92.56","currency":"USD","side":"debit"},{"account":7,"amount":"92.56","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"17df72a2ff4d8ad8e7b53ebcae37547075dd6e867974a331b90de12af50d9678","seq":150,"ts":"2026-10-21T21:28:54Z","type":"entry.posted"} +{"payload":{"date":"2025-04-18","description":"Software paid by member 4","id":21},"prev":"aa98755989b66c1168da2ebf9ef2f667bf17dbfb090b0feb228abd47ada4145d","seq":151,"ts":"2026-10-21T21:28:54Z","type":"entry.created"} +{"payload":{"entry_id":21,"party_id":1},"prev":"08c220fb3aa840582e44d05113bcf17ef393044a1ee9a13d8bd1628efc543454","seq":152,"ts":"2026-10-21T21:28:54Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"316.44","currency":"USD","id":21,"side":"debit"},"prev":"b7b2e135f947b02ce7b13bd5397fe0ad6ee6c5953365384b3c975024f0a35c1e","seq":153,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"316.44","currency":"USD","id":21,"side":"credit"},"prev":"5b78e258d4718d45fb43f8295d70ee1b5e29f97a1404e53287355ddbbdf63596","seq":154,"ts":"2026-10-21T21:28:54Z","type":"entry.line_added"} +{"payload":{"attachment_id":21,"blob_sha":"5484fb84ff7718440c626ab6f5ea214c193f00a84079b51d811df2cdf35af58c","category":"receipts","description":null,"entry_id":21,"file_name":"r21.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"615867565e9b02e72a0e8d5180e5d43a0c5a4c0fdd8e8d1f4d98535c14c92f3e","seq":155,"ts":"2026-10-21T21:28:54Z","type":"receipt.attached"} +{"payload":{"date":"2025-04-18","description":"Software paid by member 4","id":21,"lines":[{"account":14,"amount":"316.44","currency":"USD","side":"debit"},{"account":8,"amount":"316.44","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"61daf7a1e6e75e7f3e1d4adb1b69e07997ab36225fd1add8f7a238af7adfc8d3","seq":156,"ts":"2026-10-21T21:28:54Z","type":"entry.posted"} +{"payload":{"date":"2025-04-23","description":"Bank fee 4","id":22},"prev":"210ff2e8a7172d687a06e850e0421355f0f142eae1844e3b841c19a83866e492","seq":157,"ts":"2026-10-21T21:28:54Z","type":"entry.created"} +{"payload":{"entry_id":22,"reason":"bank fee"},"prev":"c31826899ed4c4775b47f6d0fcb0877caa7d8e52eac8dc1e82c5dff809789713","seq":158,"ts":"2026-10-21T21:28:54Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":22,"side":"debit"},"prev":"e1a92cfbcbee238dc149050bb0116a091bd9a49730eef6b32991b4c462012752","seq":159,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":22,"side":"credit"},"prev":"eaf21d71f261786cb6aa58a92577bc8c282bb889255593560d29670947e6d5a3","seq":160,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"attachment_id":22,"blob_sha":"a1cfdbd7df3bd87d040f3f88ba9fd852d57c9e308a8fd8884b5872f5ab65d955","category":"receipts","description":null,"entry_id":22,"file_name":"r22.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"df36dae34a74a00382ef386d1275e9cfc125dd24d0e8ebccf23628ccf9063b5d","seq":161,"ts":"2026-10-21T21:28:55Z","type":"receipt.attached"} +{"payload":{"date":"2025-04-23","description":"Bank fee 4","id":22,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"4aea0b2d4309babbd6be12d741a242b394b86b74b67c0cc124f148318710c3ff","seq":162,"ts":"2026-10-21T21:28:55Z","type":"entry.posted"} +{"payload":{"date":"2025-05-03","description":"Consulting 5","id":23},"prev":"6ef10f9bad3e4e57d67e5af36eeeca16cd685409a31578ab3e145472c91efbe9","seq":163,"ts":"2026-10-21T21:28:55Z","type":"entry.created"} +{"payload":{"entry_id":23,"party_id":5},"prev":"0185d788c816eac9251c2011ab63ea1314e2053a29f914540e84e0c1f9a5b51e","seq":164,"ts":"2026-10-21T21:28:55Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"723.26","currency":"USD","id":23,"side":"debit"},"prev":"2bed4193fe6f8e6a79b6f3a26d257520c203d25d21f88700b2b795eb38cf2640","seq":165,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"723.26","currency":"USD","id":23,"side":"credit"},"prev":"f1d76570adf1ca7b0cd93e478ae8394b7639e545295b0a459bd1cf1426877245","seq":166,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"attachment_id":23,"blob_sha":"603f71cd317e709741b1c58e20690f48592dfc1e13c91b169d5207e8b3db45ca","category":"receipts","description":null,"entry_id":23,"file_name":"r23.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"9584359be3c76055e35579fe3cd88b8d0c0b5ad93deda34f8ea15bda937739b7","seq":167,"ts":"2026-10-21T21:28:55Z","type":"receipt.attached"} +{"payload":{"date":"2025-05-03","description":"Consulting 5","id":23,"lines":[{"account":1,"amount":"723.26","currency":"USD","side":"debit"},{"account":12,"amount":"723.26","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"d6ad64035427d8ab4243493aa7c39c1207f62a8c815fcd98eb609a58cab5f7eb","seq":168,"ts":"2026-10-21T21:28:55Z","type":"entry.posted"} +{"payload":{"date":"2025-05-08","description":"Design work 5","id":24},"prev":"04d667574c83c71c34d17f508bf5d6f64ac549b7c03968cf645c03e0ea007236","seq":169,"ts":"2026-10-21T21:28:55Z","type":"entry.created"} +{"payload":{"entry_id":24,"party_id":3},"prev":"582fa7556c44d7d006428010ebdd06f6717fa3e4349e9d1da43286093fc2d804","seq":170,"ts":"2026-10-21T21:28:55Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"557.42","currency":"USD","id":24,"side":"debit"},"prev":"4d7f750fe1197f5dc45cf3b36f0a8b5a8bbaefd59e0e70964e850468f15c806d","seq":171,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"557.42","currency":"USD","id":24,"side":"credit"},"prev":"b349beaeafe3b3a159d9e430afdf9b5c16245922ece79168e7374f4d0ac3c226","seq":172,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"attachment_id":24,"blob_sha":"e2150d5a433a641134c1c1e927a05dea2fddf44775f2b9dd2c23366e79d38389","category":"receipts","description":null,"entry_id":24,"file_name":"r24.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"40139e3503971af4374cf0b4b56c707d6525ac946e1ef2b1f35322f5b6b34850","seq":173,"ts":"2026-10-21T21:28:55Z","type":"receipt.attached"} +{"payload":{"date":"2025-05-08","description":"Design work 5","id":24,"lines":[{"account":17,"amount":"557.42","currency":"USD","side":"debit"},{"account":1,"amount":"557.42","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"b1966191ebf5b382aad792634f4c2c5daaaf5f84a739ac3c3507153c9031756c","seq":174,"ts":"2026-10-21T21:28:55Z","type":"entry.posted"} +{"payload":{"date":"2025-05-13","description":"Supplies 5","id":25},"prev":"1225dc7926558c39b65926da7e4e9cea942713a29451d670aa458c4411cdadf2","seq":175,"ts":"2026-10-21T21:28:55Z","type":"entry.created"} +{"payload":{"entry_id":25,"party_id":4},"prev":"0387af139832d42580c0d9d61990c7a0ed8f2c6e260bfb10b061882bb210885e","seq":176,"ts":"2026-10-21T21:28:55Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"78.47","currency":"USD","id":25,"side":"debit"},"prev":"7217b65bae27528c5586423029b77c7d17bf039d993011221b46b91f6bad4adf","seq":177,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"78.47","currency":"USD","id":25,"side":"credit"},"prev":"2ba1a67b7064dafbc8b921da91fe35e1dda7093eb9dc94ca1ebac7dbcf904c8f","seq":178,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"attachment_id":25,"blob_sha":"930a53802a91886ad895106907b55e56fad62a32d8933ecf10fa6ffda0ca4d99","category":"receipts","description":null,"entry_id":25,"file_name":"r25.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"341c0fe14ddff9e61aaff5b254088fdcdc22fe7b9569e8269c9b82e704d0c4fb","seq":179,"ts":"2026-10-21T21:28:55Z","type":"receipt.attached"} +{"payload":{"date":"2025-05-13","description":"Supplies 5","id":25,"lines":[{"account":13,"amount":"78.47","currency":"USD","side":"debit"},{"account":7,"amount":"78.47","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"b3b056c6c81e328b556a0e5f701d03cca27b0b535a3d6e5fa713c49038e17f35","seq":180,"ts":"2026-10-21T21:28:55Z","type":"entry.posted"} +{"payload":{"date":"2025-05-18","description":"Software paid by member 5","id":26},"prev":"589d6238947cb71db0fc7ca67fe191bd21815d6f2f73321866966cdcdc25cd5f","seq":181,"ts":"2026-10-21T21:28:55Z","type":"entry.created"} +{"payload":{"entry_id":26,"party_id":1},"prev":"e189d25bbbe2f1584aad41d5745394d64375193da201844a3a249d5107678894","seq":182,"ts":"2026-10-21T21:28:55Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"742.15","currency":"USD","id":26,"side":"debit"},"prev":"5b631f9b461464590322911961ef79fed887a1d13f711698ccf8346641ad6caa","seq":183,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"742.15","currency":"USD","id":26,"side":"credit"},"prev":"bb62bc83d88c4d51892ac46bea4973a9551a5eba47146590d4c1f64b93094001","seq":184,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"attachment_id":26,"blob_sha":"c5ec7ae0d321249ce2b1ca7ada6605a45e4afd8a09e8e3321b09427cf46fa876","category":"receipts","description":null,"entry_id":26,"file_name":"r26.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"55ef1c2620ed5e12ed6ebc4924d601d0b225a8597d33641a9b9cae40878008c2","seq":185,"ts":"2026-10-21T21:28:55Z","type":"receipt.attached"} +{"payload":{"date":"2025-05-18","description":"Software paid by member 5","id":26,"lines":[{"account":14,"amount":"742.15","currency":"USD","side":"debit"},{"account":8,"amount":"742.15","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"1561153fc0243c3fd1a7c4827e594f6989329425d8af48e8b400383b8ce8bfbf","seq":186,"ts":"2026-10-21T21:28:55Z","type":"entry.posted"} +{"payload":{"date":"2025-05-23","description":"Bank fee 5","id":27},"prev":"56423388ab6c87b857dda42ae3c223be85fd9f252ed6ab3c8e6e1263bf1de933","seq":187,"ts":"2026-10-21T21:28:55Z","type":"entry.created"} +{"payload":{"entry_id":27,"reason":"bank fee"},"prev":"191c29d74cfba04703fcce75bfe2bca04f2b55ec53fd59f648f0870167e27309","seq":188,"ts":"2026-10-21T21:28:55Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":27,"side":"debit"},"prev":"b98709e04a040c95b35edda750ac20a2cbf12bbd1671750037dafc00d66a3b13","seq":189,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":27,"side":"credit"},"prev":"4409fdddbe25988a80846a91a889333ff58f3cabeb93013380c89e0043bf0ad4","seq":190,"ts":"2026-10-21T21:28:55Z","type":"entry.line_added"} +{"payload":{"attachment_id":27,"blob_sha":"154a2bd5bd5bf103a7a5dbb129fcf44a3a6c2c4a3214cc0bb6a17311c82d8061","category":"receipts","description":null,"entry_id":27,"file_name":"r27.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"328edf40f496826dca364f529faadb44b22a1630307911a0d019be7870988e10","seq":191,"ts":"2026-10-21T21:28:56Z","type":"receipt.attached"} +{"payload":{"date":"2025-05-23","description":"Bank fee 5","id":27,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"d80aa5223319bac0ada01e8e5f33d0277139a8d500539cf31131e2292390b787","seq":192,"ts":"2026-10-21T21:28:56Z","type":"entry.posted"} +{"payload":{"date":"2025-06-03","description":"Consulting 6","id":28},"prev":"b69840e0dca6e2119aa5009e125e962377b01649f8f3e283374d7073ef23e799","seq":193,"ts":"2026-10-21T21:28:56Z","type":"entry.created"} +{"payload":{"entry_id":28,"party_id":5},"prev":"1bdea236f3725c76feaf17f990e44450b488b4406d8c3ba327a3e8b284c7bb45","seq":194,"ts":"2026-10-21T21:28:56Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"293.60","currency":"USD","id":28,"side":"debit"},"prev":"24f568bccbdea731f1d3d65a3b0a7b1ee71b3328d5ed98990460d4be384658fa","seq":195,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"293.60","currency":"USD","id":28,"side":"credit"},"prev":"9d884d36fd35dcd0d94c02f7f9800c3132ad0c5754d77b89f3c184c442b405eb","seq":196,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"attachment_id":28,"blob_sha":"a8234e922d52bb6f585639bd99714794d6a62a089faedb24711f7f7b8ff24091","category":"receipts","description":null,"entry_id":28,"file_name":"r28.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"615f1b0c850ea082b2caf71aade572e0d98e8fa7c181077ec0c493685af02129","seq":197,"ts":"2026-10-21T21:28:56Z","type":"receipt.attached"} +{"payload":{"date":"2025-06-03","description":"Consulting 6","id":28,"lines":[{"account":1,"amount":"293.60","currency":"USD","side":"debit"},{"account":12,"amount":"293.60","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"cdcc49409546f1fb63a7847dd8862e8ffc00eec2439b2700378cb67f1d935d36","seq":198,"ts":"2026-10-21T21:28:56Z","type":"entry.posted"} +{"payload":{"date":"2025-06-08","description":"Design work 6","id":29},"prev":"a45ca1c0c8ca330f2de5a0bfc150d3cc9a1f0dd4bd434347c23393638a2ec71f","seq":199,"ts":"2026-10-21T21:28:56Z","type":"entry.created"} +{"payload":{"entry_id":29,"party_id":3},"prev":"a23eb273a2b7a8423bd7fda205a7801d3b259ff9290fe4199d58b9a70bc3cd11","seq":200,"ts":"2026-10-21T21:28:56Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"827.57","currency":"USD","id":29,"side":"debit"},"prev":"86a6323eec09275c1a2cafa1e570f479198b41d7d7d0fbb9901c43954718e070","seq":201,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"827.57","currency":"USD","id":29,"side":"credit"},"prev":"9cab5dc278d32771d1dfec9f002b4a8213cd2dfa341f6348cbc4b3db4d563af2","seq":202,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"attachment_id":29,"blob_sha":"bd7936f79f1b7e603feaa91d6e66a165bb5959bc91519f884f60dd63012b53eb","category":"receipts","description":null,"entry_id":29,"file_name":"r29.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"7f05ec8fd278f0c25556041310ca0ee32b6cf1d6d9101f4e336c1dae0bef6484","seq":203,"ts":"2026-10-21T21:28:56Z","type":"receipt.attached"} +{"payload":{"date":"2025-06-08","description":"Design work 6","id":29,"lines":[{"account":17,"amount":"827.57","currency":"USD","side":"debit"},{"account":1,"amount":"827.57","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"a2a196019c9ca93a5ee9e6b7394d7d909cd213e2728cf4d18015f5d65cea2d54","seq":204,"ts":"2026-10-21T21:28:56Z","type":"entry.posted"} +{"payload":{"date":"2025-06-13","description":"Supplies 6","id":30},"prev":"b709f836b0dff6856f22fda0dea4990df172f62a354e25123609bd0174be8d66","seq":205,"ts":"2026-10-21T21:28:56Z","type":"entry.created"} +{"payload":{"entry_id":30,"party_id":4},"prev":"97f1b47f77f8c1197de24bb989fa8bb7e9083641fac69fba471b6545ab2e9687","seq":206,"ts":"2026-10-21T21:28:56Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"823.38","currency":"USD","id":30,"side":"debit"},"prev":"6b625c1035f8054a7c2754a992fb590385b0c6ebe41518e16c207cc1322d63c8","seq":207,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"823.38","currency":"USD","id":30,"side":"credit"},"prev":"83fcd89112f49407b564c85dc788120a63b8abd8df9822abdd35199aed997a9e","seq":208,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"attachment_id":30,"blob_sha":"80776469bdd56d9957eaef7735f9d603ef7d4b69a51fa500aa4f0b70d24fd95e","category":"receipts","description":null,"entry_id":30,"file_name":"r30.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"b585d23d0d3f25c96fc81432c71382825debd976de9862fb19541204abdf83a7","seq":209,"ts":"2026-10-21T21:28:56Z","type":"receipt.attached"} +{"payload":{"date":"2025-06-13","description":"Supplies 6","id":30,"lines":[{"account":13,"amount":"823.38","currency":"USD","side":"debit"},{"account":7,"amount":"823.38","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"4fa950b384f9c5307170c95c335c272362859e427eaf29402fead4f447fc2002","seq":210,"ts":"2026-10-21T21:28:56Z","type":"entry.posted"} +{"payload":{"date":"2025-06-18","description":"Software paid by member 6","id":31},"prev":"af902bae6a319f9efca635c501b5c005c68cf58c69ef6341e9db5a7f25a6c651","seq":211,"ts":"2026-10-21T21:28:56Z","type":"entry.created"} +{"payload":{"entry_id":31,"party_id":1},"prev":"17bd5f87e9abb49150365543faaf258265fa368fd005e551f16465575f9b38ba","seq":212,"ts":"2026-10-21T21:28:56Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"765.14","currency":"USD","id":31,"side":"debit"},"prev":"830f09569349f9ae18605bf6f977294e4580d28d1511954347b4df606068d0e4","seq":213,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"765.14","currency":"USD","id":31,"side":"credit"},"prev":"4d92bcf5c31923002854dc00bdccce819209ac05144d7f3cbe5a1f951788ec17","seq":214,"ts":"2026-10-21T21:28:56Z","type":"entry.line_added"} +{"payload":{"attachment_id":31,"blob_sha":"372029955692c864bd5f8fc93da8a3512bcfa45099626c289eca75de84478f0c","category":"receipts","description":null,"entry_id":31,"file_name":"r31.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"22323b6e007830ba4fa0e701318ab0fb1a40764022fda8067b9076843fa938b6","seq":215,"ts":"2026-10-21T21:28:56Z","type":"receipt.attached"} +{"payload":{"date":"2025-06-18","description":"Software paid by member 6","id":31,"lines":[{"account":14,"amount":"765.14","currency":"USD","side":"debit"},{"account":8,"amount":"765.14","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"07b9323c35fa23cd4e7a009ea458f095b71924fc00dfe24a9b0e6e7f5f163665","seq":216,"ts":"2026-10-21T21:28:56Z","type":"entry.posted"} +{"payload":{"date":"2025-06-23","description":"Bank fee 6","id":32},"prev":"070e5f13698f701be19ab710494ab4cedf78e46f94b6d8f3fad55a90405f0590","seq":217,"ts":"2026-10-21T21:28:56Z","type":"entry.created"} +{"payload":{"entry_id":32,"reason":"bank fee"},"prev":"09be96a0740db022c5bf2a3c466597811c18cc5ea62b09a2fe81ede6bf832a16","seq":218,"ts":"2026-10-21T21:28:56Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":32,"side":"debit"},"prev":"1e79025529dca4144f1ca4a9b1a2466aca3ce101ece1a6ff57cbbee0d6c2d766","seq":219,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":32,"side":"credit"},"prev":"64c01758d90db85b0d33d743d2955b66e00041e8babda6a49139f47f0bf71828","seq":220,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"attachment_id":32,"blob_sha":"4e2d180772eae2ddf0596a5444f301e052f93f7266845eecf454bc31f053d36f","category":"receipts","description":null,"entry_id":32,"file_name":"r32.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"3a6f46683d9c4e507d0fd4268c4be69f372f779b43b8ab6ffb42ae79fc28869c","seq":221,"ts":"2026-10-21T21:28:57Z","type":"receipt.attached"} +{"payload":{"date":"2025-06-23","description":"Bank fee 6","id":32,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"6c5b6d6badc42ae5dd9d5045c2ba54fac1e353bc99a87a6c3ff2186e369fadc9","seq":222,"ts":"2026-10-21T21:28:57Z","type":"entry.posted"} +{"payload":{"date":"2025-07-03","description":"Consulting 7","id":33},"prev":"f759dd462a9cb7019463699c98db1902a07c4caa63648830a693217df128dacf","seq":223,"ts":"2026-10-21T21:28:57Z","type":"entry.created"} +{"payload":{"entry_id":33,"party_id":5},"prev":"0c980e96236d23fa01a2a67fab09b71cca3068ccafef1c19c6e6287bd2dc65a1","seq":224,"ts":"2026-10-21T21:28:57Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"757.42","currency":"USD","id":33,"side":"debit"},"prev":"0d721835811bdfa94d879f95cbd8ff64ad5c6b8c3c315a26918605d1a2833b30","seq":225,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"757.42","currency":"USD","id":33,"side":"credit"},"prev":"68c5f21aef69766ec2494c0a6f5bfa670541ca15160d63613b3b37d93de96111","seq":226,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"attachment_id":33,"blob_sha":"b05c9555f4e49468970319698e33cab20430bd03a877183870c44f037aebd740","category":"receipts","description":null,"entry_id":33,"file_name":"r33.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"173360449b8d5b426a30c584b46b4ec9c86a86caae4ec52bdef7569657698d41","seq":227,"ts":"2026-10-21T21:28:57Z","type":"receipt.attached"} +{"payload":{"date":"2025-07-03","description":"Consulting 7","id":33,"lines":[{"account":1,"amount":"757.42","currency":"USD","side":"debit"},{"account":12,"amount":"757.42","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"8b92ffbf33a62e49a33d458ed9c40a051fa1fb7deb6db790588f7f1fef5e4c04","seq":228,"ts":"2026-10-21T21:28:57Z","type":"entry.posted"} +{"payload":{"date":"2025-07-08","description":"Design work 7","id":34},"prev":"9591c74c137256cf21719fa68c52044f8af84880de48c0630770cb410cb7cab0","seq":229,"ts":"2026-10-21T21:28:57Z","type":"entry.created"} +{"payload":{"entry_id":34,"party_id":3},"prev":"248bbe7571c71f650ccf9e71419e0375cf1aab0b9a526f7726e247109b7ebe8c","seq":230,"ts":"2026-10-21T21:28:57Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"768.48","currency":"USD","id":34,"side":"debit"},"prev":"713137aed828f3a99c9a4e47084102d60ec3cce05a5b7583bfbe2d0cc3c45861","seq":231,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"768.48","currency":"USD","id":34,"side":"credit"},"prev":"dce879af18b9a6eaed664dc7fdbb4e72aced9e82993d8505b3ed0c31a14fe40a","seq":232,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"attachment_id":34,"blob_sha":"3acdde86472882410cc59ff61474bff5e8272eb4411654d5d57965b34d65673d","category":"receipts","description":null,"entry_id":34,"file_name":"r34.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"11c5349b0772892ed01eb3952297621029f63bc5766a5b5aaa56910cff860818","seq":233,"ts":"2026-10-21T21:28:57Z","type":"receipt.attached"} +{"payload":{"date":"2025-07-08","description":"Design work 7","id":34,"lines":[{"account":17,"amount":"768.48","currency":"USD","side":"debit"},{"account":1,"amount":"768.48","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"e3aba3df02941358e8c2b4d3f1175d60d930b35d2538f164e95fe182abff6a0d","seq":234,"ts":"2026-10-21T21:28:57Z","type":"entry.posted"} +{"payload":{"date":"2025-07-13","description":"Supplies 7","id":35},"prev":"eabdfe6299076017215304052f4942730cd9dce056bd341c1901798d8c062107","seq":235,"ts":"2026-10-21T21:28:57Z","type":"entry.created"} +{"payload":{"entry_id":35,"party_id":4},"prev":"1293dd57ef8c2dec6095abed25e7477a9d8ab03ffc0e784559cb4ac82c765cad","seq":236,"ts":"2026-10-21T21:28:57Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"520.93","currency":"USD","id":35,"side":"debit"},"prev":"6c85e1110a15121c335512824b0c90d3323aa81031d0ad067d981c5233b2e6be","seq":237,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"520.93","currency":"USD","id":35,"side":"credit"},"prev":"ee3b23302c580618337aed8a4298786f6fc1b81b53f0b2b4000fa921fea7fb8b","seq":238,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"attachment_id":35,"blob_sha":"c090474697214b4507cdbb20ee2ba05be74d257a9d0f7ce06e0c16cf6d071dc3","category":"receipts","description":null,"entry_id":35,"file_name":"r35.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"9b10307ae7dd15778ad0d930f1e238728d3b9596fafa2131d0ef11b4a958c6d0","seq":239,"ts":"2026-10-21T21:28:57Z","type":"receipt.attached"} +{"payload":{"date":"2025-07-13","description":"Supplies 7","id":35,"lines":[{"account":13,"amount":"520.93","currency":"USD","side":"debit"},{"account":7,"amount":"520.93","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"c965d22e48395c8a99933fe3e80292fe503d41f37b708340400425eb6f6d2f42","seq":240,"ts":"2026-10-21T21:28:57Z","type":"entry.posted"} +{"payload":{"date":"2025-07-18","description":"Software paid by member 7","id":36},"prev":"cf4466aae68140545f41cc3baf77c3163ee7640b620d2624e77f7f76b73c7610","seq":241,"ts":"2026-10-21T21:28:57Z","type":"entry.created"} +{"payload":{"entry_id":36,"party_id":1},"prev":"945b101940418f2f4eb207ca138ea3f83d2aa9c01cd569037058948e7b697153","seq":242,"ts":"2026-10-21T21:28:57Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"65.99","currency":"USD","id":36,"side":"debit"},"prev":"95c9efa06f94ed2770c960850c4dfabb63a7de6244346cf883c08bc2bdf36132","seq":243,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"65.99","currency":"USD","id":36,"side":"credit"},"prev":"01426ffdbc7e438ce7a8952fff163c5551f40b070b200140ab9c0f78f78fbdfd","seq":244,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"attachment_id":36,"blob_sha":"210959e4644efeb3e0dec3b5da30d3882c2f6bf1dd05d36b81b3f9ab1d7cf8d5","category":"receipts","description":null,"entry_id":36,"file_name":"r36.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"1ba7cb63e6d6f1f1b6b31e48ae575fc85b58a3a4f70f8f92c054ad40a8e34f48","seq":245,"ts":"2026-10-21T21:28:57Z","type":"receipt.attached"} +{"payload":{"date":"2025-07-18","description":"Software paid by member 7","id":36,"lines":[{"account":14,"amount":"65.99","currency":"USD","side":"debit"},{"account":8,"amount":"65.99","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"1183a1094dac472704a51c0252b676b6763ee599348228a61766f4d062e625e5","seq":246,"ts":"2026-10-21T21:28:57Z","type":"entry.posted"} +{"payload":{"date":"2025-07-23","description":"Bank fee 7","id":37},"prev":"cd136c62a69f1b7cf15e5bb6038726abf06b9562118a38a0a34a8a0511ea6c9f","seq":247,"ts":"2026-10-21T21:28:57Z","type":"entry.created"} +{"payload":{"entry_id":37,"reason":"bank fee"},"prev":"f592fc409d09e4d968191cbdfff9385d0e6290f0a27b3cc058b30f8e71d1e793","seq":248,"ts":"2026-10-21T21:28:57Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":37,"side":"debit"},"prev":"d0ddd4d22bd0478793c92fc15c9b4dff85a4bf937099c3198919d045617ba8db","seq":249,"ts":"2026-10-21T21:28:57Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":37,"side":"credit"},"prev":"b8526b55e451046fc8121ae3b975406e84268dd9fec5ebf2d77fec8977463a15","seq":250,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"attachment_id":37,"blob_sha":"af8c085ab8779b9ae9fcb3989f60a55719db4d91dbdf5c5e60f3ac39c6efd05b","category":"receipts","description":null,"entry_id":37,"file_name":"r37.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"3978dac72a1bf49c6c488d99ae9e2480ca1ff0dd5d0493b657c936ba2f467e5f","seq":251,"ts":"2026-10-21T21:28:58Z","type":"receipt.attached"} +{"payload":{"date":"2025-07-23","description":"Bank fee 7","id":37,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"4edb283721c38215f970a20de821fc6afd5e503c5fc5687c521f7d24f66dc016","seq":252,"ts":"2026-10-21T21:28:58Z","type":"entry.posted"} +{"payload":{"date":"2025-08-03","description":"Consulting 8","id":38},"prev":"b0a4871b1c83e596c62bdb9495bb00f48f2b4c7afcf55b324d0629aed0c7f81d","seq":253,"ts":"2026-10-21T21:28:58Z","type":"entry.created"} +{"payload":{"entry_id":38,"party_id":5},"prev":"fdd9ea92046c54ed28685e1ca916ab5059298e9c0c68e7c0ee2d7e9491ab2c67","seq":254,"ts":"2026-10-21T21:28:58Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"62.05","currency":"USD","id":38,"side":"debit"},"prev":"5a21e496268f99275bbd57a3b1c031768d4734b28b3688485cb62fe4bb452f1c","seq":255,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"62.05","currency":"USD","id":38,"side":"credit"},"prev":"6ac8d4eb51cb07c0ef399001f7075a3833f8efc20c8287c48ddda31e1be49b5d","seq":256,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"attachment_id":38,"blob_sha":"350c8d74e3937e0d444fae5eef32a5c1e10fb32fa5aced6d07405ab36aeae8a7","category":"receipts","description":null,"entry_id":38,"file_name":"r38.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"e1b62c3f89d8fced181f6f6ff01135f2aace75318a2e9f95bb91609cd9c516e2","seq":257,"ts":"2026-10-21T21:28:58Z","type":"receipt.attached"} +{"payload":{"date":"2025-08-03","description":"Consulting 8","id":38,"lines":[{"account":1,"amount":"62.05","currency":"USD","side":"debit"},{"account":12,"amount":"62.05","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"2a17b77d74e6376166edf3dbdfc145da3fa4b25cbb202bf3f3244ca8bc1b1836","seq":258,"ts":"2026-10-21T21:28:58Z","type":"entry.posted"} +{"payload":{"date":"2025-08-08","description":"Design work 8","id":39},"prev":"3fa32a40fc5211fa6c9e2fff209b74841b8b85f75901e4e23be7902777022f21","seq":259,"ts":"2026-10-21T21:28:58Z","type":"entry.created"} +{"payload":{"entry_id":39,"party_id":3},"prev":"ce87e0b80d60bd26ba2c22f542bd6e1ff212ab868e445b12aa158b0213d54d17","seq":260,"ts":"2026-10-21T21:28:58Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"730.63","currency":"USD","id":39,"side":"debit"},"prev":"87b250f95f256c3ada0bcdffc0a18e8d0334839735b198031591c9f0b2140112","seq":261,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"730.63","currency":"USD","id":39,"side":"credit"},"prev":"f63dd64c97b5195f8b14ea8ac55418e66f3609ed931cd64f318012431a42c716","seq":262,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"attachment_id":39,"blob_sha":"090a938b8299df0c5b93304381d24a65b7feb45a6ed923c5fe10c10d7118e336","category":"receipts","description":null,"entry_id":39,"file_name":"r39.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"86f9aaa2f67bfd2dde1f76b83d5c618aadaca66e781e0a6ccceb08b557e94821","seq":263,"ts":"2026-10-21T21:28:58Z","type":"receipt.attached"} +{"payload":{"date":"2025-08-08","description":"Design work 8","id":39,"lines":[{"account":17,"amount":"730.63","currency":"USD","side":"debit"},{"account":1,"amount":"730.63","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"7dbc46d17cedd252e198846fb543182ef4d8a8195c96239e396afb4e669043ca","seq":264,"ts":"2026-10-21T21:28:58Z","type":"entry.posted"} +{"payload":{"date":"2025-08-13","description":"Supplies 8","id":40},"prev":"63f3ad6ce777ce928bbd9eae7689c5e677bb2d37b0fb75dd2d0b382c7212a220","seq":265,"ts":"2026-10-21T21:28:58Z","type":"entry.created"} +{"payload":{"entry_id":40,"party_id":4},"prev":"10425e29f230394a89838ce3c41229d8f3e567766c13276740ea9e0855ae11a4","seq":266,"ts":"2026-10-21T21:28:58Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"175.55","currency":"USD","id":40,"side":"debit"},"prev":"988a8fbd3403db7add3364ded562d4864774c19b7ded2cc8eb1ed429478e33d6","seq":267,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"175.55","currency":"USD","id":40,"side":"credit"},"prev":"c8d9dbf34eb4052c69c4f2bfb5310e9d3517d14a4b39144d094ecf9c361cc22d","seq":268,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"attachment_id":40,"blob_sha":"f52f29e9a5eb89e4f0851f39f7ee9c25ffb63e7973bc4dfaf45c3359fe923f1e","category":"receipts","description":null,"entry_id":40,"file_name":"r40.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"cf459ec8aadf61e86f470d4c975401aedd639ecf7bfc4ab72f982c2905d1d37a","seq":269,"ts":"2026-10-21T21:28:58Z","type":"receipt.attached"} +{"payload":{"date":"2025-08-13","description":"Supplies 8","id":40,"lines":[{"account":13,"amount":"175.55","currency":"USD","side":"debit"},{"account":7,"amount":"175.55","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"df91e170c107eb3ac37ceb43079954efb97d2b36b8fda8d9953e0592b9e6fc7e","seq":270,"ts":"2026-10-21T21:28:58Z","type":"entry.posted"} +{"payload":{"date":"2025-08-18","description":"Software paid by member 8","id":41},"prev":"28d8955805ea47de1856adcab5ea51f354e06a781e92407f4e7fd2dadc012655","seq":271,"ts":"2026-10-21T21:28:58Z","type":"entry.created"} +{"payload":{"entry_id":41,"party_id":1},"prev":"2ec6d9a3319a17a11e52838665efcfdde6050dcc73ef822718a70c41834c75ee","seq":272,"ts":"2026-10-21T21:28:58Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"380.59","currency":"USD","id":41,"side":"debit"},"prev":"86cf71ad7ca19f8873609ee21fc01d7189cb41c62b773d612d22c7261cc3f483","seq":273,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"380.59","currency":"USD","id":41,"side":"credit"},"prev":"01a14c8f086622be0bff9f8af0d50a540acf7b916b5d2428c20ec5f400e9b5c6","seq":274,"ts":"2026-10-21T21:28:58Z","type":"entry.line_added"} +{"payload":{"attachment_id":41,"blob_sha":"266487055317ad4a9ec8504c20da90ea14fd7b101894b0c001c7106ead417c20","category":"receipts","description":null,"entry_id":41,"file_name":"r41.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"290b112f536d6d414aafd2ba484f337f3112e29f394696bbcf15b34b75ae0c9c","seq":275,"ts":"2026-10-21T21:28:58Z","type":"receipt.attached"} +{"payload":{"date":"2025-08-18","description":"Software paid by member 8","id":41,"lines":[{"account":14,"amount":"380.59","currency":"USD","side":"debit"},{"account":8,"amount":"380.59","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"5724ec3db36f52fd2076c0c15cf6207753056f9896cb822c410cbf1cff967731","seq":276,"ts":"2026-10-21T21:28:58Z","type":"entry.posted"} +{"payload":{"date":"2025-08-23","description":"Bank fee 8","id":42},"prev":"1f4cde58fd842e88ce9747b62094cd58db56f4e7106fc18b1d8696026367f3e6","seq":277,"ts":"2026-10-21T21:28:58Z","type":"entry.created"} +{"payload":{"entry_id":42,"reason":"bank fee"},"prev":"13d7dfd5202e9f27bd46870c7f342690e09a322d3669fa14b82c5ff65ac9787d","seq":278,"ts":"2026-10-21T21:28:58Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":42,"side":"debit"},"prev":"1fddaed992fda0912cf718f8a9dcae48100a5daf9ed1cac2bbdac95ff75ee5db","seq":279,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":42,"side":"credit"},"prev":"2a815bee24fa4ad299249b6d18bfa4263a46236e4cf95c62e4b0013cb0bed4e0","seq":280,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"attachment_id":42,"blob_sha":"09d567fff5b3478f1c5e388f0b173dfb2f45eb553528c95b6723d5f13a6b0dba","category":"receipts","description":null,"entry_id":42,"file_name":"r42.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"40ad0df5d16cc355e28c6dba42ae850632367993a0bd6a356a01b1db4cab2d01","seq":281,"ts":"2026-10-21T21:28:59Z","type":"receipt.attached"} +{"payload":{"date":"2025-08-23","description":"Bank fee 8","id":42,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"1c0a55791cafa9e099b572f2b7e6abfc455dd77f89df4bdda91b62a97a682453","seq":282,"ts":"2026-10-21T21:28:59Z","type":"entry.posted"} +{"payload":{"date":"2025-09-03","description":"Consulting 9","id":43},"prev":"b5acb73ab3af2bf2efa177dcda6010d7fbe66626a86dc3589e601b4c5a82a91d","seq":283,"ts":"2026-10-21T21:28:59Z","type":"entry.created"} +{"payload":{"entry_id":43,"party_id":5},"prev":"d0a8d7e0443823abbc31649fa177d7f284b25884dcb11bad39a7a505b5405130","seq":284,"ts":"2026-10-21T21:28:59Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"190.07","currency":"USD","id":43,"side":"debit"},"prev":"a896cb4223177131ab30faf764086948804bc85af2b0ca7ae052f77d5b28d138","seq":285,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"190.07","currency":"USD","id":43,"side":"credit"},"prev":"36db1572ca560eee9633eff1d343258e96247f9fb05589c031aead4c0008c0de","seq":286,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"attachment_id":43,"blob_sha":"549225ddc356bd1a217220cc6681b76dba4ea9eff24a5f34ca6e832a1e7dfc97","category":"receipts","description":null,"entry_id":43,"file_name":"r43.pdf","mime_type":"application/pdf","size_bytes":54},"prev":"0fb8e62c8d504fb5e6f4f849f8d6816c49be78cf68e77d8c3a9d921425fa7d59","seq":287,"ts":"2026-10-21T21:28:59Z","type":"receipt.attached"} +{"payload":{"date":"2025-09-03","description":"Consulting 9","id":43,"lines":[{"account":1,"amount":"190.07","currency":"USD","side":"debit"},{"account":12,"amount":"190.07","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"33eba839f1657919df5693dee0d20385a562e96f25f66046ab591910f71e5802","seq":288,"ts":"2026-10-21T21:28:59Z","type":"entry.posted"} +{"payload":{"date":"2025-09-08","description":"Design work 9","id":44},"prev":"0185772912d7905d64b60989068f41fd2b61a2f19542d6d8663704e61e0b314c","seq":289,"ts":"2026-10-21T21:28:59Z","type":"entry.created"} +{"payload":{"entry_id":44,"party_id":3},"prev":"c81d8a7e54878101c1d36e4a120485b555f0b7d9476145dea2cef53b52831fc6","seq":290,"ts":"2026-10-21T21:28:59Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"709.68","currency":"USD","id":44,"side":"debit"},"prev":"30b4d9e23c114c65583c94594fd0f59763f95cf13c7c6baffbe4eb955646ef57","seq":291,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"709.68","currency":"USD","id":44,"side":"credit"},"prev":"d56cf6fde598e32ffeddc8a792895884703a69e3e27a7bd2dac5c8624bccdd76","seq":292,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"attachment_id":44,"blob_sha":"160144f9771ebf02e5e5c914137f3ae642dcbf75b8f44443296f32fab855b62a","category":"receipts","description":null,"entry_id":44,"file_name":"r44.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"84bb3fcb531b4d64803c05e7e16043e0f7ac5a4b95a3b90a8909edc3b2e004f4","seq":293,"ts":"2026-10-21T21:28:59Z","type":"receipt.attached"} +{"payload":{"date":"2025-09-08","description":"Design work 9","id":44,"lines":[{"account":17,"amount":"709.68","currency":"USD","side":"debit"},{"account":1,"amount":"709.68","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"c9142d9f7a6dabb1e117100951ea1186914766cd2f21cb59c06285fd7f2b9462","seq":294,"ts":"2026-10-21T21:28:59Z","type":"entry.posted"} +{"payload":{"date":"2025-09-13","description":"Supplies 9","id":45},"prev":"8e62d11efb2f897c1886a72cea2a10024d19bcefa948f39d801ed746c554c45b","seq":295,"ts":"2026-10-21T21:28:59Z","type":"entry.created"} +{"payload":{"entry_id":45,"party_id":4},"prev":"9fe86a91236d52e50d70e5dffc7ccc10989700ee85999f8181a1ed45fb598da9","seq":296,"ts":"2026-10-21T21:28:59Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"155.39","currency":"USD","id":45,"side":"debit"},"prev":"534bbb9f5c0790c0e4f332b9857aa54563b5fc8dbba582763997cb2e373999f3","seq":297,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"155.39","currency":"USD","id":45,"side":"credit"},"prev":"7116dfa0caa53e9eb5e5199afb7d693f1cfb9ae715d0b694d08118ab7f22ed14","seq":298,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"attachment_id":45,"blob_sha":"7fcbd4774d24625ed2dd3195dc8b298a41e19dc56c6e5a3fdafb3862a1198eeb","category":"receipts","description":null,"entry_id":45,"file_name":"r45.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"c39dcd970e9da7d21aa1924cbd662d973c60cf9497af73ecb5379d6b1d17ae05","seq":299,"ts":"2026-10-21T21:28:59Z","type":"receipt.attached"} +{"payload":{"date":"2025-09-13","description":"Supplies 9","id":45,"lines":[{"account":13,"amount":"155.39","currency":"USD","side":"debit"},{"account":7,"amount":"155.39","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"07dad89fbefd0e89de4920a26cb2da5d61f88365d09ed327f6a753b12c7fd952","seq":300,"ts":"2026-10-21T21:28:59Z","type":"entry.posted"} +{"payload":{"date":"2025-09-18","description":"Software paid by member 9","id":46},"prev":"002822633eb6996ee1ed69849ac2e2027b238e39c8c38fbfe2e1b54c8ca97a3f","seq":301,"ts":"2026-10-21T21:28:59Z","type":"entry.created"} +{"payload":{"entry_id":46,"party_id":1},"prev":"a954c30417563df040b718dab32da9f78978a8154fafdbade90fa33e51fb08b9","seq":302,"ts":"2026-10-21T21:28:59Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"749.30","currency":"USD","id":46,"side":"debit"},"prev":"40bc1d6f6745146f9adfa43ba29d203f70c6fe065809922f462288544a62c7d1","seq":303,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"749.30","currency":"USD","id":46,"side":"credit"},"prev":"a43d18d01a5373d97c8b8d39dd7d8e7cccaa27d21bab78d04ff360da6278ba86","seq":304,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"attachment_id":46,"blob_sha":"0126c8f9f243e03c0cb71f8d47ba27730f9a0503e25abdbd43f94e3a44479e6b","category":"receipts","description":null,"entry_id":46,"file_name":"r46.pdf","mime_type":"application/pdf","size_bytes":67},"prev":"2eefc744c374f495f10c6b59738903fcdd77c96f0bc2440fa71c43e7072047b6","seq":305,"ts":"2026-10-21T21:28:59Z","type":"receipt.attached"} +{"payload":{"date":"2025-09-18","description":"Software paid by member 9","id":46,"lines":[{"account":14,"amount":"749.30","currency":"USD","side":"debit"},{"account":8,"amount":"749.30","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"1030dd48e2298995eafd77d4864b87e492ea842cfe6294018e6bb7a2889f6ab5","seq":306,"ts":"2026-10-21T21:28:59Z","type":"entry.posted"} +{"payload":{"date":"2025-09-23","description":"Bank fee 9","id":47},"prev":"0cc00d0afccbc3cbc47fa69f46c35f70b495d88fe093da4ecc02f9146f585c99","seq":307,"ts":"2026-10-21T21:28:59Z","type":"entry.created"} +{"payload":{"entry_id":47,"reason":"bank fee"},"prev":"e38279f0f1ac2d1ba9347ac3dadeed99198a1c8f53603875c140ac79155ebfaa","seq":308,"ts":"2026-10-21T21:28:59Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":47,"side":"debit"},"prev":"e7f860c5ed73429179d942ed735f3620a5c67a251fd884dcdc81ad2268b98c71","seq":309,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":47,"side":"credit"},"prev":"e02d2ff27e7ca3599be224bfefcf1e0df5b98c0308526953a73603f66f199eb7","seq":310,"ts":"2026-10-21T21:28:59Z","type":"entry.line_added"} +{"payload":{"attachment_id":47,"blob_sha":"288625ee69e0c00d34b1defbf7e02b95768dfdcaa3df3fefd684a56a3b2c3d4a","category":"receipts","description":null,"entry_id":47,"file_name":"r47.pdf","mime_type":"application/pdf","size_bytes":52},"prev":"e5f958df210efc615129fe33643298b61bc436a92660d61a707215175ab87169","seq":311,"ts":"2026-10-21T21:28:59Z","type":"receipt.attached"} +{"payload":{"date":"2025-09-23","description":"Bank fee 9","id":47,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"7777a10915275157ba3f997c41a0e0015607caab9e153489f85f62c4a1af1add","seq":312,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-10-03","description":"Consulting 10","id":48},"prev":"ce7052dbc841adff64afdb9078936d72dd1dd90db17519c517498630f8399f4c","seq":313,"ts":"2026-10-21T21:29:00Z","type":"entry.created"} +{"payload":{"entry_id":48,"party_id":5},"prev":"3af46e02bc03d2bc4b0eb68c4beeeef2dbf155b2ecc9740123ccd44c3466ae19","seq":314,"ts":"2026-10-21T21:29:00Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"735.34","currency":"USD","id":48,"side":"debit"},"prev":"2224b0c15c2fa780a17b51d03afae3f7b71bb26f82744d0ffeb90313781b8d34","seq":315,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"735.34","currency":"USD","id":48,"side":"credit"},"prev":"71bc9269902f739f8d1e6b82c12d319831d0d79a7da56242c3847856b3911e28","seq":316,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"attachment_id":48,"blob_sha":"3ff73e7967f4f72c974941bce53012f75a995b229982457def7312c6547df6f9","category":"receipts","description":null,"entry_id":48,"file_name":"r48.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"6c290b24a3ec2d89183d05ee66db17cd4c9f7640671f7312300d6a7834f96269","seq":317,"ts":"2026-10-21T21:29:00Z","type":"receipt.attached"} +{"payload":{"date":"2025-10-03","description":"Consulting 10","id":48,"lines":[{"account":1,"amount":"735.34","currency":"USD","side":"debit"},{"account":12,"amount":"735.34","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"7d22a280a8ddaedaf9f32f223b27134c70797f259ba9844bdffdd99f10e25df1","seq":318,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-10-08","description":"Design work 10","id":49},"prev":"2957de627eb301a870f9c7247e2e4a76499615f25395b6a9f39912b66f3727c4","seq":319,"ts":"2026-10-21T21:29:00Z","type":"entry.created"} +{"payload":{"entry_id":49,"party_id":3},"prev":"1b7bbe892805e43738683ffbb05f37970dc4b0a9c7696b2fe0c12924b8ea8d4c","seq":320,"ts":"2026-10-21T21:29:00Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"894.91","currency":"USD","id":49,"side":"debit"},"prev":"7385e04ea8e892fb45c846291e5b095766f7545e6ee17de349d565ff0fec9178","seq":321,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"894.91","currency":"USD","id":49,"side":"credit"},"prev":"7936ae3480dee70dea7c6f4266074a57cd05f0ff174ab39619a50db805762b1b","seq":322,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"attachment_id":49,"blob_sha":"98ad30c16a2f0b8f462702570194a2ca2ccd95703535299753e773d8ba737d09","category":"receipts","description":null,"entry_id":49,"file_name":"r49.pdf","mime_type":"application/pdf","size_bytes":56},"prev":"2efea58df2f347f7f38c6a4beb5177aa72c5d41d6f32183ca35b8af99736fb1f","seq":323,"ts":"2026-10-21T21:29:00Z","type":"receipt.attached"} +{"payload":{"date":"2025-10-08","description":"Design work 10","id":49,"lines":[{"account":17,"amount":"894.91","currency":"USD","side":"debit"},{"account":1,"amount":"894.91","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"8706e7f9660800873bd26f0ffd4ff13d49e891fadf8da3961a4ca6f1a1e1de88","seq":324,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-10-13","description":"Supplies 10","id":50},"prev":"a83eb84e3fa5a51a8238dc9ad9e60c35dae9b74d8a291f997a3a18f4ae1a1cce","seq":325,"ts":"2026-10-21T21:29:00Z","type":"entry.created"} +{"payload":{"entry_id":50,"party_id":4},"prev":"1a26a3c924bcd3620a6df36922496ef395ec9cb245ac79fc396c9884a7740e86","seq":326,"ts":"2026-10-21T21:29:00Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"237.88","currency":"USD","id":50,"side":"debit"},"prev":"80e6be396f1610f675b29c2f92363a0e7d70807cabd4206f88571e3965fb82bf","seq":327,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"237.88","currency":"USD","id":50,"side":"credit"},"prev":"fd43c46e495a652eb8a6a26f02343b14856d784b40ac52a673efd9fc99085c1a","seq":328,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"attachment_id":50,"blob_sha":"218116eca79b67dbe85d3d813d3b0b8373a2eef6dde93ccb201458a74bfdafb1","category":"receipts","description":null,"entry_id":50,"file_name":"r50.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"a72dec373ee67c4db566214f887c4c973ef4e03b217e96c5dd1b958f6d3519bf","seq":329,"ts":"2026-10-21T21:29:00Z","type":"receipt.attached"} +{"payload":{"date":"2025-10-13","description":"Supplies 10","id":50,"lines":[{"account":13,"amount":"237.88","currency":"USD","side":"debit"},{"account":7,"amount":"237.88","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"75aca5b510317e463c70c556001f7a89f9ced1a3887a70f544014057115bf939","seq":330,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-10-18","description":"Software paid by member 10","id":51},"prev":"eed78f69673c4d35ff80e0c782097c6865fc19823aef6898416d84405c050b16","seq":331,"ts":"2026-10-21T21:29:00Z","type":"entry.created"} +{"payload":{"entry_id":51,"party_id":1},"prev":"7e053ae25b809a194c8160018d66e31575d647adc60a1ed9b874bbcfd0ef3146","seq":332,"ts":"2026-10-21T21:29:00Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"136.07","currency":"USD","id":51,"side":"debit"},"prev":"b24fe59527a0287a9ed30fd6f8bfa239d847d7336838da4cc2accb34999d0650","seq":333,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"136.07","currency":"USD","id":51,"side":"credit"},"prev":"30b459d0cd9e01a392ed4b97bdec83eb59538928a4d757264e9423facefea8c3","seq":334,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"attachment_id":51,"blob_sha":"53f7de0945923a52b4fbcd56659f6dd4d3a02830ba0adcfbe81df0f1b7bd8ff2","category":"receipts","description":null,"entry_id":51,"file_name":"r51.pdf","mime_type":"application/pdf","size_bytes":68},"prev":"f30844a58b3d32afe3c18c4ad003cff39cf607e715c0e285e89436a4b864cb15","seq":335,"ts":"2026-10-21T21:29:00Z","type":"receipt.attached"} +{"payload":{"date":"2025-10-18","description":"Software paid by member 10","id":51,"lines":[{"account":14,"amount":"136.07","currency":"USD","side":"debit"},{"account":8,"amount":"136.07","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"9a14e758062a1c678e3b0d56a3fd14338fe10e303665365d8c060ae5d6b4a97b","seq":336,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-10-23","description":"Bank fee 10","id":52},"prev":"189502c8c423a7264d9071c8b32ccfb1b1bda2c1176969d00a36dff1bb828dd0","seq":337,"ts":"2026-10-21T21:29:00Z","type":"entry.created"} +{"payload":{"entry_id":52,"reason":"bank fee"},"prev":"0e2d33f282a68cbbd94dcfbb854d82a66c99089618dcf6f6d0b3f34bb2ce1b9a","seq":338,"ts":"2026-10-21T21:29:00Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":52,"side":"debit"},"prev":"507b44679c2bf90e6d2a946a5ea757cbc259b37adae922324d79139126e0a5a9","seq":339,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":52,"side":"credit"},"prev":"5a2c0b9f8e4eeb5dc3471c36b8eaca3dd64de3e495f01c03c99a4b9fcca99462","seq":340,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"attachment_id":52,"blob_sha":"37fa15b60bca1e11c46715e3b270a60573ab89be57f4908623a73572ee0325cb","category":"receipts","description":null,"entry_id":52,"file_name":"r52.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"1f672e76d179887d18ed8c28b1a78d57e1392528911d24615fbdda9f6b2c2cd5","seq":341,"ts":"2026-10-21T21:29:00Z","type":"receipt.attached"} +{"payload":{"date":"2025-10-23","description":"Bank fee 10","id":52,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"545c33cbafa6fc1486f05c3aafec0948e5052be6037850cad5d5aa94323f635e","seq":342,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-11-03","description":"Consulting 11","id":53},"prev":"f3052b35a608797568c42f3ab2b8238f661718bd6e60275b15a0a99a7198828c","seq":343,"ts":"2026-10-21T21:29:00Z","type":"entry.created"} +{"payload":{"entry_id":53,"party_id":5},"prev":"2e7a295cc168ed4fae9d5b6e338403c574804b8298f2cb14d74638f216cef928","seq":344,"ts":"2026-10-21T21:29:00Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"749.68","currency":"USD","id":53,"side":"debit"},"prev":"ef7b3258ac6edc69a5bc0a6ac8885d475cfb9285d6bd774ba6e706ca3b804645","seq":345,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"749.68","currency":"USD","id":53,"side":"credit"},"prev":"5e38b5b521a8edb5200f0dcb42b7c6eb4d1446ce023b2d205f6dcacb65fe1e28","seq":346,"ts":"2026-10-21T21:29:00Z","type":"entry.line_added"} +{"payload":{"attachment_id":53,"blob_sha":"5ba9b95dcfaad7cd77f590a2dbc8d14ddeb8f9694ec5f393da4b4802fc7462dd","category":"receipts","description":null,"entry_id":53,"file_name":"r53.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"8f9427d783c6683a07b7b29cb951475610ce8f829d63f89f4683b3424967c636","seq":347,"ts":"2026-10-21T21:29:00Z","type":"receipt.attached"} +{"payload":{"date":"2025-11-03","description":"Consulting 11","id":53,"lines":[{"account":1,"amount":"749.68","currency":"USD","side":"debit"},{"account":12,"amount":"749.68","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"4b1d07090bc763bae6c8d4778d86d1b636e3da123b1497f773786fef3bd0a039","seq":348,"ts":"2026-10-21T21:29:00Z","type":"entry.posted"} +{"payload":{"date":"2025-11-08","description":"Design work 11","id":54},"prev":"c7eccb78beb92636d00e47362c9760656ee5587ba8318fd5ab73027187aa43a2","seq":349,"ts":"2026-10-21T21:29:01Z","type":"entry.created"} +{"payload":{"entry_id":54,"party_id":3},"prev":"2a6c05d2e9362aeedadde55e878bf45407f1daf46cf6f786c8d0b6c293a54072","seq":350,"ts":"2026-10-21T21:29:01Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"838.43","currency":"USD","id":54,"side":"debit"},"prev":"f56fc8fc42dbd05b165a4588689ae1c2b85c3e344aa628a486b0a2f0ea236726","seq":351,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"838.43","currency":"USD","id":54,"side":"credit"},"prev":"7d5e712f56cc3c476fdc5c7f99b08ab4301254acd288ac85d8c58ab5213cfa3f","seq":352,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"attachment_id":54,"blob_sha":"cf63d0935c457f42cf6610cdec14c1072de13b8e0dbd63e83518821e8fd4341b","category":"receipts","description":null,"entry_id":54,"file_name":"r54.pdf","mime_type":"application/pdf","size_bytes":56},"prev":"5cbc46b789656498728ade76bf7291fc277a22d07b7c1932bb4abea0b7608ff0","seq":353,"ts":"2026-10-21T21:29:01Z","type":"receipt.attached"} +{"payload":{"date":"2025-11-08","description":"Design work 11","id":54,"lines":[{"account":17,"amount":"838.43","currency":"USD","side":"debit"},{"account":1,"amount":"838.43","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"2041d4dfcad47aa29439edffeb9a1e72f15baef31ce8ca64289985fbbdbc7737","seq":354,"ts":"2026-10-21T21:29:01Z","type":"entry.posted"} +{"payload":{"date":"2025-11-13","description":"Supplies 11","id":55},"prev":"bf3119d06d07a984345850e0f7ab0b59737fac22b13573149fcf5dc05e1b644a","seq":355,"ts":"2026-10-21T21:29:01Z","type":"entry.created"} +{"payload":{"entry_id":55,"party_id":4},"prev":"bc57f2095a4cf1e6a9ac606552f42d065dd7b13e7d0798cacf6b228143ed08e5","seq":356,"ts":"2026-10-21T21:29:01Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"247.24","currency":"USD","id":55,"side":"debit"},"prev":"3a6e73647d7b10b82b2e6ef071eb9ff4e11b4b92ec8aaaca997840518655c43b","seq":357,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"247.24","currency":"USD","id":55,"side":"credit"},"prev":"753b14754cb738bc6a744497d02a57291fcaa9a4d6257ca387f7b79c5e080781","seq":358,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"attachment_id":55,"blob_sha":"dfdd55e9d11c066afa47ae3e93b7ec3aa7b77a41bb21ffd7cfd17a260eb4f915","category":"receipts","description":null,"entry_id":55,"file_name":"r55.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"b7a4ea5387942f62b0121f43ac2c6415b2a38020612d1642f0ae843b580604fd","seq":359,"ts":"2026-10-21T21:29:01Z","type":"receipt.attached"} +{"payload":{"date":"2025-11-13","description":"Supplies 11","id":55,"lines":[{"account":13,"amount":"247.24","currency":"USD","side":"debit"},{"account":7,"amount":"247.24","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"14a2c5a6a2b1834df2790e7a12b649f9b421e52084a4a500daea236f66bca068","seq":360,"ts":"2026-10-21T21:29:01Z","type":"entry.posted"} +{"payload":{"date":"2025-11-18","description":"Software paid by member 11","id":56},"prev":"2a619bea70d624bac05f2429919e6d5e20192f5615a49b634f3910f89dc41ce9","seq":361,"ts":"2026-10-21T21:29:01Z","type":"entry.created"} +{"payload":{"entry_id":56,"party_id":1},"prev":"3d05fd3fad0d19264976f97f1c59c6ef5dfb1545bfd54f110a229e649c74ae87","seq":362,"ts":"2026-10-21T21:29:01Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"489.10","currency":"USD","id":56,"side":"debit"},"prev":"2402181c094548ca28bbb23300cfa632ee0494cfae468ee1bceb4f2176c213a5","seq":363,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"489.10","currency":"USD","id":56,"side":"credit"},"prev":"51fb21d99531ac22e80984309cebd23e3a014d1966e2f3632e7706579489567f","seq":364,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"attachment_id":56,"blob_sha":"82c5c2c9cb7af39e0859bcc399f0df627105673fac9a02f3172af63fae493cc1","category":"receipts","description":null,"entry_id":56,"file_name":"r56.pdf","mime_type":"application/pdf","size_bytes":68},"prev":"0a953433470f13fba6e489fa10abd60e7b6483b57b4461133ab4ad093a908843","seq":365,"ts":"2026-10-21T21:29:01Z","type":"receipt.attached"} +{"payload":{"date":"2025-11-18","description":"Software paid by member 11","id":56,"lines":[{"account":14,"amount":"489.10","currency":"USD","side":"debit"},{"account":8,"amount":"489.10","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"40f6bfba12a8454fc2f3b3d90c1d3c40c2be881baebe0366b592c397e4fb46d1","seq":366,"ts":"2026-10-21T21:29:01Z","type":"entry.posted"} +{"payload":{"date":"2025-11-23","description":"Bank fee 11","id":57},"prev":"68b996e35b3e97a95059bef317cb2d828353eef17c71c5fa7fa7b6816f4454e1","seq":367,"ts":"2026-10-21T21:29:01Z","type":"entry.created"} +{"payload":{"entry_id":57,"reason":"bank fee"},"prev":"8b6b7a8298429f51a2fb2a292243f31da54d5afa44a1a2106ef0e1824d20668c","seq":368,"ts":"2026-10-21T21:29:01Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":57,"side":"debit"},"prev":"03cbc8ea6f20210066385046c3153caf4f339147b28075dd404769e23674e7a0","seq":369,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":57,"side":"credit"},"prev":"093db4b5c2dda279d565e1a52e412ff58b87cce5901c5df39be7787fad8efec6","seq":370,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"attachment_id":57,"blob_sha":"58132a2be4c24afc7e9fa6824021b731c1e7ab947950b330efaac5c23838a65f","category":"receipts","description":null,"entry_id":57,"file_name":"r57.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"5e69ad8e782af70a8916c65cb7044e1cdc9ab8b38a7999dcefc8142bf8c7ad69","seq":371,"ts":"2026-10-21T21:29:01Z","type":"receipt.attached"} +{"payload":{"date":"2025-11-23","description":"Bank fee 11","id":57,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"ccd47b8a432670e86f576d0894c0288e8abf773811901cdecefb590acd90086b","seq":372,"ts":"2026-10-21T21:29:01Z","type":"entry.posted"} +{"payload":{"date":"2025-12-03","description":"Consulting 12","id":58},"prev":"5a869fd53ac45a8a6db2b2fddefa199472ca491de5225cc9a9651840075c82e4","seq":373,"ts":"2026-10-21T21:29:01Z","type":"entry.created"} +{"payload":{"entry_id":58,"party_id":5},"prev":"d4f4e8c092e759349398e17701cc3a8f1c6df7a386970db45145c429b12a6e77","seq":374,"ts":"2026-10-21T21:29:01Z","type":"entry.party_set"} +{"payload":{"account":1,"amount":"718.93","currency":"USD","id":58,"side":"debit"},"prev":"7c4bb51ac57db7a1d5bb1c8bbc1c9849ba657b5d90208269e0c80f6224886e86","seq":375,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"account":12,"amount":"718.93","currency":"USD","id":58,"side":"credit"},"prev":"3bd4f070afd2f5e608553123084c96a9927f78d30ed480c3c93c10a255c98fab","seq":376,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"attachment_id":58,"blob_sha":"80107280d3e5d99e971770a018db9285c9e1e46498eab9dd77535cec612e7708","category":"receipts","description":null,"entry_id":58,"file_name":"r58.pdf","mime_type":"application/pdf","size_bytes":55},"prev":"4ce4bb82870b6e9a1679b10621d158cb35e69ad39b63032809fb1a0cbddce7fb","seq":377,"ts":"2026-10-21T21:29:01Z","type":"receipt.attached"} +{"payload":{"date":"2025-12-03","description":"Consulting 12","id":58,"lines":[{"account":1,"amount":"718.93","currency":"USD","side":"debit"},{"account":12,"amount":"718.93","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"9ec10febf57a82f705df03a25e7610527e6d4e84c1654a26cd984527ea969df0","seq":378,"ts":"2026-10-21T21:29:01Z","type":"entry.posted"} +{"payload":{"date":"2025-12-08","description":"Design work 12","id":59},"prev":"1322577f2db48ce75ae7a874ec48681ed33b709c7a68d8652294f22a82943f4a","seq":379,"ts":"2026-10-21T21:29:01Z","type":"entry.created"} +{"payload":{"entry_id":59,"party_id":3},"prev":"a7715accec23f324d8c6ea7fa92f9400d2d6792d5f319912da7b55916ad5d79c","seq":380,"ts":"2026-10-21T21:29:01Z","type":"entry.party_set"} +{"payload":{"account":17,"amount":"83.29","currency":"USD","id":59,"side":"debit"},"prev":"b92370edeb9fbbc30c3dac971d0514ffd6492c88d7105b22e530fa9bda25354c","seq":381,"ts":"2026-10-21T21:29:01Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"83.29","currency":"USD","id":59,"side":"credit"},"prev":"c815de80d2a481c8e5b38881fe8bb947b6c9f439c05e08eb6987653ef8da5933","seq":382,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"attachment_id":59,"blob_sha":"e554361bcf2115a5a55b5ccb80f32fe860710dd679f917f99686d1171e49964d","category":"receipts","description":null,"entry_id":59,"file_name":"r59.pdf","mime_type":"application/pdf","size_bytes":56},"prev":"793ed5800359e366d9500a921eb1eb6de1b03fa1112cd8ce32bc2cb0af267e81","seq":383,"ts":"2026-10-21T21:29:02Z","type":"receipt.attached"} +{"payload":{"date":"2025-12-08","description":"Design work 12","id":59,"lines":[{"account":17,"amount":"83.29","currency":"USD","side":"debit"},{"account":1,"amount":"83.29","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"0d759e13534b33038fbd4592af647111c9dc82a81be2106c803e64213a871e92","seq":384,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"date":"2025-12-13","description":"Supplies 12","id":60},"prev":"73580cfcac242f8c5266594daf1263def1f1a5813885071dd26ea85ed474e1da","seq":385,"ts":"2026-10-21T21:29:02Z","type":"entry.created"} +{"payload":{"entry_id":60,"party_id":4},"prev":"818998c07fbfb3e620d6a8c007a2933dae383d4b242767542431dca70f2adb2b","seq":386,"ts":"2026-10-21T21:29:02Z","type":"entry.party_set"} +{"payload":{"account":13,"amount":"740.72","currency":"USD","id":60,"side":"debit"},"prev":"ca2b88a667f101307223e3d3a682e344ebbe0670c3e2e7bccba356b504e19724","seq":387,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"account":7,"amount":"740.72","currency":"USD","id":60,"side":"credit"},"prev":"c9758d36322d2439ad0842dd94c7a69ba2f2cc7f4f2788f6ec13a1f352d02511","seq":388,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"attachment_id":60,"blob_sha":"348514bbc9e4a658e2681f0981d359d8f8494de6b17459fc4d730503b5a19024","category":"receipts","description":null,"entry_id":60,"file_name":"r60.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"d9a8c135c5412fa3a9a9e87ad3714497788153b8df424d82463f91f7a160c3c1","seq":389,"ts":"2026-10-21T21:29:02Z","type":"receipt.attached"} +{"payload":{"date":"2025-12-13","description":"Supplies 12","id":60,"lines":[{"account":13,"amount":"740.72","currency":"USD","side":"debit"},{"account":7,"amount":"740.72","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"975afeb93d9c8ae6b21c0b79082e9b3094b0df96ba4ab2965bb6fba929f6f099","seq":390,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"date":"2025-12-18","description":"Software paid by member 12","id":61},"prev":"e939e60e9d522abf781d651ff470cf4236af80d0d497177ac2907f2107a6f66f","seq":391,"ts":"2026-10-21T21:29:02Z","type":"entry.created"} +{"payload":{"entry_id":61,"party_id":1},"prev":"ca11d669a78b359190d893df4d57375c941549fd9ba3b0796deef9dfaa0f5b35","seq":392,"ts":"2026-10-21T21:29:02Z","type":"entry.party_set"} +{"payload":{"account":14,"amount":"79.12","currency":"USD","id":61,"side":"debit"},"prev":"e1ef9eb8784d6a8159a2b06eb1e3b19ac8d9c4e5f65741f1d05ebffa91edb9f5","seq":393,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"account":8,"amount":"79.12","currency":"USD","id":61,"side":"credit"},"prev":"91d0bf2878f1b44bef06a569984a5a9e79445606da929eb6cf0ddc178562a107","seq":394,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"attachment_id":61,"blob_sha":"3339b8401edf750b6b34d0d90ec5b7a35fe8b6e26dba68d15b9c65f60d11e251","category":"receipts","description":null,"entry_id":61,"file_name":"r61.pdf","mime_type":"application/pdf","size_bytes":68},"prev":"04399b473dc1425a688aaf3159cbd88cd78fca54a7f8db5b99c9e215da838aa7","seq":395,"ts":"2026-10-21T21:29:02Z","type":"receipt.attached"} +{"payload":{"date":"2025-12-18","description":"Software paid by member 12","id":61,"lines":[{"account":14,"amount":"79.12","currency":"USD","side":"debit"},{"account":8,"amount":"79.12","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"0b280a4a27211eacf8d5c7e25b795fdf959ec3b8b69fde307fad7fb0ccc925a9","seq":396,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"date":"2025-12-23","description":"Bank fee 12","id":62},"prev":"27f88d75fc1e88cd66d408e5fa89a9d5b818e4baaa71ff6ab154650f393c851b","seq":397,"ts":"2026-10-21T21:29:02Z","type":"entry.created"} +{"payload":{"entry_id":62,"reason":"bank fee"},"prev":"f76c2e6adeb67d7760aadedb534445d632030c9bd12292dac5de5b2b2828ae2a","seq":398,"ts":"2026-10-21T21:29:02Z","type":"entry.no_party"} +{"payload":{"account":13,"amount":"12.00","currency":"USD","id":62,"side":"debit"},"prev":"c2f347917a69a154836e7ddf4dec3fe2ab1e15cf2a8f8225c36ebc969ce65328","seq":399,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"12.00","currency":"USD","id":62,"side":"credit"},"prev":"2601edb1df9aaf7fcf821ffea0a5aeecb064cc66cb246817e32d9daf265775c9","seq":400,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"attachment_id":62,"blob_sha":"8d95aa1b0d183a31141f7093bc4ef2dcf0b165d42625efe2c50fac9bba78bd7f","category":"receipts","description":null,"entry_id":62,"file_name":"r62.pdf","mime_type":"application/pdf","size_bytes":53},"prev":"c21f7b405b5f50ef6c104c456e7ab42439f4ab617bae4323cc5e7cfb733ad667","seq":401,"ts":"2026-10-21T21:29:02Z","type":"receipt.attached"} +{"payload":{"date":"2025-12-23","description":"Bank fee 12","id":62,"lines":[{"account":13,"amount":"12.00","currency":"USD","side":"debit"},{"account":1,"amount":"12.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"97b789402ca050d2816977e1866958a0206c2682e97cd84c4dab37cffa0fad02","seq":402,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"date":"2025-03-01","description":"Laptop","id":63},"prev":"dd3373bb32e5656fa6c7b14e46fbcd0af332c111c79fdae8c6a33585d2203f2f","seq":403,"ts":"2026-10-21T21:29:02Z","type":"entry.created"} +{"payload":{"entry_id":63,"party_id":4},"prev":"ed9d7324d7524ed6c45eb23fc8efbd43984855d7710d75a9aedb7cbf8b325fc4","seq":404,"ts":"2026-10-21T21:29:02Z","type":"entry.party_set"} +{"payload":{"account":3,"amount":"2400.00","currency":"USD","id":63,"side":"debit"},"prev":"65c34e5cbb2233e08a10fc5fa93334dcfd1cd2d1c6431f004d4b7a7b982a15c6","seq":405,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"2400.00","currency":"USD","id":63,"side":"credit"},"prev":"478214a7e48572598610da9801e4e4bd07d99b8fa0ac230474828c15b195ec47","seq":406,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"attachment_id":63,"blob_sha":"8676902d877e2c45200f351eb1671f62e598df60d83bb2f3da74f60d85a76d5f","category":"receipts","description":null,"entry_id":63,"file_name":"r63.pdf","mime_type":"application/pdf","size_bytes":48},"prev":"77bda531c990996596b82a1155feefa838a7b39b9b218ec5fc289508c7cc0587","seq":407,"ts":"2026-10-21T21:29:02Z","type":"receipt.attached"} +{"payload":{"date":"2025-03-01","description":"Laptop","id":63,"lines":[{"account":3,"amount":"2400.00","currency":"USD","side":"debit"},{"account":1,"amount":"2400.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"276fde3703b75331f11e24df3022332cc285f72e27020cc8e1e13528f80c988e","seq":408,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"accum_depr_account":4,"cost":{"amount":"2400.00","currency":"USD"},"cost_account":3,"description":"Laptop","expense_account":15,"id":1,"method":"straight_line","purchase_date":"2025-03-01","salvage_value":{"amount":"0","currency":"USD"},"useful_life_months":36},"prev":"c69cdd6ff196ad5da8f6d7b3242681868f9a1ba4fd42dffb14922ba9c8ce6d2a","seq":409,"ts":"2026-10-21T21:29:02Z","type":"asset.registered"} +{"payload":{"asset_id":1,"previous_tag":null,"tag":"FL-0001"},"prev":"3cfb8d20209d19fc8b1718379037da8f3eca780c182a006fe0a000ac4ceb87b0","seq":410,"ts":"2026-10-21T21:29:02Z","type":"asset.tagged"} +{"payload":{"asset_id":1,"entry_id":63},"prev":"569bf2e5019bf47db07a22fd34725d254544f5d2faa1286884f46caaa98bd54a","seq":411,"ts":"2026-10-21T21:29:02Z","type":"asset.acquisition_linked"} +{"payload":{"date":"2025-03-31","description":"Depreciation — Laptop — 2025-03","id":64},"prev":"22809023c78b048f64008e4e40402ea222a6d5a257112db2f224ca26d3ee41e7","seq":412,"ts":"2026-10-21T21:29:02Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":64,"side":"debit"},"prev":"863171f7c7793cebbb32a192056eaff8b28f4dfc79c99a8367f92d6eec49378f","seq":413,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":64,"side":"credit"},"prev":"2bee4b7f54dc66c67eb2655fd936adfb57f8d05555cf77cb6b48989d4255821f","seq":414,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"date":"2025-03-31","description":"Depreciation — Laptop — 2025-03","id":64,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"48ded01bfc4b8265a49204c4fb8372f99481ba5f3d656dbe498f3d332e47c448","seq":415,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":64,"period":"2025-03"},"prev":"c30add1e4ead7b0dcb3948bb83b5244a30b9c733a92ec4732999532b5c9eae59","seq":416,"ts":"2026-10-21T21:29:02Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-04-30","description":"Depreciation — Laptop — 2025-04","id":65},"prev":"40653fd1e994a584030625fe577665c5db4b2c8ea70772b2ad6ac7dc154ea25d","seq":417,"ts":"2026-10-21T21:29:02Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.66","currency":"USD","id":65,"side":"debit"},"prev":"67bc4b24d3cc20a221c1bd14d02c4cf5b7dc19333d187541e94dd29e72a5d6e5","seq":418,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.66","currency":"USD","id":65,"side":"credit"},"prev":"3e94b0205bc23dd2f530689d6aca732d68235e20f46ae8416fb03bb729306811","seq":419,"ts":"2026-10-21T21:29:02Z","type":"entry.line_added"} +{"payload":{"date":"2025-04-30","description":"Depreciation — Laptop — 2025-04","id":65,"lines":[{"account":15,"amount":"66.66","currency":"USD","side":"debit"},{"account":4,"amount":"66.66","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"b4b04853c7e85f6f7bab1b542e904ac054d6778e9159a47d0b2b921990f3e8ab","seq":420,"ts":"2026-10-21T21:29:02Z","type":"entry.posted"} +{"payload":{"amount":"66.66","asset_id":1,"entry_id":65,"period":"2025-04"},"prev":"981a7a51a034c228969d13ab2eab20613a2bd57e01b28b75f9ed17bbb0c4076c","seq":421,"ts":"2026-10-21T21:29:02Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-05-31","description":"Depreciation — Laptop — 2025-05","id":66},"prev":"41caf1b729a253a90ca48b694c895a8ad078dfd27ec5e75bb362aa1c79ec402f","seq":422,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":66,"side":"debit"},"prev":"69d804f402662361cf9ba7135420e11f2ebaa014824df99ceaa1afbdc384d620","seq":423,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":66,"side":"credit"},"prev":"d3019602e2c0e2cf92840eb6c4b9ba77132b79b071cc88e5e928a5525d5a7f0a","seq":424,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-05-31","description":"Depreciation — Laptop — 2025-05","id":66,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"f1c7cabf8106ace4486696906ca27948644fea2149c5607191ef8b6426ecaaf9","seq":425,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":66,"period":"2025-05"},"prev":"291bfae8f7cdf9132827647ab388af8708a400945bd33bfd98518f43717f6ae2","seq":426,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-06-30","description":"Depreciation — Laptop — 2025-06","id":67},"prev":"1e5895685f8c6248412f13ec2af34949a24b4493efb3e322db370ca7c76f0207","seq":427,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":67,"side":"debit"},"prev":"94c19beb788960587d6c44f9c7c7294bde4813e015d9444803e3409671371456","seq":428,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":67,"side":"credit"},"prev":"1e5159ac81c1951152d1d871d112658e7c239aa6ec50affc82291136151057d0","seq":429,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-06-30","description":"Depreciation — Laptop — 2025-06","id":67,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"04efed2f4e6761c9588b9316d64122f3672e1fed213b1a2f3f1f2868c4b60444","seq":430,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":67,"period":"2025-06"},"prev":"5584eb6e1aeeb38029e118670e8379df574a4a499acd38e7158c8b5b45594092","seq":431,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-07-31","description":"Depreciation — Laptop — 2025-07","id":68},"prev":"d738713444f0c465415e5248388ce05b4bd114e6f0fa6570cdc66cc70e7c2ea2","seq":432,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.66","currency":"USD","id":68,"side":"debit"},"prev":"8760646dd6d3d731d83b7944c8aa1865ff0aa0c57f5b08daf649b6acb9f68232","seq":433,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.66","currency":"USD","id":68,"side":"credit"},"prev":"f75caf0d430852a76f6225a72baab3cc1639d87d6e64ae13f728685a7b19ccca","seq":434,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-07-31","description":"Depreciation — Laptop — 2025-07","id":68,"lines":[{"account":15,"amount":"66.66","currency":"USD","side":"debit"},{"account":4,"amount":"66.66","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"e2d21284301eb08363234118bda170f78a5bc6712355398132b57f61ebc90ccf","seq":435,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.66","asset_id":1,"entry_id":68,"period":"2025-07"},"prev":"dda1ba8941f6686fc22bafec2e0daa0f9d62a5b5be9ed100670713526d4548c4","seq":436,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-08-31","description":"Depreciation — Laptop — 2025-08","id":69},"prev":"4ab1cdd0071cb84e114c5bc461bbafe0969bb845bbb05f070db067dffeb9e371","seq":437,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":69,"side":"debit"},"prev":"95bad6ff059f689293534f0f19cc7b57284f0125fa65e6c1e76e8341f5bd66f4","seq":438,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":69,"side":"credit"},"prev":"257ffe0e663df221be536ab21c9429b5ad663f8e3140b256575f4f1ac14f3795","seq":439,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-08-31","description":"Depreciation — Laptop — 2025-08","id":69,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"52e67b69798e6e42e4d721c942fc9c661cad3c9dd21e88cebd0968312708e796","seq":440,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":69,"period":"2025-08"},"prev":"3d7052193c152126591fdc07e445276ea04114b10f1db38c18029d34c6a1a457","seq":441,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-09-30","description":"Depreciation — Laptop — 2025-09","id":70},"prev":"df0d66ff32bdb0c201e38864413b65321da625ddedc49f131345e8a17d7dc6af","seq":442,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":70,"side":"debit"},"prev":"353f3e42cc1f1e5c191d9f344cb26c06456fc8c601f4ae86e0420122afb805ca","seq":443,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":70,"side":"credit"},"prev":"545d4a21746f97d8460679b2d01fecf161df220d4fbcefcce23786be972b2f01","seq":444,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-09-30","description":"Depreciation — Laptop — 2025-09","id":70,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"5515388f429b3bb9234967689c10701f688ffbcacb9eb42e507a56b910a5eca4","seq":445,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":70,"period":"2025-09"},"prev":"134600a07a7f9be26ef29d9b3609d6103c22dd5a5acefadd121c5769bec1ab82","seq":446,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-10-31","description":"Depreciation — Laptop — 2025-10","id":71},"prev":"9a088a890a8286cadc7d0df46ef42e343eb5ded8c739fee6ae77bb4eb11cefce","seq":447,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.66","currency":"USD","id":71,"side":"debit"},"prev":"cdb6b65327e40050fa39cd7d8c32c9e499129fc06a512b945bb94124b34fa548","seq":448,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.66","currency":"USD","id":71,"side":"credit"},"prev":"1b763138e97fbb88aac5d9ecf34d2c6426530408b4b8986b797442ce82b88f61","seq":449,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-10-31","description":"Depreciation — Laptop — 2025-10","id":71,"lines":[{"account":15,"amount":"66.66","currency":"USD","side":"debit"},{"account":4,"amount":"66.66","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"8f55d708971978b7818f921861f031617adaa6d794f4a369c0137c6be77e6c1d","seq":450,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.66","asset_id":1,"entry_id":71,"period":"2025-10"},"prev":"27bfba00c4431cefff8e551102f87feaddbc00e4ac4ec8081171b0f357a8cb4c","seq":451,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-11-30","description":"Depreciation — Laptop — 2025-11","id":72},"prev":"5f05265a9f7207106edef9d8e570d4e63b9f748e6fd382b66b7cb4fd5f026611","seq":452,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":72,"side":"debit"},"prev":"c5ba941fc07e87c4698b2de0ecf3cc982dc3446084fe99332502a182e006692a","seq":453,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":72,"side":"credit"},"prev":"a77601eb122a34e9d816a28d91efd9c6546f1ab56bad24fca07be761fa51b6b5","seq":454,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-11-30","description":"Depreciation — Laptop — 2025-11","id":72,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"d630324206e2658b2855228bded486e09580cda4901906a9cb37ac1c3827694d","seq":455,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":72,"period":"2025-11"},"prev":"1b5195c8a8d25c63523207169bf4e1bcc31b9b1e381ccac28ac910cd45ec0bd4","seq":456,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-12-31","description":"Depreciation — Laptop — 2025-12","id":73},"prev":"5b1227aee10a524c14b49637a7423676999a21a95f161164dc6cc4890d172624","seq":457,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"account":15,"amount":"66.67","currency":"USD","id":73,"side":"debit"},"prev":"e21de75b07cc38719cd1eb40177a876faf4b84dfe9791606dc50315750a7cbdf","seq":458,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":4,"amount":"66.67","currency":"USD","id":73,"side":"credit"},"prev":"b8a2f7d8cd30e888fa68f883989190bf6635a4f7f4c90840b6a8a7bb0ef3bda8","seq":459,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"date":"2025-12-31","description":"Depreciation — Laptop — 2025-12","id":73,"lines":[{"account":15,"amount":"66.67","currency":"USD","side":"debit"},{"account":4,"amount":"66.67","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"474e2016cd9deff5c0fcd864ba32f4abce897c35050378958f2eed8342e15e06","seq":460,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"amount":"66.67","asset_id":1,"entry_id":73,"period":"2025-12"},"prev":"4496340b38dcfe3c449c5a7d5ce15e98f8052f6130405dd209a54fc3e155d04d","seq":461,"ts":"2026-10-21T21:29:03Z","type":"asset.depreciation_posted"} +{"payload":{"date":"2025-02-01","description":"Insurance year","id":74},"prev":"8a3ce2e06e292d10ea2648daf59f15b845ff4954f5b071e7d0d034ee31919b9f","seq":462,"ts":"2026-10-21T21:29:03Z","type":"entry.created"} +{"payload":{"entry_id":74,"party_id":4},"prev":"8b3a320f0a1931010797ebae04ea284d7afc902376e5528a1e42cab2bf6dfbf5","seq":463,"ts":"2026-10-21T21:29:03Z","type":"entry.party_set"} +{"payload":{"account":2,"amount":"1200.00","currency":"USD","id":74,"side":"debit"},"prev":"bfb05eb96932c13c0bf9f6088f96e5456753d8abe274282d0c5b71bf72c3d45d","seq":464,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"account":1,"amount":"1200.00","currency":"USD","id":74,"side":"credit"},"prev":"0e46904b35239d223507dd3249a48e72abf8c2b72787e5a71577285dc7a3fd13","seq":465,"ts":"2026-10-21T21:29:03Z","type":"entry.line_added"} +{"payload":{"attachment_id":64,"blob_sha":"407b7b6f86ec969d83c5370e7a2f639522bbdb7bceafb7cb3dad36a384c2f4ba","category":"receipts","description":null,"entry_id":74,"file_name":"r64.pdf","mime_type":"application/pdf","size_bytes":56},"prev":"fa55ae4bf5fbf7d8e65d0bfa4466c6ba6675e0e33cf08c52e0536c4e734e359c","seq":466,"ts":"2026-10-21T21:29:03Z","type":"receipt.attached"} +{"payload":{"date":"2025-02-01","description":"Insurance year","id":74,"lines":[{"account":2,"amount":"1200.00","currency":"USD","side":"debit"},{"account":1,"amount":"1200.00","currency":"USD","side":"credit"}],"reversal_of":null},"prev":"39cc2c369dec884abebbaf2afa842e530c0a7d2f9c928cfa658e3ba2dc6877fe","seq":467,"ts":"2026-10-21T21:29:03Z","type":"entry.posted"} +{"payload":{"balance_account":2,"description":"Insurance","id":1,"kind":"prepaid_expense","months":12,"pl_account":16,"start":"2025-02-01","total":{"amount":"1200.00","currency":"USD"}},"prev":"7576a892214455b4f54a9ba4d3a54b31d6e72f95b3c2d57b197bdd86d54de240","seq":468,"ts":"2026-10-21T21:29:03Z","type":"schedule.registered"} +{"payload":{"end":"2025-03-31","id":1,"name":"2025-Q1","start":"2025-01-01"},"prev":"ff0fc0c6c7bc3537bd06b5a1e73d325af2e183e54a75a441e20a740db0bb5cbd","seq":469,"ts":"2026-10-21T21:29:03Z","type":"period.created"} +{"payload":{"close_to":{"members":[{"account":9,"distributions":null,"share":"0.5"},{"account":10,"distributions":null,"share":"0.5"}],"rounding":"cumulative"},"closing_entry":75,"entry":{"date":"2025-03-31","description":"Close period 2025-Q1","id":75,"lines":[{"account":12,"amount":"598.41","currency":"USD","side":"debit"},{"account":13,"amount":"961.27","currency":"USD","side":"credit"},{"account":14,"amount":"1384.64","currency":"USD","side":"credit"},{"account":15,"amount":"66.67","currency":"USD","side":"credit"},{"account":17,"amount":"1568.21","currency":"USD","side":"credit"},{"account":9,"amount":"1691.19","currency":"USD","side":"debit"},{"account":10,"amount":"1691.19","currency":"USD","side":"debit"}]},"id":1},"prev":"7c2011737f719566576cb5834961a755e285f77373c976213bf976e3f1ca4622","seq":470,"ts":"2026-10-21T21:29:03Z","type":"period.closed"} diff --git a/crates/ledger-cli/tests/fixtures/p2-served/keys/legacy.key b/crates/ledger-cli/tests/fixtures/p2-served/keys/legacy.key new file mode 100644 index 0000000..c876c1f --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/keys/legacy.key @@ -0,0 +1 @@ +bebe2eda9edb31285dbc4d6ae7a3761d88e260af13a929ba8f1b97baf3d83178 \ No newline at end of file diff --git a/crates/ledger-cli/tests/fixtures/p2-served/vault/tin-1.bin b/crates/ledger-cli/tests/fixtures/p2-served/vault/tin-1.bin new file mode 100644 index 0000000..2d042d5 --- /dev/null +++ b/crates/ledger-cli/tests/fixtures/p2-served/vault/tin-1.bin @@ -0,0 +1 @@ +WBV14\€8Ô>F+þ÷(‡ò¦£²°ÑPC7AßÝ7…‡YÏÃmaMû‘lÀºM6/K_–rt„p—çëK›á–öUz<‰—6fçlÁº!gÙ \ No newline at end of file diff --git a/crates/ledger-cli/tests/fixtures/p2-served/vault/tin-3.bin b/crates/ledger-cli/tests/fixtures/p2-served/vault/tin-3.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe24f4cb344c754bebdce4bc8062e403127e1d2b GIT binary patch literal 79 zcmV-V0I>g8LRK++y3x3OpW4U)hVt|ia(QU=mT*`#s%I}cFO%1i!Oq6{{Ny2U@2=7b l`^SArMt{VGgGskMOfvvW;R*^UmF=)QoFs-5%@7Et+|_;qC=vhw literal 0 HcmV?d00001 diff --git a/crates/ledger-cli/tests/fixtures/p2-served/wanderbooks.db b/crates/ledger-cli/tests/fixtures/p2-served/wanderbooks.db new file mode 100644 index 0000000000000000000000000000000000000000..c61177f286ca15b6b615619a75a14adcf0a9b97b GIT binary patch literal 327680 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 = vec![ + ( + "books.set_setting", + json!({"decided_by": "Avery Quill", + "changes": [{"key": "books.schedule_convention", "value": "monthly_even"}]}), + ), + ( + "books.add_account", + json!({"code": "4900", "name": "Gain on sale", "account_type": "revenue", + "tax_category": "form_4797_gain_loss"}), + ), + // January and February 2026 not run: March's run would carry them. + ( + "books.run_depreciation", + json!({"period": "2026-03", "asset_id": 1}), + ), + ( + "books.close_period", + json!({"period_id": q2, "confirmed": true}), + ), + ]; + for (tool, args) in &refused { + let e = a.call(tool, args.clone()).unwrap_err(); + assert!(e.starts_with("format_upgrade_pending"), "{tool}: {e}"); + } + assert_eq!(journal(&dir), waiting, "a refusal journals nothing"); + assert!(journal(&dir).starts_with(&p2_journal)); + assert_eq!( + std::fs::read(dir.join(ledger_store::LEGACY_DB_FILE)).unwrap(), + p2_db, + "P2's database is never written" + ); + + // INVARIANT 2: the go-ahead. + let mut words = home.words("books"); + words.extend(["upgrade".into(), "acme".into()]); + let (code, shown) = home.at_terminal(&words, &[PASS]); + assert_eq!(code, 0, "{shown}"); + let after = journal(&dir); + assert!(after.starts_with(&waiting)); + assert_eq!( + format_lines(&dir), + 2, + "P2's declaration, then the upgrade's" + ); + let backup = archive_git(&dir, &["rev-parse", "HEAD"]); + assert_eq!( + archive_git(&dir, &["show", &format!("{}:journal.jsonl", backup.trim())]).as_bytes(), + waiting.as_slice(), + "the backup holds the books as they were" + ); + for kept in ["keys/legacy.key", "vault/tin-1.bin", "vault/tin-3.bin"] { + let out = Command::new("git") + .arg(format!("--git-dir={}", dir.join("archive.git").display())) + .args(["show", &format!("{}:{kept}", backup.trim())]) + .output() + .unwrap(); + assert_eq!(out.stdout, std::fs::read(dir.join(kept)).unwrap(), "{kept}"); + } + + // INVARIANT 3. + assert_eq!(figures(&mut a), before, "the upgrade moves no figure"); + for (tool, args) in refused { + a.call(tool, args.clone()) + .unwrap_or_else(|e| panic!("{tool} after the upgrade: {e}")); + } + let verified = a.call("books.verify", json!({})).unwrap(); + assert_eq!(verified["status"], "ok", "{verified}"); + assert_eq!( + std::fs::read(dir.join(ledger_store::LEGACY_DB_FILE)).unwrap(), + p2_db, + "and never after" + ); +} diff --git a/crates/ledger-core/src/parties.rs b/crates/ledger-core/src/parties.rs index 4d0d52e..c79d899 100644 --- a/crates/ledger-core/src/parties.rs +++ b/crates/ledger-core/src/parties.rs @@ -467,9 +467,99 @@ fn full_tin_runs(chars: &[char]) -> Vec<(usize, usize)> { /// the space, hyphen, dot, slash and underscore separate. pub fn has_full_tin(text: &str) -> bool { let chars: Vec = text.chars().collect(); + if REPLAYING.with(std::cell::Cell::get) { + return !journaled_tin_runs(&chars).is_empty(); + } !full_tin_runs(&chars).is_empty() } +std::thread_local! { + /// Set while a journaled line is replayed ([`replaying`]). + static REPLAYING: std::cell::Cell = const { std::cell::Cell::new(false) }; +} + +/// Run `f` as the replay of a journaled line: within it, +/// [`has_full_tin`] (and so [`check_text`] and the facts' checks) finds a +/// TIN as the version before P3 did, never more. +/// +/// ```text +/// GOAL: books an earlier version wrote open, forever, however a later +/// version widens what reads as a full TIN. +/// SOURCE: rules.md B-28 ("Replay accepts every line an earlier version +/// accepted": the bounds are the commands', never replay's); +/// B-26 (no full TIN in the books). +/// INVARIANTS: +/// 1. Within it, a text is refused only if P2's detector +/// ([`journaled_tin_runs`]) refuses it: every name, reason and fact +/// P2 took replays. +/// 2. Outside it (every command), the detector is P3's, which finds +/// everything P2's did and more (Unicode spaces and dashes, +/// invisible characters). +/// 3. Restored on the way out, a panic included. +/// SCENARIOS: +/// 1. IF a P2 journal holds a vendor named with a fullwidth-dash run of +/// nine digits: SHOULD replay (P3 review, 2026-10-21: P3 refused to +/// open such books). +/// ``` +pub fn replaying(f: impl FnOnce() -> T) -> T { + struct Restore(bool); + impl Drop for Restore { + fn drop(&mut self) { + REPLAYING.with(|r| r.set(self.0)); + } + } + let _restore = Restore(REPLAYING.with(|r| r.replace(true))); + f() +} + +/// The separators P2 (and every version before P3) read between a TIN's +/// digits: space, hyphen, dot, slash, underscore, the no-break space and +/// the dashes U+2010 to U+2014 and U+2212. +fn journaled_tin_separator(c: char) -> bool { + matches!( + c, + ' ' | '-' | '.' | '/' | '_' | '\u{a0}' | '\u{2010}'..='\u{2014}' | '\u{2212}' + ) +} + +/// [`full_tin_runs`] as P2 found them: [`journaled_tin_separator`] only, +/// one to [`MAX_TIN_GAP`] between neighbors, no invisible characters. +fn journaled_tin_runs(chars: &[char]) -> Vec<(usize, usize)> { + let mut runs = Vec::new(); + let mut i = 0; + while i < chars.len() { + if !chars[i].is_numeric() { + i += 1; + continue; + } + let (mut digits, mut last, mut j) = (1, i, i + 1); + while j < chars.len() { + if chars[j].is_numeric() { + digits += 1; + last = j; + j += 1; + continue; + } + let gap = chars[j..] + .iter() + .take_while(|c| journaled_tin_separator(**c)) + .count(); + if (1..=MAX_TIN_GAP).contains(&gap) + && chars.get(j + gap).is_some_and(|c| c.is_numeric()) + { + j += gap; + } else { + break; + } + } + if digits >= 9 { + runs.push((i, last)); + } + i = last + 1; + } + runs +} + /// `text` with every run [`has_full_tin`] finds masked: each of its /// digits becomes `•`, separators kept. For refusals that quote what they /// were given, so no error echoes a full TIN (docs/spec/rules.md B-26). diff --git a/crates/ledger-mcp/src/server.rs b/crates/ledger-mcp/src/server.rs index 3b62642..9997314 100644 --- a/crates/ledger-mcp/src/server.rs +++ b/crates/ledger-mcp/src/server.rs @@ -6017,6 +6017,14 @@ impl BooksServer { self.settings().company.tax_form, ) .map_err(|e| format!("{}: {e}", row.code))?; + // A category an earlier version doesn't know waits for the + // books' format upgrade: refused here, with the file whole, + // never after the rows before it were written. + if let Some(f) = ledger_store::format::tax_category_feature(cat) { + store + .ensure_feature(f) + .map_err(|e| format!("{}: {e}", row.code))?; + } scratch .set_account_tax(id, Some(cat), None) .map_err(|e| format!("{}: {e}", row.code))?; diff --git a/crates/ledger-store/src/format.rs b/crates/ledger-store/src/format.rs index d17a38c..51173bf 100644 --- a/crates/ledger-store/src/format.rs +++ b/crates/ledger-store/src/format.rs @@ -56,6 +56,9 @@ pub const KNOWN_FEATURES: &[&str] = &[ MONTH_REPOSTING, SCHEDULE_CONVENTION, ASSET_BASIS, + TAX_CATEGORIES_GAIN_EXEMPT, + DISPOSAL_BEFORE_SERVICE, + DEPRECIATION_CATCH_UP, ]; /// Feature: `period.closed` closes to members with `"rounding": @@ -75,13 +78,46 @@ pub const FEATURE_REQUIRE_TAX_CATEGORY: &str = "require_tax_category"; /// The feature a `settings.set` naming `key` needs the books to have /// declared: a key an earlier version doesn't know. +/// +/// Every key P3 added is one (P3 review, 2026-10-21: `books.schedule_convention` +/// wasn't, so setting it left books P2 refuses to open, before consent). pub(crate) fn setting_feature(key: &str) -> Option<&'static str> { match key { "policy.require_tax_category" => Some(FEATURE_REQUIRE_TAX_CATEGORY), + "books.schedule_convention" => Some(SCHEDULE_CONVENTION), _ => None, } } +/// Feature: an `account.tax_set` naming a tax category P3 added +/// (`form_4797_gain_loss`, `tax_exempt_income`). An earlier version +/// refuses the category, so it can't open the books (P3 review, +/// 2026-10-21). +pub const TAX_CATEGORIES_GAIN_EXEMPT: &str = "tax_categories_gain_exempt"; + +/// The feature an `account.tax_set` naming `category` needs the books to +/// have declared: a category an earlier version doesn't know. +pub fn tax_category_feature(category: &str) -> Option<&'static str> { + match category { + "form_4797_gain_loss" | "tax_exempt_income" => Some(TAX_CATEGORIES_GAIN_EXEMPT), + _ => None, + } +} + +/// Feature: an `asset.disposed` dated before the asset's in-service date +/// (on or after the day it was acquired, P3 defect 13). An earlier version +/// refuses a disposal before its `purchase_date`, so it can't open the +/// books (P3 review, 2026-10-21). +pub const DISPOSAL_BEFORE_SERVICE: &str = "disposal_before_service"; + +/// Feature: an `asset.depreciation_posted` whose amount is not its month's +/// own depreciation: earlier months skipped or reversed caught up in it, or +/// a final month left over past the life (P3's run rule, B-15). An earlier +/// version reads every run as its month's own: it would show the caught-up +/// months as not yet run, and running them post their depreciation twice +/// (P3 review, 2026-10-21). +pub const DEPRECIATION_CATCH_UP: &str = "depreciation_catch_up"; + /// The feature `party.creditor_set` lines need: a party named the /// creditor of a liability (rules.md B-35, P3 defect 24). pub const PARTY_CREDITORS: &str = "party_creditors"; @@ -883,4 +919,101 @@ mod tests { other => panic!("expected NewerJournal, got {other:?}"), } } + + /// The setting keys and tax categories P2 (9c99a0cf, the last version + /// before P3) read: a `settings.set` or `account.tax_set` naming any + /// other makes P2 refuse the books, so each other needs a feature + /// (P3 review, 2026-10-21: `books.schedule_convention` and two tax + /// categories didn't have one). + const P2_SETTING_KEYS: &[&str] = &[ + "company.name", + "company.entity_type", + "company.tax_classification", + "company.tax_form", + "company.fiscal_year_start", + "company.timezone", + "company.formation_state", + "company.formed", + "company.state_entity_number", + "company.ein", + "company.irs_name_control", + "company.duns", + "company.address", + "company.registered_agent", + "company.partnership_representative", + "company.cpa", + "company.members", + "books.accounting_basis", + "books.cash_accounts", + "books.financing_accounts", + "books.investing_accounts", + "books.close_into", + "books.close_sweep", + "books.asset_tag_prefix", + "policy.evidence.threshold", + "policy.evidence.required_accounts", + "policy.evidence.exempt_accounts", + "policy.parties", + "policy.approval_rules", + "backup.git_remote", + "backup.folder", + ]; + const P2_TAX_CATEGORIES: &[&str] = &[ + "gross_receipts", + "returns_allowances", + "interest_income", + "other_income", + "cost_of_goods_sold", + "advertising", + "bad_debts", + "car_truck", + "charitable_contributions", + "commissions_fees", + "contract_labor", + "depreciation", + "employee_benefits", + "guaranteed_payments", + "insurance", + "interest_expense", + "legal_professional", + "meals", + "office_expense", + "officer_compensation", + "organization_startup", + "pension_profit_sharing", + "rent_equipment", + "rent_property", + "repairs", + "salaries_wages", + "supplies", + "taxes_licenses", + "travel", + "utilities", + "other_deductions", + "nondeductible", + ]; + + #[test] + fn every_setting_key_and_tax_category_p2_didnt_read_needs_a_feature() { + for k in ledger_core::settings::KEYS { + let known = P2_SETTING_KEYS.contains(&k.name); + assert_eq!( + setting_feature(k.name).is_none(), + known, + "{}: P2 {} it", + k.name, + if known { "reads" } else { "refuses" } + ); + } + for c in ledger_core::tax::CATEGORIES { + let known = P2_TAX_CATEGORIES.contains(&c.key); + assert_eq!(tax_category_feature(c.key).is_none(), known, "{}", c.key); + } + for f in [ + setting_feature("books.schedule_convention"), + tax_category_feature("tax_exempt_income"), + ] { + assert!(KNOWN_FEATURES.contains(&f.unwrap())); + } + } } diff --git a/crates/ledger-store/src/store.rs b/crates/ledger-store/src/store.rs index 019cb00..b4ba3e0 100644 --- a/crates/ledger-store/src/store.rs +++ b/crates/ledger-store/src/store.rs @@ -1137,6 +1137,11 @@ impl Store { })?; self.ledger .check_tax_category_required(code, name, account_type, placeholder, category)?; + // A category an earlier version doesn't know needs its feature: + // asked before the account's first line, never between the two. + if let Some(f) = category.and_then(crate::format::tax_category_feature) { + self.ensure_feature(f)?; + } let id = self.journal_account_added(code, name, account_type, parent, placeholder, |l| { l.add_account(code, name, account_type, parent, placeholder) @@ -2045,6 +2050,11 @@ impl Store { if self.depreciation_period_was_run(asset_id, period) { self.ensure_feature(crate::format::MONTH_REPOSTING)?; } + // More or less than the month's own (another month caught up in + // it): a run an earlier version would read as the month's own. + if amount != due.scheduled { + self.ensure_feature(crate::format::DEPRECIATION_CATCH_UP)?; + } let entry_id = self.create_entry(period_end, &description)?; self.add_line(entry_id, asset.expense_account, Side::Debit, money)?; self.add_line(entry_id, asset.accum_depr_account, Side::Credit, money)?; @@ -2517,6 +2527,13 @@ impl Store { if depreciation.is_some() && self.depreciation_period_was_run(asset_id, &preview.period) { self.ensure_feature(crate::format::MONTH_REPOSTING)?; } + // Disposed before it was placed in service (acquired, not yet in + // use): an earlier version refuses that line (its floor was the + // in-service date), so it needs its feature, asked here, before + // the first line. + if date < asset.in_service_date { + self.ensure_feature(crate::format::DISPOSAL_BEFORE_SERVICE)?; + } if let Some((description, lines)) = &depreciation { let eid = self.create_entry(date, description)?; for (account, side, amount) in lines { @@ -3806,6 +3823,9 @@ impl Store { ) -> Result<(), StoreError> { self.ledger .check_account_tax(account, category, deductible_percent)?; + if let Some(f) = category.and_then(crate::format::tax_category_feature) { + self.ensure_feature(f)?; + } let line = self.append_journal( "account.tax_set", json!({ @@ -5484,10 +5504,24 @@ fn get_str<'a>(p: &'a Value, key: &str) -> Result<&'a str, StoreError> { /// Replay one journal line into a ledger, asserting recorded ids. Used by /// hydration, `verify`, and `rebuild`: the journal is the script, the engine /// is the actor. +/// +/// A full TIN is found as the version before P3 found one +/// (`ledger_core::parties::replaying`): a name, reason or fact an earlier +/// version took replays, however the commands' detector has widened since +/// (rules.md B-28). pub(crate) fn replay_line_into_ledger( ledger: &mut Ledger, line: &JournalLine, base_currency: Currency, +) -> Result<(), StoreError> { + ledger_core::parties::replaying(|| replay_line(ledger, line, base_currency)) +} + +/// [`replay_line_into_ledger`]'s work. +fn replay_line( + ledger: &mut Ledger, + line: &JournalLine, + base_currency: Currency, ) -> Result<(), StoreError> { let p = &line.payload; match line.line_type.as_str() { diff --git a/crates/ledger-store/tests/format.rs b/crates/ledger-store/tests/format.rs index 6d05628..1df48aa 100644 --- a/crates/ledger-store/tests/format.rs +++ b/crates/ledger-store/tests/format.rs @@ -1380,3 +1380,27 @@ fn a_write_waiting_for_the_upgrade_journals_nothing() { assert_eq!(*store.journal_format(), ledger_store::format::current()); store.verify().unwrap(); } + +/// The replay fuzz target (`fuzz_store_replay`: the writer and the viewer +/// agree on every journal) draws its lines from every event type this +/// version reads, P3's included (`asset.basis_set`, `party.creditor_set` +/// were missing: the fuzzer never wrote them, so it never checked the two +/// readers agree on them). +#[test] +fn the_replay_fuzzer_writes_every_event_type() { + let target = include_str!("../../../fuzz/fuzz_targets/fuzz_store_replay.rs"); + let list = target + .split("const TYPES: &[&str] = &[") + .nth(1) + .and_then(|rest| rest.split("];").next()) + .expect("the fuzz target's TYPES"); + let missing: Vec<&str> = EVENT_TYPES + .iter() + .copied() + .filter(|t| *t != "store.created" && !list.contains(&format!("\"{t}\""))) + .collect(); + assert!( + missing.is_empty(), + "the replay fuzzer never writes {missing:?}" + ); +} diff --git a/crates/ledger-store/tests/p2_compat.rs b/crates/ledger-store/tests/p2_compat.rs new file mode 100644 index 0000000..1dbf3dd --- /dev/null +++ b/crates/ledger-store/tests/p2_compat.rs @@ -0,0 +1,352 @@ +//! Books P2 wrote, served by this version before the owner's go-ahead +//! (plan/served.md 3.9, D-39; rules.md B-27, B-28): nothing is written +//! that P2 can't read, or would read with another meaning, and every line +//! P2 wrote opens. +//! +//! Oracle: P2 itself (9c99a0cf, the revision before P3), run from end to +//! end on P2-shaped books in the P3 data-safety review (2026-10-21): each +//! write below, made by this version on books in format 2 with no +//! features, left books P2 refused to open (`books.schedule_convention`, +//! the tax categories P3 added, a disposal before the in-service date) or +//! read wrong (a depreciation run carrying another month's depreciation, +//! which P2 reads as the month's own, so its months caught up show as not +//! yet run, and running them in P2 posts them twice). And a name P2 took +//! held what P3's wider TIN detector reads as a full TIN, so P3 refused to +//! open the books. +//! +//! ```text +//! INVARIANTS: +//! 1. On books in format 2 with no features, each such write is refused +//! (FormatUpgradePending), journaling nothing; after the upgrade it is +//! made. +//! 2. The same command shaped as P2 could write it is made before the +//! upgrade (a category P2 knew, months run in order, a disposal on or +//! after the in-service date). +//! 3. A line P2 accepted replays, in the writer and the viewer, however +//! the commands' checks have widened since (B-28). +//! ``` + +use chrono::NaiveDate; +use ledger_core::settings::{Change, Source}; +use ledger_core::{AccountType, Currency, Money, NewAsset, Side}; +use ledger_store::{JOURNAL_FILE, JournalFormat, JournalWriter, Snapshot, Store, StoreError}; +use rust_decimal::Decimal; +use serde_json::json; +use std::path::{Path, PathBuf}; + +struct TestDir(PathBuf); + +impl std::ops::Deref for TestDir { + type Target = Path; + fn deref(&self) -> &Path { + &self.0 + } +} + +impl Drop for TestDir { + fn drop(&mut self) { + let _ = std::fs::remove_dir_all(&self.0); + } +} + +fn test_dir(name: &str) -> TestDir { + let dir = std::env::temp_dir().join(format!( + "wanderbooks-p2-compat-{name}-{}", + std::process::id() + )); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(&dir).unwrap(); + TestDir(dir) +} + +fn d(y: i32, m: u32, day: u32) -> NaiveDate { + NaiveDate::from_ymd_opt(y, m, day).unwrap() +} + +fn usd(s: &str) -> Money { + Money::new(s.parse::().unwrap(), Currency::USD) +} + +fn journal(dir: &Path) -> Vec { + std::fs::read(dir.join(JOURNAL_FILE)).unwrap() +} + +/// Books as P2 left them: format 2 (declared at their first setting), no +/// features, a chart. +fn p2_books(dir: &Path) -> Store { + let mut s = Store::create_in_format( + dir, + Currency::USD, + &JournalFormat { + format: 2, + features: Vec::new(), + }, + ) + .unwrap(); + for (code, name, t) in [ + ("1000", "Bank", AccountType::Asset), + ("1500", "Equipment", AccountType::Asset), + ("1510", "Accumulated depreciation", AccountType::Asset), + ("3000", "Capital", AccountType::Equity), + ("4000", "Revenue", AccountType::Revenue), + ("6200", "Depreciation", AccountType::Expense), + ] { + s.add_account(code, name, t, None, false).unwrap(); + } + s +} + +fn account(s: &Store, code: &str) -> u64 { + s.ledger().chart().find_by_code(code).unwrap().id +} + +/// INVARIANT 1's refusal: waiting for the upgrade, nothing journaled. +fn assert_waits(dir: &Path, before: &[u8], got: Result) { + match got { + Err(StoreError::FormatUpgradePending { .. }) => {} + other => panic!("expected FormatUpgradePending, got {other:?}"), + } + assert_eq!(journal(dir), before, "a refused write journaled nothing"); +} + +fn source() -> Source { + Source { + decided_by: "Avery Quill".into(), + decided_on: d(2026, 10, 21), + citation: None, + note: None, + } +} + +#[test] +fn the_schedule_convention_setting_waits_for_the_upgrade() { + let dir = test_dir("setting"); + let mut s = p2_books(&dir); + let change = vec![Change { + key: "books.schedule_convention".into(), + value: Some(json!("monthly_even")), + }]; + let before = journal(&dir); + assert_waits(&dir, &before, s.change_settings(&change, &source())); + s.upgrade_format().unwrap(); + s.change_settings(&change, &source()).unwrap(); +} + +#[test] +fn a_tax_category_p3_added_waits_for_the_upgrade() { + let dir = test_dir("tax"); + let mut s = p2_books(&dir); + let before = journal(&dir); + for cat in ["form_4797_gain_loss", "tax_exempt_income"] { + assert_waits( + &dir, + &before, + s.add_account_with_tax( + "4900", + "Gain on sale", + AccountType::Revenue, + None, + false, + Some((cat, None)), + ), + ); + let revenue = account(&s, "4000"); + assert_waits(&dir, &before, s.set_account_tax(revenue, Some(cat), None)); + } + // INVARIANT 2: a category P2 knew. + s.add_account_with_tax( + "4100", + "Consulting", + AccountType::Revenue, + None, + false, + Some(("gross_receipts", None)), + ) + .unwrap(); + s.upgrade_format().unwrap(); + s.add_account_with_tax( + "4900", + "Gain on sale", + AccountType::Revenue, + None, + false, + Some(("form_4797_gain_loss", None)), + ) + .unwrap(); +} + +/// An asset bought on 2026-01-10 and placed in service on 2026-03-01. +fn camera(s: &mut Store) -> u64 { + let (bank, equipment) = (account(s, "1000"), account(s, "1500")); + let e = s.create_entry(d(2026, 1, 10), "Camera").unwrap(); + s.add_line(e, equipment, Side::Debit, usd("1200.00")) + .unwrap(); + s.add_line(e, bank, Side::Credit, usd("1200.00")).unwrap(); + s.post_entry(e).unwrap(); + let id = s + .register_asset(NewAsset { + description: "Camera".into(), + in_service_date: d(2026, 3, 1), + cost: usd("1200.00"), + salvage_value: usd("0"), + useful_life_months: 24, + cost_account: equipment, + accum_depr_account: account(s, "1510"), + expense_account: account(s, "6200"), + }) + .unwrap(); + s.set_asset_acquisition(id, e).unwrap(); + id +} + +#[test] +fn a_disposal_before_the_in_service_date_waits_for_the_upgrade() { + let dir = test_dir("dispose"); + let mut s = p2_books(&dir); + let id = camera(&mut s); + let (bank, revenue) = (account(&s, "1000"), account(&s, "4000")); + let before = journal(&dir); + assert_waits( + &dir, + &before, + s.dispose_asset(id, d(2026, 2, 1), usd("1000.00"), bank, revenue), + ); + s.upgrade_format().unwrap(); + s.dispose_asset(id, d(2026, 2, 1), usd("1000.00"), bank, revenue) + .unwrap(); +} + +#[test] +fn a_disposal_on_or_after_the_in_service_date_is_made_before_the_upgrade() { + let dir = test_dir("dispose-late"); + let mut s = p2_books(&dir); + let id = camera(&mut s); + let (bank, revenue) = (account(&s, "1000"), account(&s, "4000")); + s.dispose_asset(id, d(2026, 3, 1), usd("1000.00"), bank, revenue) + .unwrap(); +} + +/// A printer in service from 2026-01-01, 1,200.00 over 12 months. +fn printer(s: &mut Store) -> u64 { + s.register_asset(NewAsset { + description: "Printer".into(), + in_service_date: d(2026, 1, 1), + cost: usd("1200.00"), + salvage_value: usd("0"), + useful_life_months: 12, + cost_account: account(s, "1500"), + accum_depr_account: account(s, "1510"), + expense_account: account(s, "6200"), + }) + .unwrap() +} + +#[test] +fn a_depreciation_run_that_catches_up_another_month_waits_for_the_upgrade() { + let dir = test_dir("catch-up"); + let mut s = p2_books(&dir); + let id = printer(&mut s); + let jan = s.run_depreciation(id, "2026-01").unwrap(); + assert_eq!(jan.amount, jan.scheduled, "its own month: made"); + // February skipped: March's run would carry it. + let before = journal(&dir); + assert_waits(&dir, &before, s.run_depreciation(id, "2026-03")); + // INVARIANT 2: run in order, each its own month, as P2 ran them. + for m in ["2026-02", "2026-03"] { + let r = s.run_depreciation(id, m).unwrap(); + assert_eq!(r.amount, r.scheduled, "{m}"); + } + // After the upgrade a skipped month is caught up. + s.upgrade_format().unwrap(); + let may = s.run_depreciation(id, "2026-05").unwrap(); + assert!(may.amount > may.scheduled, "{may:?}"); +} + +#[test] +fn a_reversed_run_caught_up_later_waits_for_the_upgrade() { + let dir = test_dir("reversed"); + let mut s = p2_books(&dir); + let id = printer(&mut s); + let jan = s.run_depreciation(id, "2026-01").unwrap(); + s.run_depreciation(id, "2026-02").unwrap(); + s.reverse_entry(jan.entry_id.unwrap(), d(2026, 2, 28), "wrong") + .unwrap(); + let before = journal(&dir); + assert_waits(&dir, &before, s.run_depreciation(id, "2026-03")); +} + +/// INVARIANT 3: P2's detector found a full TIN only across ASCII +/// separators, the no-break space and a few dashes; P3's finds one across +/// every Unicode space and dash and invisible characters. A name P2 took +/// replays; the command refuses it now. +#[test] +fn a_name_p2_took_replays_though_the_command_now_refuses_it() { + let dir = test_dir("tin-replay"); + drop(p2_books(&dir)); + let names = [ + "Studio 400\u{ff0d}12\u{ff0d}3456", + "Studio 400\u{200b}12\u{200b}3456", + "Studio 400\u{2009}12\u{2009}3456", + ]; + { + let mut w = JournalWriter::open(&dir.join(JOURNAL_FILE)).unwrap(); + for (i, name) in names.iter().enumerate() { + w.append("vendor.added", json!({"id": i as u64 + 1, "name": name})) + .unwrap(); + } + w.append( + "party.added", + json!({"id": 4, "name": "Kai 400\u{301c}12\u{301c}3456", "roles": ["member"]}), + ) + .unwrap(); + } + let mut s = Store::open(&dir).expect("P2's books open"); + s.verify().unwrap(); + assert_eq!(s.ledger().list_vendors().len(), 3); + Snapshot::load(&dir).expect("and the viewer reads them"); + for name in names { + assert!(s.add_vendor(name).is_err(), "the command refuses {name:?}"); + } + // Outside replay the detector is P3's again. + assert!(ledger_core::parties::has_full_tin(names[0])); +} + +/// After the upgrade, each write above is made, and the books replay to +/// the live ledger exactly, in the writer (reopened) and the viewer. +#[test] +fn after_the_upgrade_the_writes_replay_to_the_live_books() { + let dir = test_dir("after"); + let mut s = p2_books(&dir); + let camera = camera(&mut s); + let printer = printer(&mut s); + s.run_depreciation(printer, "2026-01").unwrap(); + assert!(s.upgrade_format().unwrap().is_some()); + let (bank, revenue) = (account(&s, "1000"), account(&s, "4000")); + s.change_settings( + &[Change { + key: "books.schedule_convention".into(), + value: Some(json!("daily")), + }], + &source(), + ) + .unwrap(); + s.add_account_with_tax( + "4910", + "Exempt interest", + AccountType::Revenue, + None, + false, + Some(("tax_exempt_income", None)), + ) + .unwrap(); + s.run_depreciation(printer, "2026-03").unwrap(); + s.dispose_asset(camera, d(2026, 2, 1), usd("1000.00"), bank, revenue) + .unwrap(); + s.verify().unwrap(); + let live = s.ledger().clone(); + drop(s); + let s = Store::open(&dir).unwrap(); + assert!(live.differs_from(s.ledger()).is_empty()); + let snap = Snapshot::load(&dir).unwrap(); + assert!(live.differs_from(snap.ledger()).is_empty()); +} diff --git a/docs/spec/rules.md b/docs/spec/rules.md index 9e99d80..2e5b138 100644 --- a/docs/spec/rules.md +++ b/docs/spec/rules.md @@ -1549,6 +1549,15 @@ the way. P3's: `members_cumulative` (B-13: a members close counted from its count's first close, `"rounding": "cumulative_since"`), `account_renamed` (an `account.renamed`, B-31), `require_tax_category` (a `settings.set` naming `policy.require_tax_category`, B-32), +`tax_categories_gain_exempt` (an `account.tax_set` naming +`form_4797_gain_loss` or `tax_exempt_income`, categories an earlier version +refuses), `disposal_before_service` (an `asset.disposed` dated before the +asset's in-service date, on or after the day it was acquired: an earlier +version refuses a disposal before its purchase date), `depreciation_catch_up` +(an `asset.depreciation_posted` whose amount isn't its month's own: months +skipped or reversed caught up in it, B-15; an earlier version reads it as the +month's own, shows the months it caught up as not yet run, and running them +there posts them twice), `party_creditors` (`party.creditor_set`: defect 24, B-35), `payment_instruments` (`instrument.added`, `entry.instrument_set`: defect 12, B-19), `vendor_1099_decisions` (`vendor.1099_set` with who @@ -1556,7 +1565,8 @@ decided, a `not_reportable` decision, its reason or the date it takes effect, and `vendor.w9_flag_set`: defects 18 and 23, D-40, B-19), `schedule_convention` (a daily schedule's `schedule.registered` carries `convention: daily`; an older version would read it as equal months, -B-16), `month_reposting` (a schedule month or a depreciation period +B-16; and a `settings.set` naming `books.schedule_convention`, a key an +earlier version refuses), `month_reposting` (a schedule month or a depreciation period posted again after a reversal un-posted it; an older version would refuse the second `schedule.posted`, and its projection ignore the second `asset.depreciation_posted`, B-15) and `asset_basis` (an @@ -1585,7 +1595,13 @@ they are, byte for byte; everything that needs nothing new is written as ever; a write that would need the newer format or a feature they haven't declared is refused before anything is journaled (`StoreError::FormatUpgradePending`, guard `format_upgrade_pending`), never -declared on the way. Only the owner's go-ahead moves them, with the owner +declared on the way. Every setting key and tax category an earlier version +didn't read needs a feature (`format::setting_feature`, +`format::tax_category_feature`: the P3 data-safety review, 2026-10-21, +found `books.schedule_convention`, both new tax categories, a disposal +before the in-service date and a depreciation catch-up journaled without +one, each leaving books P2 refused or misread before consent; +`tests/p2_compat.rs`). Only the owner's go-ahead moves them, with the owner passphrase (the server checks it, Argon2id): in the app, which asks at every open until it is given, or with `wanderbooks books upgrade ID` at a terminal, whose commands that open the books also ask; never an agent, and @@ -1708,7 +1724,13 @@ command's (`Ledger::add_line`, `register_asset`, `AssetBasis::check`, `replay_register_asset`, `AssetBasis::check_journaled`, `AssetBasis::check_legacy_journaled`, `shares::check_shares_journaled`, ...), and every bound has its pair of tests: the command refuses past it; replay of an old line past it is -accepted. What an earlier version left beside its journal is kept for it +accepted. The full-TIN rule (B-26) is one of these bounds: P3's detector +finds a TIN across every Unicode space and dash and invisible characters, +P2's only across ASCII separators, the no-break space and a few dashes, so +replay finds one as P2 did (`ledger_core::parties::replaying`, around every +replayed line), and a name, reason or fact P2 took opens +(`a_name_p2_took_replays_though_the_command_now_refuses_it`; the P3 +data-safety review, 2026-10-21, found P3 refusing to open such books). What an earlier version left beside its journal is kept for it the same way: its projection database, in its own schema's file, is never migrated or written by a later version (B-27, "each projection schema in a file of its own"), so the earlier version, gone back to, opens its books diff --git a/fuzz/fuzz_targets/fuzz_store_replay.rs b/fuzz/fuzz_targets/fuzz_store_replay.rs index 5293a7a..46984ae 100644 --- a/fuzz/fuzz_targets/fuzz_store_replay.rs +++ b/fuzz/fuzz_targets/fuzz_store_replay.rs @@ -33,7 +33,13 @@ const TYPES: &[&str] = &[ "schedule.posted", "schedule.registered", "vendor.1099_set", "vendor.added", "journal.format_set", "settings.set", "convention.set", "convention.retired", "decision.recorded", "open_item.raised", "open_item.resolved", "entry.approved", - "vendor.w9_flag_set", "instrument.added", "entry.instrument_set", + "vendor.w9_flag_set", "instrument.added", "entry.instrument_set", "asset.basis_set", + "party.creditor_set", "account.renumbered", "asset.acquisition_linked", "asset.corrected", + "asset.described", "asset.serial_set", "asset.tagged", "asset.tax_basis_set", + "attachment.linked", "attachment.unlinked", "entry.no_party", "entry.parties_set", + "entry.party_set", "party.added", "party.role_set", "party.tin_set", "party.updated", + "party.w4_set", "party.w9_set", "payroll.taxes_remitted", "reconciliation.completed", + "reconciliation.voided", "role.assigned", "statement.recorded", "statement.voided", ]; const FIELDS: &[&str] = &[ @@ -51,6 +57,8 @@ const FIELDS: &[&str] = &[ "source", "decided_by", "decided_on", "kind", "title", "body_md", "structured", "subject", "decision_md", "supersedes", "resolution", "approver", "previous", "form_1099", "reason_kind", "effective", "instrument_id", "label", "last4", "owner_party_id", + "rule", "contributor_adjusted_basis", "fmv_at_contribution", "sec704c_method", + "tax_basis_723", "depreciable_basis", "built_in_gain_704c", "on", "convention", ]; /// A value replay might plausibly see: small ids, amounts as decimal