1.11.1
βοΈ Patch 1.11.1 β Penner UI pagination, Otto band enforce, Google Ads invoices, PennerRenner Decider
π Summary
- Penner Management β Articles & Sales use server-side search/sort/filters with 100/page pagination (fixes βsort hides search hitsβ).
- Otto monitor β Harder penner/renner band enforce: sale outside
[min, max] unpauses/reactivates; adapt_price clamps sale/my price into the band first.
- Invoices β Optional Google Ads multi-upload under Manual platform invoices (yellow when empty; included in ZIP when present; does not block Buchhaltung).
- n8n PennerRenner β Decider no longer promotes sold-out Penners to Renner (
stock=0 β false ratio 1 β +2% price hikes). Published on n8n.
- Infra β Higher default memory for n8n + runners (compose).
β¨ Details
Penner Management (omni + frontend)
| Area |
Before |
After |
| Articles |
Client filter on a 200/10k page |
API search, stock_age_bucket, sort_*, skip/limit (β€200) |
| Sales |
Client filter on full payload |
Same pagination + search |
| Stock chips |
Counted from loaded page only |
stock_age_counts from API (search-scoped) |
| Sort chips |
Re-fetched a different page |
Sort only; search still finds the SKU |
Otto Β· sale outside min/max
| Area |
Behavior |
| Pre-monitor |
Reactivate when sale_price < min or > max (non-UVP) |
| Skip override |
Paused + Otto wave history + sale outside band β still monitored/unpaused |
adapt_price |
Clamp sale (and my_price above max) before competition logic |
| Same-run re-pause |
Reactivated SKUs passed into pause_items_if_needed |
Invoices Β· Google Ads
| Platform key |
Required |
Multi-upload |
Portal |
google_ads |
optional |
yes |
Ads billing |
Empty β yellow / optional chip; accounting email still ready without it. Files under invoices/google_ads/{year}/{month}/.
n8n Β· PennerRenner Decider
| Bug |
Fix |
stock=0 + any sales β (sales-stock)/(sales+stock)=1 β renner β +2% waves (e.g. B07H72MDCW on 19.08) |
Keep prior penner/renner when stockβ€0; leave penner only if sales>50 |
Workflow: PennerRenner (published). False 2026-08-19 bumps need a one-off SQL restore from that dayβs pricing_history snapshot (see ops notes).
Infra Β· n8n memory
| Service |
Heap default |
mem_limit default |
| n8n |
12β―GB |
16β―g |
| runners |
24β―GB |
28β―g |
π Notes
- Redeploy service-omni, service-multi-repricer, service-invoice, frontend.
- Recreate n8n / n8n-runner containers if Portainer still overrides old mem env.
- PennerRenner Decider is already published on n8n β no compose redeploy needed for that fix.
- After false Renner day: preview/fix affected SKUs (restore bounds from
pricing_history date 2026-08-19, set article_type=penner, status=update_needed), then re-export channels.
π Docs
π Files
frontend/src/pages/PennerManagement/Tabs/{ArticlesTab,SalesTab}.jsx
frontend/src/pages/PennerManagement/components/PennerTablePagination.jsx
backend/service_omni/app/api/v1/endpoints/penner_management.py
backend/service_omni/app/services/penner_management_service.py
backend/service_multi-repricer/app/services/article_status.py
backend/service_multi-repricer/app/services/otto/otto_service.py
backend/service_multi-repricer/app/api/v1/endpoints/otto_articles.py
backend/service_invoice/app/services/manual_platform_invoices.py
frontend/src/pages/Invoices/Tabs/SubTabs/DownloadSubTab.jsx
docker-compose.yml Β· docker-compose-portainer.yml
- n8n workflow
X4H4XzirBPXWry0W (Decider)
docs/docs/patchnotes/1.11/1.11.1.md β this file