KOSA Sports AB

Arkitekturkarta — AI-system

73 Edge Functions   117 Tabeller   6 Externa system   Supabase: oyzrcjrvppzhbuethicc
🗺️ Översikt
⚡ Edge Functions
🗄️ Tabeller
🔒 Säkerhet
3 kritiska säkerhetsfynd åtgärdade (session 323): fortnox_tokens har explicit RLS deny-policy, sql-import kräver service_role JWT, claude-proxy kräver authenticated JWT. Se Säkerhetspanelen.
73
Edge Functions
129
Tabeller
62
Funktioner utan JWT
129
Tabeller med RLS
0
Tabeller utan RLS
523k
Fakturarader

Dataflöde

Externa system
🏪 Lagerkoll
Store 985002
📊 Fortnox
Ekonomi & faktura
🛒 WooCommerce
kosa.se
📋 Monday.com
Board 1174999001
🤖 Claude API
claude-sonnet-4
📧 Outlook/Azure
⏳ Väntar admin
💳 PayPal
Betalningsavstämning
Supabase Edge Functions (72 st) — mellanskikt för alla API-anrop
Lagerkoll-synk
14 funktioner
Fortnox-synk & API
20 funktioner
WooCommerce
6 funktioner
B24 / PRICAT
7 funktioner
KOSA AI & Övrigt
18 funktioner
Supabase — databas (PostgreSQL, eu-central-1)
lagerkoll_*
13 tabeller, RLS ✅
fortnox_*
15 tabeller, RLS ⚠️
woocommerce_* / wc_*
9 tabeller, RLS ⚠️
sublim_* / prognos_*
12 tabeller, RLS ⚠️
budget / crm / övrigt
39 tabeller, mix
Frontend-verktyg (statiska HTML-filer, öppnas i webbläsaren)
KOSA Hubb
kosa-hubb.html
Morgonbrief
morgonbriefing.html
Prognosverktyget
prognosverktyg.html
RR + BR
resultatrapport.html
Budget
budget.html
Kundstatistik
kundstatistik.html
Artikelstatistik
artikelstatistik.html
Masterartikel
produktinfo.html
Produktgeneratorn
produktgenerator.html
Sublimering
sublimering.html
CRM
crm.html

Vilket system äger vad

