diff --git a/.changeset/@accounter_client-4571-dependencies.md b/.changeset/@accounter_client-4571-dependencies.md deleted file mode 100644 index cf4e486a9c..0000000000 --- a/.changeset/@accounter_client-4571-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.28.2` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.28.2) (from `2.28.0`, in `dependencies`) - - Updated dependency [`@tanstack/react-table@9.2.5` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.2.5) (from `9.2.4`, in `dependencies`) - - Updated dependency [`dotenv@18.0.5` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.5) (from `18.0.4`, in `dependencies`) - - Updated dependency [`react-day-picker@10.0.2` ↗︎](https://www.npmjs.com/package/react-day-picker/v/10.0.2) (from `10.0.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-4587-dependencies.md b/.changeset/@accounter_client-4587-dependencies.md deleted file mode 100644 index 10e8d398a4..0000000000 --- a/.changeset/@accounter_client-4587-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.49.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.49.0) (from `1.48.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4588-dependencies.md b/.changeset/@accounter_client-4588-dependencies.md deleted file mode 100644 index 5721489008..0000000000 --- a/.changeset/@accounter_client-4588-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`html2canvas-pro@2.5.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.5.1) (from `2.4.5`, in `dependencies`) diff --git a/.changeset/@accounter_client-4593-dependencies.md b/.changeset/@accounter_client-4593-dependencies.md deleted file mode 100644 index 09e3d99d67..0000000000 --- a/.changeset/@accounter_client-4593-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.28.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.28.0) (from `2.27.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4597-dependencies.md b/.changeset/@accounter_client-4597-dependencies.md deleted file mode 100644 index 8c2de8e63a..0000000000 --- a/.changeset/@accounter_client-4597-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`pdfjs-dist@6.4.299` ↗︎](https://www.npmjs.com/package/pdfjs-dist/v/6.4.299) (from `6.3.289`, in `dependencies`) diff --git a/.changeset/@accounter_client-4598-dependencies.md b/.changeset/@accounter_client-4598-dependencies.md deleted file mode 100644 index ce69a1ce6d..0000000000 --- a/.changeset/@accounter_client-4598-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`simple-icons@16.34.0` ↗︎](https://www.npmjs.com/package/simple-icons/v/16.34.0) (from `16.33.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4599-dependencies.md b/.changeset/@accounter_client-4599-dependencies.md deleted file mode 100644 index 50948052e2..0000000000 --- a/.changeset/@accounter_client-4599-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.51.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.51.0) (from `1.49.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4601-dependencies.md b/.changeset/@accounter_client-4601-dependencies.md deleted file mode 100644 index 919592d624..0000000000 --- a/.changeset/@accounter_client-4601-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@tanstack/react-table@9.2.6` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.2.6) (from `9.2.5`, in `dependencies`) diff --git a/.changeset/@accounter_client-4608-dependencies.md b/.changeset/@accounter_client-4608-dependencies.md deleted file mode 100644 index fce9dd8f8e..0000000000 --- a/.changeset/@accounter_client-4608-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.52.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.52.0) (from `1.51.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4624-dependencies.md b/.changeset/@accounter_client-4624-dependencies.md deleted file mode 100644 index d412b5b53d..0000000000 --- a/.changeset/@accounter_client-4624-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`radix-ui@1.7.0` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.7.0) (from `1.6.7`, in `dependencies`) diff --git a/.changeset/@accounter_client-4634-dependencies.md b/.changeset/@accounter_client-4634-dependencies.md deleted file mode 100644 index c1d959abd5..0000000000 --- a/.changeset/@accounter_client-4634-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@tanstack/react-table@9.2.8` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.2.8) (from `9.2.6`, in `dependencies`) - - Updated dependency [`dotenv@18.0.7` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.7) (from `18.0.5`, in `dependencies`) - - Updated dependency [`html2canvas-pro@2.5.2` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.5.2) (from `2.5.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-4645-dependencies.md b/.changeset/@accounter_client-4645-dependencies.md deleted file mode 100644 index 75918d97db..0000000000 --- a/.changeset/@accounter_client-4645-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@mui/material@9.5.0` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.5.0) (from `9.4.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4650-dependencies.md b/.changeset/@accounter_client-4650-dependencies.md deleted file mode 100644 index cc72f3e8bf..0000000000 --- a/.changeset/@accounter_client-4650-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.55.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.55.0) (from `1.52.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4654-dependencies.md b/.changeset/@accounter_client-4654-dependencies.md deleted file mode 100644 index 043059dd16..0000000000 --- a/.changeset/@accounter_client-4654-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`simple-icons@16.35.0` ↗︎](https://www.npmjs.com/package/simple-icons/v/16.35.0) (from `16.34.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4656-dependencies.md b/.changeset/@accounter_client-4656-dependencies.md deleted file mode 100644 index 21b96599f2..0000000000 --- a/.changeset/@accounter_client-4656-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`react-hook-form@7.90.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.90.0) (from `7.89.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4663-dependencies.md b/.changeset/@accounter_client-4663-dependencies.md deleted file mode 100644 index 3780b4f89f..0000000000 --- a/.changeset/@accounter_client-4663-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/@accounter_client-4668-dependencies.md b/.changeset/@accounter_client-4668-dependencies.md deleted file mode 100644 index 79be3ba5da..0000000000 --- a/.changeset/@accounter_client-4668-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`radix-ui@1.8.1` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.8.1) (from `1.7.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4683-dependencies.md b/.changeset/@accounter_client-4683-dependencies.md deleted file mode 100644 index 183a8d6a4d..0000000000 --- a/.changeset/@accounter_client-4683-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@tanstack/react-table@9.3.1` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.3.1) (from `9.2.8`, in `dependencies`) diff --git a/.changeset/@accounter_client-4684-dependencies.md b/.changeset/@accounter_client-4684-dependencies.md deleted file mode 100644 index b310f03f39..0000000000 --- a/.changeset/@accounter_client-4684-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.58.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.58.0) (from `1.55.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4694-dependencies.md b/.changeset/@accounter_client-4694-dependencies.md deleted file mode 100644 index f1441952ef..0000000000 --- a/.changeset/@accounter_client-4694-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.57.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.57.0) (from `1.55.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4725-dependencies.md b/.changeset/@accounter_client-4725-dependencies.md deleted file mode 100644 index dd9ebb4cec..0000000000 --- a/.changeset/@accounter_client-4725-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@hookform/resolvers@5.9.2` ↗︎](https://www.npmjs.com/package/@hookform/resolvers/v/5.9.2) (from `5.9.1`, in `dependencies`) - - Updated dependency [`dotenv@18.0.8` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.8) (from `18.0.7`, in `dependencies`) - - Updated dependency [`react@19.3.1` ↗︎](https://www.npmjs.com/package/react/v/19.3.1) (from `19.3.0`, in `dependencies`) - - Updated dependency [`react-dom@19.3.1` ↗︎](https://www.npmjs.com/package/react-dom/v/19.3.1) (from `19.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4735-dependencies.md b/.changeset/@accounter_client-4735-dependencies.md deleted file mode 100644 index 4084033082..0000000000 --- a/.changeset/@accounter_client-4735-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.58.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.58.0) (from `1.57.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4739-dependencies.md b/.changeset/@accounter_client-4739-dependencies.md deleted file mode 100644 index d046206a48..0000000000 --- a/.changeset/@accounter_client-4739-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4741-dependencies.md b/.changeset/@accounter_client-4741-dependencies.md deleted file mode 100644 index 76bcbdb2c2..0000000000 --- a/.changeset/@accounter_client-4741-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@hookform/resolvers@6.0.0` ↗︎](https://www.npmjs.com/package/@hookform/resolvers/v/6.0.0) (from `5.9.2`, in `dependencies`) diff --git a/.changeset/@accounter_client-4780-dependencies.md b/.changeset/@accounter_client-4780-dependencies.md deleted file mode 100644 index 0a0089589c..0000000000 --- a/.changeset/@accounter_client-4780-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@hookform/resolvers@6.0.0` ↗︎](https://www.npmjs.com/package/@hookform/resolvers/v/6.0.0) (from `5.9.2`, in `dependencies`) - - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-4782-dependencies.md b/.changeset/@accounter_client-4782-dependencies.md deleted file mode 100644 index 559b4addb3..0000000000 --- a/.changeset/@accounter_client-4782-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`zustand@5.0.16` ↗︎](https://www.npmjs.com/package/zustand/v/5.0.16) (from `5.0.15`, in `dependencies`) diff --git a/.changeset/@accounter_client-4799-dependencies.md b/.changeset/@accounter_client-4799-dependencies.md deleted file mode 100644 index 4f64334301..0000000000 --- a/.changeset/@accounter_client-4799-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`chart.js@4.6.1` ↗︎](https://www.npmjs.com/package/chart.js/v/4.6.1) (from `4.5.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-4805-dependencies.md b/.changeset/@accounter_client-4805-dependencies.md deleted file mode 100644 index d7d11ac5b3..0000000000 --- a/.changeset/@accounter_client-4805-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`react-hook-form@7.91.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.91.0) (from `7.90.0`, in `dependencies`) diff --git a/.changeset/@accounter_green-invoice-graphql-4634-dependencies.md b/.changeset/@accounter_green-invoice-graphql-4634-dependencies.md deleted file mode 100644 index 7f792741fd..0000000000 --- a/.changeset/@accounter_green-invoice-graphql-4634-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/green-invoice-graphql": patch ---- -dependencies updates: - - Updated dependency [`@graphql-mesh/fusion-runtime@1.12.3` ↗︎](https://www.npmjs.com/package/@graphql-mesh/fusion-runtime/v/1.12.3) (from `1.12.1`, in `dependencies`) diff --git a/.changeset/@accounter_green-invoice-graphql-4663-dependencies.md b/.changeset/@accounter_green-invoice-graphql-4663-dependencies.md deleted file mode 100644 index c98482f7bb..0000000000 --- a/.changeset/@accounter_green-invoice-graphql-4663-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/green-invoice-graphql": patch ---- -dependencies updates: - - Updated dependency [`@graphql-mesh/transport-rest@0.12.3` ↗︎](https://www.npmjs.com/package/@graphql-mesh/transport-rest/v/0.12.3) (from `0.12.2`, in `dependencies`) diff --git a/.changeset/@accounter_green-invoice-graphql-4725-dependencies.md b/.changeset/@accounter_green-invoice-graphql-4725-dependencies.md deleted file mode 100644 index 93e4defd1f..0000000000 --- a/.changeset/@accounter_green-invoice-graphql-4725-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/green-invoice-graphql": patch ---- -dependencies updates: - - Updated dependency [`@graphql-mesh/transport-rest@0.12.4` ↗︎](https://www.npmjs.com/package/@graphql-mesh/transport-rest/v/0.12.4) (from `0.12.3`, in `dependencies`) diff --git a/.changeset/@accounter_green-invoice-graphql-4801-dependencies.md b/.changeset/@accounter_green-invoice-graphql-4801-dependencies.md deleted file mode 100644 index cd22c5d5b4..0000000000 --- a/.changeset/@accounter_green-invoice-graphql-4801-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/green-invoice-graphql": patch ---- -dependencies updates: - - Updated dependency [`@graphql-mesh/fusion-runtime@1.13.0` ↗︎](https://www.npmjs.com/package/@graphql-mesh/fusion-runtime/v/1.13.0) (from `1.12.3`, in `dependencies`) diff --git a/.changeset/@accounter_green-invoice-graphql-529-dependencies.md b/.changeset/@accounter_green-invoice-graphql-529-dependencies.md deleted file mode 100644 index 5da7bf8293..0000000000 --- a/.changeset/@accounter_green-invoice-graphql-529-dependencies.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@accounter/green-invoice-graphql": patch ---- -dependencies updates: - - Added dependency [`@graphql-mesh/fusion-runtime@1.12.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/fusion-runtime/v/1.12.1) (to `dependencies`) - - Added dependency [`@graphql-mesh/transport-rest@0.12.2` ↗︎](https://www.npmjs.com/package/@graphql-mesh/transport-rest/v/0.12.2) (to `dependencies`) - - Removed dependency [`@graphql-mesh/config@0.111.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/config/v/0.111.1) (from `dependencies`) - - Removed dependency [`@graphql-mesh/cross-helpers@0.4.16` ↗︎](https://www.npmjs.com/package/@graphql-mesh/cross-helpers/v/0.4.16) (from `dependencies`) - - Removed dependency [`@graphql-mesh/http@0.109.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/http/v/0.109.1) (from `dependencies`) - - Removed dependency [`@graphql-mesh/json-schema@0.112.4` ↗︎](https://www.npmjs.com/package/@graphql-mesh/json-schema/v/0.112.4) (from `dependencies`) - - Removed dependency [`@graphql-mesh/runtime@0.109.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/runtime/v/0.109.1) (from `dependencies`) - - Removed dependency [`@graphql-mesh/store@0.107.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/store/v/0.107.1) (from `dependencies`) - - Removed dependency [`@graphql-mesh/types@0.107.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.107.1) (from `dependencies`) - - Removed dependency [`@graphql-mesh/utils@0.107.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.107.1) (from `dependencies`) - - Removed dependency [`path@0.12.7` ↗︎](https://www.npmjs.com/package/path/v/0.12.7) (from `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-4643-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-4643-dependencies.md deleted file mode 100644 index 75276cf1ba..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-4643-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.13.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.13.0) (from `25.12.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-4684-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-4684-dependencies.md deleted file mode 100644 index 23b0444e0b..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-4684-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-4723-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-4723-dependencies.md deleted file mode 100644 index 23b0444e0b..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-4723-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-4763-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-4763-dependencies.md deleted file mode 100644 index 9c66b2ead5..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-4763-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-4780-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-4780-dependencies.md deleted file mode 100644 index 9c66b2ead5..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-4780-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-4792-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-4792-dependencies.md deleted file mode 100644 index 0587c8349c..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-4792-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.16.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.16.0) (from `25.15.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4634-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4634-dependencies.md deleted file mode 100644 index 1b7c0cb72b..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4634-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`uuid@14.0.3` ↗︎](https://www.npmjs.com/package/uuid/v/14.0.3) (from `14.0.2`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4639-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4639-dependencies.md deleted file mode 100644 index ac704d091e..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4639-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`playwright@1.64.0` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.0) (from `1.63.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4643-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4643-dependencies.md deleted file mode 100644 index 5d119c02fc..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4643-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.13.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.13.0) (from `25.12.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4663-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4663-dependencies.md deleted file mode 100644 index 9f772a7853..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4663-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4684-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4684-dependencies.md deleted file mode 100644 index 664e6a821e..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4684-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4723-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4723-dependencies.md deleted file mode 100644 index 664e6a821e..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4723-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4725-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4725-dependencies.md deleted file mode 100644 index 0bf6f05468..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4725-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`playwright@1.64.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.1) (from `1.64.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4763-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4763-dependencies.md deleted file mode 100644 index b36737c184..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4763-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4780-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4780-dependencies.md deleted file mode 100644 index b36737c184..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4780-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-4792-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-4792-dependencies.md deleted file mode 100644 index 730c2b72b9..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-4792-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.16.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.16.0) (from `25.15.0`, in `dependencies`) diff --git a/.changeset/@accounter_pcn874-generator-4663-dependencies.md b/.changeset/@accounter_pcn874-generator-4663-dependencies.md deleted file mode 100644 index 3960f228c5..0000000000 --- a/.changeset/@accounter_pcn874-generator-4663-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/pcn874-generator": patch ---- -dependencies updates: - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4571-dependencies.md b/.changeset/@accounter_scraper-app-4571-dependencies.md deleted file mode 100644 index 5b3df5ee0f..0000000000 --- a/.changeset/@accounter_scraper-app-4571-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/websocket@11.3.3` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.3) (from `11.3.1`, in `dependencies`) - - Updated dependency [`fast-xml-parser@5.11.2` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.11.2) (from `5.11.1`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4634-dependencies.md b/.changeset/@accounter_scraper-app-4634-dependencies.md deleted file mode 100644 index e7d2d4d9db..0000000000 --- a/.changeset/@accounter_scraper-app-4634-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@10.1.6` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.6) (from `10.1.5`, in `dependencies`) - - Updated dependency [`@fastify/websocket@11.3.4` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.4) (from `11.3.3`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4663-dependencies.md b/.changeset/@accounter_scraper-app-4663-dependencies.md deleted file mode 100644 index dd0401aea4..0000000000 --- a/.changeset/@accounter_scraper-app-4663-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fastify@5.12.7` ↗︎](https://www.npmjs.com/package/fastify/v/5.12.7) (from `5.12.5`, in `dependencies`) - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4684-dependencies.md b/.changeset/@accounter_scraper-app-4684-dependencies.md deleted file mode 100644 index 968192fb4d..0000000000 --- a/.changeset/@accounter_scraper-app-4684-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Added dependency [`lucide-react@1.58.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.58.0) (to `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4725-dependencies.md b/.changeset/@accounter_scraper-app-4725-dependencies.md deleted file mode 100644 index 24c33b13c8..0000000000 --- a/.changeset/@accounter_scraper-app-4725-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`react@19.3.1` ↗︎](https://www.npmjs.com/package/react/v/19.3.1) (from `19.3.0`, in `dependencies`) - - Updated dependency [`react-dom@19.3.1` ↗︎](https://www.npmjs.com/package/react-dom/v/19.3.1) (from `19.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4729-dependencies.md b/.changeset/@accounter_scraper-app-4729-dependencies.md deleted file mode 100644 index 62a3361d74..0000000000 --- a/.changeset/@accounter_scraper-app-4729-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Added dependency [`lucide-react@1.57.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.57.0) (to `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4739-dependencies.md b/.changeset/@accounter_scraper-app-4739-dependencies.md deleted file mode 100644 index 05965582af..0000000000 --- a/.changeset/@accounter_scraper-app-4739-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4780-dependencies.md b/.changeset/@accounter_scraper-app-4780-dependencies.md deleted file mode 100644 index 05965582af..0000000000 --- a/.changeset/@accounter_scraper-app-4780-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-4782-dependencies.md b/.changeset/@accounter_scraper-app-4782-dependencies.md deleted file mode 100644 index dd1ccec71a..0000000000 --- a/.changeset/@accounter_scraper-app-4782-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@10.1.7` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.7) (from `10.1.6`, in `dependencies`) diff --git a/.changeset/@accounter_server-4571-dependencies.md b/.changeset/@accounter_server-4571-dependencies.md deleted file mode 100644 index d046b9b738..0000000000 --- a/.changeset/@accounter_server-4571-dependencies.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.71` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.71) (from `4.0.65`, in `dependencies`) - - Updated dependency [`@graphql-hive/yoga@0.49.7` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.49.7) (from `0.49.6`, in `dependencies`) - - Updated dependency [`@graphql-tools/utils@12.0.3` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/12.0.3) (from `12.0.1`, in `dependencies`) - - Updated dependency [`@whatwg-node/fetch@0.12.1` ↗︎](https://www.npmjs.com/package/@whatwg-node/fetch/v/0.12.1) (from `0.12.0`, in `dependencies`) - - Updated dependency [`ai@7.0.127` ↗︎](https://www.npmjs.com/package/ai/v/7.0.127) (from `7.0.118`, in `dependencies`) - - Updated dependency [`dotenv@18.0.5` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.5) (from `18.0.4`, in `dependencies`) - - Updated dependency [`pg@8.23.1` ↗︎](https://www.npmjs.com/package/pg/v/8.23.1) (from `8.23.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4589-dependencies.md b/.changeset/@accounter_server-4589-dependencies.md deleted file mode 100644 index 9de5f8977a..0000000000 --- a/.changeset/@accounter_server-4589-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@7.3.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.3.0) (from `7.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4595-dependencies.md b/.changeset/@accounter_server-4595-dependencies.md deleted file mode 100644 index 7aeba241d6..0000000000 --- a/.changeset/@accounter_server-4595-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`googleapis@183.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/183.0.0) (from `182.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4620-dependencies.md b/.changeset/@accounter_server-4620-dependencies.md deleted file mode 100644 index b99b5a02dc..0000000000 --- a/.changeset/@accounter_server-4620-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@envelop/generic-auth@11.2.3` ↗︎](https://www.npmjs.com/package/@envelop/generic-auth/v/11.2.3) (from `11.2.1`, in `dependencies`) - - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.4` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.4) (from `3.24.1`, in `dependencies`) - - Updated dependency [`graphql-yoga@5.24.4` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.4) (from `5.24.1`, in `dependencies`) diff --git a/.changeset/@accounter_server-4630-dependencies.md b/.changeset/@accounter_server-4630-dependencies.md deleted file mode 100644 index f621f6396e..0000000000 --- a/.changeset/@accounter_server-4630-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.223.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.223.0) (from `0.222.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/resources@2.12.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.12.0) (from `2.11.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/sdk-node@0.223.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.223.0) (from `0.222.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4631-dependencies.md b/.changeset/@accounter_server-4631-dependencies.md deleted file mode 100644 index ada943bc80..0000000000 --- a/.changeset/@accounter_server-4631-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.81.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.81.0) (from `0.80.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4634-dependencies.md b/.changeset/@accounter_server-4634-dependencies.md deleted file mode 100644 index 32771d45eb..0000000000 --- a/.changeset/@accounter_server-4634-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.78` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.78) (from `4.0.71`, in `dependencies`) - - Updated dependency [`ai@7.0.137` ↗︎](https://www.npmjs.com/package/ai/v/7.0.137) (from `7.0.127`, in `dependencies`) - - Updated dependency [`dotenv@18.0.7` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.7) (from `18.0.5`, in `dependencies`) - - Updated dependency [`uuid@14.0.3` ↗︎](https://www.npmjs.com/package/uuid/v/14.0.3) (from `14.0.2`, in `dependencies`) diff --git a/.changeset/@accounter_server-4637-dependencies.md b/.changeset/@accounter_server-4637-dependencies.md deleted file mode 100644 index 45e323d142..0000000000 --- a/.changeset/@accounter_server-4637-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`googleapis@184.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/184.0.0) (from `183.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4638-dependencies.md b/.changeset/@accounter_server-4638-dependencies.md deleted file mode 100644 index 5798d3a765..0000000000 --- a/.changeset/@accounter_server-4638-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@google-cloud/pubsub@6.2.0` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/6.2.0) (from `6.1.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4639-dependencies.md b/.changeset/@accounter_server-4639-dependencies.md deleted file mode 100644 index 04ae925e43..0000000000 --- a/.changeset/@accounter_server-4639-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`playwright@1.64.0` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.0) (from `1.63.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4644-dependencies.md b/.changeset/@accounter_server-4644-dependencies.md deleted file mode 100644 index f09b130983..0000000000 --- a/.changeset/@accounter_server-4644-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`googleapis@185.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/185.0.0) (from `184.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4646-dependencies.md b/.changeset/@accounter_server-4646-dependencies.md deleted file mode 100644 index 9c2735b4ab..0000000000 --- a/.changeset/@accounter_server-4646-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@7.4.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.4.0) (from `7.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4663-dependencies.md b/.changeset/@accounter_server-4663-dependencies.md deleted file mode 100644 index 6e6b7dfb44..0000000000 --- a/.changeset/@accounter_server-4663-dependencies.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.79` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.79) (from `4.0.78`, in `dependencies`) - - Updated dependency [`@graphql-hive/yoga@0.49.8` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.49.8) (from `0.49.7`, in `dependencies`) - - Updated dependency [`@graphql-tools/utils@12.0.4` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/12.0.4) (from `12.0.3`, in `dependencies`) - - Updated dependency [`ai@7.0.138` ↗︎](https://www.npmjs.com/package/ai/v/7.0.138) (from `7.0.137`, in `dependencies`) - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/@accounter_server-4682-dependencies.md b/.changeset/@accounter_server-4682-dependencies.md deleted file mode 100644 index 7160e21bed..0000000000 --- a/.changeset/@accounter_server-4682-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@google-cloud/pubsub@6.3.0` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/6.3.0) (from `6.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4684-dependencies.md b/.changeset/@accounter_server-4684-dependencies.md deleted file mode 100644 index cbba626728..0000000000 --- a/.changeset/@accounter_server-4684-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.6` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.6) (from `3.24.4`, in `dependencies`) - - Updated dependency [`auth0@7.5.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.5.0) (from `7.4.0`, in `dependencies`) - - Updated dependency [`googleapis@186.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/186.0.0) (from `185.0.0`, in `dependencies`) - - Updated dependency [`graphql-yoga@5.24.6` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.6) (from `5.24.4`, in `dependencies`) diff --git a/.changeset/@accounter_server-4706-dependencies.md b/.changeset/@accounter_server-4706-dependencies.md deleted file mode 100644 index 3ca7483fd0..0000000000 --- a/.changeset/@accounter_server-4706-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.5` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.5) (from `3.24.4`, in `dependencies`) - - Updated dependency [`graphql-yoga@5.24.5` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.5) (from `5.24.4`, in `dependencies`) diff --git a/.changeset/@accounter_server-4719-dependencies.md b/.changeset/@accounter_server-4719-dependencies.md deleted file mode 100644 index 405e8e2376..0000000000 --- a/.changeset/@accounter_server-4719-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@7.5.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.5.0) (from `7.4.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4724-dependencies.md b/.changeset/@accounter_server-4724-dependencies.md deleted file mode 100644 index 4a8b964170..0000000000 --- a/.changeset/@accounter_server-4724-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`googleapis@186.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/186.0.0) (from `185.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4725-dependencies.md b/.changeset/@accounter_server-4725-dependencies.md deleted file mode 100644 index 6327fc1faa..0000000000 --- a/.changeset/@accounter_server-4725-dependencies.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.82` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.82) (from `4.0.79`, in `dependencies`) - - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.81.2` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.81.2) (from `0.81.0`, in `dependencies`) - - Updated dependency [`ai@7.0.143` ↗︎](https://www.npmjs.com/package/ai/v/7.0.143) (from `7.0.138`, in `dependencies`) - - Updated dependency [`dotenv@18.0.8` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.8) (from `18.0.7`, in `dependencies`) - - Updated dependency [`graphql-scalars@2.0.1` ↗︎](https://www.npmjs.com/package/graphql-scalars/v/2.0.1) (from `2.0.0`, in `dependencies`) - - Updated dependency [`playwright@1.64.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.1) (from `1.64.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4733-dependencies.md b/.changeset/@accounter_server-4733-dependencies.md deleted file mode 100644 index 6596bf331f..0000000000 --- a/.changeset/@accounter_server-4733-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@graphql-tools/utils@12.1.0` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/12.1.0) (from `12.0.4`, in `dependencies`) diff --git a/.changeset/@accounter_server-4734-dependencies.md b/.changeset/@accounter_server-4734-dependencies.md deleted file mode 100644 index 1b1d5d583e..0000000000 --- a/.changeset/@accounter_server-4734-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.6` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.6) (from `3.24.5`, in `dependencies`) - - Updated dependency [`graphql-yoga@5.24.6` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.6) (from `5.24.5`, in `dependencies`) diff --git a/.changeset/@accounter_server-4750-dependencies.md b/.changeset/@accounter_server-4750-dependencies.md deleted file mode 100644 index 34b4c6f7e5..0000000000 --- a/.changeset/@accounter_server-4750-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@7.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.6.0) (from `7.5.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4751-dependencies.md b/.changeset/@accounter_server-4751-dependencies.md deleted file mode 100644 index 5f3a956ccc..0000000000 --- a/.changeset/@accounter_server-4751-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.84) (from `4.0.82`, in `dependencies`) - - Updated dependency [`ai@7.0.146` ↗︎](https://www.npmjs.com/package/ai/v/7.0.146) (from `7.0.143`, in `dependencies`) - - Updated dependency [`jose@6.2.13` ↗︎](https://www.npmjs.com/package/jose/v/6.2.13) (from `6.2.12`, in `dependencies`) diff --git a/.changeset/@accounter_server-4755-dependencies.md b/.changeset/@accounter_server-4755-dependencies.md deleted file mode 100644 index 9ecf5b8d8d..0000000000 --- a/.changeset/@accounter_server-4755-dependencies.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.84) (from `4.0.82`, in `dependencies`) - - Updated dependency [`@graphql-tools/utils@13.0.2` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.0.2) (from `12.1.0`, in `dependencies`) - - Updated dependency [`ai@7.0.146` ↗︎](https://www.npmjs.com/package/ai/v/7.0.146) (from `7.0.143`, in `dependencies`) - - Updated dependency [`auth0@7.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.6.0) (from `7.5.0`, in `dependencies`) - - Updated dependency [`jose@6.2.13` ↗︎](https://www.npmjs.com/package/jose/v/6.2.13) (from `6.2.12`, in `dependencies`) diff --git a/.changeset/@accounter_server-4780-dependencies.md b/.changeset/@accounter_server-4780-dependencies.md deleted file mode 100644 index c27e459cf5..0000000000 --- a/.changeset/@accounter_server-4780-dependencies.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.84) (from `4.0.82`, in `dependencies`) - - Updated dependency [`@graphql-tools/utils@13.1.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.1.1) (from `12.1.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/api@1.10.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api/v/1.10.0) (from `1.9.1`, in `dependencies`) - - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.82.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.82.0) (from `0.81.2`, in `dependencies`) - - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.300.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.300.0) (from `0.223.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/resources@3.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/3.0.0) (from `2.12.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/sdk-node@0.300.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.300.0) (from `0.223.0`, in `dependencies`) - - Updated dependency [`ai@7.0.146` ↗︎](https://www.npmjs.com/package/ai/v/7.0.146) (from `7.0.143`, in `dependencies`) - - Updated dependency [`auth0@7.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.6.0) (from `7.5.0`, in `dependencies`) - - Updated dependency [`googleapis@187.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/187.0.0) (from `186.0.0`, in `dependencies`) - - Updated dependency [`jose@6.2.13` ↗︎](https://www.npmjs.com/package/jose/v/6.2.13) (from `6.2.12`, in `dependencies`) - - Added dependency [`@opentelemetry/sdk-trace@3.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace/v/3.0.0) (to `dependencies`) diff --git a/.changeset/@accounter_server-4781-dependencies.md b/.changeset/@accounter_server-4781-dependencies.md deleted file mode 100644 index 36ff626e7b..0000000000 --- a/.changeset/@accounter_server-4781-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`googleapis@187.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/187.0.0) (from `186.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-4782-dependencies.md b/.changeset/@accounter_server-4782-dependencies.md deleted file mode 100644 index 05274574e7..0000000000 --- a/.changeset/@accounter_server-4782-dependencies.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.85` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.85) (from `4.0.84`, in `dependencies`) - - Updated dependency [`@google-cloud/pubsub@6.3.1` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/6.3.1) (from `6.3.0`, in `dependencies`) - - Updated dependency [`@graphql-hive/yoga@0.49.9` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.49.9) (from `0.49.8`, in `dependencies`) - - Updated dependency [`@graphql-tools/utils@13.1.2` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.1.2) (from `13.1.1`, in `dependencies`) - - Updated dependency [`ai@7.0.148` ↗︎](https://www.npmjs.com/package/ai/v/7.0.148) (from `7.0.146`, in `dependencies`) diff --git a/.changeset/@accounter_server-4783-dependencies.md b/.changeset/@accounter_server-4783-dependencies.md deleted file mode 100644 index 344eebb25a..0000000000 --- a/.changeset/@accounter_server-4783-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@graphql-tools/utils@13.1.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.1.1) (from `13.0.2`, in `dependencies`) diff --git a/.changeset/@accounter_server-4800-dependencies.md b/.changeset/@accounter_server-4800-dependencies.md deleted file mode 100644 index b7fef7ccc2..0000000000 --- a/.changeset/@accounter_server-4800-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`googleapis@188.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/188.0.0) (from `187.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_shaam-uniform-format-generator-4663-dependencies.md b/.changeset/@accounter_shaam-uniform-format-generator-4663-dependencies.md deleted file mode 100644 index d988cba480..0000000000 --- a/.changeset/@accounter_shaam-uniform-format-generator-4663-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/shaam-uniform-format-generator": patch ---- -dependencies updates: - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/@accounter_shaam6111-generator-4663-dependencies.md b/.changeset/@accounter_shaam6111-generator-4663-dependencies.md deleted file mode 100644 index b770258065..0000000000 --- a/.changeset/@accounter_shaam6111-generator-4663-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/shaam6111-generator": patch ---- -dependencies updates: - - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) diff --git a/.changeset/accept-invitation-signed-in.md b/.changeset/accept-invitation-signed-in.md deleted file mode 100644 index 52c0b54d7c..0000000000 --- a/.changeset/accept-invitation-signed-in.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/server': patch ---- - -`acceptInvitation` now requires a signed-in user, and the accepting account's verified email must -match the invitation email. API-key and gateway control-plane callers are rejected with -`UNAUTHENTICATED`. The GraphQL signature is unchanged; the client already signs users in before -accepting. diff --git a/.changeset/anthropic-opus-5-5.md b/.changeset/anthropic-opus-5-5.md deleted file mode 100644 index 3dc2cd4c04..0000000000 --- a/.changeset/anthropic-opus-5-5.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/server': patch ---- - -Switch document OCR (extraction and the follow-up business matching) from `claude-sonnet-4-5` to -`claude-opus-5-5`, and enable server-side refusal fallbacks so a safety-classifier decline is -retried on a fallback model instead of failing the extraction. diff --git a/.changeset/businesses-directory-filters.md b/.changeset/businesses-directory-filters.md deleted file mode 100644 index 5f0f062cdc..0000000000 --- a/.changeset/businesses-directory-filters.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': minor ---- - -Filter the businesses directory server-side. `allBusinesses` takes a new `filters: BusinessFilter` -input, applied in SQL before the count and the page slice: - -- `name`: case-insensitive substring of the name or Hebrew name -- `taxCategoryIds` / `withoutTaxCategory` and `sortCodes` / `withoutSortCode`: a list match OR-ed - with a "has none" match, to find uncategorized businesses -- `countries` (the table's Locality), `isClient`, `isActive` and `isAdmin` - -`filters.name` and `filters.isClient` replace the top-level `name` and `isClient` arguments. - -The businesses page replaces its inline filter bar with a name search in the toolbar and a Filters -dialog (tax category, sort code and country multi-selects, Any / Yes / No for client, active and -admin, and "Unused only"). The applied filter is persisted in the `businessesFilters` URL parameter, -so filtered views can be linked to, reloaded, and walked with back / forward. A business selected -under one filter stays selected when a later filter hides it. diff --git a/.changeset/businesses-remove-deprecated-args.md b/.changeset/businesses-remove-deprecated-args.md deleted file mode 100644 index f11b5e5831..0000000000 --- a/.changeset/businesses-remove-deprecated-args.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/server': minor ---- - -**Breaking API change:** remove the deprecated `name` and `isClient` arguments from -`Query.allBusinesses`. Pass them as `filters.name` and `filters.isClient` instead. The client and -the MCP server already do. diff --git a/.changeset/charge-counterparty-approve-refetch.md b/.changeset/charge-counterparty-approve-refetch.md deleted file mode 100644 index d15c4317bb..0000000000 --- a/.changeset/charge-counterparty-approve-refetch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@accounter/client': patch ---- - -Approving a transaction's suggested counterparty (or creating a new business for it) in a charge's -transactions table now refetches the charge, instead of leaving it stale until the page reloads. diff --git a/.changeset/charge-securities-business-fallback.md b/.changeset/charge-securities-business-fallback.md deleted file mode 100644 index 990bfad273..0000000000 --- a/.changeset/charge-securities-business-fallback.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/client': patch ---- - -The charge's Foreign Securities panel now falls back to the security's business when the bank's -reference list has no entry for its key. That happens for securities closed out before the list was -scraped, such as a redeemed bond. The panel shows the business's name, symbol and descriptor badges -instead of a "not found" message, and leads with the ISIN in both cases. The security's name links -straight to its business's Security tab. The panel and the Security tab now share one heading -component, so the two show a security the same way. diff --git a/.changeset/charge-security-foreign-badge.md b/.changeset/charge-security-foreign-badge.md deleted file mode 100644 index 826badb8d4..0000000000 --- a/.changeset/charge-security-foreign-badge.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/client': patch -'@accounter/server': patch ---- - -The charge security header now takes its "Foreign" badge from the security business, judged -against the tenant's locality, instead of the bank's raw flag. -`Security.isForeign` is deprecated in favor of `ChargeSecurity.securityBusiness.isForeign`. diff --git a/.changeset/charges-documents-url-filters.md b/.changeset/charges-documents-url-filters.md deleted file mode 100644 index 171460498c..0000000000 --- a/.changeset/charges-documents-url-filters.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'@accounter/client': patch ---- - -Fix back / forward and "Clear all" on the charges and documents pages. - -- **Back / forward** now restore the filter on All Charges, Missing Info, Ledger Validation, - Accountant Approvals and Documents, and on the two paginated charges screens (All Charges and - Missing Info) the page along with it. Before, going back after paging or re-filtering left the - list where it was, and could push a stale entry that wiped the forward history. -- **One history entry per change.** Applying a filter used to add two entries (one for the filter, - one for resetting the page), and Accountant Approvals added one just for being opened. -- **"Clear all" and "Reset" in the charges filters** now clear what they show. A dialog opened over - an applied filter used to keep fields like owners and the date range in the form state, so Apply - sent them again. -- Filters in the URL are validated when the page reads them, so a stale or hand-edited link falls - back to no filter instead of failing the query. - -On All Charges, Ledger Validation and Documents, going back to an entry with no filter shows the -unfiltered state again instead of the previous filter's results. On Documents this includes -"Clear", which now empties the list instead of loading every document, the same as opening the page -without a filter. diff --git a/.changeset/cpi-linkage-calculator.md b/.changeset/cpi-linkage-calculator.md deleted file mode 100644 index a7f11433cc..0000000000 --- a/.changeset/cpi-linkage-calculator.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/client': minor ---- - -Add a CPI linkage calculator page (Reports → CPI Linkage Calculator, `/reports/cpi-calculator`), -built on the `priceIndexLinkage` and `priceIndexValues` queries. It links an amount between two -dates by the "known" index (Income Tax Ordinance s.88) or the index for a month on each side, shows -the linked amount, linkage difference, change and both index values (including cross-base values), -and charts the monthly CPI over the range. The calculation is kept in the URL, so it can be shared. diff --git a/.changeset/cpi-price-index-provider.md b/.changeset/cpi-price-index-provider.md deleted file mode 100644 index ea2c585973..0000000000 --- a/.changeset/cpi-price-index-provider.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@accounter/server': minor ---- - -Track the Israeli consumer price index (CPI) in the database. A new `price-indexes` module syncs CBS -price indexes (api.cbs.gov.il) into the global `price_index_values` / `price_index_bases` tables: a -full backfill at startup on an empty table and a daily incremental run at 17:00 UTC (disable with -`PRICE_INDEX_SYNC_ENABLED=0`). `PriceIndexesProvider` resolves the "known" index (Income Tax -Ordinance s.88) or the index for a month and links amounts between any two dates across base -changes, matching the official CBS calculator. New GraphQL: `priceIndexValues`, `priceIndexLinkage` -and the super-admin `syncPriceIndexes` mutation. diff --git a/.changeset/crypto-exchange-rate-points.md b/.changeset/crypto-exchange-rate-points.md deleted file mode 100644 index 8a7ebb5b80..0000000000 --- a/.changeset/crypto-exchange-rate-points.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/server': patch ---- - -Book the exchange-rate difference again when crypto legs land on the same day. Ledger generation -only adds an `Exchange ledger record` when a charge's entries were priced at more than one point, -and since dates became `TimelessDateString` it compared days, while crypto is still priced at its -exact `debit_timestamp`. A same-day crypto internal transfer (e.g. wallet → exchange) was left -unbalanced. Entries now carry the point they were priced at, keyed the way -`ExchangeProvider.getExchangeRates` prices them: crypto by time, fiat and local currency by day. diff --git a/.changeset/deel-independent-contractor-contract-id.md b/.changeset/deel-independent-contractor-contract-id.md deleted file mode 100644 index 997226ba47..0000000000 --- a/.changeset/deel-independent-contractor-contract-id.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@accounter/server': patch ---- - -Deel invoices with the placeholder contract ID `-261` (independent contractor) are now normalized to -a null contract ID. diff --git a/.changeset/delete-emptied-charges.md b/.changeset/delete-emptied-charges.md deleted file mode 100644 index d7d15bf722..0000000000 --- a/.changeset/delete-emptied-charges.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@accounter/server': minor ---- - -Charges left empty (no transactions, documents or misc expenses) after their records move to -another charge or are deleted are now deleted, instead of lingering as ghost charges. This applies -to `updateTransaction`, `updateTransactions`, `updateDocument`, `deleteDocument`, -`updateMiscExpense`, `deleteMiscExpense` and the Deel documents fetch, through a shared -`deleteChargesIfEmpty` helper. Moving onto an existing charge is now covered too (previously only -unlinking was), as is unlinking several transactions of the same charge. Updates that do not change -the charge skip the check. - -`UpdatedTransactionsSuccessfulResult` gains `deletedChargeIds: [UUID!]!`, and -`UpdateDocumentSuccessfulResult.deletedChargeId` is now also set when a document moves onto an -existing charge, so clients can drop the deleted charges' rows instead of refetching them. diff --git a/.changeset/deprecate-legacy-foreign-securities-columns.md b/.changeset/deprecate-legacy-foreign-securities-columns.md deleted file mode 100644 index c4c727b3f9..0000000000 --- a/.changeset/deprecate-legacy-foreign-securities-columns.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/server': minor ---- - -Deprecate `user_context.foreign_securities_business_id` and -`user_context.foreign_securities_fees_category_id`, superseded by `securities_context`. The server no -longer reads or writes them (a migration copies any value still missing from `securities_context` -once more and marks both columns `DEPRECATED` in their column comments; they will be dropped later). -In GraphQL, `AdminContextInput.foreignSecuritiesBusinessId` / `foreignSecuritiesFeesCategoryId` are -deprecated in favour of `updateSecuritiesContext` (they now write `securities_context`), and -`AdminContextInfo.foreignSecuritiesBusiness` / `foreignSecuritiesFeesCategory` in favour of -`securitiesContext`. diff --git a/.changeset/email-ingestion-control-test-typecheck.md b/.changeset/email-ingestion-control-test-typecheck.md deleted file mode 100644 index 624ca25432..0000000000 --- a/.changeset/email-ingestion-control-test-typecheck.md +++ /dev/null @@ -1,6 +0,0 @@ ---- ---- - -Fix two type errors in the email-ingestion control resolver test: the resolver's declared return -type allows a plain value, so the test now wraps the call in `Promise.resolve` before chaining -`.then`. Test-only; no release. diff --git a/.changeset/empty-charge-cleanup-follow-ups.md b/.changeset/empty-charge-cleanup-follow-ups.md deleted file mode 100644 index deac395c7c..0000000000 --- a/.changeset/empty-charge-cleanup-follow-ups.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@accounter/server': patch ---- - -Empty-charge cleanup follow-ups: - -- A charge holding salary records, business trip employee payments or depreciation records is no - longer treated as empty, so the cleanup never tries (and fails) to delete it. -- `deleteCharges` now also deletes the charge's balance cancellations, which used to block the - delete through their foreign key. -- `deleteCharge` now refuses a charge that still holds misc expenses or any of the records above, - not only transactions and documents. -- `chargeSpreadDocuments` deletes the original charge when spreading leaves it empty, and leaves it - out of the returned charges. diff --git a/.changeset/fix-drawer-frozen-page.md b/.changeset/fix-drawer-frozen-page.md deleted file mode 100644 index c26c0dfe9b..0000000000 --- a/.changeset/fix-drawer-frozen-page.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/client': patch ---- - -Fix the page becoming unclickable after closing a drawer (edit charge, insert document, edit -document, document image) opened from the charge or document actions menu. The menus are now -non-modal, so the drawer no longer restores a stale `pointer-events: none` on `` when it -closes. diff --git a/.changeset/fix-securities-execution-matching.md b/.changeset/fix-securities-execution-matching.md deleted file mode 100644 index 89075cc43d..0000000000 --- a/.changeset/fix-securities-execution-matching.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -'@accounter/server': patch ---- - -Match more Poalim securities executions to the cash movement behind them. The matcher required the -transaction's debit date to equal the execution's value date, but the two feeds disagree on dates: -foreign-currency rows are debited around the trade date and executed on the settlement day, a -back-dated correction is executed when posted, and a new issue can settle days late. A pair is now -identified by account, security key, exact amount and direction. The date only ranks candidates: an -exact debit-date or event-date match first, then the closest date within a settlement window. - -Also: - -- Domestic trades and securities fees carry the security key in their reference, not their - description, and are now recognized by it. -- An amount column the feed leaves at `0` gives way to the next column in the same currency. This - fixes shekel trades, whose cash is reported in the NIS column, and their FIFO purchase cost. The - NIS column is only read for executions traded or settled in shekels; on a foreign-currency - execution it holds the commission. -- Within the window, closeness is measured to the execution's whole trade-to-value span, so a - later trade's cash is not taken by an earlier neighbour. A pass re-seats pairs when that lets - more executions pair, and a transaction that names no security only pairs on an exact date. -- A cancelled execution's direction is read from the sign of the value it reports. The bank books a - cancellation either under the original trade type with values negated, or as the opposite action - with positive values. Before, a cancellation could take the original payment's transaction. -- Fee transactions no longer compete with main transactions for an execution. -- The foreign-securities ledger reports a dividend or interest commission that has no matching fee - transaction in the charge, and a cancelled income payment it cannot book as a reversal yet. diff --git a/.changeset/fix-securities-executions-restatement-duplicates.md b/.changeset/fix-securities-executions-restatement-duplicates.md deleted file mode 100644 index ec0aa64d07..0000000000 --- a/.changeset/fix-securities-executions-restatement-duplicates.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/server': patch ---- - -Stop duplicating Poalim securities executions that are scraped before they settle. The bank -restates an execution's price, net value and value/settlement dates as it settles, and those fields -were part of the dedup key, so each restated scrape added a second row. The key now leaves them out -(plus a per-scrape `occurrence` ordinal to keep genuine same-day, same-size executions apart), and a -re-scrape updates the existing row in place. A migration removes the superseded rows already -stored, keeping the most recent version of each execution. diff --git a/.changeset/foreign-securities-income-ledger.md b/.changeset/foreign-securities-income-ledger.md deleted file mode 100644 index acd5b75391..0000000000 --- a/.changeset/foreign-securities-income-ledger.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@accounter/server': minor ---- - -Foreign securities ledger generation now reads the security execution behind each cash movement: - -- dividends and bond interest are credited to (local or foreign) dividend / bond interest income - instead of the securities account, with tax withheld from them booked to dividend or bond - withholding tax; the reported tax is checked against gross minus net -- a bond redemption credits the securities account with the FIFO purchase cost and books the - difference to gain or loss from sale of foreign securities -- a transaction with no matched execution, a purchase missing from the scraped history, or a - missing securities tax category is reported as a ledger error, keeping the previous entry; the - missing categories are also listed in the new `LedgerValidation.missingSecuritiesTaxCategories` - -Buys, sales and transfers are booked as before. diff --git a/.changeset/green-invoice-codegen-v6.md b/.changeset/green-invoice-codegen-v6.md deleted file mode 100644 index 989e274ad0..0000000000 --- a/.changeset/green-invoice-codegen-v6.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/green-invoice-graphql': minor ---- - -Generate the SDK with GraphQL Code Generator v6 (`typescript` 6, `typescript-operations` 6). Schema -types now live in their own generated module (still re-exported from the package root), and operation -result types follow the v6 nullability rules: a nullable field is typed `T | null` and is always -present, instead of optional (`field?: T | null`). diff --git a/.changeset/green-invoice-date-scalar.md b/.changeset/green-invoice-date-scalar.md deleted file mode 100644 index 798614c7b7..0000000000 --- a/.changeset/green-invoice-date-scalar.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/green-invoice-graphql': minor ---- - -Type the Green Invoice `Date` scalar as a `yyyy-mm-dd` string pattern -(`` `${number}-${number}-${number}` ``) instead of `string`, matching the server's -`TimelessDateString`, so document dates need no type assertion downstream. diff --git a/.changeset/green-invoice-graphql-mesh-v1.md b/.changeset/green-invoice-graphql-mesh-v1.md deleted file mode 100644 index 19f9d748d4..0000000000 --- a/.changeset/green-invoice-graphql-mesh-v1.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@accounter/green-invoice-graphql': minor ---- - -Migrate from GraphQL Mesh v0 to v1. The REST API is now composed with `mesh-compose` into a supergraph, -the typed SDK is generated with GraphQL Code Generator, and operations run in-process through -`@graphql-mesh/fusion-runtime`. The public API is unchanged (`init`, `getMeshSDK`, `Sdk` and the -generated type names), and the runtime Mesh dependencies drop from eight packages to two. -`getMeshSDK` also accepts an optional `fetch` in its context, for example to run tests offline. -The `GreenInvoiceNew` source is split into `GreenInvoiceFileUpload` and `GreenInvoiceOpenBanking` -so that each sets its `queryStringOptions` at source level, the only level Mesh's config accepts -(this also removes the `Configuration file is not valid!` warnings v0's `mesh build` printed). The -query strings sent to the API are unchanged. diff --git a/.changeset/invitations-auth0-user-created.md b/.changeset/invitations-auth0-user-created.md deleted file mode 100644 index 3e01bef15c..0000000000 --- a/.changeset/invitations-auth0-user-created.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@accounter/server': patch ---- - -Track whether an invitation's Auth0 user was created by the invitation. `createBlockedUser` reuses -an existing Auth0 user for the email, but invitations always recorded `auth0_user_created = true`. -It now returns `{ userId, created }` (choosing deterministically when several users share an -email), and the real value is stored. The expired-invitation cleanup job, the `createInvitation` -rollback and invitation acceptance only delete an Auth0 user that is an unused invitation -placeholder (provisioned by Accounter, never logged in) and that no other invitation or membership -references; acceptance unblocks only the invitation's own or a reused unused placeholder. When an -existing member accepts, the invitation now points at their user and the pending placeholder -membership is removed. diff --git a/.changeset/list-input-validation.md b/.changeset/list-input-validation.md deleted file mode 100644 index 2ab41ca565..0000000000 --- a/.changeset/list-input-validation.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -'@accounter/server': patch -'@accounter/client': patch ---- - -Reject duplicate and overlapping entries in a business' list inputs. - -Email lists — general contacts, billing emails, auto-match recognition emails, and the emails in the -client dialog — no longer accept the same address twice, compared case-insensitively. Internal email -links reject an exact repeat, which would otherwise fetch the same documents twice. Auto-match -phrases reject a phrase that repeats or contains / is contained in another: adding `GOOGLE` when -`GOOGL` exists says it is already covered, and adding `GOOGL` when `GOOGLE` exists asks to remove -`GOOGLE` first. Conflicts are blocked when the entry is added, with an inline message, and again by -the form schemas on submit. - -Phrases and links are compared case-sensitively, because that is how they are used: transaction and -charge suggestions match with a case-sensitive `description.includes(phrase)`, so `GOOGLE` and -`Google` match different descriptions and both may be needed. - -On the server, every write of a business' suggestion data (insert, update, batch update, merge) and -every client email write drops entries that are redundant without changing what matches: exact -repeats of phrases and internal links, and case-insensitive repeats of emails. Overlapping phrases -are deliberately left alone there. The configuration tab re-sends the full phrase list on every -save, so pruning `["GOOGL", "GOOGLE"]` down to one would silently change matching for businesses -that already hold both. diff --git a/.changeset/mcp-charge-security-business-descriptors.md b/.changeset/mcp-charge-security-business-descriptors.md deleted file mode 100644 index 81f1611711..0000000000 --- a/.changeset/mcp-charge-security-business-descriptors.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/mcp-server': patch ---- - -`accounter_get_charges` with `includeSecurities` now takes a security's `exchange` and `itemType` -from its security business, falling back to the bank's reference row, like `symbol` and `name`. -They used to be `null` whenever the reference list had no row for the key (e.g. a position closed -before the list was scraped), even when the security business had both. diff --git a/.changeset/mcp-drop-formatted-amount.md b/.changeset/mcp-drop-formatted-amount.md deleted file mode 100644 index 869866afd7..0000000000 --- a/.changeset/mcp-drop-formatted-amount.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@accounter/mcp-server': minor ---- - -**Breaking change to tool output:** drop `formatted` from the shared money shape. Every amount the -MCP tools return is now `{ value, currency }` instead of `{ value, formatted, currency }`. Any -consumer that reads `amount.formatted` must build the display string from `value` and `currency` -instead. - -`formatted` was the server's display string (e.g. `₪1,234.56`), which a model can rebuild from the -other two fields. It cost bytes on every amount: about 15% of an `accounter_vat_report` row, which -has nine amount fields. The connector no longer selects it from the API. `FinancialAmount.formatted` -stays in the server schema because the client uses it. - -The `accounter_vat_report` summary line now formats the total VAT itself, printing the unsigned -amount next to the "to pay" / "refund" wording (e.g. `total VAT ₪42.00 refund`, where it used to -print `-₪42.00`). diff --git a/.changeset/mcp-list-businesses-filters.md b/.changeset/mcp-list-businesses-filters.md deleted file mode 100644 index fd88b2b1cc..0000000000 --- a/.changeset/mcp-list-businesses-filters.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@accounter/mcp-server': minor ---- - -`accounter_list_businesses` now sends its filters through the `allBusinesses(filters:)` input -instead of the deprecated `name` / `isClient` arguments, and exposes every `BusinessFilter` field: - -- `taxCategoryIds` / `withoutTaxCategory`, to find businesses matched to given tax categories or - with none mapped -- `sortCodes` / `withoutSortCode`, by numeric sort code key -- `countries`, as ISO 3166-1 alpha-3 codes -- `isAdmin`, for the owner-managed businesses - -`activeOnly` is now applied upstream, before paging, as `filters.isActive`. It used to be applied to -the returned page, so pages could come back short and `totalCount` / `pagination` counted inactive -businesses. Both now describe active businesses only when `activeOnly` is set. diff --git a/.changeset/mcp-review-write-tools.md b/.changeset/mcp-review-write-tools.md deleted file mode 100644 index 8fcbfbde9f..0000000000 --- a/.changeset/mcp-review-write-tools.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -'@accounter/mcp-server': minor ---- - -Add the six MCP write tools a charge review needs to apply its decisions directly, instead of -handing back a to-do list for the Accounter UI. All sit behind the existing `MCP_ENABLE_WRITE_TOOLS` -flag (off by default), require `business_owner`/`accountant`, target exactly one business, are -audit-logged and are never retried — the same guards as `accounter_update_charges_tags`. - -- `accounter_update_charge` — edit a charge's `userDescription`, `type`, `optionalDocuments`, - `optionalVat`, `isInvoicePaymentDifferentCurrency`, `defaultTaxCategoryId`, `businessTripId` - and `yearsOfRelevance`. Rejects `counterpartyId` on purpose: upstream derives a - charge's counterparty from its transactions and documents (the schema field exists but the - resolver ignores it), so the tool points at the two tools that do set it. -- `accounter_merge_charges` — fold 1–20 charges into a base charge (`mergeCharges`), the fix for an - emailed receipt that landed in its own charge next to the card row it pays for. Refuses a - self-merge or duplicate ids before any round trip. -- `accounter_update_transactions` — set `counterpartyId`, `chargeId` and/or `isFee` on 1–50 - transactions in one upstream batch (`updateTransactions`); this is where a charge's counterparty - is actually set, and `chargeId` is how a wire is moved onto the charge holding its invoice. - Former charges the move leaves empty are deleted upstream and relayed as `deletedChargeIds`. -- `accounter_update_document` — move a document to another charge (an emptied former charge is - deleted upstream and relayed as `deletedChargeId`) and/or fix `creditorId`, `debtorId`, `documentType`, `serialNumber`, `date`, `amount`, - `vat`, `description` (`updateDocument`). -- `accounter_delete_document` — delete a document (`deleteDocument`), reporting the charge it - came off and whether that charge was deleted with it. -- `accounter_create_business` — add a directory entry (`insertNewBusiness`) with every - `InsertNewBusinessInput` field (`country` validated against the server `CountryCode` enum), so a - new vendor can be set as a counterparty in the same session. Refuses a name that already exists - (returning the existing id) unless `allowDuplicateName`, since the upstream insert is not atomic - and a retry would otherwise duplicate the entity. - -Each tool is a thin wrapper over one existing server mutation: no schema or resolver changes. Covered -by per-tool unit tests, the registry-wide scope-forwarding, usage-log and description contracts, -and the e2e exposure checks (hidden by default, listed after every read tool when enabled). diff --git a/.changeset/mcp-vat-report-tool.md b/.changeset/mcp-vat-report-tool.md deleted file mode 100644 index 7816cef99c..0000000000 --- a/.changeset/mcp-vat-report-tool.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -'@accounter/mcp-server': minor ---- - -Expose the monthly VAT report over the MCP connector as `accounter_vat_report`. - -The VAT report is the screen accountants and business owners use to prepare the monthly VAT filing, -and it was not reachable from the connector. The new tool is a thin forwarder of the server's -`vatReport` query for one member business and one month (`month: "YYYY-MM"`): which documents -qualify, income vs expense, the VAT figures, the filed totals and the validation reasons are all -computed server-side and passed through as-is, normalized into the connector's shared money and -entity shapes. - -**One section per call.** `section` picks `income`, `expenses` (one row per document, every -`VatReportRecord` field) or `missingInfo` (charges that still fail validation, with their `missing` -reasons), paged with `offset`/`limit`. Every call also returns `counts` for all three sections and -`summary`, the month's PCN874 header totals as filed (`totalVat` positive = to pay, negative = -refund), so a model can answer "what's the VAT for March?" from any first call. Rows carry the -reported business as `ownerId`, like the balance report. - -**Its own bounds.** The report validates every charge in the month, so the upstream read uses the -long-running budget (`GRAPHQL_UPSTREAM_LONG_TIMEOUT_MS`) — reads can now opt into it, and a -long-running read is not retried after a timeout. Rows are wide, so this tool gets a 120 KB payload -cap; the shared 60 KB cap is unchanged for every other tool. The upstream `chargesType` filter is not -exposed until its inverted behaviour is fixed on the server. - -**Glossary.** `accounter_explain_terminology` gains a `report` topic covering the report, its rows, -how income vs expense is decided, the VAT date, every amount field, the summary (including which -PCN874 record types its totals leave out), the record types, and the missing-info section. - -The balance report moved to `tools/reports/` alongside it, and GraphQL codegen now covers that -folder. diff --git a/.changeset/ocr-allocation-number-from-long-code.md b/.changeset/ocr-allocation-number-from-long-code.md deleted file mode 100644 index c912e40b12..0000000000 --- a/.changeset/ocr-allocation-number-from-long-code.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/server': patch ---- - -OCR now reads the allocation number (מספר הקצאה) correctly when it is printed as the last 9 digits -of a longer "Tax Authorities Code". The model copies the code verbatim and the server takes the last -9 digits, instead of asking the model to slice them (it often returned a window shifted by a digit). diff --git a/.changeset/poalim-securities-capital-reduction.md b/.changeset/poalim-securities-capital-reduction.md deleted file mode 100644 index d2a1baf403..0000000000 --- a/.changeset/poalim-securities-capital-reduction.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/modern-poalim-scraper': patch -'@accounter/scraper-app': patch -'@accounter/server': patch ---- - -Poalim securities transactions with the `איחוד/הפחתת הון` (consolidation / capital reduction) -payment type no longer fail schema validation. The value is accepted by the scraper schemas and -exposed in GraphQL as the new `SecurityPaymentType.CONSOLIDATION_OR_CAPITAL_REDUCTION` member. diff --git a/.changeset/poalim-swift-blank-diff-noise.md b/.changeset/poalim-swift-blank-diff-noise.md deleted file mode 100644 index dea200f6d4..0000000000 --- a/.changeset/poalim-swift-blank-diff-noise.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/server': patch ---- - -Stop reporting Poalim SWIFT transactions as changed when an optional field (e.g. -`swift_remittance_information_70`) is stored as `null` and the scraper sends a blank placeholder for -it. Blank and `null` values are now treated as equal when diffing. diff --git a/.changeset/reprocess-document-ocr.md b/.changeset/reprocess-document-ocr.md deleted file mode 100644 index be2f84830e..0000000000 --- a/.changeset/reprocess-document-ocr.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': minor ---- - -Add a re-run OCR action for documents stuck on `UNPROCESSED`. - -A batch of documents was inserted with `type = 'UNPROCESSED'` and no extracted information at all — -no amount, date, serial or counterparty — because the email-ingestion path catches every OCR failure -and falls back to `UNPROCESSED` (`email-ingestion-ingest.provider.ts`). The document is still -inserted and the ingest still reports `INSERTED` with its idempotency key persisted, so replaying -the source email answers `DUPLICATE` and cannot recover it. The Cloudinary `file_url` survives, -though, which is enough to extract from the file again. - -New mutations `reprocessDocumentOcr(documentId)` and `batchReprocessDocumentsOcr(documentIds)` -re-fetch that stored file through the existing SSRF-hardened `fetchRemoteDocument`, run it back -through `getOcrData`, and report which fields were filled. Surfaced in the client as a "Re-run OCR" -item in the document actions menu and, on the documents screen, a bulk button over the unprocessed -documents currently listed (pair it with the "Invalid documents only" filter). - -The write is additive on purpose: a column is filled only where the document is empty, so a value an -accountant corrected by hand is never overwritten. The exception is `documentType`, which is replaced -only while the document is still `UNPROCESSED`. A pass that extracts nothing new writes nothing at -all, rather than bumping `updated_at` and dragging the charge's accountant approval back to `PENDING` -for no gain. - -That rule is enforced by the UPDATE statement rather than by the caller. Minutes pass between reading -a document and writing it back, and deciding which columns are blank from the pre-OCR read would mean -overwriting a field an accountant filled during the extraction, using a decision made before they -touched it. `COALESCE(column, $param)` — the reverse of the usual argument order — makes "never -overwrite" a property of the statement, and repeating the conditions in its `WHERE` clause keeps a -pass with nothing to contribute from matching any row at all. - -The document's owner is checked against the request's write target up front. Reads span the whole -business scope while writes are pinned to one business, so the all-documents screen can list a row -this request cannot write to; catching that late would mean paying for a download and an OCR call -first. - -The documents table gains a selection column, keyed by document id so a selection survives paging, -sorting and filtering, and a batch menu beside it offering "Re-run OCR" and "Delete" over the -selected rows. It also gains an opt-in `preview` column showing each document's stored image, -hidden by default because it costs one image request per visible row. - -When the stored original cannot be sent to OCR — the two MIME allowlists in play disagree in both -directions, so a GIF is refused by the fetch layer and a HEIC is refused by the model — the Cloudinary -`.jpg` derivative is used instead rather than failing. - -Two limits worth knowing. Nothing in the schema records whether OCR ever ran, failed, or was -deliberately skipped, so the action cannot tell a recoverable failure from a document that will -always be unreadable — retrying the latter costs an OCR pass and changes nothing. And the mutation -holds the request open for the whole extraction (tens of seconds per document, no job queue in this -server), which is why a batch is capped at 20 documents and runs three at a time. diff --git a/.changeset/retire-hashavshevet-payper-mesh.md b/.changeset/retire-hashavshevet-payper-mesh.md deleted file mode 100644 index e1316fbb5d..0000000000 --- a/.changeset/retire-hashavshevet-payper-mesh.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Deprecate `@accounter/hashavshevet-mesh` and `@accounter/payper-mesh`. Nothing in the monorepo imports -them, so instead of being migrated to GraphQL Mesh v1 they are kept as frozen, detached packages: -excluded from the Yarn workspaces (so their GraphQL Mesh v0 dependencies leave the root lockfile), -from the build, from linting and formatting, and from Renovate. Each now declares its own build -tooling and can still be built standalone. Their pending dependency-bump changesets are dropped, -since packages outside the workspaces can't be versioned by changesets; the published npm versions -stay available and should be marked deprecated by a package owner. diff --git a/.changeset/review-pr-skill.md b/.changeset/review-pr-skill.md deleted file mode 100644 index 8e9a7fceae..0000000000 --- a/.changeset/review-pr-skill.md +++ /dev/null @@ -1,7 +0,0 @@ ---- ---- - -Add a `review-pr` Claude Code skill (`.claude/skills/review-pr`). It reviews a pull request, shows the -numbered findings for approval, and posts them as one batched `COMMENT` review with inline comments and -`suggestion` blocks. A bundled `check-review.mjs` script checks every comment against the right-hand -side of the PR diff before posting, since GitHub rejects the whole review if any line is outside it. diff --git a/.changeset/scraper-app-in-memory-vault.md b/.changeset/scraper-app-in-memory-vault.md deleted file mode 100644 index 237b79d062..0000000000 --- a/.changeset/scraper-app-in-memory-vault.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/scraper-app': minor ---- - -**Breaking:** the vault is no longer stored on disk. The app opens your vault file in memory for -the session, and you save changes back to it from the UI (in place in Chromium browsers, as a -download elsewhere). A banner shows whenever the session has changes that your file doesn't. -`VAULT_PATH` and the vault-location setting are gone; open your existing `.vault` file once from -the new welcome screen. Run history is now kept for the session only unless you turn on "Save run -history" in Settings. diff --git a/.changeset/scraper-app-jpy-rate-noise.md b/.changeset/scraper-app-jpy-rate-noise.md deleted file mode 100644 index 9bf794ee8f..0000000000 --- a/.changeset/scraper-app-jpy-rate-noise.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/scraper-app': patch ---- - -Round the scraped JPY exchange rate (converted from BOI's per-100-units quote) to the DB column's -6-decimal precision, so floating-point noise (e.g. `0.018734999999999998`) no longer shows up as -changed currency-rate rows. diff --git a/.changeset/securities-bank-cross-check.md b/.changeset/securities-bank-cross-check.md deleted file mode 100644 index d579e2c6c4..0000000000 --- a/.changeset/securities-bank-cross-check.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/server': patch ---- - -Cross-check a securities sale's or redemption's profit/loss with the bank's. Its PnL is recomputed -from its FIFO lots at the bank's own rates and compared with the bank's `nominal_profit_loss_nis`, -`nominal_profit_loss_linkage` and `real_profit_loss_nis`, within ₪2 or a millionth of the proceeds. -The bank reports linkage on the cost side (the negated rate PnL), and its real PnL is the -individual's "lower of the two" result. A mismatch is a ledger error; the disposal is still booked -from its lots. diff --git a/.changeset/securities-cancelled-income-reversal.md b/.changeset/securities-cancelled-income-reversal.md deleted file mode 100644 index d9732d685d..0000000000 --- a/.changeset/securities-cancelled-income-reversal.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@accounter/server': patch ---- - -Book a cancelled foreign-securities dividend or bond interest payment as the reversal of its income -entry. The cancellation's cash leg used to stay on the securities account, with a "booking the -reversal is not supported yet" ledger error, so the cancelled payment's income and withheld tax were -never reversed. It now debits the income with the gross, credits the bank with the net paid back, -and credits the withholding-tax category with the tax the bank reverses. - -The reversal is priced at the rate of the payment it cancels, found among the charge's matched -executions by security, trade type and gross, so its income and withheld tax net out in shekels too. -When that payment is not in the charge, the reversal is priced at the cancellation day's rate and a -ledger error says so. The withheld-tax consistency check reads a cancellation's negated tax against -its reversed cash. A cancelled redemption is still reported as not supported. diff --git a/.changeset/securities-capital-gain.md b/.changeset/securities-capital-gain.md deleted file mode 100644 index 57c87bb78e..0000000000 --- a/.changeset/securities-capital-gain.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/server': minor ---- - -Expose a sale's or redemption's capital gain as `SecurityExecution.capitalGain`, from the FIFO lots -of its account, at the Bank of Israel rates of the trade dates: in the origin currency, nominal, and -split into price and exchange-rate parts, plus the s.88 inflationary amount and real gain using the -CPI known on the trade dates — a company's split; an individual's foreign-currency securities take -the exchange rate as the index, as the bank does. It is broken down by lot. diff --git a/.changeset/securities-commission-refund-fee.md b/.changeset/securities-commission-refund-fee.md deleted file mode 100644 index 0206906790..0000000000 --- a/.changeset/securities-commission-refund-fee.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/server': patch ---- - -Count Poalim's securities commission refund (`ביטול עמלה ני"ע CANC SEC FEE`) in the foreign-securities -commission check. The row carries its security only in its reference, which was read for the -`FSEC` fee phrase but not for the refund's, so a cancelled payment's refunded commission was left -out and the charge reported a mismatch between its fee transactions and the bank's commission. diff --git a/.changeset/securities-context-config.md b/.changeset/securities-context-config.md deleted file mode 100644 index b3658b6ea4..0000000000 --- a/.changeset/securities-context-config.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/server': minor ---- - -Add a per-tenant securities ledger configuration: a new `user_context.securities_context` jsonb -holds the general foreign-securities business, the tax categories that securities fees, dividends, -bond interest, withheld tax and redemption gains/losses are booked to, plus the sort code new -securities tax categories are created under. It supersedes the `foreign_securities_business_id` and -`foreign_securities_fees_category_id` columns: their values are copied in by the migration, they are -only read as a fallback, and a legacy `updateAdminContext` change to them is mirrored into it. It is -exposed as `AdminContextInfo.securitiesContext` and set through the new `updateSecuritiesContext` -mutation (business owners and accountants), which checks that every id belongs to the tenant. diff --git a/.changeset/securities-fifo-per-account.md b/.changeset/securities-fifo-per-account.md deleted file mode 100644 index b50bf2426b..0000000000 --- a/.changeset/securities-fifo-per-account.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@accounter/server': patch ---- - -Cost a security disposal from the FIFO lots of its own account, carrying lots across transfers -between the owner's accounts. - -- **FIFO per account.** A disposal draws only on the lots of the account it was made in, as the - bank computes and withholds its tax. The owner's whole history is replayed: a transfer out of one - of the owner's accounts carries the lots' cost and purchase-order place into the account that - receives the same units within 10 days; any other transfer in still has no known cost. Within a - day, units come in before they go out. -- **Lots.** The FIFO cost basis now reports the lots it drew on, with their acquisitions. -- **Redemptions** read the new owner-wide history, so a redeemed bond moved from another account - keeps its cost, and their cost-basis errors name the account. diff --git a/.changeset/securities-multi-security-counterparty.md b/.changeset/securities-multi-security-counterparty.md deleted file mode 100644 index 56d6312af9..0000000000 --- a/.changeset/securities-multi-security-counterparty.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': patch ---- - -Resolve the counterparty of a foreign-securities charge that holds trades of more than one -security. Each traded security is its own business, so a charge that held two of them had two -counterparty candidates, no counterparty, and was flagged as missing one. - -- When another security in the same charge was bought or sold, a security whose trades cancel out - within the charge (a buy reversed by a sell of the same amount, as when a trade is rebooked to - another series) no longer competes with it for the counterparty. A reversal on its own is still - the charge's subject: a charge holding only a buy and the sell that cancels it keeps that - security as its counterparty, and a reversed security is never dropped in favour of a candidate - that is not a security. Fees are left out of the netting, which is rounded to the cent. This - applies to both the single-charge path and the charges list. -- A charge spanning several securities with real exposure in each (say, a switch from one fund to - another) has no single counterparty and is no longer flagged as missing one, provided every - candidate is a traded security. The tenant's general foreign-securities business, which stands - for an unrecognized trade, does not count as one, so such a charge is still flagged. -- A stock distribution's charge, which books the execution directly and holds no transaction, - takes the distributed security's business as its counterparty (found by the execution's Poalim - key, or its ISIN). Before, it had no counterparty at all. A merged-in commission fee doesn't - change that. -- The securities ledger books its main entries in the transactions' order rather than the order - their lookups finish, and lets every bought security whose balance across the charge is still a - debit keep it as a holding. Before, only the first booked main entry was allowed to stay - unbalanced, so on a charge buying two securities the other one was reported as unbalanced; a - security sold beyond what the charge bought is still reported. -- New GraphQL fields: `ForeignSecuritiesCharge.counterparties` (the main-counterparty candidates), - and `ChargeSecurity.netAmount` and `ChargeSecurity.isOffsetting`. Both read the charge's - transactions by the security's business, so a security is offsetting exactly when it was left - out of `counterparties`. -- The charges table shows "N securities", with a popover listing them, instead of a red "Missing" - for a multi-security charge. On a charge of several securities, the Foreign Securities section - shows each security's role: main counterparty, counterparty k of N, or nets to zero. Securities - that cancel out are dimmed and listed last. Every security shows its net amount. diff --git a/.changeset/securities-sale-ledger.md b/.changeset/securities-sale-ledger.md deleted file mode 100644 index 75023ceeca..0000000000 --- a/.changeset/securities-sale-ledger.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/server': minor ---- - -Book sales of securities from their FIFO lots. A sale used to be booked as is, crediting the -securities account with the proceeds, so no gain or loss was recognised. It is now booked like a -redemption: the securities account gives up the FIFO cost at the cash leg's rate, and the difference -is a gain or loss (`(sell price − buy price) × units × sale rate`). A sale with withheld tax, and a -cancelled sale, keep the base entry with a ledger error. Existing sale ledgers change when -regenerated; ledgers in a locked period are not touched. diff --git a/.changeset/securities-sale-rate-pnl.md b/.changeset/securities-sale-rate-pnl.md deleted file mode 100644 index 05d8dd0d6f..0000000000 --- a/.changeset/securities-sale-rate-pnl.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': patch ---- - -Book the exchange-rate part of a securities sale or redemption apart from its price part. A second, -local-currency entry books each lot's cost × the change since the rate the securities account -carries it at: the rate the purchase's cash movement was booked at (a dividend in kind's value -date), or the rate of the last revaluation of the account it was held over, read from the -revaluations actually booked. The account then gives up exactly what it carried the units at. - -- **New securities tax categories:** exchange-rate gain and loss on the sale of foreign securities. - They are offered from the charge's ledger errors like the others, and can be pointed at the - exchange-revaluation category to merge them. -- Until they are set, or when a purchase's cash movement is not found, the disposal is still - booked, without the rate entry, and the year-end revaluation takes the rate PnL up as before. diff --git a/.changeset/securities-stock-distribution.md b/.changeset/securities-stock-distribution.md deleted file mode 100644 index 55c258ffd0..0000000000 --- a/.changeset/securities-stock-distribution.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': patch ---- - -Book Poalim stock distributions paid as a dividend in kind. Such an execution has no cash leg, so no -bank transaction ever brought it into a charge and nothing booked it. - -- Ingesting securities executions now creates a `FOREIGN_SECURITIES` charge for each dividend in - kind no charge books yet, and links the two in the new `charges_securities_executions` table. - Cancelled distributions, distributions the bank later cancelled, and executions in a locked - ledger period are skipped. The check runs over the - whole owner, so distributions ingested earlier are picked up by the next upload. -- The securities ledger books each linked distribution as Dr Foreign Securities [trade currency] / - Cr foreign or local dividend income (by the issuer's locality), at the gross value of the shares - and the ledger's exchange rate. A bank rate that differs is reported as a ledger error; withheld - tax, a cancelled distribution and distributions other than a dividend in kind are reported and - not booked. -- The commission check now covers distributions. When the bank's commission fee sits in a charge of - its own, the error asks to merge it into the distribution's charge. -- A linked execution counts as charge content: the charge is not cleaned up as empty (deleting it - explicitly dismisses the distribution, so the next upload does not recreate it), a merge moves - the link (and types the merged charge as foreign securities), validation stops asking it for - transactions or a counterparty, and the charges list filters and sorts it by the execution's date. -- Units received as a dividend in kind now cost their gross value in the FIFO cost basis, so a - later sale or redemption of them can be booked. -- The charge's securities section and the security's history show the linked execution, and the - executions table gains a gross value column. diff --git a/.changeset/securities-tax-category-quick-fix.md b/.changeset/securities-tax-category-quick-fix.md deleted file mode 100644 index b95f6c9831..0000000000 --- a/.changeset/securities-tax-category-quick-fix.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/client': minor ---- - -A charge's ledger errors now offer a quick-fix for each missing securities tax category (dividend -and bond interest income, withholding tax, gain/loss from sale of foreign securities): pick an -existing tax category, or create one under the securities sort code (optionally remembering that -sort code). The choice is saved for future securities charges and the charge's ledger is -regenerated with it. diff --git a/.changeset/securities-withheld-tax-double-count.md b/.changeset/securities-withheld-tax-double-count.md deleted file mode 100644 index be0c6d145a..0000000000 --- a/.changeset/securities-withheld-tax-double-count.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@accounter/server': patch -'@accounter/client': patch -'@accounter/mcp-server': patch ---- - -Stop double counting Israeli withheld tax on securities executions. The bank reports the Israeli tax -withheld from a dividend or interest payment in both `israel_tax_value_by_payments_settlement_currency` -and `capital_tax_value_settlement_currency`, and the foreign-securities ledger added the two, so it -booked twice the tax (and an inflated gross income) and flagged every such charge with "withheld tax -… does not match gross minus net". The capital tax column now only stands in when the Israeli column -is empty. The executions table no longer lists a capital tax line that repeats the Israeli one, and -the `capitalTaxValue` schema description and MCP securities tool say it is not additive. Regenerate the -ledger of affected charges. diff --git a/.changeset/securities-withheld-tax.md b/.changeset/securities-withheld-tax.md deleted file mode 100644 index 4125c71d36..0000000000 --- a/.changeset/securities-withheld-tax.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@accounter/server': patch -'@accounter/client': patch -'@accounter/mcp-server': patch ---- - -Show the tax withheld from a security execution in its own currency. `SecurityExecution` gains -`foreignTaxValue`, `israelTaxValueByPayments` and `capitalTaxValue` — the bank's per-kind withheld -tax, in the settlement currency, which the ledger already books. Until now only `israelTaxValue` -was exposed, so a foreign dividend's tax withheld abroad never showed. `israelTaxValue` itself is now -formatted in the trade currency: the bank's `israe_tax_value` is not in ILS, so it was mislabelled ₪. The -executions table's Tax column lists each non-zero kind, with the Israeli tax figure under them, and the MCP -securities and charge-details tools return the new fields. diff --git a/.changeset/security-businesses-is-foreign-by-issuer.md b/.changeset/security-businesses-is-foreign-by-issuer.md deleted file mode 100644 index a69212c4fe..0000000000 --- a/.changeset/security-businesses-is-foreign-by-issuer.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@accounter/server': patch ---- - -Stop marking every security business as foreign. Poalim securities ingestion hardcoded -`businesses_securities.is_foreign` to `true`, so Israeli funds and bonds (including dollar-denominated -ones) showed a "Foreign" badge. The flag is now derived from the issuer country the feed reports, -falling back to the ISIN's country prefix, and left null when neither is readable. A re-scrape now -corrects the flag on an existing security business, and a migration re-derives it for rows already -stored by tenants whose locality is Israel. - -"Local" now means the tenant's own `locality` rather than a hardcoded Israel, for both the -security-business flag and the securities ledger's local/foreign income and withholding-tax -categories, which now share one `getSecurityLocality` helper. The ISO alpha-3 to alpha-2 country -map moved out of the Green Invoice helper into a shared `countryCodeToAlpha2`. diff --git a/.changeset/server-dev-survive-codegen.md b/.changeset/server-dev-survive-codegen.md deleted file mode 100644 index b7805cb415..0000000000 --- a/.changeset/server-dev-survive-codegen.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@accounter/server': patch ---- - -Keep `yarn server:dev` running when a rebuild fails while `yarn generate:watch` regenerates types. - -`tsc` exits with code 2 on type errors, which nodemon reserves for a malformed `--exec` command when -it happens within 500 ms of the last watched file event. Codegen writing `__generated__` files -mid-build hit that window, so nodemon stopped instead of waiting for the next change. The `--exec` -command now ends in `|| exit 1`, turning such failures into an ordinary crash that the pending -restart recovers from. diff --git a/.changeset/shared-url-filter-utils.md b/.changeset/shared-url-filter-utils.md deleted file mode 100644 index ac28fa1d79..0000000000 --- a/.changeset/shared-url-filter-utils.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/client': patch ---- - -Fix back / forward on the businesses page filter. Going back to the entry the page was loaded on now -restores that entry's filter; it used to keep showing the newer one. Opening a link whose filter is -spelled differently from the page's own (another key order, `null` values, an invalid parameter) now -tidies the URL in place instead of adding a duplicate history entry. - -The URL filter handling behind it is now shared, so other pages can adopt it: `decodeFilters` next -to `encodeFilters`, `normalizeFilter` / `areFiltersEqual` for comparing filters regardless of key -order or unset values, and a `useUrlFilterState(param, schema)` hook. diff --git a/.changeset/split-securities-withholding-tax.md b/.changeset/split-securities-withholding-tax.md deleted file mode 100644 index b990fc5099..0000000000 --- a/.changeset/split-securities-withholding-tax.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': patch ---- - -Foreign-securities ledgers now book withheld tax to a local or a foreign tax category, by the -issuer's country (as the income line already does): `SecuritiesTaxCategoryKey` -`DIVIDEND_WITHHOLDING_TAX` and `BOND_WITHHOLDING_TAX` are replaced by -`FOREIGN_`/`LOCAL_DIVIDEND_WITHHOLDING_TAX` and `FOREIGN_`/`LOCAL_BOND_WITHHOLDING_TAX`. A migration -moves the tax category already set for each to its foreign key; the local ones start unset and are -asked for from the charge's ledger errors. Stored ledger records are not changed — regenerating a -charge's ledger suggests the new split. diff --git a/.changeset/timeless-date-strings.md b/.changeset/timeless-date-strings.md deleted file mode 100644 index 78f394d46b..0000000000 --- a/.changeset/timeless-date-strings.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/client': patch ---- - -Keep date-only values as `TimelessDateString` (`yyyy-mm-dd`) end to end, so calendar days no longer -shift with the server's or browser's timezone: - -- Postgres `date` / `date[]` columns are read as `yyyy-mm-dd` strings (custom node-pg type parsers) - and typed `TimelessDateString` by pgtyped (`typesOverrides`), instead of server-local `Date`s. -- `Charge.min/max{Event,Debit,Documents}Date` and `LedgerRecord` / `SingleSidedLedgerRecord` - `invoiceDate` / `valueDate` are now `TimelessDate` instead of `DateTime`: they return the day - (`2026-05-01`), not a timezone-dependent ISO timestamp. -- Server-side day arithmetic uses new timezone-independent helpers, fixing days that moved west of - UTC: VAT / PCN874 report months, document and bank-deposit date inputs, salary and reserve ledger - dates, revaluation dates, exchange-rate dates, corporate tax rates and more. -- The tenant's calendar days are reckoned in `Asia/Jerusalem` (a `TENANT_TIMEZONE` constant, to be - derived per tenant later) instead of the server's timezone: "today" (document dates and due - dates, default VAT month, contract billing month, sync windows), current-year checks, the day of - absolute instants (Otsar Hahayal and Poalim securities dates, balance-charge value dates) and the instant a day starts at (day-only crypto rate lookups, Green Invoice - `firstPayment`). -- `TimelessDateString` is now the pattern `${number}-${number}-${number}` instead of a union of - every day in 2000-2049, which kept server type-checking fast and allows earlier years. -- Client: the charges table, charge matching, ledger tables and CSV exports read these fields as - calendar days, and every `dd/MM/yy` date cell (transactions, documents, business trips, - depreciation, bank deposits) formats the `yyyy-mm-dd` string directly through a shared - `formatTimelessDate` helper instead of `new Date(...)`, which showed the previous day west of UTC. diff --git a/.changeset/unlink-chargeless-transactions-noop.md b/.changeset/unlink-chargeless-transactions-noop.md deleted file mode 100644 index ffc31f67c8..0000000000 --- a/.changeset/unlink-chargeless-transactions-noop.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/server': patch ---- - -`updateTransaction` / `updateTransactions` with `chargeId: EMPTY_UUID` on transactions that are not -linked to any charge no longer fail: the charge is left untouched (there is nothing to unlink) and -the other fields are still updated. The sentinel used to reach the SQL as-is, which tried to write -the nil UUID as the charge ID and failed on its foreign key. diff --git a/.changeset/vat-report-summary-client.md b/.changeset/vat-report-summary-client.md deleted file mode 100644 index dba8aa7102..0000000000 --- a/.changeset/vat-report-summary-client.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@accounter/client': minor ---- - -The VAT report summary card now shows the server's `summary`: the month's totals exactly as filed in -the PCN874 header. - -The card used to reduce the report rows itself, with its own definitions: taxable sales included -zero-VAT rows, "Equipment Inputs" was the pre-VAT amount of property expenses, and the total VAT -subtracted every expense row, including the entry types the PCN874 header leaves out. It now reads -`VatReportResult.summary` and computes nothing on its own. - -Labels follow the PCN874 meaning of each figure. "Taxable Sales Total" is now "Taxable Sales -Amount", "Equipment Inputs" is now "Equipment Inputs VAT" (a VAT amount, as filed), and "Total VAT -Amount" is now "Total VAT", marked as to pay or to receive. The card also shows "Other Inputs VAT" -and the sales and input record counts, and takes the currency from the server instead of assuming -ILS. - -Expect the numbers to change for some months. That is intended: where the card and the generated -PCN874 file disagreed, the card now shows what is filed. The summary always covers the whole month, -so it no longer changes with the charge type filter, and the card says so. diff --git a/.changeset/vat-report-summary-server.md b/.changeset/vat-report-summary-server.md deleted file mode 100644 index f12191c02a..0000000000 --- a/.changeset/vat-report-summary-server.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -'@accounter/server': minor ---- - -Add `VatReportResult.summary`, the monthly VAT totals as filed in the PCN874 header. - -Until now the VAT report's totals existed only on the client, as a reduction over the report rows -whose definitions differ from the PCN874 file: taxable sales included zero-VAT rows, "equipment -inputs" was a pre-VAT amount where the file reports VAT, and other inputs VAT and the record counts -were not computed at all. Any other consumer (the MCP connector, API users) would have had to -re-implement that logic, and would still disagree with what was filed. - -The new `summary: VatReportSummary!` field mirrors the PCN874 header: `taxableSalesAmount`, -`taxableSalesVat`, `salesRecordCount`, `zeroValOrExemptSalesAmount`, `otherInputsVat`, -`equipmentInputsVat`, `inputsCount` and `totalVat`, amounts as `FinancialAmount` in the local -currency. It goes through the PCN874 path itself rather than a parallel implementation: the header -totals are factored out of `getHeaderDataFromRecords` into `getPcn874Totals`, which no longer needs a -licensed dealer id, and both the file header and the summary are built from it over the records -`transactionsFromVatReportRecords` produces. - -The summary is the filed figure, so it always covers the whole month and ignores the `chargesType` -filter. When the report is requested without one, its own income and expenses already are that -month and are reused; when it is filtered, the month is fetched again exactly as `getPcn874String` -fetches it. It is a lazy field resolver, so queries that do not select `summary` pay nothing for it. - -The totals carry over the header's current coverage: entry types it does not handle yet (for example -`S2`, `Y` and `R`) are left out of the summary just as they are left out of the file. - -Fixed along the way: the VAT report and the PCN874 file parsed the requested month with -`new Date(monthDate)`, which reads a date-only string as UTC midnight. On a server west of UTC that -is the previous local day, so a first-of-month request covered the month before, and the PCN874 -file could even be stamped with the previous month. The month is now read from the date string's -year and month (`vatReportMonthStart`), for the report's date range, its VAT-date-override bounds, -and the PCN874 file. Servers at UTC or east of it are unaffected. diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 329288baab..2aea54b8cf 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,383 @@ # @accounter/client +## 1.1.0 + +### Minor Changes + +- [#4651](https://github.com/Urigo/accounter-fullstack/pull/4651) [`9a73cc9`](https://github.com/Urigo/accounter-fullstack/commit/9a73cc9e4477e3e747481e9a59bd1acce49c9260) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Filter the businesses directory server-side. `allBusinesses` takes a new `filters: BusinessFilter` + input, applied in SQL before the count and the page slice: + + - `name`: case-insensitive substring of the name or Hebrew name + - `taxCategoryIds` / `withoutTaxCategory` and `sortCodes` / `withoutSortCode`: a list match OR-ed + with a "has none" match, to find uncategorized businesses + - `countries` (the table's Locality), `isClient`, `isActive` and `isAdmin` + + `filters.name` and `filters.isClient` replace the top-level `name` and `isClient` arguments. + + The businesses page replaces its inline filter bar with a name search in the toolbar and a Filters + dialog (tax category, sort code and country multi-selects, Any / Yes / No for client, active and + admin, and "Unused only"). The applied filter is persisted in the `businessesFilters` URL parameter, + so filtered views can be linked to, reloaded, and walked with back / forward. A business selected + under one filter stays selected when a later filter hides it. + +- [#4790](https://github.com/Urigo/accounter-fullstack/pull/4790) [`46435ea`](https://github.com/Urigo/accounter-fullstack/commit/46435ea8cf97c481682b8c921fe54273d31b79c1) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add a CPI linkage calculator page (Reports → CPI Linkage Calculator, `/reports/cpi-calculator`), + built on the `priceIndexLinkage` and `priceIndexValues` queries. It links an amount between two + dates by the "known" index (Income Tax Ordinance s.88) or the index for a month on each side, shows + the linked amount, linkage difference, change and both index values (including cross-base values), + and charts the monthly CPI over the range. The calculation is kept in the URL, so it can be shared. + +- [#4471](https://github.com/Urigo/accounter-fullstack/pull/4471) [`2e9364d`](https://github.com/Urigo/accounter-fullstack/commit/2e9364d8d4654fe4c2216e70dac487f51780d135) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add a re-run OCR action for documents stuck on `UNPROCESSED`. + + A batch of documents was inserted with `type = 'UNPROCESSED'` and no extracted information at all — + no amount, date, serial or counterparty — because the email-ingestion path catches every OCR failure + and falls back to `UNPROCESSED` (`email-ingestion-ingest.provider.ts`). The document is still + inserted and the ingest still reports `INSERTED` with its idempotency key persisted, so replaying + the source email answers `DUPLICATE` and cannot recover it. The Cloudinary `file_url` survives, + though, which is enough to extract from the file again. + + New mutations `reprocessDocumentOcr(documentId)` and `batchReprocessDocumentsOcr(documentIds)` + re-fetch that stored file through the existing SSRF-hardened `fetchRemoteDocument`, run it back + through `getOcrData`, and report which fields were filled. Surfaced in the client as a "Re-run OCR" + item in the document actions menu and, on the documents screen, a bulk button over the unprocessed + documents currently listed (pair it with the "Invalid documents only" filter). + + The write is additive on purpose: a column is filled only where the document is empty, so a value an + accountant corrected by hand is never overwritten. The exception is `documentType`, which is replaced + only while the document is still `UNPROCESSED`. A pass that extracts nothing new writes nothing at + all, rather than bumping `updated_at` and dragging the charge's accountant approval back to `PENDING` + for no gain. + + That rule is enforced by the UPDATE statement rather than by the caller. Minutes pass between reading + a document and writing it back, and deciding which columns are blank from the pre-OCR read would mean + overwriting a field an accountant filled during the extraction, using a decision made before they + touched it. `COALESCE(column, $param)` — the reverse of the usual argument order — makes "never + overwrite" a property of the statement, and repeating the conditions in its `WHERE` clause keeps a + pass with nothing to contribute from matching any row at all. + + The document's owner is checked against the request's write target up front. Reads span the whole + business scope while writes are pinned to one business, so the all-documents screen can list a row + this request cannot write to; catching that late would mean paying for a download and an OCR call + first. + + The documents table gains a selection column, keyed by document id so a selection survives paging, + sorting and filtering, and a batch menu beside it offering "Re-run OCR" and "Delete" over the + selected rows. It also gains an opt-in `preview` column showing each document's stored image, + hidden by default because it costs one image request per visible row. + + When the stored original cannot be sent to OCR — the two MIME allowlists in play disagree in both + directions, so a GIF is refused by the fetch layer and a HEIC is refused by the model — the Cloudinary + `.jpg` derivative is used instead rather than failing. + + Two limits worth knowing. Nothing in the schema records whether OCR ever ran, failed, or was + deliberately skipped, so the action cannot tell a recoverable failure from a document that will + always be unreadable — retrying the latter costs an OCR pass and changes nothing. And the mutation + holds the request open for the whole extraction (tens of seconds per document, no job queue in this + server), which is why a batch is capped at 20 documents and runs three at a time. + +- [#4669](https://github.com/Urigo/accounter-fullstack/pull/4669) [`e12d29b`](https://github.com/Urigo/accounter-fullstack/commit/e12d29bd67edffd02220d0f45d502c29352c7f08) Thanks [@gilgardosh](https://github.com/gilgardosh)! - A charge's ledger errors now offer a quick-fix for each missing securities tax category (dividend + and bond interest income, withholding tax, gain/loss from sale of foreign securities): pick an + existing tax category, or create one under the securities sort code (optionally remembering that + sort code). The choice is saved for future securities charges and the charge's ledger is + regenerated with it. + +- [#4610](https://github.com/Urigo/accounter-fullstack/pull/4610) [`915b906`](https://github.com/Urigo/accounter-fullstack/commit/915b906c13b6668d49e94c817914c64a40929ad4) Thanks [@gilgardosh](https://github.com/gilgardosh)! - The VAT report summary card now shows the server's `summary`: the month's totals exactly as filed in + the PCN874 header. + + The card used to reduce the report rows itself, with its own definitions: taxable sales included + zero-VAT rows, "Equipment Inputs" was the pre-VAT amount of property expenses, and the total VAT + subtracted every expense row, including the entry types the PCN874 header leaves out. It now reads + `VatReportResult.summary` and computes nothing on its own. + + Labels follow the PCN874 meaning of each figure. "Taxable Sales Total" is now "Taxable Sales + Amount", "Equipment Inputs" is now "Equipment Inputs VAT" (a VAT amount, as filed), and "Total VAT + Amount" is now "Total VAT", marked as to pay or to receive. The card also shows "Other Inputs VAT" + and the sales and input record counts, and takes the currency from the server instead of assuming + ILS. + + Expect the numbers to change for some months. That is intended: where the card and the generated + PCN874 file disagreed, the card now shows what is filed. The summary always covers the whole month, + so it no longer changes with the charge type filter, and the card says so. + +### Patch Changes + +- [#4571](https://github.com/Urigo/accounter-fullstack/pull/4571) [`d394530`](https://github.com/Urigo/accounter-fullstack/commit/d394530d88cdc1243de19bd7a804acdc3fb26eac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@auth0/auth0-react@2.28.2` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.28.2) (from `2.28.0`, in `dependencies`) + - Updated dependency [`@tanstack/react-table@9.2.5` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.2.5) (from `9.2.4`, in `dependencies`) + - Updated dependency [`dotenv@18.0.5` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.5) (from `18.0.4`, in `dependencies`) + - Updated dependency [`react-day-picker@10.0.2` ↗︎](https://www.npmjs.com/package/react-day-picker/v/10.0.2) (from `10.0.1`, in `dependencies`) + +- [#4587](https://github.com/Urigo/accounter-fullstack/pull/4587) [`5520c9a`](https://github.com/Urigo/accounter-fullstack/commit/5520c9a303d38e3056183cc194914ac447bf9454) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.49.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.49.0) (from `1.48.0`, in `dependencies`) + +- [#4588](https://github.com/Urigo/accounter-fullstack/pull/4588) [`51ad19b`](https://github.com/Urigo/accounter-fullstack/commit/51ad19b3a67265cb64aeae1e1453ac69b73c0eeb) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`html2canvas-pro@2.5.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.5.1) (from `2.4.5`, in `dependencies`) + +- [#4593](https://github.com/Urigo/accounter-fullstack/pull/4593) [`dc1d52f`](https://github.com/Urigo/accounter-fullstack/commit/dc1d52f91eb54398fc55620a188c8c79760aae4f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@auth0/auth0-react@2.28.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.28.0) (from `2.27.0`, in `dependencies`) + +- [#4597](https://github.com/Urigo/accounter-fullstack/pull/4597) [`474239d`](https://github.com/Urigo/accounter-fullstack/commit/474239da1aac5ea507fd5feccddbf603e44fca8d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`pdfjs-dist@6.4.299` ↗︎](https://www.npmjs.com/package/pdfjs-dist/v/6.4.299) (from `6.3.289`, in `dependencies`) + +- [#4598](https://github.com/Urigo/accounter-fullstack/pull/4598) [`0d4ffe6`](https://github.com/Urigo/accounter-fullstack/commit/0d4ffe68419de4c4fab8e2a2e5c4cb873800ccc6) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`simple-icons@16.34.0` ↗︎](https://www.npmjs.com/package/simple-icons/v/16.34.0) (from `16.33.0`, in `dependencies`) + +- [#4599](https://github.com/Urigo/accounter-fullstack/pull/4599) [`a73eb6a`](https://github.com/Urigo/accounter-fullstack/commit/a73eb6acfe3f61f96f84e1c7967caf4007288109) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.51.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.51.0) (from `1.49.0`, in `dependencies`) + +- [#4601](https://github.com/Urigo/accounter-fullstack/pull/4601) [`3743aff`](https://github.com/Urigo/accounter-fullstack/commit/3743aff712cf69e69333bbd4783ea30f1dd1fa97) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@tanstack/react-table@9.2.6` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.2.6) (from `9.2.5`, in `dependencies`) + +- [#4608](https://github.com/Urigo/accounter-fullstack/pull/4608) [`5dda59a`](https://github.com/Urigo/accounter-fullstack/commit/5dda59ac30a23d721d39e36fe80fd64f0df35944) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.52.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.52.0) (from `1.51.0`, in `dependencies`) + +- [#4624](https://github.com/Urigo/accounter-fullstack/pull/4624) [`dbf9882`](https://github.com/Urigo/accounter-fullstack/commit/dbf988287aef6cb34dc090923db2d4f35d9e6ced) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`radix-ui@1.7.0` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.7.0) (from `1.6.7`, in `dependencies`) + +- [#4634](https://github.com/Urigo/accounter-fullstack/pull/4634) [`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@tanstack/react-table@9.2.8` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.2.8) (from `9.2.6`, in `dependencies`) + - Updated dependency [`dotenv@18.0.7` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.7) (from `18.0.5`, in `dependencies`) + - Updated dependency [`html2canvas-pro@2.5.2` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.5.2) (from `2.5.1`, in `dependencies`) + +- [#4645](https://github.com/Urigo/accounter-fullstack/pull/4645) [`5097b5e`](https://github.com/Urigo/accounter-fullstack/commit/5097b5e719d058a7c84c0fe55a6d099289ec1e68) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@mui/material@9.5.0` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.5.0) (from `9.4.0`, in `dependencies`) + +- [#4650](https://github.com/Urigo/accounter-fullstack/pull/4650) [`17d79c9`](https://github.com/Urigo/accounter-fullstack/commit/17d79c9a794f164297bef2330e87062ce0bc5172) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.55.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.55.0) (from `1.52.0`, in `dependencies`) + +- [#4654](https://github.com/Urigo/accounter-fullstack/pull/4654) [`e75b439`](https://github.com/Urigo/accounter-fullstack/commit/e75b43955e8b161cbd859aeb4ef33d546e0ff69e) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`simple-icons@16.35.0` ↗︎](https://www.npmjs.com/package/simple-icons/v/16.35.0) (from `16.34.0`, in `dependencies`) + +- [#4656](https://github.com/Urigo/accounter-fullstack/pull/4656) [`d316b7b`](https://github.com/Urigo/accounter-fullstack/commit/d316b7bc167a0a0a0857ce937578e41510c51f35) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`react-hook-form@7.90.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.90.0) (from `7.89.0`, in `dependencies`) + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + +- [#4668](https://github.com/Urigo/accounter-fullstack/pull/4668) [`9666151`](https://github.com/Urigo/accounter-fullstack/commit/966615176f3ba7343ae267d244fd6cf8f21fe034) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`radix-ui@1.8.1` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.8.1) (from `1.7.0`, in `dependencies`) + +- [#4683](https://github.com/Urigo/accounter-fullstack/pull/4683) [`088fa89`](https://github.com/Urigo/accounter-fullstack/commit/088fa89321fc57dac3766097a9fd3cdabb2042b9) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@tanstack/react-table@9.3.1` ↗︎](https://www.npmjs.com/package/@tanstack/react-table/v/9.3.1) (from `9.2.8`, in `dependencies`) + +- [#4684](https://github.com/Urigo/accounter-fullstack/pull/4684) [`8a9c5be`](https://github.com/Urigo/accounter-fullstack/commit/8a9c5be6042af604d8ca8058aa1a0b0965579cfc) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.58.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.58.0) (from `1.55.0`, in `dependencies`) + +- [#4694](https://github.com/Urigo/accounter-fullstack/pull/4694) [`eebf9fb`](https://github.com/Urigo/accounter-fullstack/commit/eebf9fb4ff14f444e27f5b80697d046098b16c76) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.57.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.57.0) (from `1.55.0`, in `dependencies`) + +- [#4725](https://github.com/Urigo/accounter-fullstack/pull/4725) [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@hookform/resolvers@5.9.2` ↗︎](https://www.npmjs.com/package/@hookform/resolvers/v/5.9.2) (from `5.9.1`, in `dependencies`) + - Updated dependency [`dotenv@18.0.8` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.8) (from `18.0.7`, in `dependencies`) + - Updated dependency [`react@19.3.1` ↗︎](https://www.npmjs.com/package/react/v/19.3.1) (from `19.3.0`, in `dependencies`) + - Updated dependency [`react-dom@19.3.1` ↗︎](https://www.npmjs.com/package/react-dom/v/19.3.1) (from `19.3.0`, in `dependencies`) + +- [#4735](https://github.com/Urigo/accounter-fullstack/pull/4735) [`7f7ba52`](https://github.com/Urigo/accounter-fullstack/commit/7f7ba5207ac712488aa318477d54145e19c67079) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.58.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.58.0) (from `1.57.0`, in `dependencies`) + +- [#4739](https://github.com/Urigo/accounter-fullstack/pull/4739) [`e016edf`](https://github.com/Urigo/accounter-fullstack/commit/e016edf873da7b3018c4ab6a1b5e97e3fca3feac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) + +- [#4741](https://github.com/Urigo/accounter-fullstack/pull/4741) [`780fb53`](https://github.com/Urigo/accounter-fullstack/commit/780fb535e6bddc17be536b36f5f2cafc27231762) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@hookform/resolvers@6.0.0` ↗︎](https://www.npmjs.com/package/@hookform/resolvers/v/6.0.0) (from `5.9.2`, in `dependencies`) + +- [#4780](https://github.com/Urigo/accounter-fullstack/pull/4780) [`793503f`](https://github.com/Urigo/accounter-fullstack/commit/793503fb68471a79873c86f572509f783230935f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@hookform/resolvers@6.0.0` ↗︎](https://www.npmjs.com/package/@hookform/resolvers/v/6.0.0) (from `5.9.2`, in `dependencies`) + - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) + +- [#4782](https://github.com/Urigo/accounter-fullstack/pull/4782) [`12a3ede`](https://github.com/Urigo/accounter-fullstack/commit/12a3ede0448264b9d8c68d51a7ffb5126297d6bb) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`zustand@5.0.16` ↗︎](https://www.npmjs.com/package/zustand/v/5.0.16) (from `5.0.15`, in `dependencies`) + +- [#4799](https://github.com/Urigo/accounter-fullstack/pull/4799) [`5fef4f2`](https://github.com/Urigo/accounter-fullstack/commit/5fef4f28da8b40d0f4ee44cecf76bd83a32442f3) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`chart.js@4.6.1` ↗︎](https://www.npmjs.com/package/chart.js/v/4.6.1) (from `4.5.1`, in `dependencies`) + +- [#4805](https://github.com/Urigo/accounter-fullstack/pull/4805) [`58706cd`](https://github.com/Urigo/accounter-fullstack/commit/58706cdbdb2a69e3c4b0a1f360645216c3314c1c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`react-hook-form@7.91.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.91.0) (from `7.90.0`, in `dependencies`) + +- [#4764](https://github.com/Urigo/accounter-fullstack/pull/4764) [`c659e6f`](https://github.com/Urigo/accounter-fullstack/commit/c659e6f3188c39a255c85c3a02c112b3dcf9234a) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Approving a transaction's suggested counterparty (or creating a new business for it) in a charge's + transactions table now refetches the charge, instead of leaving it stale until the page reloads. + +- [#4795](https://github.com/Urigo/accounter-fullstack/pull/4795) [`fec829a`](https://github.com/Urigo/accounter-fullstack/commit/fec829a0a24a5802bed25f2a9631110a7039d502) Thanks [@gilgardosh](https://github.com/gilgardosh)! - The charge's Foreign Securities panel now falls back to the security's business when the bank's + reference list has no entry for its key. That happens for securities closed out before the list was + scraped, such as a redeemed bond. The panel shows the business's name, symbol and descriptor badges + instead of a "not found" message, and leads with the ISIN in both cases. The security's name links + straight to its business's Security tab. The panel and the Security tab now share one heading + component, so the two show a security the same way. + +- [#4794](https://github.com/Urigo/accounter-fullstack/pull/4794) [`488cf25`](https://github.com/Urigo/accounter-fullstack/commit/488cf25e9fb536ffe527d377a8eaec0e16941840) Thanks [@gilgardosh](https://github.com/gilgardosh)! - The charge security header now takes its "Foreign" badge from the security business, judged + against the tenant's locality, instead of the bank's raw flag. + `Security.isForeign` is deprecated in favor of `ChargeSecurity.securityBusiness.isForeign`. + +- [#4665](https://github.com/Urigo/accounter-fullstack/pull/4665) [`f762f79`](https://github.com/Urigo/accounter-fullstack/commit/f762f7986dcd7735b18c3d3c1aa18a2ad87098b7) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix back / forward and "Clear all" on the charges and documents pages. + + - **Back / forward** now restore the filter on All Charges, Missing Info, Ledger Validation, + Accountant Approvals and Documents, and on the two paginated charges screens (All Charges and + Missing Info) the page along with it. Before, going back after paging or re-filtering left the + list where it was, and could push a stale entry that wiped the forward history. + - **One history entry per change.** Applying a filter used to add two entries (one for the filter, + one for resetting the page), and Accountant Approvals added one just for being opened. + - **"Clear all" and "Reset" in the charges filters** now clear what they show. A dialog opened over + an applied filter used to keep fields like owners and the date range in the form state, so Apply + sent them again. + - Filters in the URL are validated when the page reads them, so a stale or hand-edited link falls + back to no filter instead of failing the query. + + On All Charges, Ledger Validation and Documents, going back to an entry with no filter shows the + unfiltered state again instead of the previous filter's results. On Documents this includes + "Clear", which now empties the list instead of loading every document, the same as opening the page + without a filter. + +- [#4720](https://github.com/Urigo/accounter-fullstack/pull/4720) [`5fa4a10`](https://github.com/Urigo/accounter-fullstack/commit/5fa4a102aa9fed02d7a67df831fcc4bd81216eea) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix the page becoming unclickable after closing a drawer (edit charge, insert document, edit + document, document image) opened from the charge or document actions menu. The menus are now + non-modal, so the drawer no longer restores a stale `pointer-events: none` on `` when it + closes. + +- [#3852](https://github.com/Urigo/accounter-fullstack/pull/3852) [`c5b26c0`](https://github.com/Urigo/accounter-fullstack/commit/c5b26c0cd268032c12d0c8cee110c9313c4981ce) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Reject duplicate and overlapping entries in a business' list inputs. + + Email lists — general contacts, billing emails, auto-match recognition emails, and the emails in the + client dialog — no longer accept the same address twice, compared case-insensitively. Internal email + links reject an exact repeat, which would otherwise fetch the same documents twice. Auto-match + phrases reject a phrase that repeats or contains / is contained in another: adding `GOOGLE` when + `GOOGL` exists says it is already covered, and adding `GOOGL` when `GOOGLE` exists asks to remove + `GOOGLE` first. Conflicts are blocked when the entry is added, with an inline message, and again by + the form schemas on submit. + + Phrases and links are compared case-sensitively, because that is how they are used: transaction and + charge suggestions match with a case-sensitive `description.includes(phrase)`, so `GOOGLE` and + `Google` match different descriptions and both may be needed. + + On the server, every write of a business' suggestion data (insert, update, batch update, merge) and + every client email write drops entries that are redundant without changing what matches: exact + repeats of phrases and internal links, and case-insensitive repeats of emails. Overlapping phrases + are deliberately left alone there. The configuration tab re-sends the full phrase list on every + save, so pruning `["GOOGL", "GOOGLE"]` down to one would silently change matching for businesses + that already hold both. + +- [#4796](https://github.com/Urigo/accounter-fullstack/pull/4796) [`eeea419`](https://github.com/Urigo/accounter-fullstack/commit/eeea419fee7c4c61f164952fda3a64fef5742d0b) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Resolve the counterparty of a foreign-securities charge that holds trades of more than one + security. Each traded security is its own business, so a charge that held two of them had two + counterparty candidates, no counterparty, and was flagged as missing one. + + - When another security in the same charge was bought or sold, a security whose trades cancel out + within the charge (a buy reversed by a sell of the same amount, as when a trade is rebooked to + another series) no longer competes with it for the counterparty. A reversal on its own is still + the charge's subject: a charge holding only a buy and the sell that cancels it keeps that + security as its counterparty, and a reversed security is never dropped in favour of a candidate + that is not a security. Fees are left out of the netting, which is rounded to the cent. This + applies to both the single-charge path and the charges list. + - A charge spanning several securities with real exposure in each (say, a switch from one fund to + another) has no single counterparty and is no longer flagged as missing one, provided every + candidate is a traded security. The tenant's general foreign-securities business, which stands + for an unrecognized trade, does not count as one, so such a charge is still flagged. + - A stock distribution's charge, which books the execution directly and holds no transaction, + takes the distributed security's business as its counterparty (found by the execution's Poalim + key, or its ISIN). Before, it had no counterparty at all. A merged-in commission fee doesn't + change that. + - The securities ledger books its main entries in the transactions' order rather than the order + their lookups finish, and lets every bought security whose balance across the charge is still a + debit keep it as a holding. Before, only the first booked main entry was allowed to stay + unbalanced, so on a charge buying two securities the other one was reported as unbalanced; a + security sold beyond what the charge bought is still reported. + - New GraphQL fields: `ForeignSecuritiesCharge.counterparties` (the main-counterparty candidates), + and `ChargeSecurity.netAmount` and `ChargeSecurity.isOffsetting`. Both read the charge's + transactions by the security's business, so a security is offsetting exactly when it was left + out of `counterparties`. + - The charges table shows "N securities", with a popover listing them, instead of a red "Missing" + for a multi-security charge. On a charge of several securities, the Foreign Securities section + shows each security's role: main counterparty, counterparty k of N, or nets to zero. Securities + that cancel out are dimmed and listed last. Every security shows its net amount. + +- [#4830](https://github.com/Urigo/accounter-fullstack/pull/4830) [`6e997ca`](https://github.com/Urigo/accounter-fullstack/commit/6e997ca4311e7720c81bac16e9140257ee7c06b8) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book the exchange-rate part of a securities sale or redemption apart from its price part. A second, + local-currency entry books each lot's cost × the change since the rate the securities account + carries it at: the rate the purchase's cash movement was booked at (a dividend in kind's value + date), or the rate of the last revaluation of the account it was held over, read from the + revaluations actually booked. The account then gives up exactly what it carried the units at. + + - **New securities tax categories:** exchange-rate gain and loss on the sale of foreign securities. + They are offered from the charge's ledger errors like the others, and can be pointed at the + exchange-revaluation category to merge them. + - Until they are set, or when a purchase's cash movement is not found, the disposal is still + booked, without the rate entry, and the year-end revaluation takes the rate PnL up as before. + +- [#4785](https://github.com/Urigo/accounter-fullstack/pull/4785) [`13fa09e`](https://github.com/Urigo/accounter-fullstack/commit/13fa09ee95f9527d24f844643ccec662ad64d408) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book Poalim stock distributions paid as a dividend in kind. Such an execution has no cash leg, so no + bank transaction ever brought it into a charge and nothing booked it. + + - Ingesting securities executions now creates a `FOREIGN_SECURITIES` charge for each dividend in + kind no charge books yet, and links the two in the new `charges_securities_executions` table. + Cancelled distributions, distributions the bank later cancelled, and executions in a locked + ledger period are skipped. The check runs over the + whole owner, so distributions ingested earlier are picked up by the next upload. + - The securities ledger books each linked distribution as Dr Foreign Securities [trade currency] / + Cr foreign or local dividend income (by the issuer's locality), at the gross value of the shares + and the ledger's exchange rate. A bank rate that differs is reported as a ledger error; withheld + tax, a cancelled distribution and distributions other than a dividend in kind are reported and + not booked. + - The commission check now covers distributions. When the bank's commission fee sits in a charge of + its own, the error asks to merge it into the distribution's charge. + - A linked execution counts as charge content: the charge is not cleaned up as empty (deleting it + explicitly dismisses the distribution, so the next upload does not recreate it), a merge moves + the link (and types the merged charge as foreign securities), validation stops asking it for + transactions or a counterparty, and the charges list filters and sorts it by the execution's date. + - Units received as a dividend in kind now cost their gross value in the FIFO cost basis, so a + later sale or redemption of them can be booked. + - The charge's securities section and the security's history show the linked execution, and the + executions table gains a gross value column. + +- [#4749](https://github.com/Urigo/accounter-fullstack/pull/4749) [`e004303`](https://github.com/Urigo/accounter-fullstack/commit/e004303293857a4b29153199902aef9a09b1eb6a) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop double counting Israeli withheld tax on securities executions. The bank reports the Israeli tax + withheld from a dividend or interest payment in both `israel_tax_value_by_payments_settlement_currency` + and `capital_tax_value_settlement_currency`, and the foreign-securities ledger added the two, so it + booked twice the tax (and an inflated gross income) and flagged every such charge with "withheld tax + … does not match gross minus net". The capital tax column now only stands in when the Israeli column + is empty. The executions table no longer lists a capital tax line that repeats the Israeli one, and + the `capitalTaxValue` schema description and MCP securities tool say it is not additive. Regenerate the + ledger of affected charges. + +- [#4730](https://github.com/Urigo/accounter-fullstack/pull/4730) [`d273736`](https://github.com/Urigo/accounter-fullstack/commit/d2737367ed4d589ba936db665c261a261d9c1c14) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Show the tax withheld from a security execution in its own currency. `SecurityExecution` gains + `foreignTaxValue`, `israelTaxValueByPayments` and `capitalTaxValue` — the bank's per-kind withheld + tax, in the settlement currency, which the ledger already books. Until now only `israelTaxValue` + was exposed, so a foreign dividend's tax withheld abroad never showed. `israelTaxValue` itself is now + formatted in the trade currency: the bank's `israe_tax_value` is not in ILS, so it was mislabelled ₪. The + executions table's Tax column lists each non-zero kind, with the Israeli tax figure under them, and the MCP + securities and charge-details tools return the new fields. + +- [#4657](https://github.com/Urigo/accounter-fullstack/pull/4657) [`f60c513`](https://github.com/Urigo/accounter-fullstack/commit/f60c5131d9f6cd86cfe3daa37d20752ca91b2f1a) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix back / forward on the businesses page filter. Going back to the entry the page was loaded on now + restores that entry's filter; it used to keep showing the newer one. Opening a link whose filter is + spelled differently from the page's own (another key order, `null` values, an invalid parameter) now + tidies the URL in place instead of adding a duplicate history entry. + + The URL filter handling behind it is now shared, so other pages can adopt it: `decodeFilters` next + to `encodeFilters`, `normalizeFilter` / `areFiltersEqual` for comparing filters regardless of key + order or unset values, and a `useUrlFilterState(param, schema)` hook. + +- [#4731](https://github.com/Urigo/accounter-fullstack/pull/4731) [`71db49d`](https://github.com/Urigo/accounter-fullstack/commit/71db49dcfb3630fbe9765bcea0c082224da1e0b3) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Foreign-securities ledgers now book withheld tax to a local or a foreign tax category, by the + issuer's country (as the income line already does): `SecuritiesTaxCategoryKey` + `DIVIDEND_WITHHOLDING_TAX` and `BOND_WITHHOLDING_TAX` are replaced by + `FOREIGN_`/`LOCAL_DIVIDEND_WITHHOLDING_TAX` and `FOREIGN_`/`LOCAL_BOND_WITHHOLDING_TAX`. A migration + moves the tax category already set for each to its foreign key; the local ones start unset and are + asked for from the charge's ledger errors. Stored ledger records are not changed — regenerating a + charge's ledger suggests the new split. + +- [#4592](https://github.com/Urigo/accounter-fullstack/pull/4592) [`66402a5`](https://github.com/Urigo/accounter-fullstack/commit/66402a500987c81b2d3fc530694b0f996430983c) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Keep date-only values as `TimelessDateString` (`yyyy-mm-dd`) end to end, so calendar days no longer + shift with the server's or browser's timezone: + + - Postgres `date` / `date[]` columns are read as `yyyy-mm-dd` strings (custom node-pg type parsers) + and typed `TimelessDateString` by pgtyped (`typesOverrides`), instead of server-local `Date`s. + - `Charge.min/max{Event,Debit,Documents}Date` and `LedgerRecord` / `SingleSidedLedgerRecord` + `invoiceDate` / `valueDate` are now `TimelessDate` instead of `DateTime`: they return the day + (`2026-05-01`), not a timezone-dependent ISO timestamp. + - Server-side day arithmetic uses new timezone-independent helpers, fixing days that moved west of + UTC: VAT / PCN874 report months, document and bank-deposit date inputs, salary and reserve ledger + dates, revaluation dates, exchange-rate dates, corporate tax rates and more. + - The tenant's calendar days are reckoned in `Asia/Jerusalem` (a `TENANT_TIMEZONE` constant, to be + derived per tenant later) instead of the server's timezone: "today" (document dates and due + dates, default VAT month, contract billing month, sync windows), current-year checks, the day of + absolute instants (Otsar Hahayal and Poalim securities dates, balance-charge value dates) and the instant a day starts at (day-only crypto rate lookups, Green Invoice + `firstPayment`). + - `TimelessDateString` is now the pattern `${number}-${number}-${number}` instead of a union of + every day in 2000-2049, which kept server type-checking fast and allows earlier years. + - Client: the charges table, charge matching, ledger tables and CSV exports read these fields as + calendar days, and every `dd/MM/yy` date cell (transactions, documents, business trips, + depreciation, bank deposits) formats the `yyyy-mm-dd` string directly through a shared + `formatTimelessDate` helper instead of `new Date(...)`, which showed the previous day west of UTC. + ## 1.0.0 ### Major Changes diff --git a/packages/client/package.json b/packages/client/package.json index 6668a4131d..fd500cbf18 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/client", - "version": "1.0.0", + "version": "1.1.0", "type": "module", "description": "Accounter client application", "repository": { diff --git a/packages/green-invoice-graphql/CHANGELOG.md b/packages/green-invoice-graphql/CHANGELOG.md index 9fcfb3ed62..ef544ae621 100644 --- a/packages/green-invoice-graphql/CHANGELOG.md +++ b/packages/green-invoice-graphql/CHANGELOG.md @@ -1,5 +1,55 @@ # @accounter-toolkit/green-invoice-graphql +## 0.9.0 + +### Minor Changes + +- [#4632](https://github.com/Urigo/accounter-fullstack/pull/4632) [`0aecf53`](https://github.com/Urigo/accounter-fullstack/commit/0aecf535d624a3f4c233075e8fde6faac67f4053) Thanks [@renovate](https://github.com/apps/renovate)! - Generate the SDK with GraphQL Code Generator v6 (`typescript` 6, `typescript-operations` 6). Schema + types now live in their own generated module (still re-exported from the package root), and operation + result types follow the v6 nullability rules: a nullable field is typed `T | null` and is always + present, instead of optional (`field?: T | null`). + +- [#4592](https://github.com/Urigo/accounter-fullstack/pull/4592) [`66402a5`](https://github.com/Urigo/accounter-fullstack/commit/66402a500987c81b2d3fc530694b0f996430983c) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Type the Green Invoice `Date` scalar as a `yyyy-mm-dd` string pattern + (`` `${number}-${number}-${number}` ``) instead of `string`, matching the server's + `TimelessDateString`, so document dates need no type assertion downstream. + +- [#529](https://github.com/Urigo/accounter-fullstack/pull/529) [`abd0493`](https://github.com/Urigo/accounter-fullstack/commit/abd0493a80c7da683ac67ac268a45abec9e8f936) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Migrate from GraphQL Mesh v0 to v1. The REST API is now composed with `mesh-compose` into a supergraph, + the typed SDK is generated with GraphQL Code Generator, and operations run in-process through + `@graphql-mesh/fusion-runtime`. The public API is unchanged (`init`, `getMeshSDK`, `Sdk` and the + generated type names), and the runtime Mesh dependencies drop from eight packages to two. + `getMeshSDK` also accepts an optional `fetch` in its context, for example to run tests offline. + The `GreenInvoiceNew` source is split into `GreenInvoiceFileUpload` and `GreenInvoiceOpenBanking` + so that each sets its `queryStringOptions` at source level, the only level Mesh's config accepts + (this also removes the `Configuration file is not valid!` warnings v0's `mesh build` printed). The + query strings sent to the API are unchanged. + +### Patch Changes + +- [#4634](https://github.com/Urigo/accounter-fullstack/pull/4634) [`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-mesh/fusion-runtime@1.12.3` ↗︎](https://www.npmjs.com/package/@graphql-mesh/fusion-runtime/v/1.12.3) (from `1.12.1`, in `dependencies`) + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-mesh/transport-rest@0.12.3` ↗︎](https://www.npmjs.com/package/@graphql-mesh/transport-rest/v/0.12.3) (from `0.12.2`, in `dependencies`) + +- [#4725](https://github.com/Urigo/accounter-fullstack/pull/4725) [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-mesh/transport-rest@0.12.4` ↗︎](https://www.npmjs.com/package/@graphql-mesh/transport-rest/v/0.12.4) (from `0.12.3`, in `dependencies`) + +- [#4801](https://github.com/Urigo/accounter-fullstack/pull/4801) [`66464f8`](https://github.com/Urigo/accounter-fullstack/commit/66464f894b95cc5abb558c3a73bdb1ddc243ff14) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-mesh/fusion-runtime@1.13.0` ↗︎](https://www.npmjs.com/package/@graphql-mesh/fusion-runtime/v/1.13.0) (from `1.12.3`, in `dependencies`) + +- [#529](https://github.com/Urigo/accounter-fullstack/pull/529) [`abd0493`](https://github.com/Urigo/accounter-fullstack/commit/abd0493a80c7da683ac67ac268a45abec9e8f936) Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Added dependency [`@graphql-mesh/fusion-runtime@1.12.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/fusion-runtime/v/1.12.1) (to `dependencies`) + - Added dependency [`@graphql-mesh/transport-rest@0.12.2` ↗︎](https://www.npmjs.com/package/@graphql-mesh/transport-rest/v/0.12.2) (to `dependencies`) + - Removed dependency [`@graphql-mesh/config@0.111.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/config/v/0.111.1) (from `dependencies`) + - Removed dependency [`@graphql-mesh/cross-helpers@0.4.16` ↗︎](https://www.npmjs.com/package/@graphql-mesh/cross-helpers/v/0.4.16) (from `dependencies`) + - Removed dependency [`@graphql-mesh/http@0.109.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/http/v/0.109.1) (from `dependencies`) + - Removed dependency [`@graphql-mesh/json-schema@0.112.4` ↗︎](https://www.npmjs.com/package/@graphql-mesh/json-schema/v/0.112.4) (from `dependencies`) + - Removed dependency [`@graphql-mesh/runtime@0.109.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/runtime/v/0.109.1) (from `dependencies`) + - Removed dependency [`@graphql-mesh/store@0.107.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/store/v/0.107.1) (from `dependencies`) + - Removed dependency [`@graphql-mesh/types@0.107.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.107.1) (from `dependencies`) + - Removed dependency [`@graphql-mesh/utils@0.107.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.107.1) (from `dependencies`) + - Removed dependency [`path@0.12.7` ↗︎](https://www.npmjs.com/package/path/v/0.12.7) (from `dependencies`) + ## 0.8.7 ### Patch Changes diff --git a/packages/green-invoice-graphql/package.json b/packages/green-invoice-graphql/package.json index 9d2587a587..8fa2611171 100644 --- a/packages/green-invoice-graphql/package.json +++ b/packages/green-invoice-graphql/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/green-invoice-graphql", - "version": "0.8.7", + "version": "0.9.0", "type": "module", "description": "Graphql proxy for Green Invoice API", "repository": { diff --git a/packages/israeli-vat-scraper/CHANGELOG.md b/packages/israeli-vat-scraper/CHANGELOG.md index f47a3c5942..0d2a8e7042 100644 --- a/packages/israeli-vat-scraper/CHANGELOG.md +++ b/packages/israeli-vat-scraper/CHANGELOG.md @@ -1,5 +1,27 @@ # @accounter-toolkit/israeli-vat-scraper +## 0.1.14 + +### Patch Changes + +- [#4643](https://github.com/Urigo/accounter-fullstack/pull/4643) [`0cec65f`](https://github.com/Urigo/accounter-fullstack/commit/0cec65f89583a24fd86ff49c884b555a51e6866a) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.13.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.13.0) (from `25.12.0`, in `dependencies`) + +- [#4684](https://github.com/Urigo/accounter-fullstack/pull/4684) [`8a9c5be`](https://github.com/Urigo/accounter-fullstack/commit/8a9c5be6042af604d8ca8058aa1a0b0965579cfc) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) + +- [#4723](https://github.com/Urigo/accounter-fullstack/pull/4723) [`35a00dd`](https://github.com/Urigo/accounter-fullstack/commit/35a00dd2b79ef43c684be0dcb74fb8a80b88320e) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) + +- [#4763](https://github.com/Urigo/accounter-fullstack/pull/4763) [`d4f979f`](https://github.com/Urigo/accounter-fullstack/commit/d4f979ff3ea72e7508db7801d3e74d9dccb6bbf9) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) + +- [#4780](https://github.com/Urigo/accounter-fullstack/pull/4780) [`793503f`](https://github.com/Urigo/accounter-fullstack/commit/793503fb68471a79873c86f572509f783230935f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) + +- [#4792](https://github.com/Urigo/accounter-fullstack/pull/4792) [`5e77e66`](https://github.com/Urigo/accounter-fullstack/commit/5e77e66344233868d7db934346ef4f91bd67197b) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.16.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.16.0) (from `25.15.0`, in `dependencies`) + ## 0.1.13 ### Patch Changes diff --git a/packages/israeli-vat-scraper/package.json b/packages/israeli-vat-scraper/package.json index 834faa2b49..cfd526bceb 100644 --- a/packages/israeli-vat-scraper/package.json +++ b/packages/israeli-vat-scraper/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/israeli-vat-scraper", - "version": "0.1.13", + "version": "0.1.14", "type": "module", "description": "Scraper app for fetching Israeli VAT data", "repository": { diff --git a/packages/mcp-server/CHANGELOG.md b/packages/mcp-server/CHANGELOG.md index 72a630c45d..0ef0524b63 100644 --- a/packages/mcp-server/CHANGELOG.md +++ b/packages/mcp-server/CHANGELOG.md @@ -1,5 +1,121 @@ # @accounter/mcp-server +## 0.2.0 + +### Minor Changes + +- [#4628](https://github.com/Urigo/accounter-fullstack/pull/4628) [`7a612f4`](https://github.com/Urigo/accounter-fullstack/commit/7a612f43bce913e280ea77cd1fd3cd0cceeda365) Thanks [@gilgardosh](https://github.com/gilgardosh)! - **Breaking change to tool output:** drop `formatted` from the shared money shape. Every amount the + MCP tools return is now `{ value, currency }` instead of `{ value, formatted, currency }`. Any + consumer that reads `amount.formatted` must build the display string from `value` and `currency` + instead. + + `formatted` was the server's display string (e.g. `₪1,234.56`), which a model can rebuild from the + other two fields. It cost bytes on every amount: about 15% of an `accounter_vat_report` row, which + has nine amount fields. The connector no longer selects it from the API. `FinancialAmount.formatted` + stays in the server schema because the client uses it. + + The `accounter_vat_report` summary line now formats the total VAT itself, printing the unsigned + amount next to the "to pay" / "refund" wording (e.g. `total VAT ₪42.00 refund`, where it used to + print `-₪42.00`). + +- [#4655](https://github.com/Urigo/accounter-fullstack/pull/4655) [`5ad4449`](https://github.com/Urigo/accounter-fullstack/commit/5ad444987e4c7cb33579da1e8a6be028b67f1088) Thanks [@gilgardosh](https://github.com/gilgardosh)! - `accounter_list_businesses` now sends its filters through the `allBusinesses(filters:)` input + instead of the deprecated `name` / `isClient` arguments, and exposes every `BusinessFilter` field: + + - `taxCategoryIds` / `withoutTaxCategory`, to find businesses matched to given tax categories or + with none mapped + - `sortCodes` / `withoutSortCode`, by numeric sort code key + - `countries`, as ISO 3166-1 alpha-3 codes + - `isAdmin`, for the owner-managed businesses + + `activeOnly` is now applied upstream, before paging, as `filters.isActive`. It used to be applied to + the returned page, so pages could come back short and `totalCount` / `pagination` counted inactive + businesses. Both now describe active businesses only when `activeOnly` is set. + +- [#4748](https://github.com/Urigo/accounter-fullstack/pull/4748) [`30a845f`](https://github.com/Urigo/accounter-fullstack/commit/30a845f740b16b81633eeeed83002c062917005e) Thanks [@Urigo](https://github.com/Urigo)! - Add the six MCP write tools a charge review needs to apply its decisions directly, instead of + handing back a to-do list for the Accounter UI. All sit behind the existing `MCP_ENABLE_WRITE_TOOLS` + flag (off by default), require `business_owner`/`accountant`, target exactly one business, are + audit-logged and are never retried — the same guards as `accounter_update_charges_tags`. + + - `accounter_update_charge` — edit a charge's `userDescription`, `type`, `optionalDocuments`, + `optionalVat`, `isInvoicePaymentDifferentCurrency`, `defaultTaxCategoryId`, `businessTripId` + and `yearsOfRelevance`. Rejects `counterpartyId` on purpose: upstream derives a + charge's counterparty from its transactions and documents (the schema field exists but the + resolver ignores it), so the tool points at the two tools that do set it. + - `accounter_merge_charges` — fold 1–20 charges into a base charge (`mergeCharges`), the fix for an + emailed receipt that landed in its own charge next to the card row it pays for. Refuses a + self-merge or duplicate ids before any round trip. + - `accounter_update_transactions` — set `counterpartyId`, `chargeId` and/or `isFee` on 1–50 + transactions in one upstream batch (`updateTransactions`); this is where a charge's counterparty + is actually set, and `chargeId` is how a wire is moved onto the charge holding its invoice. + Former charges the move leaves empty are deleted upstream and relayed as `deletedChargeIds`. + - `accounter_update_document` — move a document to another charge (an emptied former charge is + deleted upstream and relayed as `deletedChargeId`) and/or fix `creditorId`, `debtorId`, `documentType`, `serialNumber`, `date`, `amount`, + `vat`, `description` (`updateDocument`). + - `accounter_delete_document` — delete a document (`deleteDocument`), reporting the charge it + came off and whether that charge was deleted with it. + - `accounter_create_business` — add a directory entry (`insertNewBusiness`) with every + `InsertNewBusinessInput` field (`country` validated against the server `CountryCode` enum), so a + new vendor can be set as a counterparty in the same session. Refuses a name that already exists + (returning the existing id) unless `allowDuplicateName`, since the upstream insert is not atomic + and a retry would otherwise duplicate the entity. + + Each tool is a thin wrapper over one existing server mutation: no schema or resolver changes. Covered + by per-tool unit tests, the registry-wide scope-forwarding, usage-log and description contracts, + and the e2e exposure checks (hidden by default, listed after every read tool when enabled). + +- [#4623](https://github.com/Urigo/accounter-fullstack/pull/4623) [`8ae88db`](https://github.com/Urigo/accounter-fullstack/commit/8ae88db3564c004676f1867f3fe733a1fc362eb1) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Expose the monthly VAT report over the MCP connector as `accounter_vat_report`. + + The VAT report is the screen accountants and business owners use to prepare the monthly VAT filing, + and it was not reachable from the connector. The new tool is a thin forwarder of the server's + `vatReport` query for one member business and one month (`month: "YYYY-MM"`): which documents + qualify, income vs expense, the VAT figures, the filed totals and the validation reasons are all + computed server-side and passed through as-is, normalized into the connector's shared money and + entity shapes. + + **One section per call.** `section` picks `income`, `expenses` (one row per document, every + `VatReportRecord` field) or `missingInfo` (charges that still fail validation, with their `missing` + reasons), paged with `offset`/`limit`. Every call also returns `counts` for all three sections and + `summary`, the month's PCN874 header totals as filed (`totalVat` positive = to pay, negative = + refund), so a model can answer "what's the VAT for March?" from any first call. Rows carry the + reported business as `ownerId`, like the balance report. + + **Its own bounds.** The report validates every charge in the month, so the upstream read uses the + long-running budget (`GRAPHQL_UPSTREAM_LONG_TIMEOUT_MS`) — reads can now opt into it, and a + long-running read is not retried after a timeout. Rows are wide, so this tool gets a 120 KB payload + cap; the shared 60 KB cap is unchanged for every other tool. The upstream `chargesType` filter is not + exposed until its inverted behaviour is fixed on the server. + + **Glossary.** `accounter_explain_terminology` gains a `report` topic covering the report, its rows, + how income vs expense is decided, the VAT date, every amount field, the summary (including which + PCN874 record types its totals leave out), the record types, and the missing-info section. + + The balance report moved to `tools/reports/` alongside it, and GraphQL codegen now covers that + folder. + +### Patch Changes + +- [#4823](https://github.com/Urigo/accounter-fullstack/pull/4823) [`5f01f2a`](https://github.com/Urigo/accounter-fullstack/commit/5f01f2a29a409d2d7c8c1492225d8648e65e3c99) Thanks [@gilgardosh](https://github.com/gilgardosh)! - `accounter_get_charges` with `includeSecurities` now takes a security's `exchange` and `itemType` + from its security business, falling back to the bank's reference row, like `symbol` and `name`. + They used to be `null` whenever the reference list had no row for the key (e.g. a position closed + before the list was scraped), even when the security business had both. + +- [#4749](https://github.com/Urigo/accounter-fullstack/pull/4749) [`e004303`](https://github.com/Urigo/accounter-fullstack/commit/e004303293857a4b29153199902aef9a09b1eb6a) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop double counting Israeli withheld tax on securities executions. The bank reports the Israeli tax + withheld from a dividend or interest payment in both `israel_tax_value_by_payments_settlement_currency` + and `capital_tax_value_settlement_currency`, and the foreign-securities ledger added the two, so it + booked twice the tax (and an inflated gross income) and flagged every such charge with "withheld tax + … does not match gross minus net". The capital tax column now only stands in when the Israeli column + is empty. The executions table no longer lists a capital tax line that repeats the Israeli one, and + the `capitalTaxValue` schema description and MCP securities tool say it is not additive. Regenerate the + ledger of affected charges. + +- [#4730](https://github.com/Urigo/accounter-fullstack/pull/4730) [`d273736`](https://github.com/Urigo/accounter-fullstack/commit/d2737367ed4d589ba936db665c261a261d9c1c14) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Show the tax withheld from a security execution in its own currency. `SecurityExecution` gains + `foreignTaxValue`, `israelTaxValueByPayments` and `capitalTaxValue` — the bank's per-kind withheld + tax, in the settlement currency, which the ledger already books. Until now only `israelTaxValue` + was exposed, so a foreign dividend's tax withheld abroad never showed. `israelTaxValue` itself is now + formatted in the trade currency: the bank's `israe_tax_value` is not in ILS, so it was mislabelled ₪. The + executions table's Tax column lists each non-zero kind, with the Israeli tax figure under them, and the MCP + securities and charge-details tools return the new fields. + ## 0.1.0 ### Minor Changes diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index d4bdc204b3..611594c53d 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/mcp-server", - "version": "0.1.0", + "version": "0.2.0", "type": "module", "description": "Remote MCP (Model Context Protocol) server exposing a curated, read-only subset of Accounter capabilities to Claude clients", "repository": { diff --git a/packages/modern-poalim-scraper/CHANGELOG.md b/packages/modern-poalim-scraper/CHANGELOG.md index 04dda3c418..5ff2c2d007 100644 --- a/packages/modern-poalim-scraper/CHANGELOG.md +++ b/packages/modern-poalim-scraper/CHANGELOG.md @@ -1,5 +1,43 @@ # @accounter/modern-poalim-scraper +## 0.11.1 + +### Patch Changes + +- [#4634](https://github.com/Urigo/accounter-fullstack/pull/4634) [`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`uuid@14.0.3` ↗︎](https://www.npmjs.com/package/uuid/v/14.0.3) (from `14.0.2`, in `dependencies`) + +- [#4639](https://github.com/Urigo/accounter-fullstack/pull/4639) [`a4121e9`](https://github.com/Urigo/accounter-fullstack/commit/a4121e9614f49dfe7a023f1f65d9e6a13dc0ecac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`playwright@1.64.0` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.0) (from `1.63.0`, in `dependencies`) + +- [#4643](https://github.com/Urigo/accounter-fullstack/pull/4643) [`0cec65f`](https://github.com/Urigo/accounter-fullstack/commit/0cec65f89583a24fd86ff49c884b555a51e6866a) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.13.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.13.0) (from `25.12.0`, in `dependencies`) + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + +- [#4684](https://github.com/Urigo/accounter-fullstack/pull/4684) [`8a9c5be`](https://github.com/Urigo/accounter-fullstack/commit/8a9c5be6042af604d8ca8058aa1a0b0965579cfc) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) + +- [#4723](https://github.com/Urigo/accounter-fullstack/pull/4723) [`35a00dd`](https://github.com/Urigo/accounter-fullstack/commit/35a00dd2b79ef43c684be0dcb74fb8a80b88320e) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.14.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.14.0) (from `25.13.0`, in `dependencies`) + +- [#4725](https://github.com/Urigo/accounter-fullstack/pull/4725) [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`playwright@1.64.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.1) (from `1.64.0`, in `dependencies`) + +- [#4763](https://github.com/Urigo/accounter-fullstack/pull/4763) [`d4f979f`](https://github.com/Urigo/accounter-fullstack/commit/d4f979ff3ea72e7508db7801d3e74d9dccb6bbf9) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) + +- [#4780](https://github.com/Urigo/accounter-fullstack/pull/4780) [`793503f`](https://github.com/Urigo/accounter-fullstack/commit/793503fb68471a79873c86f572509f783230935f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.15.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.15.0) (from `25.14.0`, in `dependencies`) + +- [#4792](https://github.com/Urigo/accounter-fullstack/pull/4792) [`5e77e66`](https://github.com/Urigo/accounter-fullstack/commit/5e77e66344233868d7db934346ef4f91bd67197b) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.16.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.16.0) (from `25.15.0`, in `dependencies`) + +- [#4687](https://github.com/Urigo/accounter-fullstack/pull/4687) [`36a4755`](https://github.com/Urigo/accounter-fullstack/commit/36a47555bc9264bd2ff27e345b531810d9ad3aee) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Poalim securities transactions with the `איחוד/הפחתת הון` (consolidation / capital reduction) + payment type no longer fail schema validation. The value is accepted by the scraper schemas and + exposed in GraphQL as the new `SecurityPaymentType.CONSOLIDATION_OR_CAPITAL_REDUCTION` member. + ## 0.11.0 ### Minor Changes diff --git a/packages/modern-poalim-scraper/package.json b/packages/modern-poalim-scraper/package.json index 7ff54cd367..64fe40b763 100644 --- a/packages/modern-poalim-scraper/package.json +++ b/packages/modern-poalim-scraper/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/modern-poalim-scraper", - "version": "0.11.0", + "version": "0.11.1", "type": "module", "description": "Modern scraper for Israeli banks (Hapoalim, Isracard, Max)", "repository": { diff --git a/packages/pcn874-generator/CHANGELOG.md b/packages/pcn874-generator/CHANGELOG.md index 414d5c6f55..d1179527aa 100644 --- a/packages/pcn874-generator/CHANGELOG.md +++ b/packages/pcn874-generator/CHANGELOG.md @@ -1,5 +1,12 @@ # @accounter-toolkit/pcn874-generator +## 0.6.9 + +### Patch Changes + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + ## 0.6.8 ### Patch Changes diff --git a/packages/pcn874-generator/package.json b/packages/pcn874-generator/package.json index e073d0214f..8ee295e0a5 100644 --- a/packages/pcn874-generator/package.json +++ b/packages/pcn874-generator/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/pcn874-generator", - "version": "0.6.8", + "version": "0.6.9", "type": "module", "description": "Fully typed application that generates PCN874 text file", "repository": { diff --git a/packages/scraper-app/CHANGELOG.md b/packages/scraper-app/CHANGELOG.md index 4cbc6d08e1..e0c955279d 100644 --- a/packages/scraper-app/CHANGELOG.md +++ b/packages/scraper-app/CHANGELOG.md @@ -1,5 +1,59 @@ # @accounter/scraper-app +## 0.1.0 + +### Minor Changes + +- [#4729](https://github.com/Urigo/accounter-fullstack/pull/4729) [`223adab`](https://github.com/Urigo/accounter-fullstack/commit/223adab1c371c577bbbcf32cc2d69a8bb5db69a4) Thanks [@gilgardosh](https://github.com/gilgardosh)! - **Breaking:** the vault is no longer stored on disk. The app opens your vault file in memory for + the session, and you save changes back to it from the UI (in place in Chromium browsers, as a + download elsewhere). A banner shows whenever the session has changes that your file doesn't. + `VAULT_PATH` and the vault-location setting are gone; open your existing `.vault` file once from + the new welcome screen. Run history is now kept for the session only unless you turn on "Save run + history" in Settings. + +### Patch Changes + +- [#4571](https://github.com/Urigo/accounter-fullstack/pull/4571) [`d394530`](https://github.com/Urigo/accounter-fullstack/commit/d394530d88cdc1243de19bd7a804acdc3fb26eac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@fastify/websocket@11.3.3` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.3) (from `11.3.1`, in `dependencies`) + - Updated dependency [`fast-xml-parser@5.11.2` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.11.2) (from `5.11.1`, in `dependencies`) + +- [#4634](https://github.com/Urigo/accounter-fullstack/pull/4634) [`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@fastify/static@10.1.6` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.6) (from `10.1.5`, in `dependencies`) + - Updated dependency [`@fastify/websocket@11.3.4` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.4) (from `11.3.3`, in `dependencies`) + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`fastify@5.12.7` ↗︎](https://www.npmjs.com/package/fastify/v/5.12.7) (from `5.12.5`, in `dependencies`) + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + +- [#4684](https://github.com/Urigo/accounter-fullstack/pull/4684) [`8a9c5be`](https://github.com/Urigo/accounter-fullstack/commit/8a9c5be6042af604d8ca8058aa1a0b0965579cfc) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Added dependency [`lucide-react@1.58.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.58.0) (to `dependencies`) + +- [#4725](https://github.com/Urigo/accounter-fullstack/pull/4725) [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`react@19.3.1` ↗︎](https://www.npmjs.com/package/react/v/19.3.1) (from `19.3.0`, in `dependencies`) + - Updated dependency [`react-dom@19.3.1` ↗︎](https://www.npmjs.com/package/react-dom/v/19.3.1) (from `19.3.0`, in `dependencies`) + +- [#4729](https://github.com/Urigo/accounter-fullstack/pull/4729) [`223adab`](https://github.com/Urigo/accounter-fullstack/commit/223adab1c371c577bbbcf32cc2d69a8bb5db69a4) Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Added dependency [`lucide-react@1.57.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.57.0) (to `dependencies`) + +- [#4739](https://github.com/Urigo/accounter-fullstack/pull/4739) [`e016edf`](https://github.com/Urigo/accounter-fullstack/commit/e016edf873da7b3018c4ab6a1b5e97e3fca3feac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) + +- [#4780](https://github.com/Urigo/accounter-fullstack/pull/4780) [`793503f`](https://github.com/Urigo/accounter-fullstack/commit/793503fb68471a79873c86f572509f783230935f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`lucide-react@1.61.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.61.0) (from `1.58.0`, in `dependencies`) + +- [#4782](https://github.com/Urigo/accounter-fullstack/pull/4782) [`12a3ede`](https://github.com/Urigo/accounter-fullstack/commit/12a3ede0448264b9d8c68d51a7ffb5126297d6bb) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@fastify/static@10.1.7` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.7) (from `10.1.6`, in `dependencies`) + +- [#4687](https://github.com/Urigo/accounter-fullstack/pull/4687) [`36a4755`](https://github.com/Urigo/accounter-fullstack/commit/36a47555bc9264bd2ff27e345b531810d9ad3aee) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Poalim securities transactions with the `איחוד/הפחתת הון` (consolidation / capital reduction) + payment type no longer fail schema validation. The value is accepted by the scraper schemas and + exposed in GraphQL as the new `SecurityPaymentType.CONSOLIDATION_OR_CAPITAL_REDUCTION` member. + +- [#4756](https://github.com/Urigo/accounter-fullstack/pull/4756) [`a6feedd`](https://github.com/Urigo/accounter-fullstack/commit/a6feeddb2a945af472fe9c56a9bd3ae8516fc11f) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Round the scraped JPY exchange rate (converted from BOI's per-100-units quote) to the DB column's + 6-decimal precision, so floating-point noise (e.g. `0.018734999999999998`) no longer shows up as + changed currency-rate rows. +- Updated dependencies [[`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439), [`a4121e9`](https://github.com/Urigo/accounter-fullstack/commit/a4121e9614f49dfe7a023f1f65d9e6a13dc0ecac), [`0cec65f`](https://github.com/Urigo/accounter-fullstack/commit/0cec65f89583a24fd86ff49c884b555a51e6866a), [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d), [`8a9c5be`](https://github.com/Urigo/accounter-fullstack/commit/8a9c5be6042af604d8ca8058aa1a0b0965579cfc), [`35a00dd`](https://github.com/Urigo/accounter-fullstack/commit/35a00dd2b79ef43c684be0dcb74fb8a80b88320e), [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c), [`d4f979f`](https://github.com/Urigo/accounter-fullstack/commit/d4f979ff3ea72e7508db7801d3e74d9dccb6bbf9), [`793503f`](https://github.com/Urigo/accounter-fullstack/commit/793503fb68471a79873c86f572509f783230935f), [`5e77e66`](https://github.com/Urigo/accounter-fullstack/commit/5e77e66344233868d7db934346ef4f91bd67197b), [`36a4755`](https://github.com/Urigo/accounter-fullstack/commit/36a47555bc9264bd2ff27e345b531810d9ad3aee)]: + - @accounter/modern-poalim-scraper@0.11.1 + ## 0.0.3 ### Patch Changes diff --git a/packages/scraper-app/package.json b/packages/scraper-app/package.json index 6cb16a9996..a9655ba5f0 100644 --- a/packages/scraper-app/package.json +++ b/packages/scraper-app/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/scraper-app", - "version": "0.0.3", + "version": "0.1.0", "type": "module", "description": "Scraper app with Fastify server and React UI", "repository": { diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md index 2a92e72e43..1c22886a07 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -1,5 +1,601 @@ # @accounter/server +## 0.3.0 + +### Minor Changes + +- [#4651](https://github.com/Urigo/accounter-fullstack/pull/4651) [`9a73cc9`](https://github.com/Urigo/accounter-fullstack/commit/9a73cc9e4477e3e747481e9a59bd1acce49c9260) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Filter the businesses directory server-side. `allBusinesses` takes a new `filters: BusinessFilter` + input, applied in SQL before the count and the page slice: + + - `name`: case-insensitive substring of the name or Hebrew name + - `taxCategoryIds` / `withoutTaxCategory` and `sortCodes` / `withoutSortCode`: a list match OR-ed + with a "has none" match, to find uncategorized businesses + - `countries` (the table's Locality), `isClient`, `isActive` and `isAdmin` + + `filters.name` and `filters.isClient` replace the top-level `name` and `isClient` arguments. + + The businesses page replaces its inline filter bar with a name search in the toolbar and a Filters + dialog (tax category, sort code and country multi-selects, Any / Yes / No for client, active and + admin, and "Unused only"). The applied filter is persisted in the `businessesFilters` URL parameter, + so filtered views can be linked to, reloaded, and walked with back / forward. A business selected + under one filter stays selected when a later filter hides it. + +- [#4727](https://github.com/Urigo/accounter-fullstack/pull/4727) [`adc7f2c`](https://github.com/Urigo/accounter-fullstack/commit/adc7f2c0bd38b9de2fbab70f51d5e0a5e529c474) Thanks [@gilgardosh](https://github.com/gilgardosh)! - **Breaking API change:** remove the deprecated `name` and `isClient` arguments from + `Query.allBusinesses`. Pass them as `filters.name` and `filters.isClient` instead. The client and + the MCP server already do. + +- [#4784](https://github.com/Urigo/accounter-fullstack/pull/4784) [`c379561`](https://github.com/Urigo/accounter-fullstack/commit/c379561135a9345010136581da4d0774b9cde634) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Track the Israeli consumer price index (CPI) in the database. A new `price-indexes` module syncs CBS + price indexes (api.cbs.gov.il) into the global `price_index_values` / `price_index_bases` tables: a + full backfill at startup on an empty table and a daily incremental run at 17:00 UTC (disable with + `PRICE_INDEX_SYNC_ENABLED=0`). `PriceIndexesProvider` resolves the "known" index (Income Tax + Ordinance s.88) or the index for a month and links amounts between any two dates across base + changes, matching the official CBS calculator. New GraphQL: `priceIndexValues`, `priceIndexLinkage` + and the super-admin `syncPriceIndexes` mutation. + +- [#4762](https://github.com/Urigo/accounter-fullstack/pull/4762) [`485cd32`](https://github.com/Urigo/accounter-fullstack/commit/485cd32625c0758b1849f8a2f59a3e3074d5922b) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Charges left empty (no transactions, documents or misc expenses) after their records move to + another charge or are deleted are now deleted, instead of lingering as ghost charges. This applies + to `updateTransaction`, `updateTransactions`, `updateDocument`, `deleteDocument`, + `updateMiscExpense`, `deleteMiscExpense` and the Deel documents fetch, through a shared + `deleteChargesIfEmpty` helper. Moving onto an existing charge is now covered too (previously only + unlinking was), as is unlinking several transactions of the same charge. Updates that do not change + the charge skip the check. + + `UpdatedTransactionsSuccessfulResult` gains `deletedChargeIds: [UUID!]!`, and + `UpdateDocumentSuccessfulResult.deletedChargeId` is now also set when a document moves onto an + existing charge, so clients can drop the deleted charges' rows instead of refetching them. + +- [#4674](https://github.com/Urigo/accounter-fullstack/pull/4674) [`a62a8b7`](https://github.com/Urigo/accounter-fullstack/commit/a62a8b73b4035d69210f310980466eb570a34f78) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Deprecate `user_context.foreign_securities_business_id` and + `user_context.foreign_securities_fees_category_id`, superseded by `securities_context`. The server no + longer reads or writes them (a migration copies any value still missing from `securities_context` + once more and marks both columns `DEPRECATED` in their column comments; they will be dropped later). + In GraphQL, `AdminContextInput.foreignSecuritiesBusinessId` / `foreignSecuritiesFeesCategoryId` are + deprecated in favour of `updateSecuritiesContext` (they now write `securities_context`), and + `AdminContextInfo.foreignSecuritiesBusiness` / `foreignSecuritiesFeesCategory` in favour of + `securitiesContext`. + +- [#4669](https://github.com/Urigo/accounter-fullstack/pull/4669) [`e12d29b`](https://github.com/Urigo/accounter-fullstack/commit/e12d29bd67edffd02220d0f45d502c29352c7f08) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Foreign securities ledger generation now reads the security execution behind each cash movement: + + - dividends and bond interest are credited to (local or foreign) dividend / bond interest income + instead of the securities account, with tax withheld from them booked to dividend or bond + withholding tax; the reported tax is checked against gross minus net + - a bond redemption credits the securities account with the FIFO purchase cost and books the + difference to gain or loss from sale of foreign securities + - a transaction with no matched execution, a purchase missing from the scraped history, or a + missing securities tax category is reported as a ledger error, keeping the previous entry; the + missing categories are also listed in the new `LedgerValidation.missingSecuritiesTaxCategories` + + Buys, sales and transfers are booked as before. + +- [#4471](https://github.com/Urigo/accounter-fullstack/pull/4471) [`2e9364d`](https://github.com/Urigo/accounter-fullstack/commit/2e9364d8d4654fe4c2216e70dac487f51780d135) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add a re-run OCR action for documents stuck on `UNPROCESSED`. + + A batch of documents was inserted with `type = 'UNPROCESSED'` and no extracted information at all — + no amount, date, serial or counterparty — because the email-ingestion path catches every OCR failure + and falls back to `UNPROCESSED` (`email-ingestion-ingest.provider.ts`). The document is still + inserted and the ingest still reports `INSERTED` with its idempotency key persisted, so replaying + the source email answers `DUPLICATE` and cannot recover it. The Cloudinary `file_url` survives, + though, which is enough to extract from the file again. + + New mutations `reprocessDocumentOcr(documentId)` and `batchReprocessDocumentsOcr(documentIds)` + re-fetch that stored file through the existing SSRF-hardened `fetchRemoteDocument`, run it back + through `getOcrData`, and report which fields were filled. Surfaced in the client as a "Re-run OCR" + item in the document actions menu and, on the documents screen, a bulk button over the unprocessed + documents currently listed (pair it with the "Invalid documents only" filter). + + The write is additive on purpose: a column is filled only where the document is empty, so a value an + accountant corrected by hand is never overwritten. The exception is `documentType`, which is replaced + only while the document is still `UNPROCESSED`. A pass that extracts nothing new writes nothing at + all, rather than bumping `updated_at` and dragging the charge's accountant approval back to `PENDING` + for no gain. + + That rule is enforced by the UPDATE statement rather than by the caller. Minutes pass between reading + a document and writing it back, and deciding which columns are blank from the pre-OCR read would mean + overwriting a field an accountant filled during the extraction, using a decision made before they + touched it. `COALESCE(column, $param)` — the reverse of the usual argument order — makes "never + overwrite" a property of the statement, and repeating the conditions in its `WHERE` clause keeps a + pass with nothing to contribute from matching any row at all. + + The document's owner is checked against the request's write target up front. Reads span the whole + business scope while writes are pinned to one business, so the all-documents screen can list a row + this request cannot write to; catching that late would mean paying for a download and an OCR call + first. + + The documents table gains a selection column, keyed by document id so a selection survives paging, + sorting and filtering, and a batch menu beside it offering "Re-run OCR" and "Delete" over the + selected rows. It also gains an opt-in `preview` column showing each document's stored image, + hidden by default because it costs one image request per visible row. + + When the stored original cannot be sent to OCR — the two MIME allowlists in play disagree in both + directions, so a GIF is refused by the fetch layer and a HEIC is refused by the model — the Cloudinary + `.jpg` derivative is used instead rather than failing. + + Two limits worth knowing. Nothing in the schema records whether OCR ever ran, failed, or was + deliberately skipped, so the action cannot tell a recoverable failure from a document that will + always be unreadable — retrying the latter costs an OCR pass and changes nothing. And the mutation + holds the request open for the whole extraction (tens of seconds per document, no job queue in this + server), which is why a batch is capped at 20 documents and runs three at a time. + +- [#4832](https://github.com/Urigo/accounter-fullstack/pull/4832) [`ebf75a7`](https://github.com/Urigo/accounter-fullstack/commit/ebf75a71a3a6e33a99531667d989164e14a5f797) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Expose a sale's or redemption's capital gain as `SecurityExecution.capitalGain`, from the FIFO lots + of its account, at the Bank of Israel rates of the trade dates: in the origin currency, nominal, and + split into price and exchange-rate parts, plus the s.88 inflationary amount and real gain using the + CPI known on the trade dates — a company's split; an individual's foreign-currency securities take + the exchange rate as the index, as the bank does. It is broken down by lot. + +- [#4669](https://github.com/Urigo/accounter-fullstack/pull/4669) [`e12d29b`](https://github.com/Urigo/accounter-fullstack/commit/e12d29bd67edffd02220d0f45d502c29352c7f08) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add a per-tenant securities ledger configuration: a new `user_context.securities_context` jsonb + holds the general foreign-securities business, the tax categories that securities fees, dividends, + bond interest, withheld tax and redemption gains/losses are booked to, plus the sort code new + securities tax categories are created under. It supersedes the `foreign_securities_business_id` and + `foreign_securities_fees_category_id` columns: their values are copied in by the migration, they are + only read as a fallback, and a legacy `updateAdminContext` change to them is mirrored into it. It is + exposed as `AdminContextInfo.securitiesContext` and set through the new `updateSecuritiesContext` + mutation (business owners and accountants), which checks that every id belongs to the tenant. + +- [#4796](https://github.com/Urigo/accounter-fullstack/pull/4796) [`eeea419`](https://github.com/Urigo/accounter-fullstack/commit/eeea419fee7c4c61f164952fda3a64fef5742d0b) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Resolve the counterparty of a foreign-securities charge that holds trades of more than one + security. Each traded security is its own business, so a charge that held two of them had two + counterparty candidates, no counterparty, and was flagged as missing one. + + - When another security in the same charge was bought or sold, a security whose trades cancel out + within the charge (a buy reversed by a sell of the same amount, as when a trade is rebooked to + another series) no longer competes with it for the counterparty. A reversal on its own is still + the charge's subject: a charge holding only a buy and the sell that cancels it keeps that + security as its counterparty, and a reversed security is never dropped in favour of a candidate + that is not a security. Fees are left out of the netting, which is rounded to the cent. This + applies to both the single-charge path and the charges list. + - A charge spanning several securities with real exposure in each (say, a switch from one fund to + another) has no single counterparty and is no longer flagged as missing one, provided every + candidate is a traded security. The tenant's general foreign-securities business, which stands + for an unrecognized trade, does not count as one, so such a charge is still flagged. + - A stock distribution's charge, which books the execution directly and holds no transaction, + takes the distributed security's business as its counterparty (found by the execution's Poalim + key, or its ISIN). Before, it had no counterparty at all. A merged-in commission fee doesn't + change that. + - The securities ledger books its main entries in the transactions' order rather than the order + their lookups finish, and lets every bought security whose balance across the charge is still a + debit keep it as a holding. Before, only the first booked main entry was allowed to stay + unbalanced, so on a charge buying two securities the other one was reported as unbalanced; a + security sold beyond what the charge bought is still reported. + - New GraphQL fields: `ForeignSecuritiesCharge.counterparties` (the main-counterparty candidates), + and `ChargeSecurity.netAmount` and `ChargeSecurity.isOffsetting`. Both read the charge's + transactions by the security's business, so a security is offsetting exactly when it was left + out of `counterparties`. + - The charges table shows "N securities", with a popover listing them, instead of a red "Missing" + for a multi-security charge. On a charge of several securities, the Foreign Securities section + shows each security's role: main counterparty, counterparty k of N, or nets to zero. Securities + that cancel out are dimmed and listed last. Every security shows its net amount. + +- [#4829](https://github.com/Urigo/accounter-fullstack/pull/4829) [`89caeb2`](https://github.com/Urigo/accounter-fullstack/commit/89caeb24f7e08c54a7f5bcf6812cc6f46136de26) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book sales of securities from their FIFO lots. A sale used to be booked as is, crediting the + securities account with the proceeds, so no gain or loss was recognised. It is now booked like a + redemption: the securities account gives up the FIFO cost at the cash leg's rate, and the difference + is a gain or loss (`(sell price − buy price) × units × sale rate`). A sale with withheld tax, and a + cancelled sale, keep the base entry with a ledger error. Existing sale ledgers change when + regenerated; ledgers in a locked period are not touched. + +- [#4830](https://github.com/Urigo/accounter-fullstack/pull/4830) [`6e997ca`](https://github.com/Urigo/accounter-fullstack/commit/6e997ca4311e7720c81bac16e9140257ee7c06b8) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book the exchange-rate part of a securities sale or redemption apart from its price part. A second, + local-currency entry books each lot's cost × the change since the rate the securities account + carries it at: the rate the purchase's cash movement was booked at (a dividend in kind's value + date), or the rate of the last revaluation of the account it was held over, read from the + revaluations actually booked. The account then gives up exactly what it carried the units at. + + - **New securities tax categories:** exchange-rate gain and loss on the sale of foreign securities. + They are offered from the charge's ledger errors like the others, and can be pointed at the + exchange-revaluation category to merge them. + - Until they are set, or when a purchase's cash movement is not found, the disposal is still + booked, without the rate entry, and the year-end revaluation takes the rate PnL up as before. + +- [#4785](https://github.com/Urigo/accounter-fullstack/pull/4785) [`13fa09e`](https://github.com/Urigo/accounter-fullstack/commit/13fa09ee95f9527d24f844643ccec662ad64d408) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book Poalim stock distributions paid as a dividend in kind. Such an execution has no cash leg, so no + bank transaction ever brought it into a charge and nothing booked it. + + - Ingesting securities executions now creates a `FOREIGN_SECURITIES` charge for each dividend in + kind no charge books yet, and links the two in the new `charges_securities_executions` table. + Cancelled distributions, distributions the bank later cancelled, and executions in a locked + ledger period are skipped. The check runs over the + whole owner, so distributions ingested earlier are picked up by the next upload. + - The securities ledger books each linked distribution as Dr Foreign Securities [trade currency] / + Cr foreign or local dividend income (by the issuer's locality), at the gross value of the shares + and the ledger's exchange rate. A bank rate that differs is reported as a ledger error; withheld + tax, a cancelled distribution and distributions other than a dividend in kind are reported and + not booked. + - The commission check now covers distributions. When the bank's commission fee sits in a charge of + its own, the error asks to merge it into the distribution's charge. + - A linked execution counts as charge content: the charge is not cleaned up as empty (deleting it + explicitly dismisses the distribution, so the next upload does not recreate it), a merge moves + the link (and types the merged charge as foreign securities), validation stops asking it for + transactions or a counterparty, and the charges list filters and sorts it by the execution's date. + - Units received as a dividend in kind now cost their gross value in the FIFO cost basis, so a + later sale or redemption of them can be booked. + - The charge's securities section and the security's history show the linked execution, and the + executions table gains a gross value column. + +- [#4731](https://github.com/Urigo/accounter-fullstack/pull/4731) [`71db49d`](https://github.com/Urigo/accounter-fullstack/commit/71db49dcfb3630fbe9765bcea0c082224da1e0b3) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Foreign-securities ledgers now book withheld tax to a local or a foreign tax category, by the + issuer's country (as the income line already does): `SecuritiesTaxCategoryKey` + `DIVIDEND_WITHHOLDING_TAX` and `BOND_WITHHOLDING_TAX` are replaced by + `FOREIGN_`/`LOCAL_DIVIDEND_WITHHOLDING_TAX` and `FOREIGN_`/`LOCAL_BOND_WITHHOLDING_TAX`. A migration + moves the tax category already set for each to its foreign key; the local ones start unset and are + asked for from the charge's ledger errors. Stored ledger records are not changed — regenerating a + charge's ledger suggests the new split. + +- [#4592](https://github.com/Urigo/accounter-fullstack/pull/4592) [`66402a5`](https://github.com/Urigo/accounter-fullstack/commit/66402a500987c81b2d3fc530694b0f996430983c) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Keep date-only values as `TimelessDateString` (`yyyy-mm-dd`) end to end, so calendar days no longer + shift with the server's or browser's timezone: + + - Postgres `date` / `date[]` columns are read as `yyyy-mm-dd` strings (custom node-pg type parsers) + and typed `TimelessDateString` by pgtyped (`typesOverrides`), instead of server-local `Date`s. + - `Charge.min/max{Event,Debit,Documents}Date` and `LedgerRecord` / `SingleSidedLedgerRecord` + `invoiceDate` / `valueDate` are now `TimelessDate` instead of `DateTime`: they return the day + (`2026-05-01`), not a timezone-dependent ISO timestamp. + - Server-side day arithmetic uses new timezone-independent helpers, fixing days that moved west of + UTC: VAT / PCN874 report months, document and bank-deposit date inputs, salary and reserve ledger + dates, revaluation dates, exchange-rate dates, corporate tax rates and more. + - The tenant's calendar days are reckoned in `Asia/Jerusalem` (a `TENANT_TIMEZONE` constant, to be + derived per tenant later) instead of the server's timezone: "today" (document dates and due + dates, default VAT month, contract billing month, sync windows), current-year checks, the day of + absolute instants (Otsar Hahayal and Poalim securities dates, balance-charge value dates) and the instant a day starts at (day-only crypto rate lookups, Green Invoice + `firstPayment`). + - `TimelessDateString` is now the pattern `${number}-${number}-${number}` instead of a union of + every day in 2000-2049, which kept server type-checking fast and allows earlier years. + - Client: the charges table, charge matching, ledger tables and CSV exports read these fields as + calendar days, and every `dd/MM/yy` date cell (transactions, documents, business trips, + depreciation, bank deposits) formats the `yyyy-mm-dd` string directly through a shared + `formatTimelessDate` helper instead of `new Date(...)`, which showed the previous day west of UTC. + +- [#4609](https://github.com/Urigo/accounter-fullstack/pull/4609) [`9487ae5`](https://github.com/Urigo/accounter-fullstack/commit/9487ae5d527bf879fbcf010552120e2ae8a369ec) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add `VatReportResult.summary`, the monthly VAT totals as filed in the PCN874 header. + + Until now the VAT report's totals existed only on the client, as a reduction over the report rows + whose definitions differ from the PCN874 file: taxable sales included zero-VAT rows, "equipment + inputs" was a pre-VAT amount where the file reports VAT, and other inputs VAT and the record counts + were not computed at all. Any other consumer (the MCP connector, API users) would have had to + re-implement that logic, and would still disagree with what was filed. + + The new `summary: VatReportSummary!` field mirrors the PCN874 header: `taxableSalesAmount`, + `taxableSalesVat`, `salesRecordCount`, `zeroValOrExemptSalesAmount`, `otherInputsVat`, + `equipmentInputsVat`, `inputsCount` and `totalVat`, amounts as `FinancialAmount` in the local + currency. It goes through the PCN874 path itself rather than a parallel implementation: the header + totals are factored out of `getHeaderDataFromRecords` into `getPcn874Totals`, which no longer needs a + licensed dealer id, and both the file header and the summary are built from it over the records + `transactionsFromVatReportRecords` produces. + + The summary is the filed figure, so it always covers the whole month and ignores the `chargesType` + filter. When the report is requested without one, its own income and expenses already are that + month and are reused; when it is filtered, the month is fetched again exactly as `getPcn874String` + fetches it. It is a lazy field resolver, so queries that do not select `summary` pay nothing for it. + + The totals carry over the header's current coverage: entry types it does not handle yet (for example + `S2`, `Y` and `R`) are left out of the summary just as they are left out of the file. + + Fixed along the way: the VAT report and the PCN874 file parsed the requested month with + `new Date(monthDate)`, which reads a date-only string as UTC midnight. On a server west of UTC that + is the previous local day, so a first-of-month request covered the month before, and the PCN874 + file could even be stamped with the previous month. The month is now read from the date string's + year and month (`vatReportMonthStart`), for the report's date range, its VAT-date-override bounds, + and the PCN874 file. Servers at UTC or east of it are unaffected. + +### Patch Changes + +- [#4571](https://github.com/Urigo/accounter-fullstack/pull/4571) [`d394530`](https://github.com/Urigo/accounter-fullstack/commit/d394530d88cdc1243de19bd7a804acdc3fb26eac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.71` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.71) (from `4.0.65`, in `dependencies`) + - Updated dependency [`@graphql-hive/yoga@0.49.7` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.49.7) (from `0.49.6`, in `dependencies`) + - Updated dependency [`@graphql-tools/utils@12.0.3` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/12.0.3) (from `12.0.1`, in `dependencies`) + - Updated dependency [`@whatwg-node/fetch@0.12.1` ↗︎](https://www.npmjs.com/package/@whatwg-node/fetch/v/0.12.1) (from `0.12.0`, in `dependencies`) + - Updated dependency [`ai@7.0.127` ↗︎](https://www.npmjs.com/package/ai/v/7.0.127) (from `7.0.118`, in `dependencies`) + - Updated dependency [`dotenv@18.0.5` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.5) (from `18.0.4`, in `dependencies`) + - Updated dependency [`pg@8.23.1` ↗︎](https://www.npmjs.com/package/pg/v/8.23.1) (from `8.23.0`, in `dependencies`) + +- [#4589](https://github.com/Urigo/accounter-fullstack/pull/4589) [`9f62301`](https://github.com/Urigo/accounter-fullstack/commit/9f6230174015dd423047d703f55f13647a5efc37) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@7.3.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.3.0) (from `7.2.0`, in `dependencies`) + +- [#4595](https://github.com/Urigo/accounter-fullstack/pull/4595) [`a5767e0`](https://github.com/Urigo/accounter-fullstack/commit/a5767e0992e9a4e1ae4325853602f9e683ed1790) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`googleapis@183.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/183.0.0) (from `182.0.0`, in `dependencies`) + +- [#4620](https://github.com/Urigo/accounter-fullstack/pull/4620) [`965d1e8`](https://github.com/Urigo/accounter-fullstack/commit/965d1e8b5092aeb1d92ec035b18f3eb5a8efdcb3) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@envelop/generic-auth@11.2.3` ↗︎](https://www.npmjs.com/package/@envelop/generic-auth/v/11.2.3) (from `11.2.1`, in `dependencies`) + - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.4` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.4) (from `3.24.1`, in `dependencies`) + - Updated dependency [`graphql-yoga@5.24.4` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.4) (from `5.24.1`, in `dependencies`) + +- [#4630](https://github.com/Urigo/accounter-fullstack/pull/4630) [`c34c478`](https://github.com/Urigo/accounter-fullstack/commit/c34c47859583d665f842aed49c7581e281d231b2) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.223.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.223.0) (from `0.222.0`, in `dependencies`) + - Updated dependency [`@opentelemetry/resources@2.12.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.12.0) (from `2.11.0`, in `dependencies`) + - Updated dependency [`@opentelemetry/sdk-node@0.223.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.223.0) (from `0.222.0`, in `dependencies`) + +- [#4631](https://github.com/Urigo/accounter-fullstack/pull/4631) [`008d263`](https://github.com/Urigo/accounter-fullstack/commit/008d2635cbe27948048e9e91cbe8cc0da6783ae4) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.81.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.81.0) (from `0.80.0`, in `dependencies`) + +- [#4634](https://github.com/Urigo/accounter-fullstack/pull/4634) [`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.78` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.78) (from `4.0.71`, in `dependencies`) + - Updated dependency [`ai@7.0.137` ↗︎](https://www.npmjs.com/package/ai/v/7.0.137) (from `7.0.127`, in `dependencies`) + - Updated dependency [`dotenv@18.0.7` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.7) (from `18.0.5`, in `dependencies`) + - Updated dependency [`uuid@14.0.3` ↗︎](https://www.npmjs.com/package/uuid/v/14.0.3) (from `14.0.2`, in `dependencies`) + +- [#4637](https://github.com/Urigo/accounter-fullstack/pull/4637) [`4c34566`](https://github.com/Urigo/accounter-fullstack/commit/4c34566eb79e5fc49a880e81d943a601a4f5bfe7) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`googleapis@184.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/184.0.0) (from `183.0.0`, in `dependencies`) + +- [#4638](https://github.com/Urigo/accounter-fullstack/pull/4638) [`1dc623a`](https://github.com/Urigo/accounter-fullstack/commit/1dc623ac7c9009f71a21c2b0e7257c6c299fc2c5) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@google-cloud/pubsub@6.2.0` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/6.2.0) (from `6.1.0`, in `dependencies`) + +- [#4639](https://github.com/Urigo/accounter-fullstack/pull/4639) [`a4121e9`](https://github.com/Urigo/accounter-fullstack/commit/a4121e9614f49dfe7a023f1f65d9e6a13dc0ecac) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`playwright@1.64.0` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.0) (from `1.63.0`, in `dependencies`) + +- [#4644](https://github.com/Urigo/accounter-fullstack/pull/4644) [`1e5eac3`](https://github.com/Urigo/accounter-fullstack/commit/1e5eac3957757dc0d39f4e39bea5294e2bef5849) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`googleapis@185.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/185.0.0) (from `184.0.0`, in `dependencies`) + +- [#4646](https://github.com/Urigo/accounter-fullstack/pull/4646) [`691b32a`](https://github.com/Urigo/accounter-fullstack/commit/691b32a4a7bd3d5961b49aca585c41f0ad36622e) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@7.4.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.4.0) (from `7.3.0`, in `dependencies`) + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.79` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.79) (from `4.0.78`, in `dependencies`) + - Updated dependency [`@graphql-hive/yoga@0.49.8` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.49.8) (from `0.49.7`, in `dependencies`) + - Updated dependency [`@graphql-tools/utils@12.0.4` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/12.0.4) (from `12.0.3`, in `dependencies`) + - Updated dependency [`ai@7.0.138` ↗︎](https://www.npmjs.com/package/ai/v/7.0.138) (from `7.0.137`, in `dependencies`) + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + +- [#4682](https://github.com/Urigo/accounter-fullstack/pull/4682) [`b743dc3`](https://github.com/Urigo/accounter-fullstack/commit/b743dc3eaa95cd77dc3f6081a39f031ae2105697) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@google-cloud/pubsub@6.3.0` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/6.3.0) (from `6.2.0`, in `dependencies`) + +- [#4684](https://github.com/Urigo/accounter-fullstack/pull/4684) [`8a9c5be`](https://github.com/Urigo/accounter-fullstack/commit/8a9c5be6042af604d8ca8058aa1a0b0965579cfc) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.6` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.6) (from `3.24.4`, in `dependencies`) + - Updated dependency [`auth0@7.5.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.5.0) (from `7.4.0`, in `dependencies`) + - Updated dependency [`googleapis@186.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/186.0.0) (from `185.0.0`, in `dependencies`) + - Updated dependency [`graphql-yoga@5.24.6` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.6) (from `5.24.4`, in `dependencies`) + +- [#4706](https://github.com/Urigo/accounter-fullstack/pull/4706) [`cae1bd9`](https://github.com/Urigo/accounter-fullstack/commit/cae1bd9d9987834e61802ff5f89671e70ac3b1e5) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.5` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.5) (from `3.24.4`, in `dependencies`) + - Updated dependency [`graphql-yoga@5.24.5` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.5) (from `5.24.4`, in `dependencies`) + +- [#4719](https://github.com/Urigo/accounter-fullstack/pull/4719) [`e2e4338`](https://github.com/Urigo/accounter-fullstack/commit/e2e4338da3a0d7c4aa9588a0781ad55718793d35) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@7.5.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.5.0) (from `7.4.0`, in `dependencies`) + +- [#4724](https://github.com/Urigo/accounter-fullstack/pull/4724) [`9469239`](https://github.com/Urigo/accounter-fullstack/commit/946923902d82de004985302df88de36d76571edf) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`googleapis@186.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/186.0.0) (from `185.0.0`, in `dependencies`) + +- [#4725](https://github.com/Urigo/accounter-fullstack/pull/4725) [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.82` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.82) (from `4.0.79`, in `dependencies`) + - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.81.2` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.81.2) (from `0.81.0`, in `dependencies`) + - Updated dependency [`ai@7.0.143` ↗︎](https://www.npmjs.com/package/ai/v/7.0.143) (from `7.0.138`, in `dependencies`) + - Updated dependency [`dotenv@18.0.8` ↗︎](https://www.npmjs.com/package/dotenv/v/18.0.8) (from `18.0.7`, in `dependencies`) + - Updated dependency [`graphql-scalars@2.0.1` ↗︎](https://www.npmjs.com/package/graphql-scalars/v/2.0.1) (from `2.0.0`, in `dependencies`) + - Updated dependency [`playwright@1.64.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.64.1) (from `1.64.0`, in `dependencies`) + +- [#4733](https://github.com/Urigo/accounter-fullstack/pull/4733) [`801a3f2`](https://github.com/Urigo/accounter-fullstack/commit/801a3f2f46f4f6ed7594e0460e643d03d609a334) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-tools/utils@12.1.0` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/12.1.0) (from `12.0.4`, in `dependencies`) + +- [#4734](https://github.com/Urigo/accounter-fullstack/pull/4734) [`0acd510`](https://github.com/Urigo/accounter-fullstack/commit/0acd510caf1b6dccfebeffb270c3089a9d01fdfc) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.24.6` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.24.6) (from `3.24.5`, in `dependencies`) + - Updated dependency [`graphql-yoga@5.24.6` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.24.6) (from `5.24.5`, in `dependencies`) + +- [#4750](https://github.com/Urigo/accounter-fullstack/pull/4750) [`ef50aa6`](https://github.com/Urigo/accounter-fullstack/commit/ef50aa6e37da5d9c1c5bf296dcc31200ae53122b) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@7.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.6.0) (from `7.5.0`, in `dependencies`) + +- [#4751](https://github.com/Urigo/accounter-fullstack/pull/4751) [`d5af23f`](https://github.com/Urigo/accounter-fullstack/commit/d5af23fde546350ea061e6a2dd954f44328acab9) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.84) (from `4.0.82`, in `dependencies`) + - Updated dependency [`ai@7.0.146` ↗︎](https://www.npmjs.com/package/ai/v/7.0.146) (from `7.0.143`, in `dependencies`) + - Updated dependency [`jose@6.2.13` ↗︎](https://www.npmjs.com/package/jose/v/6.2.13) (from `6.2.12`, in `dependencies`) + +- [#4755](https://github.com/Urigo/accounter-fullstack/pull/4755) [`2841fb6`](https://github.com/Urigo/accounter-fullstack/commit/2841fb63014520c023173ad48f14f01f9ac412a1) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.84) (from `4.0.82`, in `dependencies`) + - Updated dependency [`@graphql-tools/utils@13.0.2` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.0.2) (from `12.1.0`, in `dependencies`) + - Updated dependency [`ai@7.0.146` ↗︎](https://www.npmjs.com/package/ai/v/7.0.146) (from `7.0.143`, in `dependencies`) + - Updated dependency [`auth0@7.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.6.0) (from `7.5.0`, in `dependencies`) + - Updated dependency [`jose@6.2.13` ↗︎](https://www.npmjs.com/package/jose/v/6.2.13) (from `6.2.12`, in `dependencies`) + +- [#4780](https://github.com/Urigo/accounter-fullstack/pull/4780) [`793503f`](https://github.com/Urigo/accounter-fullstack/commit/793503fb68471a79873c86f572509f783230935f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.84) (from `4.0.82`, in `dependencies`) + - Updated dependency [`@graphql-tools/utils@13.1.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.1.1) (from `12.1.0`, in `dependencies`) + - Updated dependency [`@opentelemetry/api@1.10.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api/v/1.10.0) (from `1.9.1`, in `dependencies`) + - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.82.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.82.0) (from `0.81.2`, in `dependencies`) + - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.300.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.300.0) (from `0.223.0`, in `dependencies`) + - Updated dependency [`@opentelemetry/resources@3.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/3.0.0) (from `2.12.0`, in `dependencies`) + - Updated dependency [`@opentelemetry/sdk-node@0.300.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.300.0) (from `0.223.0`, in `dependencies`) + - Updated dependency [`ai@7.0.146` ↗︎](https://www.npmjs.com/package/ai/v/7.0.146) (from `7.0.143`, in `dependencies`) + - Updated dependency [`auth0@7.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/7.6.0) (from `7.5.0`, in `dependencies`) + - Updated dependency [`googleapis@187.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/187.0.0) (from `186.0.0`, in `dependencies`) + - Updated dependency [`jose@6.2.13` ↗︎](https://www.npmjs.com/package/jose/v/6.2.13) (from `6.2.12`, in `dependencies`) + - Added dependency [`@opentelemetry/sdk-trace@3.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace/v/3.0.0) (to `dependencies`) + +- [#4781](https://github.com/Urigo/accounter-fullstack/pull/4781) [`8676336`](https://github.com/Urigo/accounter-fullstack/commit/8676336574cc1362582532edeb3c11d9f4bed164) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`googleapis@187.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/187.0.0) (from `186.0.0`, in `dependencies`) + +- [#4782](https://github.com/Urigo/accounter-fullstack/pull/4782) [`12a3ede`](https://github.com/Urigo/accounter-fullstack/commit/12a3ede0448264b9d8c68d51a7ffb5126297d6bb) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@ai-sdk/anthropic@4.0.85` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.85) (from `4.0.84`, in `dependencies`) + - Updated dependency [`@google-cloud/pubsub@6.3.1` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/6.3.1) (from `6.3.0`, in `dependencies`) + - Updated dependency [`@graphql-hive/yoga@0.49.9` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.49.9) (from `0.49.8`, in `dependencies`) + - Updated dependency [`@graphql-tools/utils@13.1.2` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.1.2) (from `13.1.1`, in `dependencies`) + - Updated dependency [`ai@7.0.148` ↗︎](https://www.npmjs.com/package/ai/v/7.0.148) (from `7.0.146`, in `dependencies`) + +- [#4783](https://github.com/Urigo/accounter-fullstack/pull/4783) [`b3c036f`](https://github.com/Urigo/accounter-fullstack/commit/b3c036f1fe04049c5a22af74f7ec7b9c15e7222f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`@graphql-tools/utils@13.1.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/13.1.1) (from `13.0.2`, in `dependencies`) + +- [#4800](https://github.com/Urigo/accounter-fullstack/pull/4800) [`ba41d42`](https://github.com/Urigo/accounter-fullstack/commit/ba41d420674702160dac92e34704e393a8ae516d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`googleapis@188.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/188.0.0) (from `187.0.0`, in `dependencies`) + +- [#4664](https://github.com/Urigo/accounter-fullstack/pull/4664) [`f2d9df0`](https://github.com/Urigo/accounter-fullstack/commit/f2d9df0d6aa38eb625152291724754c6b3bd9dcd) Thanks [@gilgardosh](https://github.com/gilgardosh)! - `acceptInvitation` now requires a signed-in user, and the accepting account's verified email must + match the invitation email. API-key and gateway control-plane callers are rejected with + `UNAUTHENTICATED`. The GraphQL signature is unchanged; the client already signs users in before + accepting. + +- [#4765](https://github.com/Urigo/accounter-fullstack/pull/4765) [`bcd32d8`](https://github.com/Urigo/accounter-fullstack/commit/bcd32d862e7dfe960cb46a1136e732d080807953) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Switch document OCR (extraction and the follow-up business matching) from `claude-sonnet-4-5` to + `claude-opus-5-5`, and enable server-side refusal fallbacks so a safety-classifier decline is + retried on a fallback model instead of failing the extraction. + +- [#4794](https://github.com/Urigo/accounter-fullstack/pull/4794) [`488cf25`](https://github.com/Urigo/accounter-fullstack/commit/488cf25e9fb536ffe527d377a8eaec0e16941840) Thanks [@gilgardosh](https://github.com/gilgardosh)! - The charge security header now takes its "Foreign" badge from the security business, judged + against the tenant's locality, instead of the bank's raw flag. + `Security.isForeign` is deprecated in favor of `ChargeSecurity.securityBusiness.isForeign`. + +- [#4626](https://github.com/Urigo/accounter-fullstack/pull/4626) [`6a1a249`](https://github.com/Urigo/accounter-fullstack/commit/6a1a2490374ed2311fb211fde21524a4c2b5cd79) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book the exchange-rate difference again when crypto legs land on the same day. Ledger generation + only adds an `Exchange ledger record` when a charge's entries were priced at more than one point, + and since dates became `TimelessDateString` it compared days, while crypto is still priced at its + exact `debit_timestamp`. A same-day crypto internal transfer (e.g. wallet → exchange) was left + unbalanced. Entries now carry the point they were priced at, keyed the way + `ExchangeProvider.getExchangeRates` prices them: crypto by time, fiat and local currency by day. + +- [#4746](https://github.com/Urigo/accounter-fullstack/pull/4746) [`efd373c`](https://github.com/Urigo/accounter-fullstack/commit/efd373c85dfadd860c50a5276e1122f75d2c8cdf) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Deel invoices with the placeholder contract ID `-261` (independent contractor) are now normalized to + a null contract ID. + +- [#4766](https://github.com/Urigo/accounter-fullstack/pull/4766) [`b750274`](https://github.com/Urigo/accounter-fullstack/commit/b75027462b0b8b4036e4200295bf0d06b7a04516) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Empty-charge cleanup follow-ups: + + - A charge holding salary records, business trip employee payments or depreciation records is no + longer treated as empty, so the cleanup never tries (and fails) to delete it. + - `deleteCharges` now also deletes the charge's balance cancellations, which used to block the + delete through their foreign key. + - `deleteCharge` now refuses a charge that still holds misc expenses or any of the records above, + not only transactions and documents. + - `chargeSpreadDocuments` deletes the original charge when spreading leaves it empty, and leaves it + out of the returned charges. + +- [#4742](https://github.com/Urigo/accounter-fullstack/pull/4742) [`562837a`](https://github.com/Urigo/accounter-fullstack/commit/562837a0f24fd941cde38a8c26412b8b2cf6ad6d) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Match more Poalim securities executions to the cash movement behind them. The matcher required the + transaction's debit date to equal the execution's value date, but the two feeds disagree on dates: + foreign-currency rows are debited around the trade date and executed on the settlement day, a + back-dated correction is executed when posted, and a new issue can settle days late. A pair is now + identified by account, security key, exact amount and direction. The date only ranks candidates: an + exact debit-date or event-date match first, then the closest date within a settlement window. + + Also: + + - Domestic trades and securities fees carry the security key in their reference, not their + description, and are now recognized by it. + - An amount column the feed leaves at `0` gives way to the next column in the same currency. This + fixes shekel trades, whose cash is reported in the NIS column, and their FIFO purchase cost. The + NIS column is only read for executions traded or settled in shekels; on a foreign-currency + execution it holds the commission. + - Within the window, closeness is measured to the execution's whole trade-to-value span, so a + later trade's cash is not taken by an earlier neighbour. A pass re-seats pairs when that lets + more executions pair, and a transaction that names no security only pairs on an exact date. + - A cancelled execution's direction is read from the sign of the value it reports. The bank books a + cancellation either under the original trade type with values negated, or as the opposite action + with positive values. Before, a cancellation could take the original payment's transaction. + - Fee transactions no longer compete with main transactions for an execution. + - The foreign-securities ledger reports a dividend or interest commission that has no matching fee + transaction in the charge, and a cancelled income payment it cannot book as a reversal yet. + +- [#4732](https://github.com/Urigo/accounter-fullstack/pull/4732) [`f57374d`](https://github.com/Urigo/accounter-fullstack/commit/f57374da57d22ce501ea1825025f936f4bd9c4d7) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop duplicating Poalim securities executions that are scraped before they settle. The bank + restates an execution's price, net value and value/settlement dates as it settles, and those fields + were part of the dedup key, so each restated scrape added a second row. The key now leaves them out + (plus a per-scrape `occurrence` ordinal to keep genuine same-day, same-size executions apart), and a + re-scrape updates the existing row in place. A migration removes the superseded rows already + stored, keeping the most recent version of each execution. + +- [#4659](https://github.com/Urigo/accounter-fullstack/pull/4659) [`183a13c`](https://github.com/Urigo/accounter-fullstack/commit/183a13ce58a50b327181e385d9eadb0a9deb0dfb) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Track whether an invitation's Auth0 user was created by the invitation. `createBlockedUser` reuses + an existing Auth0 user for the email, but invitations always recorded `auth0_user_created = true`. + It now returns `{ userId, created }` (choosing deterministically when several users share an + email), and the real value is stored. The expired-invitation cleanup job, the `createInvitation` + rollback and invitation acceptance only delete an Auth0 user that is an unused invitation + placeholder (provisioned by Accounter, never logged in) and that no other invitation or membership + references; acceptance unblocks only the invitation's own or a reused unused placeholder. When an + existing member accepts, the invitation now points at their user and the pending placeholder + membership is removed. + +- [#3852](https://github.com/Urigo/accounter-fullstack/pull/3852) [`c5b26c0`](https://github.com/Urigo/accounter-fullstack/commit/c5b26c0cd268032c12d0c8cee110c9313c4981ce) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Reject duplicate and overlapping entries in a business' list inputs. + + Email lists — general contacts, billing emails, auto-match recognition emails, and the emails in the + client dialog — no longer accept the same address twice, compared case-insensitively. Internal email + links reject an exact repeat, which would otherwise fetch the same documents twice. Auto-match + phrases reject a phrase that repeats or contains / is contained in another: adding `GOOGLE` when + `GOOGL` exists says it is already covered, and adding `GOOGL` when `GOOGLE` exists asks to remove + `GOOGLE` first. Conflicts are blocked when the entry is added, with an inline message, and again by + the form schemas on submit. + + Phrases and links are compared case-sensitively, because that is how they are used: transaction and + charge suggestions match with a case-sensitive `description.includes(phrase)`, so `GOOGLE` and + `Google` match different descriptions and both may be needed. + + On the server, every write of a business' suggestion data (insert, update, batch update, merge) and + every client email write drops entries that are redundant without changing what matches: exact + repeats of phrases and internal links, and case-insensitive repeats of emails. Overlapping phrases + are deliberately left alone there. The configuration tab re-sends the full phrase list on every + save, so pruning `["GOOGL", "GOOGLE"]` down to one would silently change matching for businesses + that already hold both. + +- [#4744](https://github.com/Urigo/accounter-fullstack/pull/4744) [`f013521`](https://github.com/Urigo/accounter-fullstack/commit/f013521d60eee5b64a92dfe5d212aa50d6d87a98) Thanks [@gilgardosh](https://github.com/gilgardosh)! - OCR now reads the allocation number (מספר הקצאה) correctly when it is printed as the last 9 digits + of a longer "Tax Authorities Code". The model copies the code verbatim and the server takes the last + 9 digits, instead of asking the model to slice them (it often returned a window shifted by a digit). + +- [#4687](https://github.com/Urigo/accounter-fullstack/pull/4687) [`36a4755`](https://github.com/Urigo/accounter-fullstack/commit/36a47555bc9264bd2ff27e345b531810d9ad3aee) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Poalim securities transactions with the `איחוד/הפחתת הון` (consolidation / capital reduction) + payment type no longer fail schema validation. The value is accepted by the scraper schemas and + exposed in GraphQL as the new `SecurityPaymentType.CONSOLIDATION_OR_CAPITAL_REDUCTION` member. + +- [#4757](https://github.com/Urigo/accounter-fullstack/pull/4757) [`c59c74a`](https://github.com/Urigo/accounter-fullstack/commit/c59c74a6b54cd20fefc10735d800bdef878601ea) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop reporting Poalim SWIFT transactions as changed when an optional field (e.g. + `swift_remittance_information_70`) is stored as `null` and the scraper sends a blank placeholder for + it. Blank and `null` values are now treated as equal when diffing. + +- [#4831](https://github.com/Urigo/accounter-fullstack/pull/4831) [`a940d69`](https://github.com/Urigo/accounter-fullstack/commit/a940d69c3c984c526a6122dcbe0270e63af4d84b) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Cross-check a securities sale's or redemption's profit/loss with the bank's. Its PnL is recomputed + from its FIFO lots at the bank's own rates and compared with the bank's `nominal_profit_loss_nis`, + `nominal_profit_loss_linkage` and `real_profit_loss_nis`, within ₪2 or a millionth of the proceeds. + The bank reports linkage on the cost side (the negated rate PnL), and its real PnL is the + individual's "lower of the two" result. A mismatch is a ledger error; the disposal is still booked + from its lots. + +- [#4793](https://github.com/Urigo/accounter-fullstack/pull/4793) [`8e5d177`](https://github.com/Urigo/accounter-fullstack/commit/8e5d177c7ba0e84d03de02719f003a3210d76f6f) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Book a cancelled foreign-securities dividend or bond interest payment as the reversal of its income + entry. The cancellation's cash leg used to stay on the securities account, with a "booking the + reversal is not supported yet" ledger error, so the cancelled payment's income and withheld tax were + never reversed. It now debits the income with the gross, credits the bank with the net paid back, + and credits the withholding-tax category with the tax the bank reverses. + + The reversal is priced at the rate of the payment it cancels, found among the charge's matched + executions by security, trade type and gross, so its income and withheld tax net out in shekels too. + When that payment is not in the charge, the reversal is priced at the cancellation day's rate and a + ledger error says so. The withheld-tax consistency check reads a cancellation's negated tax against + its reversed cash. A cancelled redemption is still reported as not supported. + +- [#4811](https://github.com/Urigo/accounter-fullstack/pull/4811) [`5079978`](https://github.com/Urigo/accounter-fullstack/commit/50799780ac5c18af3fe0d0df6365fd0584e8cc6d) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Count Poalim's securities commission refund (`ביטול עמלה ני"ע CANC SEC FEE`) in the foreign-securities + commission check. The row carries its security only in its reference, which was read for the + `FSEC` fee phrase but not for the refund's, so a cancelled payment's refunded commission was left + out and the charge reported a mismatch between its fee transactions and the bank's commission. + +- [#4824](https://github.com/Urigo/accounter-fullstack/pull/4824) [`3b9b211`](https://github.com/Urigo/accounter-fullstack/commit/3b9b2113fa0ee786c82288fececd3d07ed3e0688) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Cost a security disposal from the FIFO lots of its own account, carrying lots across transfers + between the owner's accounts. + + - **FIFO per account.** A disposal draws only on the lots of the account it was made in, as the + bank computes and withholds its tax. The owner's whole history is replayed: a transfer out of one + of the owner's accounts carries the lots' cost and purchase-order place into the account that + receives the same units within 10 days; any other transfer in still has no known cost. Within a + day, units come in before they go out. + - **Lots.** The FIFO cost basis now reports the lots it drew on, with their acquisitions. + - **Redemptions** read the new owner-wide history, so a redeemed bond moved from another account + keeps its cost, and their cost-basis errors name the account. + +- [#4749](https://github.com/Urigo/accounter-fullstack/pull/4749) [`e004303`](https://github.com/Urigo/accounter-fullstack/commit/e004303293857a4b29153199902aef9a09b1eb6a) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop double counting Israeli withheld tax on securities executions. The bank reports the Israeli tax + withheld from a dividend or interest payment in both `israel_tax_value_by_payments_settlement_currency` + and `capital_tax_value_settlement_currency`, and the foreign-securities ledger added the two, so it + booked twice the tax (and an inflated gross income) and flagged every such charge with "withheld tax + … does not match gross minus net". The capital tax column now only stands in when the Israeli column + is empty. The executions table no longer lists a capital tax line that repeats the Israeli one, and + the `capitalTaxValue` schema description and MCP securities tool say it is not additive. Regenerate the + ledger of affected charges. + +- [#4730](https://github.com/Urigo/accounter-fullstack/pull/4730) [`d273736`](https://github.com/Urigo/accounter-fullstack/commit/d2737367ed4d589ba936db665c261a261d9c1c14) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Show the tax withheld from a security execution in its own currency. `SecurityExecution` gains + `foreignTaxValue`, `israelTaxValueByPayments` and `capitalTaxValue` — the bank's per-kind withheld + tax, in the settlement currency, which the ledger already books. Until now only `israelTaxValue` + was exposed, so a foreign dividend's tax withheld abroad never showed. `israelTaxValue` itself is now + formatted in the trade currency: the bank's `israe_tax_value` is not in ILS, so it was mislabelled ₪. The + executions table's Tax column lists each non-zero kind, with the Israeli tax figure under them, and the MCP + securities and charge-details tools return the new fields. + +- [#4752](https://github.com/Urigo/accounter-fullstack/pull/4752) [`e7cab4a`](https://github.com/Urigo/accounter-fullstack/commit/e7cab4ad1eac21cc6f18f7d8db9b4e5505d9750d) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop marking every security business as foreign. Poalim securities ingestion hardcoded + `businesses_securities.is_foreign` to `true`, so Israeli funds and bonds (including dollar-denominated + ones) showed a "Foreign" badge. The flag is now derived from the issuer country the feed reports, + falling back to the ISIN's country prefix, and left null when neither is readable. A re-scrape now + corrects the flag on an existing security business, and a migration re-derives it for rows already + stored by tenants whose locality is Israel. + + "Local" now means the tenant's own `locality` rather than a hardcoded Israel, for both the + security-business flag and the securities ledger's local/foreign income and withholding-tax + categories, which now share one `getSecurityLocality` helper. The ISO alpha-3 to alpha-2 country + map moved out of the Green Invoice helper into a shared `countryCodeToAlpha2`. + +- [#4809](https://github.com/Urigo/accounter-fullstack/pull/4809) [`f6e1430`](https://github.com/Urigo/accounter-fullstack/commit/f6e14305a5334488ae3c4d061f6c70bad670d84d) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Keep `yarn server:dev` running when a rebuild fails while `yarn generate:watch` regenerates types. + + `tsc` exits with code 2 on type errors, which nodemon reserves for a malformed `--exec` command when + it happens within 500 ms of the last watched file event. Codegen writing `__generated__` files + mid-build hit that window, so nodemon stopped instead of waiting for the next change. The `--exec` + command now ends in `|| exit 1`, turning such failures into an ordinary crash that the pending + restart recovers from. + +- [#4767](https://github.com/Urigo/accounter-fullstack/pull/4767) [`728b8bb`](https://github.com/Urigo/accounter-fullstack/commit/728b8bbcb1235ec29c5a87c3946ca05e441dc72f) Thanks [@gilgardosh](https://github.com/gilgardosh)! - `updateTransaction` / `updateTransactions` with `chargeId: EMPTY_UUID` on transactions that are not + linked to any charge no longer fail: the charge is left untouched (there is nothing to unlink) and + the other fields are still updated. The sentinel used to reach the SQL as-is, which tried to write + the nil UUID as the charge ID and failed on its foreign key. +- Updated dependencies [[`9c833a1`](https://github.com/Urigo/accounter-fullstack/commit/9c833a1af7a27d9aa0677e8db3648f061ea98439), [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d), [`6a5f5b6`](https://github.com/Urigo/accounter-fullstack/commit/6a5f5b68ac675498cc3164ffc960d20c5524623c), [`66464f8`](https://github.com/Urigo/accounter-fullstack/commit/66464f894b95cc5abb558c3a73bdb1ddc243ff14), [`abd0493`](https://github.com/Urigo/accounter-fullstack/commit/abd0493a80c7da683ac67ac268a45abec9e8f936), [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d), [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d), [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d), [`0aecf53`](https://github.com/Urigo/accounter-fullstack/commit/0aecf535d624a3f4c233075e8fde6faac67f4053), [`66402a5`](https://github.com/Urigo/accounter-fullstack/commit/66402a500987c81b2d3fc530694b0f996430983c), [`abd0493`](https://github.com/Urigo/accounter-fullstack/commit/abd0493a80c7da683ac67ac268a45abec9e8f936)]: + - @accounter/green-invoice-graphql@0.9.0 + - @accounter/pcn874-generator@0.6.9 + - @accounter/shaam-uniform-format-generator@0.2.8 + - @accounter/shaam6111-generator@0.1.10 + ## 0.2.0 ### Minor Changes diff --git a/packages/server/package.json b/packages/server/package.json index abd2a7e4b4..69bb69530f 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/server", - "version": "0.2.0", + "version": "0.3.0", "type": "module", "description": "Accounter GraphQL server", "repository": { diff --git a/packages/shaam-uniform-format-generator/CHANGELOG.md b/packages/shaam-uniform-format-generator/CHANGELOG.md index e2884666de..68aadf7704 100644 --- a/packages/shaam-uniform-format-generator/CHANGELOG.md +++ b/packages/shaam-uniform-format-generator/CHANGELOG.md @@ -1,5 +1,12 @@ # @accounter/shaam-uniform-format-generator +## 0.2.8 + +### Patch Changes + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + ## 0.2.7 ### Patch Changes diff --git a/packages/shaam-uniform-format-generator/package.json b/packages/shaam-uniform-format-generator/package.json index 8a317f782a..976a3fe96b 100644 --- a/packages/shaam-uniform-format-generator/package.json +++ b/packages/shaam-uniform-format-generator/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/shaam-uniform-format-generator", - "version": "0.2.7", + "version": "0.2.8", "type": "module", "description": "Fully typed application that generates, parses, and validates SHAAM uniform format tax reports (INI.TXT and BKMVDATA.TXT).", "repository": { diff --git a/packages/shaam6111-generator/CHANGELOG.md b/packages/shaam6111-generator/CHANGELOG.md index 3d09696ef6..13cb745552 100644 --- a/packages/shaam6111-generator/CHANGELOG.md +++ b/packages/shaam6111-generator/CHANGELOG.md @@ -1,5 +1,12 @@ # @accounter/shaam6111-generator +## 0.1.10 + +### Patch Changes + +- [#4663](https://github.com/Urigo/accounter-fullstack/pull/4663) [`b614910`](https://github.com/Urigo/accounter-fullstack/commit/b614910b987cc59885ece1001e15df401f9ef75d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`zod@4.6.7` ↗︎](https://www.npmjs.com/package/zod/v/4.6.7) (from `4.6.5`, in `dependencies`) + ## 0.1.9 ### Patch Changes diff --git a/packages/shaam6111-generator/package.json b/packages/shaam6111-generator/package.json index 6449b766db..6a0f8eb486 100644 --- a/packages/shaam6111-generator/package.json +++ b/packages/shaam6111-generator/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/shaam6111-generator", - "version": "0.1.9", + "version": "0.1.10", "type": "module", "description": "Fully typed application that generates, parses, and validates SHAAM 6111 tax reports.", "repository": {