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 0000000..fe24f4c Binary files /dev/null and b/crates/ledger-cli/tests/fixtures/p2-served/vault/tin-3.bin differ 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 0000000..c61177f Binary files /dev/null and b/crates/ledger-cli/tests/fixtures/p2-served/wanderbooks.db differ diff --git a/crates/ledger-cli/tests/format_upgrade.rs b/crates/ledger-cli/tests/format_upgrade.rs index 993a74b..5065765 100644 --- a/crates/ledger-cli/tests/format_upgrade.rs +++ b/crates/ledger-cli/tests/format_upgrade.rs @@ -610,3 +610,167 @@ fn format_upgrade_waits_for_consent() { ); assert_eq!(format_lines(&dir), 1); } + +/// Copy the tree `from` into `to`, private as the server keeps a book +/// (folders 0700, files 0600). +fn copy_private(from: &Path, to: &Path) { + use std::os::unix::fs::PermissionsExt; + std::fs::create_dir_all(to).unwrap(); + std::fs::set_permissions(to, std::fs::Permissions::from_mode(0o700)).unwrap(); + for entry in std::fs::read_dir(from).unwrap().flatten() { + let (src, dst) = (entry.path(), to.join(entry.file_name())); + if entry.file_type().unwrap().is_dir() { + copy_private(&src, &dst); + } else { + std::fs::copy(&src, &dst).unwrap(); + std::fs::set_permissions(&dst, std::fs::Permissions::from_mode(0o600)).unwrap(); + } + } +} + +/// The cutover of books P2 served, from end to end (the P3 data-safety +/// review, 2026-10-21). `tests/fixtures/p2-served` is a book the P2 +/// executable itself wrote (9c99a0cf, the revision before P3; fictional +/// throughout): 470 journal lines through its MCP tools (settings, which +/// declared format 2 with no features, a chart, members, vendors, two TINs +/// in its vault with its key, 64 entries with receipts, an asset and ten +/// months of its depreciation, a schedule, a closed quarter), and P2's +/// projection `wanderbooks.db` at schema 12 as P2 left it. +/// +/// ```text +/// INVARIANTS: +/// 1. Before consent: the books open and are served, waiting; P2's +/// database is never written; what P2 can read is written, and every +/// write P2 would refuse or misread is refused, journaling nothing +/// (a setting key, a tax category, a depreciation catch-up, a members +/// close counted from the count's start). +/// 2. The consent backup holds the books exactly as they were, keys and +/// vault too; the upgrade is one line after P2's, byte for byte. +/// 3. After it: the same figures, and every refused write is made; the +/// books verify; P2's database is still byte for byte. +/// ``` +#[test] +fn books_p2_served_cut_over_whole() { + let home = Home::new("p2-served"); + let dir = home.book_dir("acme"); + let fixture = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/p2-served"); + copy_private(&fixture, &dir); + let p2_db = std::fs::read(dir.join(ledger_store::LEGACY_DB_FILE)).unwrap(); + let p2_journal = journal(&dir); + let _held = serve(&home); + let out = home + .cmd("token") + .args(["create", "--book", "acme"]) + .stdin(Stdio::null()) + .output() + .unwrap(); + assert!(out.status.success(), "{out:?}"); + let mut a = Agent::start(&home, "acme"); + let start = a.call("books.start", json!({})).unwrap(); + assert_eq!(start["format_upgrade"]["format"], 2, "{start}"); + let verified = a.call("books.verify", json!({})).unwrap(); + assert_eq!(verified["status"], "ok", "{verified}"); + assert_eq!(verified["events"], 470); + assert_eq!(verified["database"], ledger_store::db_file()); + assert_eq!(verified["other_databases"], json!(["wanderbooks.db"])); + let figures = |a: &mut Agent| { + [ + a.call("books.trial_balance", json!({"as_of": "2025-12-31"})), + a.call( + "books.profit_and_loss", + json!({"start": "2025-01-01", "end": "2025-12-31"}), + ), + a.call("books.balance_sheet", json!({"as_of": "2025-12-31"})), + ] + .map(Result::unwrap) + }; + let before = figures(&mut a); + + // INVARIANT 1: what P2 reads is written; the rest waits. + a.call( + "books.add_account", + json!({"code": "6600", "name": "Travel", "account_type": "expense"}), + ) + .unwrap(); + let q2 = a + .call( + "books.create_period", + json!({"name": "2025-Q2", "start": "2025-04-01", "end": "2025-06-30"}), + ) + .unwrap()["period_id"] + .clone(); + let waiting = journal(&dir); + let refused: Vec<(&str, Value)> = 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