DatafältPrimär källaSupabase-tabellNotering
ArtikelnummerFortnoxfortnox_artiklar_v2Master-ID
EAN-koderLagerkolllagerkoll_articles463 artiklar saknar EAN
LagersaldoLagerkolllagerkoll_articlesSynkas via lagerkoll-sync
UtprisLagerkolllagerkoll_prices146 priskonflikter vs WC
Fakturor / försäljningFortnoxfortnox_faktura_rader523 556 rader — primärkälla
Bokföring (konton 3xxx)Fortnox SIEfortnox_verifikat_posterKör sync_sie_local.py lokalt
BudgetSupabasebudget_entriesRedigeras i budget.html
PrognosSupabaseprognos_entriesRedigeras i prognosverktyget.html
Sublimerings-ordrarMonday.comsublim_ordersBoard 1174999001
ProduktbeskrivningarWooCommercewoocommerce_productsMatchningsbug — 0 beskr. synkas
Filtrera:
lagerkoll-sync LK
Huvud-synk orchestrator — startar alla LK-synk-funktioner
Ingen JWTv16
lagerkoll-sync-articles LK
Synkar artiklar → lagerkoll_articles (2 680 aktiva)
Ingen JWTv4
lagerkoll-sync-customers LK
Synkar kunder → lagerkoll_customers (12 745 rader)
Ingen JWTv3
lagerkoll-sync-suppliers LK
Synkar leverantörer → lagerkoll_suppliers (787 st)
Ingen JWTv3
lagerkoll-sync-orders LK
Synkar kundordrar → lagerkoll_customer_orders
Ingen JWTv3
lagerkoll-sync-order-rows LK
Synkar orderrader → lagerkoll_order_rows (17 310 rader)
Ingen JWTv3
lagerkoll-sync-currencies-categories LK
Valutor (33 st) och kategorier (99 st)
Ingen JWTv5
lagerkoll-sync-purchase-orders LK
Inköpsordrar → lagerkoll_purchase_orders (363 st)
Ingen JWTv3
lagerkoll-sync-article-history LK
Artikelhistorik → lagerkoll_article_history (141 438 rader)
Ingen JWTv4
lagerkoll-sync-prices LK
Prislistor → lagerkoll_prices (32 002 prisposter)
Ingen JWTv3
lagerkoll-sync-kartong LK
Synkar kartonglagret (Store 985414) → lagerkoll_kartong_articles (2 188 artiklar med hyllplats). Artikelnamn = KOSA art.nr = join-nyckel mot lagerkoll_articles. Används i Saras plockvy för 📦-chips.
Ingen JWTv1
lagerkoll-create-order LK
Skapar ny order i Lagerkoll (skrivoperation)
Ingen JWTv2
lagerkoll-create-article LK
Skapar ny artikel i Lagerkoll (skrivoperation)
Ingen JWTv1
lagerkoll-proxy LK
Proxy för Lagerkoll API — offers-list/get/create/by-article, sync-offers-summary, lk-article-get, lk-customer-get/update, lk-update-category, lk-sync-customer-pricelists, sync-articles-by-query (live-synk via direkt-uppslag + systerprefix-suffix-låning som fångar artiklar Lagerkoll exkluderar från listningen, t.ex. 70-* serien)
Ingen JWTv32
lagerkoll-probe-quotes LK
Undersöker och testar offert-API:et i Lagerkoll
Ingen JWTv5
lagerkoll-order-api LK
Kundorder-verktygets skriv-API — actions: get_full, set_state (ready_for_packing/invoice/cancel), update_comment, list_log, create_order, get_customer, list_active (hämtar state 0-45 live + upserterar Supabase — plockvy-synk). Hård MAKULERA-spärr på cancel, lokal JWT-parsning, audit-logg till lagerkoll_order_log, order_id nullable
Manuell authv6
fortnox-token FX
Centraliserad token-manager — advisory lock (ID 73926401) förhindrar race conditions, alla 15 Fortnox-funktioner hämtar token härifrån
Ingen JWTv1
fortnox-oauth FX
Startar OAuth-flödet mot Fortnox — omdirigerar till Fortnox login
Ingen JWTv4
fortnox-callback FX
OAuth callback — tar emot auth-code och sparar tokens i fortnox_tokens
Ingen JWTv4
fortnox-sync FX
Huvud-synk orchestrator för Fortnox — kör alla FX-synkare
Ingen JWTv7
fortnox-sync-artiklar FX
Synkar artiklar → fortnox_artiklar_v2 (14 716 rader)
Ingen JWTv2
fortnox-sync-faktura-rader FX
Synkar fakturarader → fortnox_faktura_rader (523 556 rader — primärkälla för all försäljning)
Ingen JWTv3
fortnox-sync-faktura-rader-progress FX
Hanterar progress för fakturarader-synk
Ingen JWTv3
fortnox-sync-kunder FX
Synkar kunder → fortnox_kunder (13 750 st)
Ingen JWTv3
fortnox-sync-leverantorer FX
Synkar leverantörer → fortnox_leverantorer (785 st)
Ingen JWTv2
fortnox-sync-ordrar FX
Synkar ordrar → fortnox_ordrar (20 945 st)
Ingen JWTv2
fortnox-sync-bokforing FX
Verifikat via voucher-API — avvecklat för nightly, ersatt av SIE4. Kvar för manuell lastmodified-sync vid behov
Ingen JWTv16
fortnox-sync-verifikat FX
Synkar enskilda verifikat
Ingen JWTv2
fortnox-sync-sie FX
SIE4-stream för hela räkenskapsår — sanningskälla för RR+BR + nightly cron. Streamad CP437-parser, konto 1000–8999 (inkl. 8999 Årets resultat), 500 rader/batch, count=3 för djup synk. v25: parsar nu både #VER-text → verifikat_text och #TRANS-transtext per rad → transaktionsinfo (driver RR+BR drill-down med order/kund/leverantör-koppling)
Ingen JWTv25
fortnox-integrity-check FX
Nightly watchdog 22:30 — snapshot-jämför rr_summary() per månad, flaggar drift/stale → fortnox_integrity_log
Ingen JWTv2
fortnox-sync-artikelstatistik FX
Synkar artikelstatistik från Fortnox
Ingen JWTv2
fortnox-artikelstatistik-import FX
Importerar artikelstatistik till Supabase
Ingen JWTv1
fortnox-sync-kund-land FX
Synkar kundland-data från Fortnox
Ingen JWTv1
fortnox-sales-api FX
Huvud-försäljnings-API — v8 med cache (30 min TTL)
Ingen JWTv8
fortnox-resultatrapport FX
Resultatrapport-data — actions summary, accounts, transactions. v21: drill-down med universell order/faktura/leverantör-koppling via drill_account_transactions RPC (📦 Lagerkoll-kundorder för 4990/1410, fakturanr+kund för 1510/30xx, fakturanr+leverantör+🛒 Lagerkoll-inköpsorder för 2440/40xx)
Ingen JWTv21
fortnox-customer-detail FX
Kunddetaljer inkl. fakturor — används i CRM och Kundstatistik
Ingen JWTv6
fortnox-kund-stats FX
Kundstatistik per VT — levererar dynamisk CEXT_MAP med namnkollisionshantering
Ingen JWTv11
fortnox-api-explorer FX
Debug-verktyg för att utforska Fortnox API direkt
Ingen JWTv1
fortnox-likviditet FX
Likviditetsprognos-API — cashflow, drill, budget, balances från likviditet_monthly + fortnox_account_balances
Ingen JWTv6
fortnox-likviditet-prognos FX
Kassaflödesprognos — receivables forecast, bank IB + faktiskt saldo, utfall (inkl. moms/skatt 2xxx), params, purchase_orders (PO med delad betalning), save_po_override
Ingen JWTv6
fortnox-sync-balances FX
Synkar IB/UB per konto per räkenskapsår → fortnox_account_balances via Fortnox Accounts API. Körs manuellt vid ny period.
Ingen JWTv2
woocommerce-api WC
Huvud-API för WooCommerce-operationer — läser produkter och varianter
Ingen JWTv15
wc-sync WC
Synkar produkter WooCommerce → woocommerce_products
Ingen JWTv1
wc-sync-runner WC
Kör WC-synk asynkront — hanterar lång synk-process
Ingen JWTv2
wc-push WC ⚠️ 500-fel
Pushar produktdata till live-sajten kosa.se — update_variation ger 500-fel. Kräver wcConfirm()-dialog. 🔒 JWT-skyddad — kräver inloggad KOSA-användare (role: authenticated).
JWT ✓v6
wc-csv-import WC
CSV-import av produktdata till WooCommerce
Ingen JWTv1
paypal-reconciliation WC
PayPal betalningsavstämning — settlement-baserad: matchar PayPal-transaktioner mot Fortnox-fakturor via strikt WC-ordernr-validering, picks belopps-närmast vid flera kandidater, registrerar betalningar + auto-bokför. Returbron: WC refund → kreditfaktura i Fortnox (hel/del) + auto-betalning; hämtar exakta returartiklar via GET /orders/{id}/refunds (SKU + produktnamn + antal). T11xx-rader synkas som refund_pending_credit. Överbetalning: PayPal > faktura → status overpayment + book_overpayment bokför diff på konto 3990 (kundvinst). Actions: sync_settlements, match_all, register_payments, debug_match, manual_pick_invoice, delete_payment, list_missing_order_id, get_invoices_by_order, create_credit_invoice, mark_refund_credited, book_overpayment. Säkerhet: settlement-krav, faktura-verifiering, dubbelbetalningsskydd, amount>0, delete kräver bekräftelse + audit trail, created_by-loggning, manual_pick blockerar makulerad/kredit/paid.
Ingen JWTv28
klarna-reconciliation WC
Kustom/Klarna betalningsavstämning — api.kustom.co Settlements API, Basic Auth. Belopp i öre → SEK. Matchar mot Fortnox via merchant_reference1 (WC-ordernummer). pickBestInvoice filtrerar negativt Total och använder Math.abs(grossAmount) för RETURN → hittar originalfakturan (+N), ej kreditfakturan (-N). Settlement räknas som reconciled när alla rader är paid/refund_credited/overpayment. Actions: sync_payouts, sync_all_payouts, list_payouts, list_transactions, match_all, register_payments, book_overpayment, mark_refund_credited. Avräkningskonto 1582.
Ingen JWTv12
mirakl-reconciliation WC
Stadium/Mirakl betalningsavstämning — Joel laddar upp billing-cycle CSV direkt i UI; auto-synkar WC-ordrar för CSV:ns datumintervall → wc_mirakl_order_map; matchar varje order mot Fortnox-faktura; fallback 1: yourordernumber-sökning; fallback 2: kundnamn + belopp; live progress-lista vid betalningsregistrering (en order per anrop); manuell fakturakoppling för no_invoice-rader (📎 Länka faktura). Sparar varje CSV-import till wc_mirakl_billing_cycles med status (imported/partial/registered). Actions: sync_wc_orders, import_csv, register_payments, list_billing_cycles, manual_link. Avräkningskonto 1584.
Ingen JWTv4
wc-payments-reconciliation WC
WooCommerce Payments (Stripe) betalningsavstämning mot Fortnox — deposits = banköverföringar till SEB. Belopp i öre → SEK (÷100). Order-ID direkt på varje transaktion → trivial matchning. Actions: sync_deposits, list_deposits, list_transactions, match_all, register_payments, book_overpayment. Avräkningskonto 1586. v1 — påbörjad 2026-04-13
Ingen JWTv1
produktgenerator-api B24
Huvud-API för produktgeneratorn — skapar och hanterar produktdata mot B24/PRICAT
Ingen JWTv28
pricat-api B24
PRICAT/B24-hantering — produktdata för leverantörer. Add/Change-toggle (action_override).
Ingen JWTv27
b24-artiklar B24
B24-artikelhantering — validering av PRICAT-fält (EAN, Färg, FEDAS, Kön, Ålder, Indication Color, Sub-Model/modelColor), problemtaggar röd/gul, auto-sync Indication Color från Färg
Ingen JWTv19
fill-b24-namn B24
Fyller in B24-namn på artiklar som saknar det
Ingen JWTv1
prisat-price-sync B24
Prissynk mot PRICAT — uppdaterar priser
Ingen JWTv1
scan-brand B24
Skannar varumärken i artikeldatabasen
Ingen JWTv1
render-design B24
Renderar produktdesign för B24
Ingen JWTv1
claude-proxy AI
Proxy för Claude API-anrop från frontend — håller API-nyckeln säker i Edge Function. Kräver authenticated JWT (role: authenticated).
✅ JWT krävsv4
monday-proxy AI
Proxy för Monday.com GraphQL-anrop och fil-uppladdningar — API-nyckel server-side, CORS-säkrad för file://-ursprung
Ingen JWTv1
prognos-api AI
API för Prognosverktyget — läser/skriver prognos_entries, prognos_comments, prognos_marginaler
Ingen JWTv2
crm-api AI
CRM API — kontakter, notter, relationer, avtal, tasks, aktiviteter, tagg-system, fakturaattribution (club_attributions), bulk-matchning, lk_info, meta. ⚠️ Inkluderar skrivoperationer utan JWT.
Ingen JWTv24
send-morning-report AI
Skickar morgonrapport via Outlook
Ingen JWTv1
outlook-auth AI
Outlook OAuth v5 — Azure app d638f22e. ⏳ Väntar Azure-admin från EgerydsGruppen IT
Ingen JWTv5
sublimering-submit AI
Tar emot sublimerings-formulär och sparar till Supabase
Ingen JWTv1
kosa-intervju AI
Intervjuformulär för AI-analys av teamets behov
Ingen JWTv2
intervju-submit AI
Sparar intervjusvar → ai_intervju (7 svar klara)
Ingen JWTv2
kallkarta AI
Källkarta — hanterar datakällans prioritetsordning (12 rader)
Ingen JWTv2
kallkarta-api AI
API för källkarta
Ingen JWTv1
bugg-api AI 💀 Död kod
⚠️ Ingen produktionskod anropar denna. Feedback-widgeten postar direkt till Monday via monday-proxy. Skriver till tabell kosa_buggar som inte finns. Kan raderas vid nästa städning.
Ingen JWTv1
auth-signup AUTH
Registreringsflöde för nya KOSA-användare
✅ JWT krävsv2
erik-intervju-submit DEV
Engångs-intervjuinlämning — kan tas bort
Ingen JWTv1
lagerkoll-probe-quotes LK
Sondar offerter i Lagerkoll — dev/utredningsverktyg
Ingen JWTv5
save-reply AI
Sparar AI-svar/replies till databasen
Ingen JWTv1
sql-import DEV
Kör godtycklig SQL via POST — Dev-verktyg, kräver nu service_role JWT. Webbläsare får 403.
✅ JWT krävsv2
kosa-import-g000 DEV
Engångs-import — kan tas bort
Ingen JWTv1
kosa-pl-debug DEV
PL-debug — felsökningsverktyg
Ingen JWTv10
kosa-debug-keys DEV
Debug-nyckelkoll — kontrollerar vilka hemligheter som finns
✅ JWT krävsv2
auth-signup DEV
Auth signup — hanterar användarregistrering
✅ JWT krävsv2
cfh-notify CFH
Creative Hub notiser — push (web-push + VAPID) + e-post (Resend); actions: new_item, new_version, custom_push, feedback_given (mailar/pushar Jessica vid feedback från Tove), executor_comment (mailar/pushar Tove när Jessica skriver egen kommentar på ett korrektur); deep link /CFH#item/{id}; accepterar service_role-token
Manuell authv10
cfh-send-push CFH
Admin push-verktyg — skickar push direkt till user_id utan auth (server-side)
Ingen JWTv1
chat-notify CHATT
KOSA Chatt mail-notiser via Resend. Quiet period 2 min, cooldown 45 min per avsändare-mottagare-par, skippar om mottagaren är online, batchar upp till 20 olästa meddelanden per mail
✅ JWT krävsv2
erik-intervju-submit DEV
Separat intervju-submit för Erik
Ingen JWTv1
mitt-kosa-api MK
Mitt KOSA — intern Monday-ersättare; CRUD för tavlor/grupper/kolumner/items/members/kommentarer/notiser + customer_search/customer_profile/customer_articles/refresh_customer_metrics (Säljmappen) + task_pin/unpin; läser inloggad användare via lokal JWT-parsning
✅ JWT krävsv7
tv-prio-api TV
TV-monitor PRIO-flaggning — list_active / create_alert / dismiss_alert. Joel flaggar brådskande order, lagrets TV blir röd via Supabase Realtime tills Daniel klickar HANTERAD. Skrivning via service_role (ingen auth — intern skärm)
Ingen JWTv1
mirakl-connect STADIUM
Stadium Connect (Mirakl) — ersätter Sello.io. Order-flow: fetchOrders → createWcOrderFromMirakl (re-fetchar PII by-id) → auto-accept → PostNord-bokning via instance_id 78 SE / 84 FI → webhook order.updated → push tracking till /tracking + /ship. Katalog: sync_inventory (602 offers, 137 parents), list_inventory, save_title_en, ai_translate_titles (Anthropic API). Skriv-skydd via stadium_sync_config.dry_run + auto_accept_orders. Secrets: MIRAKL_API_KEY, ANTHROPIC_API_KEY
Ingen JWTv0.7.0
RLS på = skyddad    RLS av = publik med anon-key    Totalt 96 tabeller
TabellSystemRLSRaderNotering
3 kritiska fynd åtgärdade (session 323) — 1 varning kvarstår nedan

