diff --git a/.changeset/@accounter_client-3738-dependencies.md b/.changeset/@accounter_client-3738-dependencies.md deleted file mode 100644 index 1ad534e2ef..0000000000 --- a/.changeset/@accounter_client-3738-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`html2canvas-pro@2.1.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.1.1) (from `2.0.4`, in `dependencies`) diff --git a/.changeset/@accounter_client-3752-dependencies.md b/.changeset/@accounter_client-3752-dependencies.md deleted file mode 100644 index 6d9f95b2e9..0000000000 --- a/.changeset/@accounter_client-3752-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@mui/material@9.1.2` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.1.2) (from `9.1.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-3756-dependencies.md b/.changeset/@accounter_client-3756-dependencies.md deleted file mode 100644 index 3c16c2d5d5..0000000000 --- a/.changeset/@accounter_client-3756-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`recharts@3.9.0` ↗︎](https://www.npmjs.com/package/recharts/v/3.9.0) (from `3.8.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-3762-dependencies.md b/.changeset/@accounter_client-3762-dependencies.md deleted file mode 100644 index 1092fd0afb..0000000000 --- a/.changeset/@accounter_client-3762-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@mui/material@9.1.2` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.1.2) (from `9.1.1`, in `dependencies`) - - Updated dependency [`html2canvas-pro@2.1.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.1.1) (from `2.0.4`, in `dependencies`) diff --git a/.changeset/@accounter_client-3767-dependencies.md b/.changeset/@accounter_client-3767-dependencies.md deleted file mode 100644 index 2ec7d5cbca..0000000000 --- a/.changeset/@accounter_client-3767-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`html2canvas-pro@2.2.0` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.0) (from `2.1.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-3768-dependencies.md b/.changeset/@accounter_client-3768-dependencies.md deleted file mode 100644 index d34c10f3e4..0000000000 --- a/.changeset/@accounter_client-3768-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@tanstack/react-query@5.101.1` ↗︎](https://www.npmjs.com/package/@tanstack/react-query/v/5.101.1) (from `5.101.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3788-dependencies.md b/.changeset/@accounter_client-3788-dependencies.md deleted file mode 100644 index c0ba4d2170..0000000000 --- a/.changeset/@accounter_client-3788-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`pdfjs-dist@6.1.200` ↗︎](https://www.npmjs.com/package/pdfjs-dist/v/6.1.200) (from `6.0.227`, in `dependencies`) diff --git a/.changeset/@accounter_client-3789-dependencies.md b/.changeset/@accounter_client-3789-dependencies.md deleted file mode 100644 index 2f2183182e..0000000000 --- a/.changeset/@accounter_client-3789-dependencies.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@tanstack/react-query@5.101.2` ↗︎](https://www.npmjs.com/package/@tanstack/react-query/v/5.101.2) (from `5.101.1`, in `dependencies`) - - Updated dependency [`html2canvas-pro@2.2.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.1) (from `2.2.0`, in `dependencies`) - - Updated dependency [`radix-ui@1.6.1` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.6.1) (from `1.6.0`, in `dependencies`) - - Updated dependency [`react-router-dom@7.18.1` ↗︎](https://www.npmjs.com/package/react-router-dom/v/7.18.1) (from `7.18.0`, in `dependencies`) - - Updated dependency [`recharts@3.9.1` ↗︎](https://www.npmjs.com/package/recharts/v/3.9.1) (from `3.9.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3796-dependencies.md b/.changeset/@accounter_client-3796-dependencies.md deleted file mode 100644 index e5e9e628f7..0000000000 --- a/.changeset/@accounter_client-3796-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.22.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.22.0) (from `1.21.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3820-dependencies.md b/.changeset/@accounter_client-3820-dependencies.md deleted file mode 100644 index fa372b7ef6..0000000000 --- a/.changeset/@accounter_client-3820-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.23.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.23.0) (from `1.22.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3823-dependencies.md b/.changeset/@accounter_client-3823-dependencies.md deleted file mode 100644 index 985932db00..0000000000 --- a/.changeset/@accounter_client-3823-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.20.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.20.0) (from `2.19.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3831-dependencies.md b/.changeset/@accounter_client-3831-dependencies.md deleted file mode 100644 index ef77b4f5b6..0000000000 --- a/.changeset/@accounter_client-3831-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@mui/material@9.2.0` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.2.0) (from `9.1.2`, in `dependencies`) diff --git a/.changeset/@accounter_client-3834-dependencies.md b/.changeset/@accounter_client-3834-dependencies.md deleted file mode 100644 index b24a62af8b..0000000000 --- a/.changeset/@accounter_client-3834-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@mui/x-charts@8.29.2` ↗︎](https://www.npmjs.com/package/@mui/x-charts/v/8.29.2) (from `8.29.0`, in `dependencies`) - - Updated dependency [`csv-parse@7.0.1` ↗︎](https://www.npmjs.com/package/csv-parse/v/7.0.1) (from `7.0.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3836-dependencies.md b/.changeset/@accounter_client-3836-dependencies.md deleted file mode 100644 index d0f473fd56..0000000000 --- a/.changeset/@accounter_client-3836-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@mui/material@9.2.0` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.2.0) (from `9.1.2`, in `dependencies`) - - Updated dependency [`@mui/x-charts@8.29.2` ↗︎](https://www.npmjs.com/package/@mui/x-charts/v/8.29.2) (from `8.29.0`, in `dependencies`) - - Updated dependency [`csv-parse@7.0.1` ↗︎](https://www.npmjs.com/package/csv-parse/v/7.0.1) (from `7.0.0`, in `dependencies`) - - Updated dependency [`react-hook-form@7.81.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.81.0) (from `7.80.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3839-dependencies.md b/.changeset/@accounter_client-3839-dependencies.md deleted file mode 100644 index 0015b56e0f..0000000000 --- a/.changeset/@accounter_client-3839-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`react-hook-form@7.81.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.81.0) (from `7.80.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3846-dependencies.md b/.changeset/@accounter_client-3846-dependencies.md deleted file mode 100644 index 46b5daf1f6..0000000000 --- a/.changeset/@accounter_client-3846-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`html2canvas-pro@2.2.3` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.3) (from `2.2.1`, in `dependencies`) - - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) (from `0.7.2`, in `dependencies`) - - Updated dependency [`radix-ui@1.6.2` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.6.2) (from `1.6.1`, in `dependencies`) - - Updated dependency [`recharts@3.9.2` ↗︎](https://www.npmjs.com/package/recharts/v/3.9.2) (from `3.9.1`, in `dependencies`) diff --git a/.changeset/@accounter_client-3873-dependencies.md b/.changeset/@accounter_client-3873-dependencies.md deleted file mode 100644 index 9602e24f75..0000000000 --- a/.changeset/@accounter_client-3873-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.21.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.21.0) (from `2.20.0`, in `dependencies`) - - Updated dependency [`lucide-react@1.24.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.24.0) (from `1.23.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3905-dependencies.md b/.changeset/@accounter_client-3905-dependencies.md deleted file mode 100644 index 1c6619b10a..0000000000 --- a/.changeset/@accounter_client-3905-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.24.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.24.0) (from `1.23.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3908-dependencies.md b/.changeset/@accounter_client-3908-dependencies.md deleted file mode 100644 index ec58796915..0000000000 --- a/.changeset/@accounter_client-3908-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.21.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.21.0) (from `2.20.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3913-dependencies.md b/.changeset/@accounter_client-3913-dependencies.md deleted file mode 100644 index af592737aa..0000000000 --- a/.changeset/@accounter_client-3913-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`html2canvas-pro@2.2.4` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.4) (from `2.2.3`, in `dependencies`) diff --git a/.changeset/@accounter_client-3956-dependencies.md b/.changeset/@accounter_client-3956-dependencies.md deleted file mode 100644 index b66cf2d23f..0000000000 --- a/.changeset/@accounter_client-3956-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.22.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.22.0) (from `2.21.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3957-dependencies.md b/.changeset/@accounter_client-3957-dependencies.md deleted file mode 100644 index 5e3d65361a..0000000000 --- a/.changeset/@accounter_client-3957-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`lucide-react@1.25.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.25.0) (from `1.24.0`, in `dependencies`) diff --git a/.changeset/@accounter_client-3964-dependencies.md b/.changeset/@accounter_client-3964-dependencies.md deleted file mode 100644 index 1e183918c5..0000000000 --- a/.changeset/@accounter_client-3964-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/client": patch ---- -dependencies updates: - - Updated dependency [`@auth0/auth0-react@2.22.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.22.0) (from `2.21.0`, in `dependencies`) - - Updated dependency [`lucide-react@1.25.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.25.0) (from `1.24.0`, in `dependencies`) diff --git a/.changeset/@accounter_gmail-listener-3768-dependencies.md b/.changeset/@accounter_gmail-listener-3768-dependencies.md deleted file mode 100644 index 33f1e66e1f..0000000000 --- a/.changeset/@accounter_gmail-listener-3768-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/gmail-listener": patch ---- -dependencies updates: - - Updated dependency [`playwright@1.61.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.1) (from `1.61.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-3738-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-3738-dependencies.md deleted file mode 100644 index 49c66136bd..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-3738-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) (from `25.1.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-3762-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-3762-dependencies.md deleted file mode 100644 index 49c66136bd..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-3762-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) (from `25.1.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-3768-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-3768-dependencies.md deleted file mode 100644 index 6557b75218..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-3768-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.2.1` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.1) (from `25.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_israeli-vat-scraper-3821-dependencies.md b/.changeset/@accounter_israeli-vat-scraper-3821-dependencies.md deleted file mode 100644 index 980b5a47d5..0000000000 --- a/.changeset/@accounter_israeli-vat-scraper-3821-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/israeli-vat-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.3.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.3.0) (from `25.2.1`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-3738-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-3738-dependencies.md deleted file mode 100644 index 531a4b3153..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-3738-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) (from `25.1.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-3762-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-3762-dependencies.md deleted file mode 100644 index 531a4b3153..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-3762-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) (from `25.1.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-3768-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-3768-dependencies.md deleted file mode 100644 index 114435b935..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-3768-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`playwright@1.61.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.1) (from `1.61.0`, in `dependencies`) - - Updated dependency [`puppeteer@25.2.1` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.1) (from `25.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_modern-poalim-scraper-3821-dependencies.md b/.changeset/@accounter_modern-poalim-scraper-3821-dependencies.md deleted file mode 100644 index 619ddf733f..0000000000 --- a/.changeset/@accounter_modern-poalim-scraper-3821-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/modern-poalim-scraper": patch ---- -dependencies updates: - - Updated dependency [`puppeteer@25.3.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.3.0) (from `25.2.1`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3792-dependencies.md b/.changeset/@accounter_scraper-app-3792-dependencies.md deleted file mode 100644 index 5a6a3d0d3a..0000000000 --- a/.changeset/@accounter_scraper-app-3792-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fastify@5.9.0` ↗︎](https://www.npmjs.com/package/fastify/v/5.9.0) (from `5.8.5`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3836-dependencies.md b/.changeset/@accounter_scraper-app-3836-dependencies.md deleted file mode 100644 index 301b0eea3d..0000000000 --- a/.changeset/@accounter_scraper-app-3836-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fastify@5.10.0` ↗︎](https://www.npmjs.com/package/fastify/v/5.10.0) (from `5.9.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3842-dependencies.md b/.changeset/@accounter_scraper-app-3842-dependencies.md deleted file mode 100644 index 301b0eea3d..0000000000 --- a/.changeset/@accounter_scraper-app-3842-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fastify@5.10.0` ↗︎](https://www.npmjs.com/package/fastify/v/5.10.0) (from `5.9.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3871-dependencies.md b/.changeset/@accounter_scraper-app-3871-dependencies.md deleted file mode 100644 index ea6fe0f112..0000000000 --- a/.changeset/@accounter_scraper-app-3871-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`msw@2.15.0` ↗︎](https://www.npmjs.com/package/msw/v/2.15.0) (from `2.14.6`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3873-dependencies.md b/.changeset/@accounter_scraper-app-3873-dependencies.md deleted file mode 100644 index b59cc9b4ba..0000000000 --- a/.changeset/@accounter_scraper-app-3873-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@9.3.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/9.3.0) (from `9.1.3`, in `dependencies`) - - Updated dependency [`fast-xml-parser@5.10.0` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.0) (from `5.9.3`, in `dependencies`) - - Updated dependency [`msw@2.15.0` ↗︎](https://www.npmjs.com/package/msw/v/2.15.0) (from `2.14.6`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3881-dependencies.md b/.changeset/@accounter_scraper-app-3881-dependencies.md deleted file mode 100644 index 325f62777d..0000000000 --- a/.changeset/@accounter_scraper-app-3881-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@9.3.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/9.3.0) (from `9.1.3`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3882-dependencies.md b/.changeset/@accounter_scraper-app-3882-dependencies.md deleted file mode 100644 index cf534b60d9..0000000000 --- a/.changeset/@accounter_scraper-app-3882-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from `11.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3911-dependencies.md b/.changeset/@accounter_scraper-app-3911-dependencies.md deleted file mode 100644 index 798f2733a9..0000000000 --- a/.changeset/@accounter_scraper-app-3911-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fast-xml-parser@5.10.0` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.0) (from `5.9.3`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3912-dependencies.md b/.changeset/@accounter_scraper-app-3912-dependencies.md deleted file mode 100644 index 8383a0729d..0000000000 --- a/.changeset/@accounter_scraper-app-3912-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from `9.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3923-dependencies.md b/.changeset/@accounter_scraper-app-3923-dependencies.md deleted file mode 100644 index cf534b60d9..0000000000 --- a/.changeset/@accounter_scraper-app-3923-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from `11.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3925-dependencies.md b/.changeset/@accounter_scraper-app-3925-dependencies.md deleted file mode 100644 index cf534b60d9..0000000000 --- a/.changeset/@accounter_scraper-app-3925-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from `11.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3927-dependencies.md b/.changeset/@accounter_scraper-app-3927-dependencies.md deleted file mode 100644 index cf534b60d9..0000000000 --- a/.changeset/@accounter_scraper-app-3927-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from `11.2.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3936-dependencies.md b/.changeset/@accounter_scraper-app-3936-dependencies.md deleted file mode 100644 index 2ac891e624..0000000000 --- a/.changeset/@accounter_scraper-app-3936-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`ws@8.21.1` ↗︎](https://www.npmjs.com/package/ws/v/8.21.1) (from `8.21.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3938-dependencies.md b/.changeset/@accounter_scraper-app-3938-dependencies.md deleted file mode 100644 index 8383a0729d..0000000000 --- a/.changeset/@accounter_scraper-app-3938-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from `9.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3939-dependencies.md b/.changeset/@accounter_scraper-app-3939-dependencies.md deleted file mode 100644 index 8383a0729d..0000000000 --- a/.changeset/@accounter_scraper-app-3939-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from `9.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3942-dependencies.md b/.changeset/@accounter_scraper-app-3942-dependencies.md deleted file mode 100644 index 8383a0729d..0000000000 --- a/.changeset/@accounter_scraper-app-3942-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from `9.3.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3955-dependencies.md b/.changeset/@accounter_scraper-app-3955-dependencies.md deleted file mode 100644 index aa3480a6e8..0000000000 --- a/.changeset/@accounter_scraper-app-3955-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fast-xml-parser@5.10.1` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.1) (from `5.10.0`, in `dependencies`) diff --git a/.changeset/@accounter_scraper-app-3964-dependencies.md b/.changeset/@accounter_scraper-app-3964-dependencies.md deleted file mode 100644 index aa3480a6e8..0000000000 --- a/.changeset/@accounter_scraper-app-3964-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/scraper-app": patch ---- -dependencies updates: - - Updated dependency [`fast-xml-parser@5.10.1` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.1) (from `5.10.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3763-dependencies.md b/.changeset/@accounter_server-3763-dependencies.md deleted file mode 100644 index 2da7f14f07..0000000000 --- a/.changeset/@accounter_server-3763-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@5.13.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.13.0) (from `5.12.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3768-dependencies.md b/.changeset/@accounter_server-3768-dependencies.md deleted file mode 100644 index 0be18b72d5..0000000000 --- a/.changeset/@accounter_server-3768-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@3.0.86` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.86) (from `3.0.85`, in `dependencies`) - - Updated dependency [`ai@6.0.209` ↗︎](https://www.npmjs.com/package/ai/v/6.0.209) (from `6.0.208`, in `dependencies`) - - Updated dependency [`playwright@1.61.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.1) (from `1.61.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3776-dependencies.md b/.changeset/@accounter_server-3776-dependencies.md deleted file mode 100644 index 36565d35a0..0000000000 --- a/.changeset/@accounter_server-3776-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@3.0.87` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.87) (from `3.0.86`, in `dependencies`) - - Updated dependency [`ai@6.0.210` ↗︎](https://www.npmjs.com/package/ai/v/6.0.210) (from `6.0.209`, in `dependencies`) diff --git a/.changeset/@accounter_server-3778-dependencies.md b/.changeset/@accounter_server-3778-dependencies.md deleted file mode 100644 index 3e01f272bc..0000000000 --- a/.changeset/@accounter_server-3778-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.1` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.1) (from `3.0.86`, in `dependencies`) - - Updated dependency [`ai@7.0.2` ↗︎](https://www.npmjs.com/package/ai/v/7.0.2) (from `6.0.209`, in `dependencies`) diff --git a/.changeset/@accounter_server-3789-dependencies.md b/.changeset/@accounter_server-3789-dependencies.md deleted file mode 100644 index 9e7ba42170..0000000000 --- a/.changeset/@accounter_server-3789-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.4` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.4) (from `4.0.1`, in `dependencies`) - - Updated dependency [`@graphql-tools/utils@11.1.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/11.1.1) (from `11.1.0`, in `dependencies`) - - Updated dependency [`ai@7.0.9` ↗︎](https://www.npmjs.com/package/ai/v/7.0.9) (from `7.0.2`, in `dependencies`) diff --git a/.changeset/@accounter_server-3790-dependencies.md b/.changeset/@accounter_server-3790-dependencies.md deleted file mode 100644 index b27df011d7..0000000000 --- a/.changeset/@accounter_server-3790-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.1` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.1) (from `3.0.87`, in `dependencies`) - - Updated dependency [`ai@7.0.2` ↗︎](https://www.npmjs.com/package/ai/v/7.0.2) (from `6.0.210`, in `dependencies`) diff --git a/.changeset/@accounter_server-3825-dependencies.md b/.changeset/@accounter_server-3825-dependencies.md deleted file mode 100644 index 31f9a2c6f2..0000000000 --- a/.changeset/@accounter_server-3825-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.220.0) (from `0.219.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/resources@2.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.9.0) (from `2.8.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/sdk-node@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.220.0) (from `0.219.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3832-dependencies.md b/.changeset/@accounter_server-3832-dependencies.md deleted file mode 100644 index da96152bcf..0000000000 --- a/.changeset/@accounter_server-3832-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.78.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.78.0) (from `0.77.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3834-dependencies.md b/.changeset/@accounter_server-3834-dependencies.md deleted file mode 100644 index 73c3a41975..0000000000 --- a/.changeset/@accounter_server-3834-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.7` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.7) (from `4.0.4`, in `dependencies`) - - Updated dependency [`ai@7.0.14` ↗︎](https://www.npmjs.com/package/ai/v/7.0.14) (from `7.0.9`, in `dependencies`) diff --git a/.changeset/@accounter_server-3836-dependencies.md b/.changeset/@accounter_server-3836-dependencies.md deleted file mode 100644 index c3335f587c..0000000000 --- a/.changeset/@accounter_server-3836-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.7` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.7) (from `4.0.4`, in `dependencies`) - - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.78.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.78.0) (from `0.77.0`, in `dependencies`) - - Updated dependency [`ai@7.0.14` ↗︎](https://www.npmjs.com/package/ai/v/7.0.14) (from `7.0.9`, in `dependencies`) diff --git a/.changeset/@accounter_server-3837-dependencies.md b/.changeset/@accounter_server-3837-dependencies.md deleted file mode 100644 index 31f9a2c6f2..0000000000 --- a/.changeset/@accounter_server-3837-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.220.0) (from `0.219.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/resources@2.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.9.0) (from `2.8.0`, in `dependencies`) - - Updated dependency [`@opentelemetry/sdk-node@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.220.0) (from `0.219.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3846-dependencies.md b/.changeset/@accounter_server-3846-dependencies.md deleted file mode 100644 index 0fecc1e382..0000000000 --- a/.changeset/@accounter_server-3846-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.8` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.8) (from `4.0.7`, in `dependencies`) - - Updated dependency [`@graphql-hive/yoga@0.48.2` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.48.2) (from `0.48.1`, in `dependencies`) - - Updated dependency [`ai@7.0.16` ↗︎](https://www.npmjs.com/package/ai/v/7.0.16) (from `7.0.14`, in `dependencies`) - - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) (from `0.7.2`, in `dependencies`) diff --git a/.changeset/@accounter_server-3853-dependencies.md b/.changeset/@accounter_server-3853-dependencies.md deleted file mode 100644 index b0abd2f15f..0000000000 --- a/.changeset/@accounter_server-3853-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@graphql-tools/utils@11.2.0` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/11.2.0) (from `11.1.1`, in `dependencies`) diff --git a/.changeset/@accounter_server-3866-dependencies.md b/.changeset/@accounter_server-3866-dependencies.md deleted file mode 100644 index b2e8b3b03c..0000000000 --- a/.changeset/@accounter_server-3866-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/semantic-conventions@1.42.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.42.0) (from `1.41.1`, in `dependencies`) diff --git a/.changeset/@accounter_server-3872-dependencies.md b/.changeset/@accounter_server-3872-dependencies.md deleted file mode 100644 index 5dc336f303..0000000000 --- a/.changeset/@accounter_server-3872-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.9` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.9) (from `4.0.8`, in `dependencies`) - - Updated dependency [`ai@7.0.17` ↗︎](https://www.npmjs.com/package/ai/v/7.0.17) (from `7.0.16`, in `dependencies`) diff --git a/.changeset/@accounter_server-3873-dependencies.md b/.changeset/@accounter_server-3873-dependencies.md deleted file mode 100644 index 9678a904ac..0000000000 --- a/.changeset/@accounter_server-3873-dependencies.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.10` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.10) (from `4.0.8`, in `dependencies`) - - Updated dependency [`@opentelemetry/semantic-conventions@1.43.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.43.0) (from `1.42.0`, in `dependencies`) - - Updated dependency [`ai@7.0.18` ↗︎](https://www.npmjs.com/package/ai/v/7.0.18) (from `7.0.16`, in `dependencies`) - - Updated dependency [`auth0@5.14.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.14.0) (from `5.13.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3885-dependencies.md b/.changeset/@accounter_server-3885-dependencies.md deleted file mode 100644 index 247caf2ecf..0000000000 --- a/.changeset/@accounter_server-3885-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.10` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.10) (from `4.0.9`, in `dependencies`) - - Updated dependency [`ai@7.0.18` ↗︎](https://www.npmjs.com/package/ai/v/7.0.18) (from `7.0.17`, in `dependencies`) diff --git a/.changeset/@accounter_server-3906-dependencies.md b/.changeset/@accounter_server-3906-dependencies.md deleted file mode 100644 index 13e8fc434b..0000000000 --- a/.changeset/@accounter_server-3906-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@opentelemetry/semantic-conventions@1.43.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.43.0) (from `1.42.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3909-dependencies.md b/.changeset/@accounter_server-3909-dependencies.md deleted file mode 100644 index 7f95b53530..0000000000 --- a/.changeset/@accounter_server-3909-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@5.14.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.14.0) (from `5.13.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3913-dependencies.md b/.changeset/@accounter_server-3913-dependencies.md deleted file mode 100644 index 2500b15d8f..0000000000 --- a/.changeset/@accounter_server-3913-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.12` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.12) (from `4.0.10`, in `dependencies`) - - Updated dependency [`ai@7.0.22` ↗︎](https://www.npmjs.com/package/ai/v/7.0.22) (from `7.0.18`, in `dependencies`) diff --git a/.changeset/@accounter_server-3928-dependencies.md b/.changeset/@accounter_server-3928-dependencies.md deleted file mode 100644 index 1889fcd4f2..0000000000 --- a/.changeset/@accounter_server-3928-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.14` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.14) (from `4.0.12`, in `dependencies`) - - Updated dependency [`ai@7.0.26` ↗︎](https://www.npmjs.com/package/ai/v/7.0.26) (from `7.0.22`, in `dependencies`) diff --git a/.changeset/@accounter_server-3936-dependencies.md b/.changeset/@accounter_server-3936-dependencies.md deleted file mode 100644 index 41188ca515..0000000000 --- a/.changeset/@accounter_server-3936-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`@ai-sdk/anthropic@4.0.15` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.15) (from `4.0.14`, in `dependencies`) - - Updated dependency [`ai@7.0.28` ↗︎](https://www.npmjs.com/package/ai/v/7.0.28) (from `7.0.26`, in `dependencies`) diff --git a/.changeset/@accounter_server-3943-dependencies.md b/.changeset/@accounter_server-3943-dependencies.md deleted file mode 100644 index 8faaa5d0c2..0000000000 --- a/.changeset/@accounter_server-3943-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`auth0@6.0.0` ↗︎](https://www.npmjs.com/package/auth0/v/6.0.0) (from `5.14.0`, in `dependencies`) diff --git a/.changeset/@accounter_server-3955-dependencies.md b/.changeset/@accounter_server-3955-dependencies.md deleted file mode 100644 index d071728a31..0000000000 --- a/.changeset/@accounter_server-3955-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`ai@7.0.29` ↗︎](https://www.npmjs.com/package/ai/v/7.0.29) (from `7.0.28`, in `dependencies`) diff --git a/.changeset/@accounter_server-3964-dependencies.md b/.changeset/@accounter_server-3964-dependencies.md deleted file mode 100644 index 081a75d6ed..0000000000 --- a/.changeset/@accounter_server-3964-dependencies.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@accounter/server": patch ---- -dependencies updates: - - Updated dependency [`ai@7.0.29` ↗︎](https://www.npmjs.com/package/ai/v/7.0.29) (from `7.0.28`, in `dependencies`) - - Updated dependency [`auth0@6.0.0` ↗︎](https://www.npmjs.com/package/auth0/v/6.0.0) (from `5.14.0`, in `dependencies`) diff --git a/.changeset/@accounter_shaam-uniform-format-generator-3846-dependencies.md b/.changeset/@accounter_shaam-uniform-format-generator-3846-dependencies.md deleted file mode 100644 index 0362bf9203..0000000000 --- a/.changeset/@accounter_shaam-uniform-format-generator-3846-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/shaam-uniform-format-generator": patch ---- -dependencies updates: - - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) (from `0.7.2`, in `dependencies`) diff --git a/.changeset/@accounter_shaam6111-generator-3846-dependencies.md b/.changeset/@accounter_shaam6111-generator-3846-dependencies.md deleted file mode 100644 index 7f5eb1603e..0000000000 --- a/.changeset/@accounter_shaam6111-generator-3846-dependencies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@accounter/shaam6111-generator": patch ---- -dependencies updates: - - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) (from `0.7.2`, in `dependencies`) diff --git a/.changeset/balance-report-crypto-currency-formatter.md b/.changeset/balance-report-crypto-currency-formatter.md deleted file mode 100644 index aa7127d4e2..0000000000 --- a/.changeset/balance-report-crypto-currency-formatter.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/client': patch ---- - -Fix a crash in the transactions balance report when a period's per-currency breakdown includes a -crypto currency. Crypto currencies (`USDC`, `ETH`, `GRT`) are not valid ISO 4217 codes, so -`getCurrencyFormatter` threw `RangeError: Invalid currency code` when building an -`Intl.NumberFormat` with `style: 'currency'`. The formatter now falls back to decimal formatting -with the currency symbol as a prefix for non-fiat currencies (placing the minus sign before the -symbol for negatives, matching fiat notation), leaving fiat currency formatting unchanged. diff --git a/.changeset/bank-deposits-reassign-blink.md b/.changeset/bank-deposits-reassign-blink.md deleted file mode 100644 index 8c2f95fe4d..0000000000 --- a/.changeset/bank-deposits-reassign-blink.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"@accounter/client": patch ---- - -Fix the Bank Deposits screen "blinking" when reassigning a transaction, without losing the update. - -Previously, reassigning a transaction refetched `AllDeposits`, and the loading gate replaced the -whole table on every refetch — unmounting and remounting the expanded transaction sub-tables, which -is what actually refreshed their data (the urql client has no cache exchange, so mutations don't -invalidate queries). This caused a jarring full-screen blink. - -Now the loading gates only replace the table on the initial load (`fetching && !data`), and derived -rows are wrapped in a new `useStableValue` hook so the view updates only when data actually changes. -To keep the data correct without the remount, a reassign bumps a token that every mounted deposit -transaction table observes and re-executes its own query for — so the reassigned row leaves the -source deposit and appears under the target deposit, and both deposits' balances refresh, with no -blink. diff --git a/.changeset/charge-extended-info-reduce-blink.md b/.changeset/charge-extended-info-reduce-blink.md deleted file mode 100644 index 8245f1e20f..0000000000 --- a/.changeset/charge-extended-info-reduce-blink.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -"@accounter/client": patch ---- - -Reduce the "blinking" in the charge extended-info panel (and its sub-components) when something is -updated via `onExtendedChange`. Applying the same insights as the bank-deposits and charges-table -fixes: - -- `charge-extended-info.tsx`: the top loader now only shows on the initial load (`fetching && !charge`) - instead of on every refetch. The `@defer` `FetchCharge` query is re-executed with - `network-only`, and its result is merged over the previously loaded charge — a re-executed deferred - query delivers its non-deferred fields first and streams the deferred fragments in later patches, so - merging keeps the already-loaded accordion sections rendering their last data until each fresh patch - arrives, instead of every section collapsing and re-expanding. The rendered charge is also wrapped - in `useStableValue` so descendants re-render only on real changes. -- `extended-info/charge-matches.tsx`: gate the loader on `fetching && !data` so the matches table - stays visible during background refetches. -- `extended-info/bank-deposit.tsx`: show the full-section loader only on the initial load; during - background refetches and create/assign mutations the current content stays visible (mutation - progress is already surfaced via the inline button states). diff --git a/.changeset/charge-matching-base-selection.md b/.changeset/charge-matching-base-selection.md deleted file mode 100644 index af4c62fa4c..0000000000 --- a/.changeset/charge-matching-base-selection.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/client": patch ---- - -Charge Matching screen: allow selecting a base charge from the queue sidebar. Clicking an entry pins -that charge as the active item under review, so you can jump ahead to an upcoming base charge or -revisit one you skipped instead of only ever seeing the first pending charge. Already-matched entries -are disabled since they are merged on the backend. diff --git a/.changeset/charge-matching-doc-requirements.md b/.changeset/charge-matching-doc-requirements.md deleted file mode 100644 index 4bf79b8ec5..0000000000 --- a/.changeset/charge-matching-doc-requirements.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/server": patch ---- - -Exclude charge types that never require document matching from the -awaiting-match queue. Only COMMON, BUSINESS_TRIP and untyped charges (which -resolve to one of those) are expected to hold both documents and transactions; -BANK_DEPOSIT, CREDITCARD_BANK, DIVIDEND, FOREIGN_SECURITIES, INTERNAL, VAT, -PAYROLL, CONVERSION and FINANCIAL charges are now skipped. diff --git a/.changeset/charge-matching-filters-url-params.md b/.changeset/charge-matching-filters-url-params.md deleted file mode 100644 index 0abd7b2683..0000000000 --- a/.changeset/charge-matching-filters-url-params.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/client": patch ---- - -Persist the Charge Matching screen filters (mode, from/to dates, business and sort-by) in the URL -query string, so the current selection survives a page refresh and can be shared via link. Filter -updates are merged into the existing query params, preserving any unrelated params already in the -URL. diff --git a/.changeset/charge-matching-queue-parallel-scoring.md b/.changeset/charge-matching-queue-parallel-scoring.md deleted file mode 100644 index 88a876fdcc..0000000000 --- a/.changeset/charge-matching-queue-parallel-scoring.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@accounter/server": patch ---- - -Score charge-match candidates in parallel. `findMatches` previously scored candidates in a -sequential `await` loop, which serialized the per-candidate client and issued-document-status -DataLoader lookups inside `scoreMatch` into an N+1. Scoring now runs with `Promise.all` so those -loads batch. Ordering is unaffected (results are sorted afterwards), so match output is unchanged. diff --git a/.changeset/charge-matching-queue-shared-pool.md b/.changeset/charge-matching-queue-shared-pool.md deleted file mode 100644 index 49ebe8854b..0000000000 --- a/.changeset/charge-matching-queue-shared-pool.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@accounter/server": patch ---- - -Speed up the `chargesAwaitingMatchQueue` query by building the match candidate pool once per -request instead of once per queued charge. `ChargesMatcherProvider` now exposes a batch -`findMatchesForCharges`, which loads and classifies the shared candidate pool a single time and -scores every source charge against it in memory (the per-source ±12-month window is still applied -in-memory, so results are unchanged). This removes the previous per-charge re-query and -re-hydration of the candidate pool — the dominant cost, especially for `BY_SCORE` which evaluated -up to 100 charges. - -Candidate charges are also filtered by `chargeRequiresMatch` before hydration, so charge types that -never require a document match (e.g. `BANK_DEPOSIT`, `CREDITCARD_BANK`, `VAT`) are no longer loaded -or offered as suggestions — mirroring the same filter already applied to the queue's source charges. diff --git a/.changeset/charge-matching-review-screen.md b/.changeset/charge-matching-review-screen.md deleted file mode 100644 index e08b6de64e..0000000000 --- a/.changeset/charge-matching-review-screen.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -"@accounter/server": minor -"@accounter/client": minor ---- - -Add the Charge Matching Review Screen: a guided side-by-side UI for pairing document-based and -transaction-based charges and merging them one by one. - -- Server: new `chargesAwaitingMatchQueue` GraphQL query that returns a paginated queue of unmatched - base charges with on-the-fly match suggestions, filterable by business, date range and mode - (`DOC_BASE`/`TRANSACTION_BASE`) and sortable `BY_DATE` or `BY_SCORE` (score evaluation capped at - the 100 most recent unmatched charges). -- Client: new `/charges/matching` screen with a filter/sort header, collapsible queue sidebar with - per-item pending/matched/skipped status, side-by-side base-vs-suggestion comparison cards, - alternative-suggestion switching, and accept (merge) / skip actions. diff --git a/.changeset/charges-approval-collapse-row.md b/.changeset/charges-approval-collapse-row.md deleted file mode 100644 index dbdb900f5c..0000000000 --- a/.changeset/charges-approval-collapse-row.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@accounter/client': patch ---- - -Collapse an expanded charge row automatically when its accountant approval status is set to -`APPROVED` from the charges table. diff --git a/.changeset/charges-freetext-amounts-businesses.md b/.changeset/charges-freetext-amounts-businesses.md deleted file mode 100644 index cd2e35fffa..0000000000 --- a/.changeset/charges-freetext-amounts-businesses.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@accounter/server': patch ---- - -Enrich the charges `freeText` filter (`allCharges` query) so it matches more than just text -descriptions. In addition to the existing `user_description` / transaction / document description -matches, the `search_matches` CTE in `ChargesProvider.getChargesByFilters` now also matches: - -- **Amounts** — transaction `amount` and document `total_amount` / `vat_amount`. Both the raw and - `ABS()` values are compared so signed and unsigned inputs match. Thousands separators are stripped - from the search term (via a resolver-computed `freeTextNumeric` param) so both `1,234.56` and - `1234.56` match the plain value stored in the DB. -- **Counterparty business names** — by joining `financial_entities` on the business ids referenced - by the charge's transactions (`business_id`) and documents (`creditor_id`, `debtor_id`). The - document match is split into separate creditor/debtor `UNION` branches so the planner can use the - foreign-key indexes. diff --git a/.changeset/charges-screen-reduce-refetch-blink.md b/.changeset/charges-screen-reduce-refetch-blink.md deleted file mode 100644 index 7b03659a14..0000000000 --- a/.changeset/charges-screen-reduce-refetch-blink.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -"@accounter/client": patch ---- - -Reduce the "blinking" on the All Charges screen when data is refetched. Applying the same insights as -the bank deposits fix: - -- The loading spinner now only replaces the table on the initial load (`fetching && !data`) instead - of on every background refetch, so changing filters or pages no longer blanks out the whole table — - the current results stay visible until the new data arrives. During those refetches a - `LoadingOverlay` dims the table with a spinner so it's still clear the charges are being reloaded. -- The charge nodes are wrapped in the shared `useStableValue` hook, so the table and its rows keep a - stable reference and only re-render (and reset per-row state) when the data actually changed. -- Filter refetches are issued with `{ requestPolicy: 'network-only' }` to make the intent explicit. -- The filters-bar effect now depends only on the page count it actually consumes, instead of the - whole query result and `fetching`, so it isn't rebuilt on every refetch. - -Per-charge edits were already scoped to their own row query and are unaffected. diff --git a/.changeset/contract-doc-description-billing-cycle.md b/.changeset/contract-doc-description-billing-cycle.md deleted file mode 100644 index c0fa4b9f66..0000000000 --- a/.changeset/contract-doc-description-billing-cycle.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/server': patch ---- - -Contract-generated document descriptions now reflect the billing cycle: monthly contracts keep the -billed-month label (`… - May 2026`), while annual contracts use the contract's start & end dates -(`… January 15th, 2025 → January 14th, 2026`). Also parse `issueMonth` as local midnight to avoid an -off-by-one-month shift in timezones west of UTC. diff --git a/.changeset/conversion-multiple-transactions-per-side.md b/.changeset/conversion-multiple-transactions-per-side.md deleted file mode 100644 index ca264089b2..0000000000 --- a/.changeset/conversion-multiple-transactions-per-side.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@accounter/server': patch ---- - -**Conversion charges with multiple transactions per side**: conversion ledger generation no longer -requires exactly two main transactions. A single conversion can now be split across two or more -transactions on the base or quote side (for example two ILS credits against one USD debit). - -- Main transactions are grouped by sign; each side is validated to be single-currency and the two - sides to differ in currency, with failures recorded as ledger errors instead of aborting - generation. -- Each side is aggregated into one representative entry (`aggregateConversionSideEntries`) that feeds - the existing fee and exchange-revaluation calculations, so the classic two-transaction case is - unchanged. diff --git a/.changeset/deel-documents-fetch-button.md b/.changeset/deel-documents-fetch-button.md deleted file mode 100644 index 3a7adab32c..0000000000 --- a/.changeset/deel-documents-fetch-button.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@accounter/server': patch -'@accounter/client': patch ---- - -Add a "Pull Deel Documents" button to the user nav menu, next to "Add Balance Charge", that triggers -the `fetchDeelDocuments` mutation on demand. - -Also improves the underlying Deel invoice fetch/matching logic: - -- Distinguishes newly-seen invoices from previously-fetched invoices that are still unmatched, so a - later run can pick up a payment match for an invoice it already recorded (via a new - `updateDeelInvoiceRecords` update path) instead of only ever inserting. -- Reuses an already-matched charge for a given receipt when creating charges from payment - breakdowns, avoiding duplicate charges for invoices that share a receipt. -- Extends the Deel invoice schema/table with `billing_type` and `document_type`, and refines several - payment-receipt and payment-breakdown Zod schemas to match the Deel API more closely. diff --git a/.changeset/deep-singers-grow.md b/.changeset/deep-singers-grow.md deleted file mode 100644 index cbe996bcf7..0000000000 --- a/.changeset/deep-singers-grow.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@accounter/server': patch ---- - -- **New helper function `isSelfIssuedSenderEvidence()`** in `email-ingestion-issuer.helper.ts`: - Detects when an email's only determinable issuer is a known provider (Morning, Sumit) or the - tenant's own forwarding address, indicating no external counterparty. Reuses existing - `selectIssuerEmail()` logic to ensure consistency with issuer resolution. - -- **Self-issued binding in control resolver** (`email-ingestion-control.resolver.ts`): When - `isSelfIssuedSenderEvidence()` returns true, the grant's `businessId` is set to the tenant's own - ID instead of the recognized business. This signals to the ingest step that the issuer is the - tenant itself. Also returns `null` for `businessEmailConfig` to spare the gateway needless - document work (link-fetch, body→PDF conversion). - -- **Early short-circuit in ingest provider** (`email-ingestion-ingest.provider.ts`): After grant - validation, checks if `grant.businessId === tenantId`. If true, returns `DUPLICATE` outcome with - new `SELF_ISSUED` reason code, skipping all document processing (Cloudinary upload, OCR, dedup - queries, insert queries). Runs before `prepareDocuments()` to avoid unnecessary work. - -- **New `IngestReasonCode.SELF_ISSUED`** constant in both `contracts.ts` files (server and gateway): - Distinguishes self-issued skips from content re-deliveries in duplicate outcomes. - -- **Comprehensive test coverage**: Added test suites for the new helper function and ingest - behavior, verifying that self-issued emails are detected correctly, grants are consumed, and no - document work or database writes occur. diff --git a/.changeset/degrade-accountant-approval-on-charge-changes.md b/.changeset/degrade-accountant-approval-on-charge-changes.md deleted file mode 100644 index 7c37884973..0000000000 --- a/.changeset/degrade-accountant-approval-on-charge-changes.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -'@accounter/server': patch ---- - -Automatically degrade a charge's accountant approval (`APPROVED` → `PENDING`) whenever its underlying -data changes, so an already-approved charge is re-flagged for accountant review. - -A shared `degradeChargesAccountantApproval` helper (built on -`AccountantApprovalProvider.degradeChargeAccountantApproval`) is now invoked from every -charge-mutating operation: - -- **Documents** — upload / batch-upload / Google-Drive batch-upload / insert / update (former and - new charge) / delete / charge-spread. -- **Transactions** — `updateTransaction` and `updateTransactions`, degrading both the former and the - new charge. -- **Misc expenses** — insert / bulk-insert / update (former and new charge) / delete. -- **Charges** — `updateCharge`, `batchUpdateCharges` and `mergeCharges`. Tag-only changes and - explicit accountant-approval changes are intentionally excluded. -- **Ledger** — `regenerateLedgerRecords`. -- **Cron** — `mergeChargesByTransactionReference`. - -The helper de-duplicates ids and ignores empty / `EMPTY_UUID` values (degrading a non-approved -charge is a no-op), and returns the freshly-degraded charges so mutations respond with the up-to-date -`PENDING` status rather than a stale one. diff --git a/.changeset/deposit-reassign-name-display.md b/.changeset/deposit-reassign-name-display.md deleted file mode 100644 index 35949709b0..0000000000 --- a/.changeset/deposit-reassign-name-display.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/client': patch ---- - -Show the deposit name instead of its ID in the Reassign Transaction dialog's target deposit -selection. The currency is now rendered conditionally so no empty parentheses appear when a deposit -has no currency. diff --git a/.changeset/deprecate-legacy-gmail-listener.md b/.changeset/deprecate-legacy-gmail-listener.md deleted file mode 100644 index d8a00a54e9..0000000000 --- a/.changeset/deprecate-legacy-gmail-listener.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@accounter/server': minor -'@accounter/gmail-listener': patch ---- - -Deprecate the legacy gmail-listener email path now that the v2 multi-tenant -`@accounter/email-ingestion-gateway` pipeline (Cloudflare → Gateway → Server) covers it. - -- The server GraphQL fields `businessEmailConfig` (query) and `insertEmailDocuments` (mutation) are - marked `@deprecated` (non-breaking — the legacy listener keeps working for rollback) and scheduled - for removal after cutover. Their resolvers carry matching `@deprecated` JSDoc. -- `@accounter/gmail-listener` is marked deprecated (README banner + package description) and - superseded by the gateway. It is kept only for rollback during the cutover. -- Docs updated to acknowledge the migration (root `CLAUDE.md`, `packages/server/CLAUDE.md`). - -The `gmail_listener` auth role and the package itself are intentionally retained for rollback; hard -removal (and `npm deprecate` of the published package) is a follow-up once the cutover is complete. diff --git a/.changeset/deprecate-scraper-local-app.md b/.changeset/deprecate-scraper-local-app.md deleted file mode 100644 index fa7be732f4..0000000000 --- a/.changeset/deprecate-scraper-local-app.md +++ /dev/null @@ -1,16 +0,0 @@ ---- ---- - -Deprecate the legacy `@accounter-helper/scraper-local-app` CLI scrape runner now that -`@accounter/scraper-app` (a local Fastify server + React UI web app) covers the same scraping -workflow. - -- `@accounter-helper/scraper-local-app` is marked deprecated (README banner + package description) - and superseded by `@accounter/scraper-app`. It is kept only for rollback until `scraper-app` is - fully in production use, and receives no new features. -- Docs updated to reflect the migration (root `README.md`, root `CLAUDE.md`, - `docs/claude-code-setup/spec.md`). - -No published-package version bumps: `scraper-local-app` is private and ignored by changesets, and the -change is documentation-only. Hard removal of `scraper-local-app` from the monorepo is a follow-up -once the `scraper-app` cutover is complete (see `docs/architecture/scraper-app-refactor/plan.md`). diff --git a/.changeset/document-type-switch-financial-fields.md b/.changeset/document-type-switch-financial-fields.md deleted file mode 100644 index a1ac1b01d6..0000000000 --- a/.changeset/document-type-switch-financial-fields.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@accounter/server': patch -'@accounter/client': patch ---- - -Pre-fill financial fields when switching an "other"/"unprocessed" document to a financial type in -the edit-document modal. - -A document can be inserted carrying full financial data (date, amount, VAT, serial number, -debtor/creditor, etc.) while still categorized as `OTHER`/`UNPROCESSED`. Previously, editing such a -document and switching its type to a financial one (e.g. invoice) showed all extended attribute -fields empty — the stored values only appeared after saving and reopening the modal, once the -document re-resolved as a `FinancialDocument`. - -The financial fields were only exposed on the `FinancialDocument` GraphQL types, so the edit query -could never fetch the already-stored values for `Unprocessed`/`OtherDocument`. These fields (`vat`, -`serialNumber`, `date`, `amount`, `vatReportDateOverride`, `noVatAmount`, `allocationNumber`, -`exchangeRateOverride`, `debtor`, `creditor`) are now exposed on the `Unprocessed` and -`OtherDocument` types and fetched by the client, and the edit form reads its financial defaults from -the document regardless of its current type — so switching to a financial type immediately -pre-fills the stored values. diff --git a/.changeset/documents-table-reduce-blink.md b/.changeset/documents-table-reduce-blink.md deleted file mode 100644 index f902b36eef..0000000000 --- a/.changeset/documents-table-reduce-blink.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"@accounter/client": patch ---- - -Stop the documents table (reused under the charge extended-info panel) from "blinking" when a -document is updated. The document row fields are fetched under a `@defer` fragment, so on a refetch -each document streams back id-first and its other fields (amount, vat, …) arrive in later patches — -which briefly rendered the rows with empty cells before the data refilled. The table now merges each -incoming document's present fields over the version currently shown (matched by id), so every cell -keeps its current value until the real data replaces it, and bails out of re-rendering when nothing -changed. diff --git a/.changeset/eager-mails-jam.md b/.changeset/eager-mails-jam.md deleted file mode 100644 index 8b4b1beff2..0000000000 --- a/.changeset/eager-mails-jam.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/server': patch ---- - -- Add `exemptDealer`, `optionalVAT`, `isReceiptEnough`, `isDocumentsOptional` and `isActive` to - `BatchUpdateBusinessInput` in `financial-entities/typeDefs/businesses.graphql.ts`. -- No resolver change is needed: these fields are already handled by the shared - `updateSingleBusiness` helper (`helpers/update-business.helper.ts`), and - `BatchUpdateBusinessInput` remains a strict structural subset of `UpdateBusinessInput`, so it is - still passed straight through. `isActive` flows to the core financial-entity update via - `hasFinancialEntitiesCoreProperties`; the rest map to the business row update. Tags and - description were already supported through the existing `suggestions` input. diff --git a/.changeset/eighty-adults-arrive.md b/.changeset/eighty-adults-arrive.md deleted file mode 100644 index 4e8b405811..0000000000 --- a/.changeset/eighty-adults-arrive.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/client': patch ---- - -- **GraphQL schema**: `ReportCommentarySubRecord` gains a `ledgerRecords: [LedgerRecord!]!` field, - so the details are delegated to the client. This applies to both the Profit & Loss and Tax - reports, which share these commentary types. -- **Client**: `ReportSubCommentaryRow` gains a per-entity `ToggleExpansionButton` that expands into - the existing `LedgerTable` component (no ledger diff view in this report). diff --git a/.changeset/email-gateway-dockerfile-refinements.md b/.changeset/email-gateway-dockerfile-refinements.md deleted file mode 100644 index 290391dd15..0000000000 --- a/.changeset/email-gateway-dockerfile-refinements.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/email-ingestion-gateway': patch ---- - -Refine the email-ingestion-gateway container build. Rename `DockerFile` to `Dockerfile`, fix the -`docker:build`/`docker:run` workspace scripts to use the correct build context (`../../`) and paths, -copy only workspace manifests before `yarn install` for better layer caching, run the production -stage as the non-root `pwuser` from the Playwright base image (copying artifacts with `--chown` -instead of a costly recursive `chown -R /app`), and add a root `.dockerignore` so the repo-root -build context stays small and host `node_modules` don't clobber the installed dependencies. diff --git a/.changeset/email-recognition-forwarded.md b/.changeset/email-recognition-forwarded.md deleted file mode 100644 index 125c42f702..0000000000 --- a/.changeset/email-recognition-forwarded.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@accounter/server': patch ---- - -Recognize the issuing business for **manually forwarded** invoice emails. The real issuer address -often survives only inside the quoted "Forwarded message" header block (e.g. the original -`Reply-To`), which the gateway previously ignored. The gateway now also recovers -`From`/`Reply-To`/`Sender` addresses from forwarded-header blocks, and the server tries every -candidate (case-insensitively) until one matches a business — so a forwarded Cloudflare invoice is -attributed to the right business and its email-processing config (e.g. "ignore the body") is applied -instead of falling back to default treatment. diff --git a/.changeset/empty-general-contacts-fix.md b/.changeset/empty-general-contacts-fix.md deleted file mode 100644 index c35262e948..0000000000 --- a/.changeset/empty-general-contacts-fix.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/client': patch ---- - -Fix empty `generalContacts` handling for businesses. When inserting a business without any general -contacts, an empty string was stored as the business email, which later parsed into `['']` (an -invalid email) and triggered a validation error when editing the business. The insert modal now -stores `undefined` instead of an empty string, and the edit form filters out empty entries when -parsing the stored email. diff --git a/.changeset/fix-charge-extended-info-error-flash.md b/.changeset/fix-charge-extended-info-error-flash.md deleted file mode 100644 index 195f48882a..0000000000 --- a/.changeset/fix-charge-extended-info-error-flash.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/client": patch ---- - -Fix a spurious "Error fetching extended information for this charge" flash in the charge expansion -panel. The rendered `charge` is committed to state in an effect one render after `fetching` flips to -`false` and the fetched data arrives, so the error gate briefly saw `!fetching && !charge` as true. -The error is now also gated on `incomingCharge` (the synchronous derivation of the fetched data), -suppressing the flash during that one-render gap while still surfacing genuine "no data" errors. diff --git a/.changeset/fix-combobox-search-in-drawer.md b/.changeset/fix-combobox-search-in-drawer.md deleted file mode 100644 index 0c250de78a..0000000000 --- a/.changeset/fix-combobox-search-in-drawer.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/client": patch ---- - -Fix ComboBox search input being unclickable inside PopUpDrawer (e.g. the Creditor/Debtor selects in -the Edit Document modal). The drawer's underlying Radix Dialog is always modal and traps focus, so -the popover — portaled to `document.body` — could not be focused. PopUpDrawer now exposes its content -element via a portal-container context, and ComboBox portals its popover into it when present while -keeping the default `document.body` portaling everywhere else. diff --git a/.changeset/fix-grant-invalid-timeout-retry.md b/.changeset/fix-grant-invalid-timeout-retry.md deleted file mode 100644 index 82bc805388..0000000000 --- a/.changeset/fix-grant-invalid-timeout-retry.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@accounter/server': patch ---- - -Fix false `GRANT_INVALID` rejections in v2 email ingestion. A slow Cloudinary upload could make the -gateway's ingest call time out and retry after the server had already consumed the single-use grant, -so the retry was rejected even though the first attempt had succeeded. The server now performs an -early idempotency check before consuming the grant (returning `DUPLICATE` on retry), the gateway no -longer retries ingest on timeout, and the ingest timeout was raised from 10s to 30s. diff --git a/.changeset/lemon-shoes-laugh.md b/.changeset/lemon-shoes-laugh.md deleted file mode 100644 index 1643aac24b..0000000000 --- a/.changeset/lemon-shoes-laugh.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@accounter/server': patch ---- - -Email ingestion: set a descriptive charge description matching the legacy gmail-listener — -`Email documents: (from: , )` — instead of the bare -`email-ingestion: `. The email subject, sender, and received date are threaded through -`IngestEmailInput` (new optional `subject`/`sender`/`receivedAt` fields) → the `ingestEmail` -resolver → `EmailIngestionIngestProvider`, with graceful fallback to the message id when any field -is missing. The received date is formatted in UTC so the same email produces a stable description -across dev/CI/prod. diff --git a/.changeset/loose-beans-refuse.md b/.changeset/loose-beans-refuse.md deleted file mode 100644 index 85ef207574..0000000000 --- a/.changeset/loose-beans-refuse.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@accounter/server': patch ---- - -- **Server**: `recordsByFinancialEntityIdAndSortCodeValidations` - (`packages/server/src/modules/reports/helpers/misc.helper.ts`) now collects the contributing - ledger records (deduplicated by record ID) alongside the per-entity amount aggregation. -- **GraphQL schema**: `ReportCommentarySubRecord` gains a `ledgerRecords: [LedgerRecord!]!` field, - so the details are delegated to the client. This applies to both the Profit & Loss and Tax - reports, which share these commentary types. diff --git a/.changeset/loud-items-boil.md b/.changeset/loud-items-boil.md deleted file mode 100644 index 4d929c870c..0000000000 --- a/.changeset/loud-items-boil.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -'@accounter/server': patch ---- - -- **A1 — `sortCode: Int`**: new field on `LtdFinancialEntity`. The value already rides on the joined - `financial_entities` row (`sort_code`), so the resolver is a direct mapping. -- **A2 — `taxCategory` returns `null` when unmatched**: the field is nullable, but the resolver - previously threw a `GraphQLError` when a business had no tax category match. The management screen - lists every business (including uncategorized, auto-generated ones), so one missing match would - fail the whole query. Now returns `null`. -- **A3 — `isClient: Boolean!` and `isAdmin: Boolean!`**: simple boolean columns for the client and - admin/owner extension tags, reusing the loaders that already back `clientInfo` - (`ClientsProvider.getClientByIdLoader`) and `adminInfo` - (`AdminBusinessesProvider.getAdminBusinessByIdLoader`). - -- **B1 — `BusinessUsageProvider`**: new `@Injectable()` provider - (`providers/businesses-usage.provider.ts`) exposing - `getUsageByBusinessIds(ids): Map`. - One grouped count query per source. For sources where a business can appear in more than one - column, each id-bearing column is projected into a common `business_id` via `UNION ALL` before - grouping, so counts attribute to the correct id (a single `OR … GROUP BY business_id` would not): - - `transactions` → `business_id` - - `documents` → `debtor_id` ∪ `creditor_id` - - `misc_expenses` → `debtor_id` ∪ `creditor_id` - - `ledger_records` → `debit_entity1/2` ∪ `credit_entity1/2` - - Every requested id defaults to zero so unused businesses are represented. Column names confirmed - against the `replaceBusiness` merge query and the misc-expenses provider. - -- **B2 — `businessesUsage` query**: new typeDef + resolver returning `[BusinessUsage!]!`, wired into - the financial-entities module (typeDef, resolver, provider registration, pgtyped types re-export). - -```graphql -type BusinessUsage { - businessId: UUID! - totalTransactions: Int! - totalDocuments: Int! - totalMiscExpenses: Int! - totalLedgerRecords: Int! -} -extend type Query { - businessesUsage(ids: [UUID!]!): [BusinessUsage!]! @requiresAuth -} -``` - -- **C1 — `deleteBusiness` mutation**: exposes `deleteBusiness(businessId: UUID!): Boolean!` - (`@requiresAuth`, `@requiresAnyRole(["business_owner", "accountant"])`) wrapping the existing - `BusinessesOperationProvider.deleteBusinessById`. That provider already validates the business is - not an employee / pension-or-training fund / business-trip attendee / dividends receiver (throwing - per case) and cleans up its dependent rows (unbalanced-ledger businesses, balance-cancellation, - green-invoice client, tax-category match) before deleting the `businesses` row. - - The resolver returns `true` on success; the provider's guard errors propagate as - GraphQL errors with their original messages. No new guards are added — the provider - is the hard backstop, and the screen disables delete when usage > 0 (Phase I). - -- **D1 — extract `updateSingleBusiness` helper** (refactor, no schema change): the per-business body - of the `updateBusiness` mutation (core financial-entity fields, business fields, suggestions, - tax-category match, green-invoice sync) moves into `helpers/update-business.helper.ts`. It returns - the refreshed business and throws on failure. The `updateBusiness` resolver now wraps the helper - and maps thrown errors to `CommonError`, preserving observable behavior (the success path is - byte-for-byte the same; failures keep the `Failed to update business ID="…": …` format). - -- **D2 — `batchUpdateBusinesses` mutation**: - - ```graphql - input BatchUpdateBusinessInput { - country: CountryCode - city: String - zipCode: String - sortCode: Int - taxCategory: UUID - irsCode: Int - pcn874RecordType: Pcn874RecordType - suggestions: SuggestionsInput - } - extend type Mutation { - batchUpdateBusinesses(businessIds: [UUID!]!, fields: BatchUpdateBusinessInput!): [Business!]! - @requiresAuth - @requiresAnyRole(roles: ["business_owner", "accountant"]) - } - ``` - - The input is the subset of fields safe to apply to many businesses at once (locality, - categorization, suggestions). The resolver resolves the owner from the admin context and applies - `updateSingleBusiness` to each id, returning the updated businesses; a failure on any id rejects - the whole mutation. `BatchUpdateBusinessInput` is a strict structural subset of - `UpdateBusinessInput`, so it is passed straight to the shared helper. diff --git a/.changeset/new-charges-table-csv-export.md b/.changeset/new-charges-table-csv-export.md deleted file mode 100644 index 5451dd1d61..0000000000 --- a/.changeset/new-charges-table-csv-export.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/client": patch ---- - -Add optional CSV export to the new charges table. When enabled, a download button on the All Charges -and VAT report missing-info screens exports the currently loaded charges to CSV via a dedicated -`ChargeForCsvExportFields` fragment and `convertChargesToCsv` serializer. The shared -`DownloadCSVButton` now tracks a loading state, disables itself and shows a spinner while the export -file is being prepared, so slow exports can no longer be re-triggered mid-download. diff --git a/.changeset/new-charges-table-expand-all-batch-loader.md b/.changeset/new-charges-table-expand-all-batch-loader.md deleted file mode 100644 index d6484c0d50..0000000000 --- a/.changeset/new-charges-table-expand-all-batch-loader.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -"@accounter/client": patch ---- - -Fix whole-table "expand all" in the new charges table and load the expanded rows efficiently. - -- `new-charges-table.tsx`: the table now accepts an `isAllOpened` prop and drives tanstack-table's - `expanded` state from it (`true` expands every row, `{}` collapses them). Previously the toolbar's - expand-all button toggled local `isAllOpened` state that was never passed to the table, so nothing - happened; per-charge expansion via the row button was unaffected. -- New `charges-extended-info-loader.tsx`: a `BatchChargesExtendedInfoProvider` that, while expand-all - is active, hydrates every expanded row's extended info with a single `chargesByIDs` query instead - of one `FetchCharge` query per row (which was 100 queries for a full 100-row page). Its selection - set mirrors `FetchCharge`, including the same deferred fragments, so a batched charge is - interchangeable with a single-charge result. -- `charge-extended-info.tsx`: consumes the batch loader when it's active (pausing its own per-charge - query and delegating refetch-on-change to the batch); otherwise behaves exactly as before. -- Wired `isAllOpened` through the all-charges, missing-info-charges and single-charge screens. diff --git a/.changeset/new-charges-table.md b/.changeset/new-charges-table.md deleted file mode 100644 index 5562229d55..0000000000 --- a/.changeset/new-charges-table.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@accounter/client": patch ---- - -Introduce a new TanStack-Table-based charges table (`NewChargesTable`) on the All Charges screen, -rendering charge rows from a single `ChargeForChargesTableFields` fragment split into dedicated cell -components (amount, counterparty, description, tags, tax category, VAT, business trip, more-info, -type). The new table is mounted under the existing `LoadingOverlay` + stable `chargeNodes` gating so -background refetches no longer blink the view. diff --git a/.changeset/olive-pianos-teach.md b/.changeset/olive-pianos-teach.md deleted file mode 100644 index daeaefe377..0000000000 --- a/.changeset/olive-pianos-teach.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@accounter/server': patch ---- - -- **VAT extraction**: adds `issuerVatNumber` / `recipientVatNumber` to the Claude extraction schema - so VAT/registration numbers are pulled from the document in the same LLM call (near-zero extra - cost). -- **Server-side matching**: new pure helper `business-matcher.helper.ts` resolves extracted - names/VAT numbers to business UUIDs in three priority tiers: (1) VAT exact match, (2) - name/Hebrew-name substring, (3) `suggestion_data.phrases` sorted by priority. -- **LLM fallback**: for financial document types (INVOICE, RECEIPT, INVOICE_RECEIPT, CREDIT_INVOICE, - PROFORMA) where one or both sides remain unmatched after server-side matching, a second LLM call - reuses the existing conversation context — no file re-send — and asks Claude to pick the closest - business from the full businesses list. -- **UUID-based side resolution**: `getDocumentFromFile` now resolves `isOwnerIssuer` and - `counterpartyId` from the UUID matches, replacing the previous hardcoded `"the guild"` text check. -- **Graceful fallback**: `fetchBusinessesForMatching` wraps the `BusinessesProvider` call in - try/catch, so email-ingestion paths (gateway auth, no tenant context) continue to work unchanged. diff --git a/.changeset/pink-crews-appear.md b/.changeset/pink-crews-appear.md deleted file mode 100644 index 7f479c820a..0000000000 --- a/.changeset/pink-crews-appear.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@accounter/email-ingestion-gateway': patch ---- - -Gateway: parse incoming MIME with `postal-mime` (as recommended by Cloudflare's email-handler docs) -instead of the hand-rolled parser. This decodes RFC 2047 encoded-word headers, so non-ASCII subjects -and sender display names (e.g. Hebrew `=?UTF-8?B?…?=`) are no longer stored as raw encoded strings — -fixing the email charge description that reads them. `extractFromMime` keeps the same public contract -(document-type filtering, size/count limits, nesting-depth guard, and the `From: ` -issuer-candidate heuristic) and now also forwards the email subject to the server for the charge -description. diff --git a/.changeset/poalim-scraper-validation-errors.md b/.changeset/poalim-scraper-validation-errors.md deleted file mode 100644 index 11ff05685f..0000000000 --- a/.changeset/poalim-scraper-validation-errors.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/scraper-app': patch ---- - -Surface Poalim schema validation failures instead of silently swallowing them. The -modern-poalim-scraper runs Zod validation internally (`validateSchema: true`) and returns -`{ data, isValid, errors }`, setting `data` to `null` and `isValid` to `false` on a failed -validation. `scrapePoalim` only read `data`, so a failed `getAccountsData` validation looked like -"no accounts" and the run reported success with no data; the same silent swallow applied to the -per-account ILS, foreign, and SWIFT requests. Each Poalim request now checks `isValid` and throws a -descriptive error (including the validation issues), which propagates to the run runner and is -emitted as a `task-error` so the user is notified. diff --git a/.changeset/quick-seas-wave.md b/.changeset/quick-seas-wave.md deleted file mode 100644 index 2945b7eaeb..0000000000 --- a/.changeset/quick-seas-wave.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/server': patch ---- - -- Replace `new URL('.', import.meta.url).pathname` with - `fileURLToPath(new URL('.', import.meta.url))` everywhere it's used to resolve `__dirname` in ESM. -- `.pathname` breaks on Windows (prepends an extra leading slash before the drive letter, e.g. - `/C:/...`) and doesn't decode URL-encoded characters (e.g. `%20` for spaces). `fileURLToPath` from - the built-in `url` module is the standard, cross-platform way to do this. -- Applied across all 34 GraphQL server modules' `index.ts` files, the root and server - `vitest.config.ts`, and the `graphql-module` skill's scaffold template (so newly generated modules - follow the same convention). diff --git a/.changeset/sixty-feet-accept.md b/.changeset/sixty-feet-accept.md deleted file mode 100644 index 8fcb1aebbe..0000000000 --- a/.changeset/sixty-feet-accept.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@accounter/server': patch ---- - -automated business matching for extracted document data using local heuristics (VAT, name, and -phrase matching) and an LLM fallback diff --git a/.changeset/sort-code-select.md b/.changeset/sort-code-select.md deleted file mode 100644 index 462e3172d7..0000000000 --- a/.changeset/sort-code-select.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/client': patch ---- - -Migrate the tax category sort code selector from Mantine to a reusable shadcn-based -`SortCodeSelect`. Each option now shows both the sort code key and its name (e.g. `100 - Cash`), and -the selector is extracted into a general component (`components/common/inputs/sort-code-select.tsx`) -so it can be reused across forms — it is now also used in the business configurations section. diff --git a/.changeset/spotty-badges-listen.md b/.changeset/spotty-badges-listen.md deleted file mode 100644 index 71ac811c01..0000000000 --- a/.changeset/spotty-badges-listen.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/client': patch ---- - -Improve `MultiSelect` readability for large selections (closes #3891). The -collapsed "+N more" badge now shows the hidden selected labels in a tooltip on -hover/focus, and the dropdown lists checked items at the top when opened (order -is snapshotted on open so it does not reshuffle while toggling). diff --git a/.changeset/spotty-rockets-start.md b/.changeset/spotty-rockets-start.md deleted file mode 100644 index 41fb47d23c..0000000000 --- a/.changeset/spotty-rockets-start.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@accounter/modern-poalim-scraper': patch ---- - -Add `accountName` to `AccountDataItemSchema`wq diff --git a/.changeset/sweet-camels-tap.md b/.changeset/sweet-camels-tap.md deleted file mode 100644 index d1ff8ced29..0000000000 --- a/.changeset/sweet-camels-tap.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/client': patch ---- - -Refactored the `/businesses` screen to use a robust `@tanstack/react-table` implementation, replacing the previous card list view. This upgrade introduces advanced data management capabilities including grouping, lazy-loading, sorting, client-side filtering, and batch operations. - -- **Data Table Migration**: Replaced the `BusinessHeader` card list with a comprehensive data table featuring grouped columns: Core, Main, Categorization, Extension tags, and Suggestion defaults. Added a "Columns" dropdown to toggle column visibility. -- **Row Selection & Batch Actions**: Implemented row selection to enable merging businesses and a new batch update dialog for bulk-editing shared fields (country, city, zip, sort/IRS codes, tax category, and suggestion descriptions). -- **Lazy-Loaded Usage Tracking**: Introduced a "Usage" column group tracking transactions, documents, expenses, and ledger records. To optimize performance, the `BusinessesUsage` query is lazy-loaded and only un-pauses when a usage column is rendered or the "unused only" filter is active. -- **Advanced Filtering & Sorting**: Added sortable headers with custom null-safe comparators. Implemented robust client-side filtering, including toggles for client/admin/inactive flags, free-text code filters, and an "unused only" view. -- **Guarded Deletion**: Added a per-row delete action that mirrors the server's hard-delete guard; the delete button remains strictly disabled unless the business is completely unused across all metrics. -- **Architecture & Testing**: Extracted pure, dependency-free row mapping, usage merging, and filtering logic into a dedicated, unit-tested `business-rows.ts` module. \ No newline at end of file diff --git a/.changeset/swift-tools-hide.md b/.changeset/swift-tools-hide.md deleted file mode 100644 index ae2cb9be3e..0000000000 --- a/.changeset/swift-tools-hide.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@accounter/email-ingestion-gateway': patch ---- - -- **New `IngestReasonCode.SELF_ISSUED`** constant in both `contracts.ts` files (server and gateway): - Distinguishes self-issued skips from content re-deliveries in duplicate outcomes. diff --git a/.changeset/tall-pigs-learn.md b/.changeset/tall-pigs-learn.md deleted file mode 100644 index 14b027f024..0000000000 --- a/.changeset/tall-pigs-learn.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/scraper-app': patch ---- - -- Updated `amex.test.ts`, `cal.test.ts`, `discount.test.ts`, and `isracard.test.ts` to set - `vi.setConfig({ testTimeout: 30_000 })` -- Added explanatory comments referencing PR #3795 which introduced the 2-5s per-month delays in - scrapers diff --git a/.changeset/tasty-balloons-raise.md b/.changeset/tasty-balloons-raise.md deleted file mode 100644 index 1f5a0946fd..0000000000 --- a/.changeset/tasty-balloons-raise.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@accounter/server': patch ---- - -- **Refactored Merge Logic**: Extracted the complex merge planning logic for charges by transaction - reference into a dedicated helper function, improving maintainability and testability. -- **Added Dry Run Support**: Introduced a `dryRun` parameter to the - `mergeChargesByTransactionReference` mutation, allowing users to preview merge plans before - execution. -- **Enhanced Transaction Data**: Updated the SQL query to include `origin_user_description` by - joining additional transaction tables, providing more context for matching logic. -- **Comprehensive Test Suite**: Added a new test file covering various scenarios, including - recurring payments, foreign securities, and fee associations, to ensure robust merge planning. diff --git a/.changeset/tough-hounds-sell.md b/.changeset/tough-hounds-sell.md deleted file mode 100644 index 7443cd885e..0000000000 --- a/.changeset/tough-hounds-sell.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@accounter/client': patch ---- - -- Extend `batch-update-dialog.tsx`: - - **Tags** — a `MultiSelect` (via `useGetTags`), merged with the existing description into a - single `suggestions` input. - - **Flags** — `isActive`, `isReceiptEnough`, `isDocumentsOptional` (No docs required), - `optionalVAT` (Is VAT optional) and `exemptDealer` as tri-state selects (**No change / Yes / - No**). A flag is only sent when the user explicitly picks Yes/No, preserving the "only fields - you fill in are applied" semantics of batch update. - - `isFormEmpty` is now derived from the built mutation input so the new controls correctly - enable/disable the Save button. diff --git a/.changeset/upset-eggs-show.md b/.changeset/upset-eggs-show.md deleted file mode 100644 index 54bdc8f27a..0000000000 --- a/.changeset/upset-eggs-show.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@accounter/client': patch -'@accounter/server': patch ---- - -- **Schema updates**: Added `sortCode: Int` field to the `DynamicReportNodeData` GraphQL type and Zod validation schema -- **GraphQL query**: Updated the dynamic report query to fetch the `sortCode` field from template data -- **Tests**: Added comprehensive test coverage for parsing and validating sort-code-branch nodes with sortCode fields, plus a test verifying sortCode is read from template data (not derived from UUID IDs) diff --git a/.changeset/whole-frogs-throw.md b/.changeset/whole-frogs-throw.md deleted file mode 100644 index c9a63fc1ee..0000000000 --- a/.changeset/whole-frogs-throw.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@accounter/server': patch ---- - -* **VAT Suggestion Logic**: Implemented a new suggestion resolver that identifies missing VAT charge descriptions by comparing transaction amounts against monthly VAT reports. -* **Ledger Validation**: Added validation logic to the ledger generation process to ensure monthly VAT charges have valid descriptions and that the VAT amount matches the transaction sum. -* **Helper Utilities**: Introduced helper functions to calculate monthly VAT totals and verify them against transaction amounts within a defined tolerance. diff --git a/.changeset/wildcard-recognition-emails.md b/.changeset/wildcard-recognition-emails.md deleted file mode 100644 index 7d422b853d..0000000000 --- a/.changeset/wildcard-recognition-emails.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@accounter/server': patch ---- - -**Wildcard business-recognition emails**: `suggestion_data.emails` now accepts wildcard patterns -(e.g. `*@cloudflare.com`) alongside concrete addresses, so suppliers that send invoices from a -unique address per invoice (such as `qr45uf@cloudflare.com`) can be recognized by a single entry. - -- The suggestion-data schema validates wildcard patterns (`*` allowed anywhere in an email-shaped - entry) while still rejecting over-broad values like a bare `*`. -- Both recognition lookups (`BusinessesProvider.getBusinessByEmail` and the email-ingestion control - provider) translate `*` to a `LIKE` wildcard in SQL, escaping `_`, `%` and `\` so literal entries - keep matching exactly. Matching stays case-insensitive. -- New `email-pattern.helper.ts` is the source of truth for the pattern shape and provides an - in-process matcher used by tests. diff --git a/.changeset/young-lamps-pump.md b/.changeset/young-lamps-pump.md deleted file mode 100644 index c1545406f3..0000000000 --- a/.changeset/young-lamps-pump.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@accounter/server': patch ---- - -- **sort-codes.provider.ts**: Modified `updateSortCode` to retrieve the verified admin context and - pass the `ownerId` to the query via `reassureOwnerIdExists` helper -- **sort-codes.provider.test.ts**: Added comprehensive test coverage for both `updateSortCode` and - `addSortCode` methods, including: - - Regression test verifying `owner_id` is included in update query values - - Test confirming all parameters (key, name, defaultIrsCode, ownerId) are forwarded correctly - - Test verifying cache is cleared after updates - - Test for `addSortCode` ensuring `owner_id` is injected into insert queries diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index a6f758a6b0..8b663c8860 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,492 @@ # @accounter/client +## 0.1.0 + +### Minor Changes + +- [#3851](https://github.com/Urigo/accounter-fullstack/pull/3851) + [`a91e4a0`](https://github.com/Urigo/accounter-fullstack/commit/a91e4a0726fed53dda22dfb57b6919411bbeaba3) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add the Charge Matching Review Screen: a + guided side-by-side UI for pairing document-based and transaction-based charges and merging them + one by one. + + - Server: new `chargesAwaitingMatchQueue` GraphQL query that returns a paginated queue of + unmatched base charges with on-the-fly match suggestions, filterable by business, date range and + mode (`DOC_BASE`/`TRANSACTION_BASE`) and sortable `BY_DATE` or `BY_SCORE` (score evaluation + capped at the 100 most recent unmatched charges). + - Client: new `/charges/matching` screen with a filter/sort header, collapsible queue sidebar with + per-item pending/matched/skipped status, side-by-side base-vs-suggestion comparison cards, + alternative-suggestion switching, and accept (merge) / skip actions. + +### Patch Changes + +- [#3738](https://github.com/Urigo/accounter-fullstack/pull/3738) + [`670f7cc`](https://github.com/Urigo/accounter-fullstack/commit/670f7cc2bd58c04da5dd151e4878382916700a8e) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`html2canvas-pro@2.1.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.1.1) (from + `2.0.4`, in `dependencies`) + +- [#3752](https://github.com/Urigo/accounter-fullstack/pull/3752) + [`d8c66d8`](https://github.com/Urigo/accounter-fullstack/commit/d8c66d8d62a2c1d4e66c93a05936ea8d6200b40e) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@mui/material@9.1.2` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.1.2) (from `9.1.1`, in + `dependencies`) + +- [#3756](https://github.com/Urigo/accounter-fullstack/pull/3756) + [`490027a`](https://github.com/Urigo/accounter-fullstack/commit/490027a8b4e38a09cc92f802f0808ac46749a213) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`recharts@3.9.0` ↗︎](https://www.npmjs.com/package/recharts/v/3.9.0) (from + `3.8.1`, in `dependencies`) + +- [#3762](https://github.com/Urigo/accounter-fullstack/pull/3762) + [`50ca939`](https://github.com/Urigo/accounter-fullstack/commit/50ca939661d9eb5b31e134c54d12015e524fac1c) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@mui/material@9.1.2` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.1.2) (from `9.1.1`, in + `dependencies`) + - Updated dependency + [`html2canvas-pro@2.1.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.1.1) (from + `2.0.4`, in `dependencies`) + +- [#3767](https://github.com/Urigo/accounter-fullstack/pull/3767) + [`a82d2ac`](https://github.com/Urigo/accounter-fullstack/commit/a82d2ac553d553453b905a1f76e935c944957710) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`html2canvas-pro@2.2.0` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.0) (from + `2.1.1`, in `dependencies`) + +- [#3768](https://github.com/Urigo/accounter-fullstack/pull/3768) + [`7a7dc71`](https://github.com/Urigo/accounter-fullstack/commit/7a7dc71ba2dc9a660f150340f2352704d571f367) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@tanstack/react-query@5.101.1` ↗︎](https://www.npmjs.com/package/@tanstack/react-query/v/5.101.1) + (from `5.101.0`, in `dependencies`) + +- [#3788](https://github.com/Urigo/accounter-fullstack/pull/3788) + [`fb88ebd`](https://github.com/Urigo/accounter-fullstack/commit/fb88ebd891a2d5a9a9b0f2f020f951d878898b93) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`pdfjs-dist@6.1.200` ↗︎](https://www.npmjs.com/package/pdfjs-dist/v/6.1.200) + (from `6.0.227`, in `dependencies`) + +- [#3789](https://github.com/Urigo/accounter-fullstack/pull/3789) + [`e26256c`](https://github.com/Urigo/accounter-fullstack/commit/e26256c2e4cd3ba51042446a4617b996d49a9e0c) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@tanstack/react-query@5.101.2` ↗︎](https://www.npmjs.com/package/@tanstack/react-query/v/5.101.2) + (from `5.101.1`, in `dependencies`) + - Updated dependency + [`html2canvas-pro@2.2.1` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.1) (from + `2.2.0`, in `dependencies`) + - Updated dependency [`radix-ui@1.6.1` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.6.1) (from + `1.6.0`, in `dependencies`) + - Updated dependency + [`react-router-dom@7.18.1` ↗︎](https://www.npmjs.com/package/react-router-dom/v/7.18.1) (from + `7.18.0`, in `dependencies`) + - Updated dependency [`recharts@3.9.1` ↗︎](https://www.npmjs.com/package/recharts/v/3.9.1) (from + `3.9.0`, in `dependencies`) + +- [#3796](https://github.com/Urigo/accounter-fullstack/pull/3796) + [`82f3633`](https://github.com/Urigo/accounter-fullstack/commit/82f3633115db06acd7ec3cbf7aabde918c190594) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`lucide-react@1.22.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.22.0) (from `1.21.0`, + in `dependencies`) + +- [#3820](https://github.com/Urigo/accounter-fullstack/pull/3820) + [`ad67ff7`](https://github.com/Urigo/accounter-fullstack/commit/ad67ff7e50482f14cfd6cc1d5e19b8b725a8f327) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`lucide-react@1.23.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.23.0) (from `1.22.0`, + in `dependencies`) + +- [#3823](https://github.com/Urigo/accounter-fullstack/pull/3823) + [`ae69959`](https://github.com/Urigo/accounter-fullstack/commit/ae69959ae45007553e075c4a6689d5cfbb800e14) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@auth0/auth0-react@2.20.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.20.0) (from + `2.19.0`, in `dependencies`) + +- [#3831](https://github.com/Urigo/accounter-fullstack/pull/3831) + [`79f7a7b`](https://github.com/Urigo/accounter-fullstack/commit/79f7a7bde26b7572f562976b6e737703f7e0fdbb) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@mui/material@9.2.0` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.2.0) (from `9.1.2`, in + `dependencies`) + +- [#3834](https://github.com/Urigo/accounter-fullstack/pull/3834) + [`77222b7`](https://github.com/Urigo/accounter-fullstack/commit/77222b7052ffb094db5df5c9065ed93e9dc21bf2) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@mui/x-charts@8.29.2` ↗︎](https://www.npmjs.com/package/@mui/x-charts/v/8.29.2) (from `8.29.0`, + in `dependencies`) + - Updated dependency [`csv-parse@7.0.1` ↗︎](https://www.npmjs.com/package/csv-parse/v/7.0.1) (from + `7.0.0`, in `dependencies`) + +- [#3836](https://github.com/Urigo/accounter-fullstack/pull/3836) + [`059b638`](https://github.com/Urigo/accounter-fullstack/commit/059b638702116701a5a0062a7ac3a58a28eeb004) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@mui/material@9.2.0` ↗︎](https://www.npmjs.com/package/@mui/material/v/9.2.0) (from `9.1.2`, in + `dependencies`) + - Updated dependency + [`@mui/x-charts@8.29.2` ↗︎](https://www.npmjs.com/package/@mui/x-charts/v/8.29.2) (from `8.29.0`, + in `dependencies`) + - Updated dependency [`csv-parse@7.0.1` ↗︎](https://www.npmjs.com/package/csv-parse/v/7.0.1) (from + `7.0.0`, in `dependencies`) + - Updated dependency + [`react-hook-form@7.81.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.81.0) (from + `7.80.0`, in `dependencies`) + +- [#3839](https://github.com/Urigo/accounter-fullstack/pull/3839) + [`61c5093`](https://github.com/Urigo/accounter-fullstack/commit/61c509329fd5c72ee14ab6875042cfc575fc75df) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`react-hook-form@7.81.0` ↗︎](https://www.npmjs.com/package/react-hook-form/v/7.81.0) (from + `7.80.0`, in `dependencies`) + +- [#3846](https://github.com/Urigo/accounter-fullstack/pull/3846) + [`d382eb2`](https://github.com/Urigo/accounter-fullstack/commit/d382eb20cf27b76ef80d235080bead1ba66b1e77) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`html2canvas-pro@2.2.3` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.3) (from + `2.2.1`, in `dependencies`) + - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) + (from `0.7.2`, in `dependencies`) + - Updated dependency [`radix-ui@1.6.2` ↗︎](https://www.npmjs.com/package/radix-ui/v/1.6.2) (from + `1.6.1`, in `dependencies`) + - Updated dependency [`recharts@3.9.2` ↗︎](https://www.npmjs.com/package/recharts/v/3.9.2) (from + `3.9.1`, in `dependencies`) + +- [#3873](https://github.com/Urigo/accounter-fullstack/pull/3873) + [`246b1e4`](https://github.com/Urigo/accounter-fullstack/commit/246b1e4d41a6424c4b9f251ff0b8cf36c774ab30) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@auth0/auth0-react@2.21.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.21.0) (from + `2.20.0`, in `dependencies`) + - Updated dependency + [`lucide-react@1.24.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.24.0) (from `1.23.0`, + in `dependencies`) + +- [#3905](https://github.com/Urigo/accounter-fullstack/pull/3905) + [`58c6a77`](https://github.com/Urigo/accounter-fullstack/commit/58c6a77fc5ec4592e6474705b39fbf746216a261) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`lucide-react@1.24.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.24.0) (from `1.23.0`, + in `dependencies`) + +- [#3908](https://github.com/Urigo/accounter-fullstack/pull/3908) + [`c26475a`](https://github.com/Urigo/accounter-fullstack/commit/c26475abb02712c7f70fa29d8167acda7816394e) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@auth0/auth0-react@2.21.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.21.0) (from + `2.20.0`, in `dependencies`) + +- [#3913](https://github.com/Urigo/accounter-fullstack/pull/3913) + [`6d29a1e`](https://github.com/Urigo/accounter-fullstack/commit/6d29a1ecfc84e1519165e7775aaa90ed3cb4071f) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`html2canvas-pro@2.2.4` ↗︎](https://www.npmjs.com/package/html2canvas-pro/v/2.2.4) (from + `2.2.3`, in `dependencies`) + +- [#3956](https://github.com/Urigo/accounter-fullstack/pull/3956) + [`7253a34`](https://github.com/Urigo/accounter-fullstack/commit/7253a34f8cdb183774b3b2befb59b86655101d48) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@auth0/auth0-react@2.22.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.22.0) (from + `2.21.0`, in `dependencies`) + +- [#3957](https://github.com/Urigo/accounter-fullstack/pull/3957) + [`e8f8f41`](https://github.com/Urigo/accounter-fullstack/commit/e8f8f41325fa6e73835c6eec40619e6ec338332d) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`lucide-react@1.25.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.25.0) (from `1.24.0`, + in `dependencies`) + +- [#3964](https://github.com/Urigo/accounter-fullstack/pull/3964) + [`49cd281`](https://github.com/Urigo/accounter-fullstack/commit/49cd281e9aa63832cd1eda409472d6074ad83ba4) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@auth0/auth0-react@2.22.0` ↗︎](https://www.npmjs.com/package/@auth0/auth0-react/v/2.22.0) (from + `2.21.0`, in `dependencies`) + - Updated dependency + [`lucide-react@1.25.0` ↗︎](https://www.npmjs.com/package/lucide-react/v/1.25.0) (from `1.24.0`, + in `dependencies`) + +- [#3930](https://github.com/Urigo/accounter-fullstack/pull/3930) + [`06bc329`](https://github.com/Urigo/accounter-fullstack/commit/06bc329d5004555ecee18f6e46dc3b7a3bda6665) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix a crash in the transactions balance + report when a period's per-currency breakdown includes a crypto currency. Crypto currencies + (`USDC`, `ETH`, `GRT`) are not valid ISO 4217 codes, so `getCurrencyFormatter` threw + `RangeError: Invalid currency code` when building an `Intl.NumberFormat` with `style: 'currency'`. + The formatter now falls back to decimal formatting with the currency symbol as a prefix for + non-fiat currencies (placing the minus sign before the symbol for negatives, matching fiat + notation), leaving fiat currency formatting unchanged. + +- [#3932](https://github.com/Urigo/accounter-fullstack/pull/3932) + [`7a637a5`](https://github.com/Urigo/accounter-fullstack/commit/7a637a58914d8c7c47bba8749a82078779a00755) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix the Bank Deposits screen "blinking" + when reassigning a transaction, without losing the update. + + Previously, reassigning a transaction refetched `AllDeposits`, and the loading gate replaced the + whole table on every refetch — unmounting and remounting the expanded transaction sub-tables, + which is what actually refreshed their data (the urql client has no cache exchange, so mutations + don't invalidate queries). This caused a jarring full-screen blink. + + Now the loading gates only replace the table on the initial load (`fetching && !data`), and + derived rows are wrapped in a new `useStableValue` hook so the view updates only when data + actually changes. To keep the data correct without the remount, a reassign bumps a token that + every mounted deposit transaction table observes and re-executes its own query for — so the + reassigned row leaves the source deposit and appears under the target deposit, and both deposits' + balances refresh, with no blink. + +- [#3937](https://github.com/Urigo/accounter-fullstack/pull/3937) + [`5232f8e`](https://github.com/Urigo/accounter-fullstack/commit/5232f8e1620b6ae09fb0763b2810cf147305577e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Reduce the "blinking" in the charge + extended-info panel (and its sub-components) when something is updated via `onExtendedChange`. + Applying the same insights as the bank-deposits and charges-table fixes: + + - `charge-extended-info.tsx`: the top loader now only shows on the initial load + (`fetching && !charge`) instead of on every refetch. The `@defer` `FetchCharge` query is + re-executed with `network-only`, and its result is merged over the previously loaded charge — a + re-executed deferred query delivers its non-deferred fields first and streams the deferred + fragments in later patches, so merging keeps the already-loaded accordion sections rendering + their last data until each fresh patch arrives, instead of every section collapsing and + re-expanding. The rendered charge is also wrapped in `useStableValue` so descendants re-render + only on real changes. + - `extended-info/charge-matches.tsx`: gate the loader on `fetching && !data` so the matches table + stays visible during background refetches. + - `extended-info/bank-deposit.tsx`: show the full-section loader only on the initial load; during + background refetches and create/assign mutations the current content stays visible (mutation + progress is already surfaced via the inline button states). + +- [#3978](https://github.com/Urigo/accounter-fullstack/pull/3978) + [`3d59810`](https://github.com/Urigo/accounter-fullstack/commit/3d59810880c5e60d06074b2b71c401808cb736c7) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Charge Matching screen: allow selecting a + base charge from the queue sidebar. Clicking an entry pins that charge as the active item under + review, so you can jump ahead to an upcoming base charge or revisit one you skipped instead of + only ever seeing the first pending charge. Already-matched entries are disabled since they are + merged on the backend. + +- [#3977](https://github.com/Urigo/accounter-fullstack/pull/3977) + [`7f0196d`](https://github.com/Urigo/accounter-fullstack/commit/7f0196d291b0ff1971c437ebb9deb6bf9c58212c) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Persist the Charge Matching screen filters + (mode, from/to dates, business and sort-by) in the URL query string, so the current selection + survives a page refresh and can be shared via link. Filter updates are merged into the existing + query params, preserving any unrelated params already in the URL. + +- [#3940](https://github.com/Urigo/accounter-fullstack/pull/3940) + [`18bda6a`](https://github.com/Urigo/accounter-fullstack/commit/18bda6a2905c3c87fb9a4574a0c5cb85abb1fb2e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Collapse an expanded charge row + automatically when its accountant approval status is set to `APPROVED` from the charges table. + +- [#3937](https://github.com/Urigo/accounter-fullstack/pull/3937) + [`5232f8e`](https://github.com/Urigo/accounter-fullstack/commit/5232f8e1620b6ae09fb0763b2810cf147305577e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Reduce the "blinking" on the All Charges + screen when data is refetched. Applying the same insights as the bank deposits fix: + + - The loading spinner now only replaces the table on the initial load (`fetching && !data`) + instead of on every background refetch, so changing filters or pages no longer blanks out the + whole table — the current results stay visible until the new data arrives. During those + refetches a `LoadingOverlay` dims the table with a spinner so it's still clear the charges are + being reloaded. + - The charge nodes are wrapped in the shared `useStableValue` hook, so the table and its rows keep + a stable reference and only re-render (and reset per-row state) when the data actually changed. + - Filter refetches are issued with `{ requestPolicy: 'network-only' }` to make the intent + explicit. + - The filters-bar effect now depends only on the page count it actually consumes, instead of the + whole query result and `fetching`, so it isn't rebuilt on every refetch. + + Per-charge edits were already scoped to their own row query and are unaffected. + +- [#3863](https://github.com/Urigo/accounter-fullstack/pull/3863) + [`35b1125`](https://github.com/Urigo/accounter-fullstack/commit/35b112532514b1447d615826943d192ed8a0d19f) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add a "Pull Deel Documents" button to the + user nav menu, next to "Add Balance Charge", that triggers the `fetchDeelDocuments` mutation on + demand. + + Also improves the underlying Deel invoice fetch/matching logic: + + - Distinguishes newly-seen invoices from previously-fetched invoices that are still unmatched, so + a later run can pick up a payment match for an invoice it already recorded (via a new + `updateDeelInvoiceRecords` update path) instead of only ever inserting. + - Reuses an already-matched charge for a given receipt when creating charges from payment + breakdowns, avoiding duplicate charges for invoices that share a receipt. + - Extends the Deel invoice schema/table with `billing_type` and `document_type`, and refines + several payment-receipt and payment-breakdown Zod schemas to match the Deel API more closely. + +- [#3931](https://github.com/Urigo/accounter-fullstack/pull/3931) + [`3cf9ff4`](https://github.com/Urigo/accounter-fullstack/commit/3cf9ff4854f33178de6979dbfc557389cf352572) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Show the deposit name instead of its ID in + the Reassign Transaction dialog's target deposit selection. The currency is now rendered + conditionally so no empty parentheses appear when a deposit has no currency. + +- [#3948](https://github.com/Urigo/accounter-fullstack/pull/3948) + [`f933c8c`](https://github.com/Urigo/accounter-fullstack/commit/f933c8cdc8a9dc5378ebb24d332af11079835c1b) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Pre-fill financial fields when switching an + "other"/"unprocessed" document to a financial type in the edit-document modal. + + A document can be inserted carrying full financial data (date, amount, VAT, serial number, + debtor/creditor, etc.) while still categorized as `OTHER`/`UNPROCESSED`. Previously, editing such + a document and switching its type to a financial one (e.g. invoice) showed all extended attribute + fields empty — the stored values only appeared after saving and reopening the modal, once the + document re-resolved as a `FinancialDocument`. + + The financial fields were only exposed on the `FinancialDocument` GraphQL types, so the edit query + could never fetch the already-stored values for `Unprocessed`/`OtherDocument`. These fields + (`vat`, `serialNumber`, `date`, `amount`, `vatReportDateOverride`, `noVatAmount`, + `allocationNumber`, `exchangeRateOverride`, `debtor`, `creditor`) are now exposed on the + `Unprocessed` and `OtherDocument` types and fetched by the client, and the edit form reads its + financial defaults from the document regardless of its current type — so switching to a financial + type immediately pre-fills the stored values. + +- [#3937](https://github.com/Urigo/accounter-fullstack/pull/3937) + [`5232f8e`](https://github.com/Urigo/accounter-fullstack/commit/5232f8e1620b6ae09fb0763b2810cf147305577e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Stop the documents table (reused under the + charge extended-info panel) from "blinking" when a document is updated. The document row fields + are fetched under a `@defer` fragment, so on a refetch each document streams back id-first and its + other fields (amount, vat, …) arrive in later patches — which briefly rendered the rows with empty + cells before the data refilled. The table now merges each incoming document's present fields over + the version currently shown (matched by id), so every cell keeps its current value until the real + data replaces it, and bails out of re-rendering when nothing changed. + +- [#3896](https://github.com/Urigo/accounter-fullstack/pull/3896) + [`36f8d49`](https://github.com/Urigo/accounter-fullstack/commit/36f8d49c1fff95afea466a23b33eba7c0db004a8) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **GraphQL schema**: + `ReportCommentarySubRecord` gains a `ledgerRecords: [LedgerRecord!]!` field, so the details are + delegated to the client. This applies to both the Profit & Loss and Tax reports, which share these + commentary types. + - **Client**: `ReportSubCommentaryRow` gains a per-entity `ToggleExpansionButton` that expands + into the existing `LedgerTable` component (no ledger diff view in this report). + +- [#3924](https://github.com/Urigo/accounter-fullstack/pull/3924) + [`54d27de`](https://github.com/Urigo/accounter-fullstack/commit/54d27ded68bed447769851bf490a16fc97e864cb) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix empty `generalContacts` handling for + businesses. When inserting a business without any general contacts, an empty string was stored as + the business email, which later parsed into `['']` (an invalid email) and triggered a validation + error when editing the business. The insert modal now stores `undefined` instead of an empty + string, and the edit form filters out empty entries when parsing the stored email. + +- [#4003](https://github.com/Urigo/accounter-fullstack/pull/4003) + [`b2010b7`](https://github.com/Urigo/accounter-fullstack/commit/b2010b78275bb38e882b91ad935acdc734db6a2e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix a spurious "Error fetching extended + information for this charge" flash in the charge expansion panel. The rendered `charge` is + committed to state in an effect one render after `fetching` flips to `false` and the fetched data + arrives, so the error gate briefly saw `!fetching && !charge` as true. The error is now also gated + on `incomingCharge` (the synchronous derivation of the fetched data), suppressing the flash during + that one-render gap while still surfacing genuine "no data" errors. + +- [#3925](https://github.com/Urigo/accounter-fullstack/pull/3925) + [`547e405`](https://github.com/Urigo/accounter-fullstack/commit/547e40567b02e0e16a7f6d3cfdbf12fe5ae819b6) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix ComboBox search input being unclickable + inside PopUpDrawer (e.g. the Creditor/Debtor selects in the Edit Document modal). The drawer's + underlying Radix Dialog is always modal and traps focus, so the popover — portaled to + `document.body` — could not be focused. PopUpDrawer now exposes its content element via a + portal-container context, and ComboBox portals its popover into it when present while keeping the + default `document.body` portaling everywhere else. + +- [#4003](https://github.com/Urigo/accounter-fullstack/pull/4003) + [`b2010b7`](https://github.com/Urigo/accounter-fullstack/commit/b2010b78275bb38e882b91ad935acdc734db6a2e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add optional CSV export to the new charges + table. When enabled, a download button on the All Charges and VAT report missing-info screens + exports the currently loaded charges to CSV via a dedicated `ChargeForCsvExportFields` fragment + and `convertChargesToCsv` serializer. The shared `DownloadCSVButton` now tracks a loading state, + disables itself and shows a spinner while the export file is being prepared, so slow exports can + no longer be re-triggered mid-download. + +- [#4003](https://github.com/Urigo/accounter-fullstack/pull/4003) + [`b2010b7`](https://github.com/Urigo/accounter-fullstack/commit/b2010b78275bb38e882b91ad935acdc734db6a2e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix whole-table "expand all" in the new + charges table and load the expanded rows efficiently. + + - `new-charges-table.tsx`: the table now accepts an `isAllOpened` prop and drives tanstack-table's + `expanded` state from it (`true` expands every row, `{}` collapses them). Previously the + toolbar's expand-all button toggled local `isAllOpened` state that was never passed to the + table, so nothing happened; per-charge expansion via the row button was unaffected. + - New `charges-extended-info-loader.tsx`: a `BatchChargesExtendedInfoProvider` that, while + expand-all is active, hydrates every expanded row's extended info with a single `chargesByIDs` + query instead of one `FetchCharge` query per row (which was 100 queries for a full 100-row + page). Its selection set mirrors `FetchCharge`, including the same deferred fragments, so a + batched charge is interchangeable with a single-charge result. + - `charge-extended-info.tsx`: consumes the batch loader when it's active (pausing its own + per-charge query and delegating refetch-on-change to the batch); otherwise behaves exactly as + before. + - Wired `isAllOpened` through the all-charges, missing-info-charges and single-charge screens. + +- [#4003](https://github.com/Urigo/accounter-fullstack/pull/4003) + [`b2010b7`](https://github.com/Urigo/accounter-fullstack/commit/b2010b78275bb38e882b91ad935acdc734db6a2e) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Introduce a new TanStack-Table-based + charges table (`NewChargesTable`) on the All Charges screen, rendering charge rows from a single + `ChargeForChargesTableFields` fragment split into dedicated cell components (amount, counterparty, + description, tags, tax category, VAT, business trip, more-info, type). The new table is mounted + under the existing `LoadingOverlay` + stable `chargeNodes` gating so background refetches no + longer blink the view. + +- [#3927](https://github.com/Urigo/accounter-fullstack/pull/3927) + [`485dae7`](https://github.com/Urigo/accounter-fullstack/commit/485dae7f363133e7c794bb2a6ae50fe50fef2b9f) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Migrate the tax category sort code selector + from Mantine to a reusable shadcn-based `SortCodeSelect`. Each option now shows both the sort code + key and its name (e.g. `100 - Cash`), and the selector is extracted into a general component + (`components/common/inputs/sort-code-select.tsx`) so it can be reused across forms — it is now + also used in the business configurations section. + +- [#3923](https://github.com/Urigo/accounter-fullstack/pull/3923) + [`9ee7ab8`](https://github.com/Urigo/accounter-fullstack/commit/9ee7ab89299fe08b12a5ac639dc84dfd25a390c7) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Improve `MultiSelect` readability for large + selections (closes [#3891](https://github.com/urigo/accounter-fullstack/issues/3891)). The + collapsed "+N more" badge now shows the hidden selected labels in a tooltip on hover/focus, and + the dropdown lists checked items at the top when opened (order is snapshotted on open so it does + not reshuffle while toggling). + +- [#3827](https://github.com/Urigo/accounter-fullstack/pull/3827) + [`6aad15e`](https://github.com/Urigo/accounter-fullstack/commit/6aad15e71959061590c91cfd9793b41147cb7640) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Refactored the `/businesses` screen to use + a robust `@tanstack/react-table` implementation, replacing the previous card list view. This + upgrade introduces advanced data management capabilities including grouping, lazy-loading, + sorting, client-side filtering, and batch operations. + + - **Data Table Migration**: Replaced the `BusinessHeader` card list with a comprehensive data + table featuring grouped columns: Core, Main, Categorization, Extension tags, and Suggestion + defaults. Added a "Columns" dropdown to toggle column visibility. + - **Row Selection & Batch Actions**: Implemented row selection to enable merging businesses and a + new batch update dialog for bulk-editing shared fields (country, city, zip, sort/IRS codes, tax + category, and suggestion descriptions). + - **Lazy-Loaded Usage Tracking**: Introduced a "Usage" column group tracking transactions, + documents, expenses, and ledger records. To optimize performance, the `BusinessesUsage` query is + lazy-loaded and only un-pauses when a usage column is rendered or the "unused only" filter is + active. + - **Advanced Filtering & Sorting**: Added sortable headers with custom null-safe comparators. + Implemented robust client-side filtering, including toggles for client/admin/inactive flags, + free-text code filters, and an "unused only" view. + - **Guarded Deletion**: Added a per-row delete action that mirrors the server's hard-delete guard; + the delete button remains strictly disabled unless the business is completely unused across all + metrics. + - **Architecture & Testing**: Extracted pure, dependency-free row mapping, usage merging, and + filtering logic into a dedicated, unit-tested `business-rows.ts` module. + +- [#3836](https://github.com/Urigo/accounter-fullstack/pull/3836) + [`059b638`](https://github.com/Urigo/accounter-fullstack/commit/059b638702116701a5a0062a7ac3a58a28eeb004) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - Extend `batch-update-dialog.tsx`: + - **Tags** — a `MultiSelect` (via `useGetTags`), merged with the existing description into a + single `suggestions` input. + - **Flags** — `isActive`, `isReceiptEnough`, `isDocumentsOptional` (No docs required), + `optionalVAT` (Is VAT optional) and `exemptDealer` as tri-state selects (**No change / Yes / + No**). A flag is only sent when the user explicitly picks Yes/No, preserving the "only fields + you fill in are applied" semantics of batch update. + - `isFormEmpty` is now derived from the built mutation input so the new controls correctly + enable/disable the Save button. + +- [#3914](https://github.com/Urigo/accounter-fullstack/pull/3914) + [`35a6c4d`](https://github.com/Urigo/accounter-fullstack/commit/35a6c4de58fbaea67d466b53403c232270328557) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Schema updates**: Added `sortCode: Int` + field to the `DynamicReportNodeData` GraphQL type and Zod validation schema + - **GraphQL query**: Updated the dynamic report query to fetch the `sortCode` field from template + data + - **Tests**: Added comprehensive test coverage for parsing and validating sort-code-branch nodes + with sortCode fields, plus a test verifying sortCode is read from template data (not derived + from UUID IDs) + ## 0.0.12 ### Patch Changes diff --git a/packages/client/package.json b/packages/client/package.json index a7363631e4..496ff12b3f 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/client", - "version": "0.0.12", + "version": "0.1.0", "type": "module", "description": "Accounter client application", "repository": { diff --git a/packages/email-ingestion-gateway/CHANGELOG.md b/packages/email-ingestion-gateway/CHANGELOG.md index 7fb2452270..5ef33755a5 100644 --- a/packages/email-ingestion-gateway/CHANGELOG.md +++ b/packages/email-ingestion-gateway/CHANGELOG.md @@ -1,5 +1,36 @@ # @accounter/email-ingestion-gateway +## 0.1.1 + +### Patch Changes + +- [#3926](https://github.com/Urigo/accounter-fullstack/pull/3926) + [`295fa80`](https://github.com/Urigo/accounter-fullstack/commit/295fa805843094115b58f291be309b86351ac96d) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Refine the email-ingestion-gateway + container build. Rename `DockerFile` to `Dockerfile`, fix the `docker:build`/`docker:run` + workspace scripts to use the correct build context (`../../`) and paths, copy only workspace + manifests before `yarn install` for better layer caching, run the production stage as the non-root + `pwuser` from the Playwright base image (copying artifacts with `--chown` instead of a costly + recursive `chown -R /app`), and add a root `.dockerignore` so the repo-root build context stays + small and host `node_modules` don't clobber the installed dependencies. + +- [#3762](https://github.com/Urigo/accounter-fullstack/pull/3762) + [`50ca939`](https://github.com/Urigo/accounter-fullstack/commit/50ca939661d9eb5b31e134c54d12015e524fac1c) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Gateway: parse incoming MIME with + `postal-mime` (as recommended by Cloudflare's email-handler docs) instead of the hand-rolled + parser. This decodes RFC 2047 encoded-word headers, so non-ASCII subjects and sender display names + (e.g. Hebrew `=?UTF-8?B?…?=`) are no longer stored as raw encoded strings — fixing the email + charge description that reads them. `extractFromMime` keeps the same public contract + (document-type filtering, size/count limits, nesting-depth guard, and the `From: ` + issuer-candidate heuristic) and now also forwards the email subject to the server for the charge + description. + +- [#3873](https://github.com/Urigo/accounter-fullstack/pull/3873) + [`246b1e4`](https://github.com/Urigo/accounter-fullstack/commit/246b1e4d41a6424c4b9f251ff0b8cf36c774ab30) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New `IngestReasonCode.SELF_ISSUED`** + constant in both `contracts.ts` files (server and gateway): Distinguishes self-issued skips from + content re-deliveries in duplicate outcomes. + ## 0.1.0 ### Minor Changes diff --git a/packages/email-ingestion-gateway/package.json b/packages/email-ingestion-gateway/package.json index 72824cf30c..c4208a4597 100644 --- a/packages/email-ingestion-gateway/package.json +++ b/packages/email-ingestion-gateway/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/email-ingestion-gateway", - "version": "0.1.0", + "version": "0.1.1", "type": "module", "description": "Cloudflare Email to Server ingestion gateway for multi-tenant email document ingestion", "repository": { diff --git a/packages/gmail-listener/CHANGELOG.md b/packages/gmail-listener/CHANGELOG.md index bfa86f4936..97f915c616 100644 --- a/packages/gmail-listener/CHANGELOG.md +++ b/packages/gmail-listener/CHANGELOG.md @@ -1,5 +1,32 @@ # @accounter/gmail-listener +## 0.1.3 + +### Patch Changes + +- [#3768](https://github.com/Urigo/accounter-fullstack/pull/3768) + [`7a7dc71`](https://github.com/Urigo/accounter-fullstack/commit/7a7dc71ba2dc9a660f150340f2352704d571f367) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`playwright@1.61.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.1) + (from `1.61.0`, in `dependencies`) + +- [#3761](https://github.com/Urigo/accounter-fullstack/pull/3761) + [`837d95c`](https://github.com/Urigo/accounter-fullstack/commit/837d95c0985ade04cf31cc7f956d409a1a7463e5) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Deprecate the legacy gmail-listener email + path now that the v2 multi-tenant `@accounter/email-ingestion-gateway` pipeline (Cloudflare → + Gateway → Server) covers it. + + - The server GraphQL fields `businessEmailConfig` (query) and `insertEmailDocuments` (mutation) + are marked `@deprecated` (non-breaking — the legacy listener keeps working for rollback) and + scheduled for removal after cutover. Their resolvers carry matching `@deprecated` JSDoc. + - `@accounter/gmail-listener` is marked deprecated (README banner + package description) and + superseded by the gateway. It is kept only for rollback during the cutover. + - Docs updated to acknowledge the migration (root `CLAUDE.md`, `packages/server/CLAUDE.md`). + + The `gmail_listener` auth role and the package itself are intentionally retained for rollback; + hard removal (and `npm deprecate` of the published package) is a follow-up once the cutover is + complete. + ## 0.1.2 ### Patch Changes diff --git a/packages/gmail-listener/package.json b/packages/gmail-listener/package.json index cffd91341a..ff5cc24ac6 100644 --- a/packages/gmail-listener/package.json +++ b/packages/gmail-listener/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/gmail-listener", - "version": "0.1.2", + "version": "0.1.3", "type": "module", "description": "[DEPRECATED — superseded by @accounter/email-ingestion-gateway] A Gmail listener that listens for new emails, extracts financial documents, and sends them to the server", "repository": { diff --git a/packages/israeli-vat-scraper/CHANGELOG.md b/packages/israeli-vat-scraper/CHANGELOG.md index 5b2f8903ae..ead845cd93 100644 --- a/packages/israeli-vat-scraper/CHANGELOG.md +++ b/packages/israeli-vat-scraper/CHANGELOG.md @@ -1,5 +1,33 @@ # @accounter-toolkit/israeli-vat-scraper +## 0.1.13 + +### Patch Changes + +- [#3738](https://github.com/Urigo/accounter-fullstack/pull/3738) + [`670f7cc`](https://github.com/Urigo/accounter-fullstack/commit/670f7cc2bd58c04da5dd151e4878382916700a8e) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) + (from `25.1.0`, in `dependencies`) + +- [#3762](https://github.com/Urigo/accounter-fullstack/pull/3762) + [`50ca939`](https://github.com/Urigo/accounter-fullstack/commit/50ca939661d9eb5b31e134c54d12015e524fac1c) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) + (from `25.1.0`, in `dependencies`) + +- [#3768](https://github.com/Urigo/accounter-fullstack/pull/3768) + [`7a7dc71`](https://github.com/Urigo/accounter-fullstack/commit/7a7dc71ba2dc9a660f150340f2352704d571f367) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.2.1` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.1) + (from `25.2.0`, in `dependencies`) + +- [#3821](https://github.com/Urigo/accounter-fullstack/pull/3821) + [`fd69847`](https://github.com/Urigo/accounter-fullstack/commit/fd698477f09c7bbf245bcb011afc359f47521da3) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.3.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.3.0) + (from `25.2.1`, in `dependencies`) + ## 0.1.12 ### Patch Changes diff --git a/packages/israeli-vat-scraper/package.json b/packages/israeli-vat-scraper/package.json index c3ebf2193f..39242abb89 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.12", + "version": "0.1.13", "type": "module", "description": "Scraper app for fetching Israeli VAT data", "repository": { diff --git a/packages/modern-poalim-scraper/CHANGELOG.md b/packages/modern-poalim-scraper/CHANGELOG.md index 2f60c4239f..7503941f18 100644 --- a/packages/modern-poalim-scraper/CHANGELOG.md +++ b/packages/modern-poalim-scraper/CHANGELOG.md @@ -1,5 +1,40 @@ # @accounter/modern-poalim-scraper +## 0.10.7 + +### Patch Changes + +- [#3738](https://github.com/Urigo/accounter-fullstack/pull/3738) + [`670f7cc`](https://github.com/Urigo/accounter-fullstack/commit/670f7cc2bd58c04da5dd151e4878382916700a8e) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) + (from `25.1.0`, in `dependencies`) + +- [#3762](https://github.com/Urigo/accounter-fullstack/pull/3762) + [`50ca939`](https://github.com/Urigo/accounter-fullstack/commit/50ca939661d9eb5b31e134c54d12015e524fac1c) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency [`puppeteer@25.2.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.0) + (from `25.1.0`, in `dependencies`) + +- [#3768](https://github.com/Urigo/accounter-fullstack/pull/3768) + [`7a7dc71`](https://github.com/Urigo/accounter-fullstack/commit/7a7dc71ba2dc9a660f150340f2352704d571f367) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`playwright@1.61.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.1) + (from `1.61.0`, in `dependencies`) + - Updated dependency [`puppeteer@25.2.1` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.2.1) + (from `25.2.0`, in `dependencies`) + +- [#3821](https://github.com/Urigo/accounter-fullstack/pull/3821) + [`fd69847`](https://github.com/Urigo/accounter-fullstack/commit/fd698477f09c7bbf245bcb011afc359f47521da3) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`puppeteer@25.3.0` ↗︎](https://www.npmjs.com/package/puppeteer/v/25.3.0) + (from `25.2.1`, in `dependencies`) + +- [#3950](https://github.com/Urigo/accounter-fullstack/pull/3950) + [`c406f51`](https://github.com/Urigo/accounter-fullstack/commit/c406f5151625b26768c3764ee302ef5e1aa80c05) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add `accountName` to + `AccountDataItemSchema`wq + ## 0.10.6 ### Patch Changes diff --git a/packages/modern-poalim-scraper/package.json b/packages/modern-poalim-scraper/package.json index bfcaf7a96e..92143aefe6 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.10.6", + "version": "0.10.7", "type": "module", "description": "Modern scraper for Israeli banks (Hapoalim, Isracard, Max)", "repository": { diff --git a/packages/scraper-app/CHANGELOG.md b/packages/scraper-app/CHANGELOG.md index 6d741a6c6d..29d1c4fa78 100644 --- a/packages/scraper-app/CHANGELOG.md +++ b/packages/scraper-app/CHANGELOG.md @@ -1,5 +1,161 @@ # @accounter/scraper-app +## 0.0.3 + +### Patch Changes + +- [#3792](https://github.com/Urigo/accounter-fullstack/pull/3792) + [`1a8e0ea`](https://github.com/Urigo/accounter-fullstack/commit/1a8e0eaee582464aa9ec79b71c8aadd618fc5a15) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`fastify@5.9.0` ↗︎](https://www.npmjs.com/package/fastify/v/5.9.0) (from + `5.8.5`, in `dependencies`) + +- [#3836](https://github.com/Urigo/accounter-fullstack/pull/3836) + [`059b638`](https://github.com/Urigo/accounter-fullstack/commit/059b638702116701a5a0062a7ac3a58a28eeb004) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency [`fastify@5.10.0` ↗︎](https://www.npmjs.com/package/fastify/v/5.10.0) (from + `5.9.0`, in `dependencies`) + +- [#3842](https://github.com/Urigo/accounter-fullstack/pull/3842) + [`f19c49c`](https://github.com/Urigo/accounter-fullstack/commit/f19c49cccfb84b5cd3b8b0455f241ef325b9facb) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`fastify@5.10.0` ↗︎](https://www.npmjs.com/package/fastify/v/5.10.0) (from + `5.9.0`, in `dependencies`) + +- [#3871](https://github.com/Urigo/accounter-fullstack/pull/3871) + [`8a38200`](https://github.com/Urigo/accounter-fullstack/commit/8a38200368a8e0e9a80a325e3bb878f99a26c38d) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`msw@2.15.0` ↗︎](https://www.npmjs.com/package/msw/v/2.15.0) (from `2.14.6`, + in `dependencies`) + +- [#3873](https://github.com/Urigo/accounter-fullstack/pull/3873) + [`246b1e4`](https://github.com/Urigo/accounter-fullstack/commit/246b1e4d41a6424c4b9f251ff0b8cf36c774ab30) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/static@9.3.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/9.3.0) (from + `9.1.3`, in `dependencies`) + - Updated dependency + [`fast-xml-parser@5.10.0` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.0) (from + `5.9.3`, in `dependencies`) + - Updated dependency [`msw@2.15.0` ↗︎](https://www.npmjs.com/package/msw/v/2.15.0) (from `2.14.6`, + in `dependencies`) + +- [#3881](https://github.com/Urigo/accounter-fullstack/pull/3881) + [`9556c7e`](https://github.com/Urigo/accounter-fullstack/commit/9556c7ed91f83629c76e6c502826aff948850354) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@fastify/static@9.3.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/9.3.0) (from + `9.1.3`, in `dependencies`) + +- [#3882](https://github.com/Urigo/accounter-fullstack/pull/3882) + [`f9f80c8`](https://github.com/Urigo/accounter-fullstack/commit/f9f80c84fce8fbe32e58bd24e4ab0ae858e8fc46) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from + `11.2.0`, in `dependencies`) + +- [#3911](https://github.com/Urigo/accounter-fullstack/pull/3911) + [`6c3406e`](https://github.com/Urigo/accounter-fullstack/commit/6c3406e6a5a8bd91f76f3b971db33f4a526de582) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`fast-xml-parser@5.10.0` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.0) (from + `5.9.3`, in `dependencies`) + +- [#3912](https://github.com/Urigo/accounter-fullstack/pull/3912) + [`494b8f8`](https://github.com/Urigo/accounter-fullstack/commit/494b8f87ffce00b37e1ebed571fb1026317a007f) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from + `9.3.0`, in `dependencies`) + +- [#3923](https://github.com/Urigo/accounter-fullstack/pull/3923) + [`9ee7ab8`](https://github.com/Urigo/accounter-fullstack/commit/9ee7ab89299fe08b12a5ac639dc84dfd25a390c7) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from + `11.2.0`, in `dependencies`) + +- [#3925](https://github.com/Urigo/accounter-fullstack/pull/3925) + [`547e405`](https://github.com/Urigo/accounter-fullstack/commit/547e40567b02e0e16a7f6d3cfdbf12fe5ae819b6) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from + `11.2.0`, in `dependencies`) + +- [#3927](https://github.com/Urigo/accounter-fullstack/pull/3927) + [`485dae7`](https://github.com/Urigo/accounter-fullstack/commit/485dae7f363133e7c794bb2a6ae50fe50fef2b9f) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/websocket@11.3.0` ↗︎](https://www.npmjs.com/package/@fastify/websocket/v/11.3.0) (from + `11.2.0`, in `dependencies`) + +- [#3936](https://github.com/Urigo/accounter-fullstack/pull/3936) + [`5b2ffbb`](https://github.com/Urigo/accounter-fullstack/commit/5b2ffbbec76719fb0b6cd17dbe535755a830287d) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`ws@8.21.1` ↗︎](https://www.npmjs.com/package/ws/v/8.21.1) (from `8.21.0`, in + `dependencies`) + +- [#3938](https://github.com/Urigo/accounter-fullstack/pull/3938) + [`2a0c041`](https://github.com/Urigo/accounter-fullstack/commit/2a0c041b0dc6104039304598f932e7990e84c2c0) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from + `9.3.0`, in `dependencies`) + +- [#3939](https://github.com/Urigo/accounter-fullstack/pull/3939) + [`aed9832`](https://github.com/Urigo/accounter-fullstack/commit/aed98323f04b757d0ad3d5b2b3b67280a1db61dc) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from + `9.3.0`, in `dependencies`) + +- [#3942](https://github.com/Urigo/accounter-fullstack/pull/3942) + [`57c9258`](https://github.com/Urigo/accounter-fullstack/commit/57c92581f2359697b84278ab40c56c9b0aa710f6) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@fastify/static@10.1.0` ↗︎](https://www.npmjs.com/package/@fastify/static/v/10.1.0) (from + `9.3.0`, in `dependencies`) + +- [#3955](https://github.com/Urigo/accounter-fullstack/pull/3955) + [`bdcc700`](https://github.com/Urigo/accounter-fullstack/commit/bdcc7001ddaa78524310952919ebf30d331447eb) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`fast-xml-parser@5.10.1` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.1) (from + `5.10.0`, in `dependencies`) + +- [#3964](https://github.com/Urigo/accounter-fullstack/pull/3964) + [`49cd281`](https://github.com/Urigo/accounter-fullstack/commit/49cd281e9aa63832cd1eda409472d6074ad83ba4) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`fast-xml-parser@5.10.1` ↗︎](https://www.npmjs.com/package/fast-xml-parser/v/5.10.1) (from + `5.10.0`, in `dependencies`) + +- [#3949](https://github.com/Urigo/accounter-fullstack/pull/3949) + [`36a1832`](https://github.com/Urigo/accounter-fullstack/commit/36a1832ad9da82660379109bd688c8f4e4d60d9f) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Surface Poalim schema validation failures + instead of silently swallowing them. The modern-poalim-scraper runs Zod validation internally + (`validateSchema: true`) and returns `{ data, isValid, errors }`, setting `data` to `null` and + `isValid` to `false` on a failed validation. `scrapePoalim` only read `data`, so a failed + `getAccountsData` validation looked like "no accounts" and the run reported success with no data; + the same silent swallow applied to the per-account ILS, foreign, and SWIFT requests. Each Poalim + request now checks `isValid` and throws a descriptive error (including the validation issues), + which propagates to the run runner and is emitted as a `task-error` so the user is notified. + +- [#3803](https://github.com/Urigo/accounter-fullstack/pull/3803) + [`9bd0c32`](https://github.com/Urigo/accounter-fullstack/commit/9bd0c32ec5279fd98e7c41d3a17e9cd64a943dfc) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - Updated `amex.test.ts`, `cal.test.ts`, + `discount.test.ts`, and `isracard.test.ts` to set `vi.setConfig({ testTimeout: 30_000 })` + - Added explanatory comments referencing PR + [#3795](https://github.com/urigo/accounter-fullstack/issues/3795) which introduced the 2-5s + per-month delays in scrapers +- Updated dependencies + [[`670f7cc`](https://github.com/Urigo/accounter-fullstack/commit/670f7cc2bd58c04da5dd151e4878382916700a8e), + [`50ca939`](https://github.com/Urigo/accounter-fullstack/commit/50ca939661d9eb5b31e134c54d12015e524fac1c), + [`7a7dc71`](https://github.com/Urigo/accounter-fullstack/commit/7a7dc71ba2dc9a660f150340f2352704d571f367), + [`fd69847`](https://github.com/Urigo/accounter-fullstack/commit/fd698477f09c7bbf245bcb011afc359f47521da3), + [`c406f51`](https://github.com/Urigo/accounter-fullstack/commit/c406f5151625b26768c3764ee302ef5e1aa80c05)]: + - @accounter/modern-poalim-scraper@0.10.7 + ## 0.0.2 ### Patch Changes diff --git a/packages/scraper-app/package.json b/packages/scraper-app/package.json index b2d0ceba4e..dcdf310eb6 100644 --- a/packages/scraper-app/package.json +++ b/packages/scraper-app/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/scraper-app", - "version": "0.0.2", + "version": "0.0.3", "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 740487bbd1..9b500ea15c 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -1,5 +1,672 @@ # @accounter/server +## 0.2.0 + +### Minor Changes + +- [#3851](https://github.com/Urigo/accounter-fullstack/pull/3851) + [`a91e4a0`](https://github.com/Urigo/accounter-fullstack/commit/a91e4a0726fed53dda22dfb57b6919411bbeaba3) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add the Charge Matching Review Screen: a + guided side-by-side UI for pairing document-based and transaction-based charges and merging them + one by one. + + - Server: new `chargesAwaitingMatchQueue` GraphQL query that returns a paginated queue of + unmatched base charges with on-the-fly match suggestions, filterable by business, date range and + mode (`DOC_BASE`/`TRANSACTION_BASE`) and sortable `BY_DATE` or `BY_SCORE` (score evaluation + capped at the 100 most recent unmatched charges). + - Client: new `/charges/matching` screen with a filter/sort header, collapsible queue sidebar with + per-item pending/matched/skipped status, side-by-side base-vs-suggestion comparison cards, + alternative-suggestion switching, and accept (merge) / skip actions. + +- [#3761](https://github.com/Urigo/accounter-fullstack/pull/3761) + [`837d95c`](https://github.com/Urigo/accounter-fullstack/commit/837d95c0985ade04cf31cc7f956d409a1a7463e5) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Deprecate the legacy gmail-listener email + path now that the v2 multi-tenant `@accounter/email-ingestion-gateway` pipeline (Cloudflare → + Gateway → Server) covers it. + + - The server GraphQL fields `businessEmailConfig` (query) and `insertEmailDocuments` (mutation) + are marked `@deprecated` (non-breaking — the legacy listener keeps working for rollback) and + scheduled for removal after cutover. Their resolvers carry matching `@deprecated` JSDoc. + - `@accounter/gmail-listener` is marked deprecated (README banner + package description) and + superseded by the gateway. It is kept only for rollback during the cutover. + - Docs updated to acknowledge the migration (root `CLAUDE.md`, `packages/server/CLAUDE.md`). + + The `gmail_listener` auth role and the package itself are intentionally retained for rollback; + hard removal (and `npm deprecate` of the published package) is a follow-up once the cutover is + complete. + +### Patch Changes + +- [#3763](https://github.com/Urigo/accounter-fullstack/pull/3763) + [`606c8d7`](https://github.com/Urigo/accounter-fullstack/commit/606c8d7ba94f272659341b4baadd03593d363d5e) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@5.13.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.13.0) (from + `5.12.0`, in `dependencies`) + +- [#3768](https://github.com/Urigo/accounter-fullstack/pull/3768) + [`7a7dc71`](https://github.com/Urigo/accounter-fullstack/commit/7a7dc71ba2dc9a660f150340f2352704d571f367) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@3.0.86` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.86) (from + `3.0.85`, in `dependencies`) + - Updated dependency [`ai@6.0.209` ↗︎](https://www.npmjs.com/package/ai/v/6.0.209) (from `6.0.208`, + in `dependencies`) + - Updated dependency [`playwright@1.61.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.1) + (from `1.61.0`, in `dependencies`) + +- [#3776](https://github.com/Urigo/accounter-fullstack/pull/3776) + [`b3761d9`](https://github.com/Urigo/accounter-fullstack/commit/b3761d9fa853bd7bb26b41796fdff96af5f45863) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@3.0.87` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.87) (from + `3.0.86`, in `dependencies`) + - Updated dependency [`ai@6.0.210` ↗︎](https://www.npmjs.com/package/ai/v/6.0.210) (from `6.0.209`, + in `dependencies`) + +- [#3778](https://github.com/Urigo/accounter-fullstack/pull/3778) + [`02dc27e`](https://github.com/Urigo/accounter-fullstack/commit/02dc27e172538c66f4f9af228ea2d419d0e81141) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.1` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.1) (from + `3.0.86`, in `dependencies`) + - Updated dependency [`ai@7.0.2` ↗︎](https://www.npmjs.com/package/ai/v/7.0.2) (from `6.0.209`, in + `dependencies`) + +- [#3789](https://github.com/Urigo/accounter-fullstack/pull/3789) + [`e26256c`](https://github.com/Urigo/accounter-fullstack/commit/e26256c2e4cd3ba51042446a4617b996d49a9e0c) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.4` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.4) (from + `4.0.1`, in `dependencies`) + - Updated dependency + [`@graphql-tools/utils@11.1.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/11.1.1) + (from `11.1.0`, in `dependencies`) + - Updated dependency [`ai@7.0.9` ↗︎](https://www.npmjs.com/package/ai/v/7.0.9) (from `7.0.2`, in + `dependencies`) + +- [#3790](https://github.com/Urigo/accounter-fullstack/pull/3790) + [`1f016b8`](https://github.com/Urigo/accounter-fullstack/commit/1f016b8739573311dc0d56ee4fe1a3570ba65428) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.1` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.1) (from + `3.0.87`, in `dependencies`) + - Updated dependency [`ai@7.0.2` ↗︎](https://www.npmjs.com/package/ai/v/7.0.2) (from `6.0.210`, in + `dependencies`) + +- [#3825](https://github.com/Urigo/accounter-fullstack/pull/3825) + [`cc16f94`](https://github.com/Urigo/accounter-fullstack/commit/cc16f9472b79c3991d1b8fd186a1a75d2b9e26e1) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@opentelemetry/exporter-trace-otlp-http@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.220.0) + (from `0.219.0`, in `dependencies`) + - Updated dependency + [`@opentelemetry/resources@2.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.9.0) + (from `2.8.0`, in `dependencies`) + - Updated dependency + [`@opentelemetry/sdk-node@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.220.0) + (from `0.219.0`, in `dependencies`) + +- [#3832](https://github.com/Urigo/accounter-fullstack/pull/3832) + [`bf8ed3b`](https://github.com/Urigo/accounter-fullstack/commit/bf8ed3b88f5e2abdb045361b7d33ead0a10c352f) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@opentelemetry/auto-instrumentations-node@0.78.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.78.0) + (from `0.77.0`, in `dependencies`) + +- [#3834](https://github.com/Urigo/accounter-fullstack/pull/3834) + [`77222b7`](https://github.com/Urigo/accounter-fullstack/commit/77222b7052ffb094db5df5c9065ed93e9dc21bf2) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.7` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.7) (from + `4.0.4`, in `dependencies`) + - Updated dependency [`ai@7.0.14` ↗︎](https://www.npmjs.com/package/ai/v/7.0.14) (from `7.0.9`, in + `dependencies`) + +- [#3836](https://github.com/Urigo/accounter-fullstack/pull/3836) + [`059b638`](https://github.com/Urigo/accounter-fullstack/commit/059b638702116701a5a0062a7ac3a58a28eeb004) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.7` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.7) (from + `4.0.4`, in `dependencies`) + - Updated dependency + [`@opentelemetry/auto-instrumentations-node@0.78.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.78.0) + (from `0.77.0`, in `dependencies`) + - Updated dependency [`ai@7.0.14` ↗︎](https://www.npmjs.com/package/ai/v/7.0.14) (from `7.0.9`, in + `dependencies`) + +- [#3837](https://github.com/Urigo/accounter-fullstack/pull/3837) + [`465eefe`](https://github.com/Urigo/accounter-fullstack/commit/465eefe4062076ecdf9f0a447637ddc797039572) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@opentelemetry/exporter-trace-otlp-http@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.220.0) + (from `0.219.0`, in `dependencies`) + - Updated dependency + [`@opentelemetry/resources@2.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.9.0) + (from `2.8.0`, in `dependencies`) + - Updated dependency + [`@opentelemetry/sdk-node@0.220.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.220.0) + (from `0.219.0`, in `dependencies`) + +- [#3846](https://github.com/Urigo/accounter-fullstack/pull/3846) + [`d382eb2`](https://github.com/Urigo/accounter-fullstack/commit/d382eb20cf27b76ef80d235080bead1ba66b1e77) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.8` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.8) (from + `4.0.7`, in `dependencies`) + - Updated dependency + [`@graphql-hive/yoga@0.48.2` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.48.2) (from + `0.48.1`, in `dependencies`) + - Updated dependency [`ai@7.0.16` ↗︎](https://www.npmjs.com/package/ai/v/7.0.16) (from `7.0.14`, in + `dependencies`) + - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) + (from `0.7.2`, in `dependencies`) + +- [#3853](https://github.com/Urigo/accounter-fullstack/pull/3853) + [`a17149a`](https://github.com/Urigo/accounter-fullstack/commit/a17149a90ce064eae93bb88143732174e5875c4c) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@graphql-tools/utils@11.2.0` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/11.2.0) + (from `11.1.1`, in `dependencies`) + +- [#3866](https://github.com/Urigo/accounter-fullstack/pull/3866) + [`dd31186`](https://github.com/Urigo/accounter-fullstack/commit/dd311865528c83422d9c5805ebe75005260b765c) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@opentelemetry/semantic-conventions@1.42.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.42.0) + (from `1.41.1`, in `dependencies`) + +- [#3872](https://github.com/Urigo/accounter-fullstack/pull/3872) + [`a809750`](https://github.com/Urigo/accounter-fullstack/commit/a809750d9028f7a3305d4e5fccc1be247341fac3) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.9` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.9) (from + `4.0.8`, in `dependencies`) + - Updated dependency [`ai@7.0.17` ↗︎](https://www.npmjs.com/package/ai/v/7.0.17) (from `7.0.16`, in + `dependencies`) + +- [#3873](https://github.com/Urigo/accounter-fullstack/pull/3873) + [`246b1e4`](https://github.com/Urigo/accounter-fullstack/commit/246b1e4d41a6424c4b9f251ff0b8cf36c774ab30) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.10` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.10) (from + `4.0.8`, in `dependencies`) + - Updated dependency + [`@opentelemetry/semantic-conventions@1.43.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.43.0) + (from `1.42.0`, in `dependencies`) + - Updated dependency [`ai@7.0.18` ↗︎](https://www.npmjs.com/package/ai/v/7.0.18) (from `7.0.16`, in + `dependencies`) + - Updated dependency [`auth0@5.14.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.14.0) (from + `5.13.0`, in `dependencies`) + +- [#3885](https://github.com/Urigo/accounter-fullstack/pull/3885) + [`41b8dc2`](https://github.com/Urigo/accounter-fullstack/commit/41b8dc269929e2e7132ea1d043a6eb227de916ba) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.10` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.10) (from + `4.0.9`, in `dependencies`) + - Updated dependency [`ai@7.0.18` ↗︎](https://www.npmjs.com/package/ai/v/7.0.18) (from `7.0.17`, in + `dependencies`) + +- [#3906](https://github.com/Urigo/accounter-fullstack/pull/3906) + [`8f87877`](https://github.com/Urigo/accounter-fullstack/commit/8f87877fc2aec3a37d1b61836d2454803626ef58) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@opentelemetry/semantic-conventions@1.43.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.43.0) + (from `1.42.0`, in `dependencies`) + +- [#3909](https://github.com/Urigo/accounter-fullstack/pull/3909) + [`8458c4a`](https://github.com/Urigo/accounter-fullstack/commit/8458c4aa5b7b6a3733360553fc056882a77e6e7b) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@5.14.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.14.0) (from + `5.13.0`, in `dependencies`) + +- [#3913](https://github.com/Urigo/accounter-fullstack/pull/3913) + [`6d29a1e`](https://github.com/Urigo/accounter-fullstack/commit/6d29a1ecfc84e1519165e7775aaa90ed3cb4071f) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.12` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.12) (from + `4.0.10`, in `dependencies`) + - Updated dependency [`ai@7.0.22` ↗︎](https://www.npmjs.com/package/ai/v/7.0.22) (from `7.0.18`, in + `dependencies`) + +- [#3928](https://github.com/Urigo/accounter-fullstack/pull/3928) + [`ee7df50`](https://github.com/Urigo/accounter-fullstack/commit/ee7df5089190a89094aa36013ab9d1d02828c096) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.14` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.14) (from + `4.0.12`, in `dependencies`) + - Updated dependency [`ai@7.0.26` ↗︎](https://www.npmjs.com/package/ai/v/7.0.26) (from `7.0.22`, in + `dependencies`) + +- [#3936](https://github.com/Urigo/accounter-fullstack/pull/3936) + [`5b2ffbb`](https://github.com/Urigo/accounter-fullstack/commit/5b2ffbbec76719fb0b6cd17dbe535755a830287d) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency + [`@ai-sdk/anthropic@4.0.15` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/4.0.15) (from + `4.0.14`, in `dependencies`) + - Updated dependency [`ai@7.0.28` ↗︎](https://www.npmjs.com/package/ai/v/7.0.28) (from `7.0.26`, in + `dependencies`) + +- [#3943](https://github.com/Urigo/accounter-fullstack/pull/3943) + [`e61ed55`](https://github.com/Urigo/accounter-fullstack/commit/e61ed5561353766e72c180a0da5cd6c8b0a25d99) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`auth0@6.0.0` ↗︎](https://www.npmjs.com/package/auth0/v/6.0.0) (from + `5.14.0`, in `dependencies`) + +- [#3955](https://github.com/Urigo/accounter-fullstack/pull/3955) + [`bdcc700`](https://github.com/Urigo/accounter-fullstack/commit/bdcc7001ddaa78524310952919ebf30d331447eb) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`ai@7.0.29` ↗︎](https://www.npmjs.com/package/ai/v/7.0.29) (from `7.0.28`, in + `dependencies`) + +- [#3964](https://github.com/Urigo/accounter-fullstack/pull/3964) + [`49cd281`](https://github.com/Urigo/accounter-fullstack/commit/49cd281e9aa63832cd1eda409472d6074ad83ba4) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: + - Updated dependency [`ai@7.0.29` ↗︎](https://www.npmjs.com/package/ai/v/7.0.29) (from `7.0.28`, in + `dependencies`) + - Updated dependency [`auth0@6.0.0` ↗︎](https://www.npmjs.com/package/auth0/v/6.0.0) (from + `5.14.0`, in `dependencies`) + +- [#3979](https://github.com/Urigo/accounter-fullstack/pull/3979) + [`e3c844b`](https://github.com/Urigo/accounter-fullstack/commit/e3c844b49da2a7bec4094c7ed8f5052fe71504dc) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Exclude charge types that never require + document matching from the awaiting-match queue. Only COMMON, BUSINESS_TRIP and untyped charges + (which resolve to one of those) are expected to hold both documents and transactions; + BANK_DEPOSIT, CREDITCARD_BANK, DIVIDEND, FOREIGN_SECURITIES, INTERNAL, VAT, PAYROLL, CONVERSION + and FINANCIAL charges are now skipped. + +- [#3983](https://github.com/Urigo/accounter-fullstack/pull/3983) + [`8ce1562`](https://github.com/Urigo/accounter-fullstack/commit/8ce1562f19af6cf35ec36a9a9c1be85d8e62f9f0) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Score charge-match candidates in parallel. + `findMatches` previously scored candidates in a sequential `await` loop, which serialized the + per-candidate client and issued-document-status DataLoader lookups inside `scoreMatch` into an + N+1. Scoring now runs with `Promise.all` so those loads batch. Ordering is unaffected (results are + sorted afterwards), so match output is unchanged. + +- [#3982](https://github.com/Urigo/accounter-fullstack/pull/3982) + [`b97de0e`](https://github.com/Urigo/accounter-fullstack/commit/b97de0e153fcfa35ef598c9a99a908a934afc0ec) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Speed up the `chargesAwaitingMatchQueue` + query by building the match candidate pool once per request instead of once per queued charge. + `ChargesMatcherProvider` now exposes a batch `findMatchesForCharges`, which loads and classifies + the shared candidate pool a single time and scores every source charge against it in memory (the + per-source ±12-month window is still applied in-memory, so results are unchanged). This removes + the previous per-charge re-query and re-hydration of the candidate pool — the dominant cost, + especially for `BY_SCORE` which evaluated up to 100 charges. + + Candidate charges are also filtered by `chargeRequiresMatch` before hydration, so charge types + that never require a document match (e.g. `BANK_DEPOSIT`, `CREDITCARD_BANK`, `VAT`) are no longer + loaded or offered as suggestions — mirroring the same filter already applied to the queue's source + charges. + +- [#3816](https://github.com/Urigo/accounter-fullstack/pull/3816) + [`6963a16`](https://github.com/Urigo/accounter-fullstack/commit/6963a166897f794d86fad9bed173a31879e3e0db) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Enrich the charges `freeText` filter + (`allCharges` query) so it matches more than just text descriptions. In addition to the existing + `user_description` / transaction / document description matches, the `search_matches` CTE in + `ChargesProvider.getChargesByFilters` now also matches: + + - **Amounts** — transaction `amount` and document `total_amount` / `vat_amount`. Both the raw and + `ABS()` values are compared so signed and unsigned inputs match. Thousands separators are + stripped from the search term (via a resolver-computed `freeTextNumeric` param) so both + `1,234.56` and `1234.56` match the plain value stored in the DB. + - **Counterparty business names** — by joining `financial_entities` on the business ids referenced + by the charge's transactions (`business_id`) and documents (`creditor_id`, `debtor_id`). The + document match is split into separate creditor/debtor `UNION` branches so the planner can use + the foreign-key indexes. + +- [#3794](https://github.com/Urigo/accounter-fullstack/pull/3794) + [`ffcbb95`](https://github.com/Urigo/accounter-fullstack/commit/ffcbb9576241d6c31f4db2461b1ec12ca85b8b94) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Contract-generated document descriptions + now reflect the billing cycle: monthly contracts keep the billed-month label (`… - May 2026`), + while annual contracts use the contract's start & end dates + (`… January 15th, 2025 → January 14th, 2026`). Also parse `issueMonth` as local midnight to avoid + an off-by-one-month shift in timezones west of UTC. + +- [#3850](https://github.com/Urigo/accounter-fullstack/pull/3850) + [`8d765c8`](https://github.com/Urigo/accounter-fullstack/commit/8d765c883a4457b2f22de5be0f95d0bd457d24f7) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - **Conversion charges with multiple + transactions per side**: conversion ledger generation no longer requires exactly two main + transactions. A single conversion can now be split across two or more transactions on the base or + quote side (for example two ILS credits against one USD debit). + + - Main transactions are grouped by sign; each side is validated to be single-currency and the two + sides to differ in currency, with failures recorded as ledger errors instead of aborting + generation. + - Each side is aggregated into one representative entry (`aggregateConversionSideEntries`) that + feeds the existing fee and exchange-revaluation calculations, so the classic two-transaction + case is unchanged. + +- [#3863](https://github.com/Urigo/accounter-fullstack/pull/3863) + [`35b1125`](https://github.com/Urigo/accounter-fullstack/commit/35b112532514b1447d615826943d192ed8a0d19f) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add a "Pull Deel Documents" button to the + user nav menu, next to "Add Balance Charge", that triggers the `fetchDeelDocuments` mutation on + demand. + + Also improves the underlying Deel invoice fetch/matching logic: + + - Distinguishes newly-seen invoices from previously-fetched invoices that are still unmatched, so + a later run can pick up a payment match for an invoice it already recorded (via a new + `updateDeelInvoiceRecords` update path) instead of only ever inserting. + - Reuses an already-matched charge for a given receipt when creating charges from payment + breakdowns, avoiding duplicate charges for invoices that share a receipt. + - Extends the Deel invoice schema/table with `billing_type` and `document_type`, and refines + several payment-receipt and payment-breakdown Zod schemas to match the Deel API more closely. + +- [#3873](https://github.com/Urigo/accounter-fullstack/pull/3873) + [`246b1e4`](https://github.com/Urigo/accounter-fullstack/commit/246b1e4d41a6424c4b9f251ff0b8cf36c774ab30) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New helper function + `isSelfIssuedSenderEvidence()`** in `email-ingestion-issuer.helper.ts`: Detects when an email's + only determinable issuer is a known provider (Morning, Sumit) or the tenant's own forwarding + address, indicating no external counterparty. Reuses existing `selectIssuerEmail()` logic to + ensure consistency with issuer resolution. + + - **Self-issued binding in control resolver** (`email-ingestion-control.resolver.ts`): When + `isSelfIssuedSenderEvidence()` returns true, the grant's `businessId` is set to the tenant's own + ID instead of the recognized business. This signals to the ingest step that the issuer is the + tenant itself. Also returns `null` for `businessEmailConfig` to spare the gateway needless + document work (link-fetch, body→PDF conversion). + + - **Early short-circuit in ingest provider** (`email-ingestion-ingest.provider.ts`): After grant + validation, checks if `grant.businessId === tenantId`. If true, returns `DUPLICATE` outcome with + new `SELF_ISSUED` reason code, skipping all document processing (Cloudinary upload, OCR, dedup + queries, insert queries). Runs before `prepareDocuments()` to avoid unnecessary work. + + - **New `IngestReasonCode.SELF_ISSUED`** constant in both `contracts.ts` files (server and + gateway): Distinguishes self-issued skips from content re-deliveries in duplicate outcomes. + + - **Comprehensive test coverage**: Added test suites for the new helper function and ingest + behavior, verifying that self-issued emails are detected correctly, grants are consumed, and no + document work or database writes occur. + +- [#3938](https://github.com/Urigo/accounter-fullstack/pull/3938) + [`2a0c041`](https://github.com/Urigo/accounter-fullstack/commit/2a0c041b0dc6104039304598f932e7990e84c2c0) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Automatically degrade a charge's accountant + approval (`APPROVED` → `PENDING`) whenever its underlying data changes, so an already-approved + charge is re-flagged for accountant review. + + A shared `degradeChargesAccountantApproval` helper (built on + `AccountantApprovalProvider.degradeChargeAccountantApproval`) is now invoked from every + charge-mutating operation: + + - **Documents** — upload / batch-upload / Google-Drive batch-upload / insert / update (former and + new charge) / delete / charge-spread. + - **Transactions** — `updateTransaction` and `updateTransactions`, degrading both the former and + the new charge. + - **Misc expenses** — insert / bulk-insert / update (former and new charge) / delete. + - **Charges** — `updateCharge`, `batchUpdateCharges` and `mergeCharges`. Tag-only changes and + explicit accountant-approval changes are intentionally excluded. + - **Ledger** — `regenerateLedgerRecords`. + - **Cron** — `mergeChargesByTransactionReference`. + + The helper de-duplicates ids and ignores empty / `EMPTY_UUID` values (degrading a non-approved + charge is a no-op), and returns the freshly-degraded charges so mutations respond with the + up-to-date `PENDING` status rather than a stale one. + +- [#3948](https://github.com/Urigo/accounter-fullstack/pull/3948) + [`f933c8c`](https://github.com/Urigo/accounter-fullstack/commit/f933c8cdc8a9dc5378ebb24d332af11079835c1b) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Pre-fill financial fields when switching an + "other"/"unprocessed" document to a financial type in the edit-document modal. + + A document can be inserted carrying full financial data (date, amount, VAT, serial number, + debtor/creditor, etc.) while still categorized as `OTHER`/`UNPROCESSED`. Previously, editing such + a document and switching its type to a financial one (e.g. invoice) showed all extended attribute + fields empty — the stored values only appeared after saving and reopening the modal, once the + document re-resolved as a `FinancialDocument`. + + The financial fields were only exposed on the `FinancialDocument` GraphQL types, so the edit query + could never fetch the already-stored values for `Unprocessed`/`OtherDocument`. These fields + (`vat`, `serialNumber`, `date`, `amount`, `vatReportDateOverride`, `noVatAmount`, + `allocationNumber`, `exchangeRateOverride`, `debtor`, `creditor`) are now exposed on the + `Unprocessed` and `OtherDocument` types and fetched by the client, and the edit form reads its + financial defaults from the document regardless of its current type — so switching to a financial + type immediately pre-fills the stored values. + +- [#3836](https://github.com/Urigo/accounter-fullstack/pull/3836) + [`059b638`](https://github.com/Urigo/accounter-fullstack/commit/059b638702116701a5a0062a7ac3a58a28eeb004) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - Add `exemptDealer`, `optionalVAT`, + `isReceiptEnough`, `isDocumentsOptional` and `isActive` to `BatchUpdateBusinessInput` in + `financial-entities/typeDefs/businesses.graphql.ts`. + - No resolver change is needed: these fields are already handled by the shared + `updateSingleBusiness` helper (`helpers/update-business.helper.ts`), and + `BatchUpdateBusinessInput` remains a strict structural subset of `UpdateBusinessInput`, so it is + still passed straight through. `isActive` flows to the core financial-entity update via + `hasFinancialEntitiesCoreProperties`; the rest map to the business row update. Tags and + description were already supported through the existing `suggestions` input. + +- [#3809](https://github.com/Urigo/accounter-fullstack/pull/3809) + [`533a7ec`](https://github.com/Urigo/accounter-fullstack/commit/533a7ec00bcbb722759531b3b607ad5a5c109c47) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Recognize the issuing business for + **manually forwarded** invoice emails. The real issuer address often survives only inside the + quoted "Forwarded message" header block (e.g. the original `Reply-To`), which the gateway + previously ignored. The gateway now also recovers `From`/`Reply-To`/`Sender` addresses from + forwarded-header blocks, and the server tries every candidate (case-insensitively) until one + matches a business — so a forwarded Cloudflare invoice is attributed to the right business and its + email-processing config (e.g. "ignore the body") is applied instead of falling back to default + treatment. + +- [#3778](https://github.com/Urigo/accounter-fullstack/pull/3778) + [`02dc27e`](https://github.com/Urigo/accounter-fullstack/commit/02dc27e172538c66f4f9af228ea2d419d0e81141) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Fix false `GRANT_INVALID` rejections in v2 + email ingestion. A slow Cloudinary upload could make the gateway's ingest call time out and retry + after the server had already consumed the single-use grant, so the retry was rejected even though + the first attempt had succeeded. The server now performs an early idempotency check before + consuming the grant (returning `DUPLICATE` on retry), the gateway no longer retries ingest on + timeout, and the ingest timeout was raised from 10s to 30s. + +- [#3762](https://github.com/Urigo/accounter-fullstack/pull/3762) + [`50ca939`](https://github.com/Urigo/accounter-fullstack/commit/50ca939661d9eb5b31e134c54d12015e524fac1c) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - Email ingestion: set a descriptive charge + description matching the legacy gmail-listener — + `Email documents: (from: , )` — instead of the bare + `email-ingestion: `. The email subject, sender, and received date are threaded through + `IngestEmailInput` (new optional `subject`/`sender`/`receivedAt` fields) → the `ingestEmail` + resolver → `EmailIngestionIngestProvider`, with graceful fallback to the message id when any field + is missing. The received date is formatted in UTC so the same email produces a stable description + across dev/CI/prod. + +- [#3896](https://github.com/Urigo/accounter-fullstack/pull/3896) + [`36f8d49`](https://github.com/Urigo/accounter-fullstack/commit/36f8d49c1fff95afea466a23b33eba7c0db004a8) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Server**: + `recordsByFinancialEntityIdAndSortCodeValidations` + (`packages/server/src/modules/reports/helpers/misc.helper.ts`) now collects the contributing + ledger records (deduplicated by record ID) alongside the per-entity amount aggregation. + - **GraphQL schema**: `ReportCommentarySubRecord` gains a `ledgerRecords: [LedgerRecord!]!` field, + so the details are delegated to the client. This applies to both the Profit & Loss and Tax + reports, which share these commentary types. + +- [#3812](https://github.com/Urigo/accounter-fullstack/pull/3812) + [`c8d5560`](https://github.com/Urigo/accounter-fullstack/commit/c8d5560b0210d4a0095a4254db406f9d402a8e4b) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **A1 — `sortCode: Int`**: new field on + `LtdFinancialEntity`. The value already rides on the joined `financial_entities` row + (`sort_code`), so the resolver is a direct mapping. + - **A2 — `taxCategory` returns `null` when unmatched**: the field is nullable, but the resolver + previously threw a `GraphQLError` when a business had no tax category match. The management + screen lists every business (including uncategorized, auto-generated ones), so one missing match + would fail the whole query. Now returns `null`. + - **A3 — `isClient: Boolean!` and `isAdmin: Boolean!`**: simple boolean columns for the client and + admin/owner extension tags, reusing the loaders that already back `clientInfo` + (`ClientsProvider.getClientByIdLoader`) and `adminInfo` + (`AdminBusinessesProvider.getAdminBusinessByIdLoader`). + + - **B1 — `BusinessUsageProvider`**: new `@Injectable()` provider + (`providers/businesses-usage.provider.ts`) exposing + `getUsageByBusinessIds(ids): Map`. + One grouped count query per source. For sources where a business can appear in more than one + column, each id-bearing column is projected into a common `business_id` via `UNION ALL` before + grouping, so counts attribute to the correct id (a single `OR … GROUP BY business_id` would + not): + - `transactions` → `business_id` + - `documents` → `debtor_id` ∪ `creditor_id` + - `misc_expenses` → `debtor_id` ∪ `creditor_id` + - `ledger_records` → `debit_entity1/2` ∪ `credit_entity1/2` + + Every requested id defaults to zero so unused businesses are represented. Column names confirmed + against the `replaceBusiness` merge query and the misc-expenses provider. + + - **B2 — `businessesUsage` query**: new typeDef + resolver returning `[BusinessUsage!]!`, wired + into the financial-entities module (typeDef, resolver, provider registration, pgtyped types + re-export). + + ```graphql + type BusinessUsage { + businessId: UUID! + totalTransactions: Int! + totalDocuments: Int! + totalMiscExpenses: Int! + totalLedgerRecords: Int! + } + extend type Query { + businessesUsage(ids: [UUID!]!): [BusinessUsage!]! @requiresAuth + } + ``` + + - **C1 — `deleteBusiness` mutation**: exposes `deleteBusiness(businessId: UUID!): Boolean!` + (`@requiresAuth`, `@requiresAnyRole(["business_owner", "accountant"])`) wrapping the existing + `BusinessesOperationProvider.deleteBusinessById`. That provider already validates the business + is not an employee / pension-or-training fund / business-trip attendee / dividends receiver + (throwing per case) and cleans up its dependent rows (unbalanced-ledger businesses, + balance-cancellation, green-invoice client, tax-category match) before deleting the `businesses` + row. + + The resolver returns `true` on success; the provider's guard errors propagate as GraphQL errors + with their original messages. No new guards are added — the provider is the hard backstop, and + the screen disables delete when usage > 0 (Phase I). + + - **D1 — extract `updateSingleBusiness` helper** (refactor, no schema change): the per-business + body of the `updateBusiness` mutation (core financial-entity fields, business fields, + suggestions, tax-category match, green-invoice sync) moves into + `helpers/update-business.helper.ts`. It returns the refreshed business and throws on failure. + The `updateBusiness` resolver now wraps the helper and maps thrown errors to `CommonError`, + preserving observable behavior (the success path is byte-for-byte the same; failures keep the + `Failed to update business ID="…": …` format). + + - **D2 — `batchUpdateBusinesses` mutation**: + + ```graphql + input BatchUpdateBusinessInput { + country: CountryCode + city: String + zipCode: String + sortCode: Int + taxCategory: UUID + irsCode: Int + pcn874RecordType: Pcn874RecordType + suggestions: SuggestionsInput + } + extend type Mutation { + batchUpdateBusinesses(businessIds: [UUID!]!, fields: BatchUpdateBusinessInput!): [Business!]! + @requiresAuth + @requiresAnyRole(roles: ["business_owner", "accountant"]) + } + ``` + + The input is the subset of fields safe to apply to many businesses at once (locality, + categorization, suggestions). The resolver resolves the owner from the admin context and applies + `updateSingleBusiness` to each id, returning the updated businesses; a failure on any id rejects + the whole mutation. `BatchUpdateBusinessInput` is a strict structural subset of + `UpdateBusinessInput`, so it is passed straight to the shared helper. + +- [#3773](https://github.com/Urigo/accounter-fullstack/pull/3773) + [`2f1e974`](https://github.com/Urigo/accounter-fullstack/commit/2f1e9746533d297cac8bd4d80c668c2c9d9fe823) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **VAT extraction**: adds + `issuerVatNumber` / `recipientVatNumber` to the Claude extraction schema so VAT/registration + numbers are pulled from the document in the same LLM call (near-zero extra cost). + - **Server-side matching**: new pure helper `business-matcher.helper.ts` resolves extracted + names/VAT numbers to business UUIDs in three priority tiers: (1) VAT exact match, (2) + name/Hebrew-name substring, (3) `suggestion_data.phrases` sorted by priority. + - **LLM fallback**: for financial document types (INVOICE, RECEIPT, INVOICE_RECEIPT, + CREDIT_INVOICE, PROFORMA) where one or both sides remain unmatched after server-side matching, a + second LLM call reuses the existing conversation context — no file re-send — and asks Claude to + pick the closest business from the full businesses list. + - **UUID-based side resolution**: `getDocumentFromFile` now resolves `isOwnerIssuer` and + `counterpartyId` from the UUID matches, replacing the previous hardcoded `"the guild"` text + check. + - **Graceful fallback**: `fetchBusinessesForMatching` wraps the `BusinessesProvider` call in + try/catch, so email-ingestion paths (gateway auth, no tenant context) continue to work + unchanged. + +- [#3847](https://github.com/Urigo/accounter-fullstack/pull/3847) + [`3109f03`](https://github.com/Urigo/accounter-fullstack/commit/3109f03cb36df30f01ec76d2a7016e833d743fb5) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - Replace + `new URL('.', import.meta.url).pathname` with `fileURLToPath(new URL('.', import.meta.url))` + everywhere it's used to resolve `__dirname` in ESM. + - `.pathname` breaks on Windows (prepends an extra leading slash before the drive letter, e.g. + `/C:/...`) and doesn't decode URL-encoded characters (e.g. `%20` for spaces). `fileURLToPath` + from the built-in `url` module is the standard, cross-platform way to do this. + - Applied across all 34 GraphQL server modules' `index.ts` files, the root and server + `vitest.config.ts`, and the `graphql-module` skill's scaffold template (so newly generated + modules follow the same convention). + +- [#3775](https://github.com/Urigo/accounter-fullstack/pull/3775) + [`7e07190`](https://github.com/Urigo/accounter-fullstack/commit/7e07190447f277b1b744f1d83d19d0a78c8007da) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - automated business matching for extracted + document data using local heuristics (VAT, name, and phrase matching) and an LLM fallback + +- [#3903](https://github.com/Urigo/accounter-fullstack/pull/3903) + [`fda1331`](https://github.com/Urigo/accounter-fullstack/commit/fda13312351a0edce6b531bbf52fa601d5c4ccc0) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Refactored Merge Logic**: Extracted the + complex merge planning logic for charges by transaction reference into a dedicated helper + function, improving maintainability and testability. + - **Added Dry Run Support**: Introduced a `dryRun` parameter to the + `mergeChargesByTransactionReference` mutation, allowing users to preview merge plans before + execution. + - **Enhanced Transaction Data**: Updated the SQL query to include `origin_user_description` by + joining additional transaction tables, providing more context for matching logic. + - **Comprehensive Test Suite**: Added a new test file covering various scenarios, including + recurring payments, foreign securities, and fee associations, to ensure robust merge planning. + +- [#3914](https://github.com/Urigo/accounter-fullstack/pull/3914) + [`35a6c4d`](https://github.com/Urigo/accounter-fullstack/commit/35a6c4de58fbaea67d466b53403c232270328557) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Schema updates**: Added `sortCode: Int` + field to the `DynamicReportNodeData` GraphQL type and Zod validation schema + - **GraphQL query**: Updated the dynamic report query to fetch the `sortCode` field from template + data + - **Tests**: Added comprehensive test coverage for parsing and validating sort-code-branch nodes + with sortCode fields, plus a test verifying sortCode is read from template data (not derived + from UUID IDs) + +- [#3880](https://github.com/Urigo/accounter-fullstack/pull/3880) + [`02362ec`](https://github.com/Urigo/accounter-fullstack/commit/02362ecad8f161285d98a238fbd4fef374cebfd3) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - * **VAT Suggestion Logic**: Implemented a + new suggestion resolver that identifies missing VAT charge descriptions by comparing transaction + amounts against monthly VAT reports. + - **Ledger Validation**: Added validation logic to the ledger generation process to ensure monthly + VAT charges have valid descriptions and that the VAT amount matches the transaction sum. + - **Helper Utilities**: Introduced helper functions to calculate monthly VAT totals and verify + them against transaction amounts within a defined tolerance. + +- [#3837](https://github.com/Urigo/accounter-fullstack/pull/3837) + [`465eefe`](https://github.com/Urigo/accounter-fullstack/commit/465eefe4062076ecdf9f0a447637ddc797039572) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - **Wildcard business-recognition emails**: + `suggestion_data.emails` now accepts wildcard patterns (e.g. `*@cloudflare.com`) alongside + concrete addresses, so suppliers that send invoices from a unique address per invoice (such as + `qr45uf@cloudflare.com`) can be recognized by a single entry. + + - The suggestion-data schema validates wildcard patterns (`*` allowed anywhere in an email-shaped + entry) while still rejecting over-broad values like a bare `*`. + - Both recognition lookups (`BusinessesProvider.getBusinessByEmail` and the email-ingestion + control provider) translate `*` to a `LIKE` wildcard in SQL, escaping `_`, `%` and `\` so + literal entries keep matching exactly. Matching stays case-insensitive. + - New `email-pattern.helper.ts` is the source of truth for the pattern shape and provides an + in-process matcher used by tests. + +- [#3793](https://github.com/Urigo/accounter-fullstack/pull/3793) + [`0ffbebd`](https://github.com/Urigo/accounter-fullstack/commit/0ffbebde245e8d1c12c76202bdaf1d889e0b4b40) + Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **sort-codes.provider.ts**: Modified + `updateSortCode` to retrieve the verified admin context and pass the `ownerId` to the query via + `reassureOwnerIdExists` helper + - **sort-codes.provider.test.ts**: Added comprehensive test coverage for both `updateSortCode` and + `addSortCode` methods, including: + - Regression test verifying `owner_id` is included in update query values + - Test confirming all parameters (key, name, defaultIrsCode, ownerId) are forwarded correctly + - Test verifying cache is cleared after updates + - Test for `addSortCode` ensuring `owner_id` is injected into insert queries +- Updated dependencies + [[`d382eb2`](https://github.com/Urigo/accounter-fullstack/commit/d382eb20cf27b76ef80d235080bead1ba66b1e77), + [`d382eb2`](https://github.com/Urigo/accounter-fullstack/commit/d382eb20cf27b76ef80d235080bead1ba66b1e77)]: + - @accounter/shaam-uniform-format-generator@0.2.7 + - @accounter/shaam6111-generator@0.1.9 + ## 0.1.0 ### Minor Changes diff --git a/packages/server/package.json b/packages/server/package.json index aa7f4649e1..ccf901cf10 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/server", - "version": "0.1.0", + "version": "0.2.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 5ac560c9ac..26920ee86c 100644 --- a/packages/shaam-uniform-format-generator/CHANGELOG.md +++ b/packages/shaam-uniform-format-generator/CHANGELOG.md @@ -1,5 +1,15 @@ # @accounter/shaam-uniform-format-generator +## 0.2.7 + +### Patch Changes + +- [#3846](https://github.com/Urigo/accounter-fullstack/pull/3846) + [`d382eb2`](https://github.com/Urigo/accounter-fullstack/commit/d382eb20cf27b76ef80d235080bead1ba66b1e77) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) + (from `0.7.2`, in `dependencies`) + ## 0.2.6 ### Patch Changes diff --git a/packages/shaam-uniform-format-generator/package.json b/packages/shaam-uniform-format-generator/package.json index 1e7caab9eb..e040f2a77f 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.6", + "version": "0.2.7", "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 62889cd586..0e273c58c4 100644 --- a/packages/shaam6111-generator/CHANGELOG.md +++ b/packages/shaam6111-generator/CHANGELOG.md @@ -1,5 +1,15 @@ # @accounter/shaam6111-generator +## 0.1.9 + +### Patch Changes + +- [#3846](https://github.com/Urigo/accounter-fullstack/pull/3846) + [`d382eb2`](https://github.com/Urigo/accounter-fullstack/commit/d382eb20cf27b76ef80d235080bead1ba66b1e77) + Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: + - Updated dependency [`iconv-lite@0.7.3` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.3) + (from `0.7.2`, in `dependencies`) + ## 0.1.8 ### Patch Changes diff --git a/packages/shaam6111-generator/package.json b/packages/shaam6111-generator/package.json index 01d6f191d7..b39772559c 100644 --- a/packages/shaam6111-generator/package.json +++ b/packages/shaam6111-generator/package.json @@ -1,6 +1,6 @@ { "name": "@accounter/shaam6111-generator", - "version": "0.1.8", + "version": "0.1.9", "type": "module", "description": "Fully typed application that generates, parses, and validates SHAAM 6111 tax reports.", "repository": {