✅ FIXAT — fortnox_tokens RLS

Tabellen fortnox_tokens har nu RLS aktiverat och en explicit RESTRICTIVE deny-policy för anon och authenticated. Service Role (Edge Functions) kringgår RLS automatiskt och kan fortfarande läsa. Anon-key ger 0 rader.

Åtgärd: ✅ Klar — migration kördes 2026-04-06

✅ FIXAT — sql-import JWT-skyddad

Funktionen sql-import kräver nu verify_jwt: true (Supabase-nivå) och en kod-nivå check att JWT-rollen är service_role. Alla webbläsaranrop får 403. Ingenting i produktionssystemet anropar funktionen.

Åtgärd: ✅ Klar — deployed v2 2026-04-06

🔴 HÖG RISK — Skrivfunktioner utan JWT (anropas från frontend)

Dessa funktioner utför skrivoperationer mot externa system eller kritisk intern data och saknar JWT-skydd. Alla HTML-filer kräver inloggning via auth-guard, men Edge Functions är direkt åtkomliga via URL.

FunktionRiskAnropas från
wc-push✅ JWT-skyddad (v6, 2026-04-10)produktinfo, produktgenerator — skickar user-JWT via getKosaToken()
paypal-reconciliationRegistrerar betalningar i Fortnox + kan radera betalningarbetalningsavstamning ✓ settlement-krav + faktura-verifiering + audit trail
lagerkoll-create-orderSkapar ordrar i Lagerkollsublimering (planerat)
crm-api (skrivlägen)Skriver CRM-data (kontakter, taggar, avtal)crm, kundstatistik
prognos-api (skrivlägen)Skriver prognosdataprognosverktyget
lagerkoll-proxy (lk-update-category)Uppdaterar kategorier i Lagerkollartikelstatistik, produktinfo, crm
fortnox-sync + lagerkoll-sync-*Triggar synk externtkosa-hubb, morgonbriefing
Åtgärd: Sätt verify_jwt: true + role === 'authenticated'-check på ovan. Alla anropande HTML-filer använder redan auth-guard.js — lägg till getKosaToken()-mönstret i varje fetch-anrop. Se instruktioner i CLAUDE.md.

🟡 LÅGRISK — 60 av 64 Edge Functions saknar JWT (läsfunktioner)

Majoriteten av de 60 ej JWT-skyddade funktionerna är läsfunktioner (fortnox-sales-api, fortnox-resultatrapport, fortnox-kund-stats etc.). Dessa exponerar affärsdata för externa som känner till URL:en, men kan inte mutera data. Acceptabel risk på kort sikt — alla HTML-filer kräver inloggning.

Prioritet: Skrivfunktioner (ovan) är prioritet 1. Läsfunktionerna kan JWT-skyddas i nästa fas.

🟡 VARNING — 67 tabeller saknar RLS (uppdaterat 2026-04-06)

Dessa tabeller är tillgängliga direkt via REST-API med anon-key. Ingen HTML-fil anropar tabellerna direkt — all access går via Edge Functions (service_role). Direkt URL-access är dock möjlig.

Hög prioritet (känslig affärsdata):

  • budget_entries (budgetdata)
  • budget_custom_rows
  • prognos_entries
  • prognos_comments
  • prognos_marginaler
  • prognos_fy_keys
  • sublim_customers
  • sublim_orders
  • sublim_order_rows
  • sublim_designs
  • sublim_design_articles
  • sublim_design_variants
  • sublim_design_files
  • sublim_order_comments
  • sublim_order_events
  • sublim_corrections
  • sublim_express_config
  • sublim_media_library
  • sublim_sticky_notes
  • sublim_customer_teams
  • crm_contacts
  • crm_agreements
  • crm_tags
  • crm_customer_tags
  • crm_invoice_attributions
  • crm_kund_meta
  • crm_relations
  • email_interactions
  • prod_dev_projects (11 st)
  • prod_dev_*

Lägre prioritet (läsdata / teknisk):

  • fortnox_kunder
  • fortnox_leverantorer
  • fortnox_fakturor
  • fortnox_faktura_rader (523k rader)
  • fortnox_ordrar
  • fortnox_artiklar_v2
  • fortnox_verifikat_rader
  • fortnox_verifikat
  • fortnox_verifikat_poster
  • fortnox_sync_log
  • fortnox_account_balances
  • fortnox_artikelstatistik
  • fortnox_faktura_rader_progress
  • woocommerce_products
  • woocommerce_variations
  • woocommerce_settings
  • wc_sync_jobs
  • pricat_settings
  • pricat_history
  • b24_model_no_overrides
  • article_errors / barcode_errors
  • artikel_kategorier
  • lager_klassificering
  • konto_plan
  • likviditet_prognos_params
  • project_docs
Prioritering: fortnox_tokens ✅ fixad. Näst: budget_entries + prognos_* + sublim_* + crm_contacts/agreements/tags. Fortnox-tabellerna är läsdata — lägre prioritet om konkurrentrisk accepteras. OBS: Ingen HTML-fil gör direkta REST-anrop mot tabeller — risk begränsad till API-URL-access.

✅ Bra — dessa saker är rätt gjorda

  • Claude API-nyckeln är skyddad bakom claude-proxy Edge Function — exponeras inte i frontend. ✅ claude-proxy kräver nu authenticated JWT (v4)
  • Fortnox OAuth-tokens hanteras via Edge Functions (server-side) — aldrig i frontend-koden
  • Lagerkoll-tabellerna har RLS aktiverat
  • Alla skrivoperationer mot WooCommerce kräver wcConfirm()-dialog
  • Fortnox-data ändras aldrig autonomt — alltid human-in-the-loop
  • wc-push kräver nu JWT (v6, 2026-04-10) — anon och anonyma anrop returnerar 401. 500-felet på update_variation kvarstår som separat WC-problem.

Prioriterad åtgärdslista (uppdaterad 2026-04-06)

#ÅtgärdRiskStatus
1✅ RLS + explicit deny-policy på fortnox_tokensKlarFixad 2026-04-06
2✅ JWT-skydda sql-import (service_role) + claude-proxy (authenticated)KlarFixad 2026-04-06
3JWT-skydda skrivfunktioner: wc-push ✅, lagerkoll-create-order, crm-api, prognos-api, lagerkoll-proxy write-actions, synk-funktionerHög1/6 klar (wc-push v6, 2026-04-10)
4✅ RLS på alla 114 tabeller — 80 med policies (frontend), 34 utan (enbart Edge Functions)KlarFixad 2026-04-08
5JWT-skydda läsfunktioner: fortnox-sales-api, fortnox-resultatrapport, fortnox-kund-stats m.fl.LågLägre prio