feat(orders): CSV-import admin-yta — första riktiga ImportWizard-värden (C8) #145

Merged
admin merged 1 commits from feat/c8-import-wizard-20260930 into main 2026-09-30 13:41:31 +00:00
Owner

C8 IMPORTWIZARD-HOST — 0pt

Värd: 0pt — orders har CSV-export sedan våg 3.4 → symmetrisk CSV-import är det naturligaste; befintlig admin-yta + befintlig orderlogik = billigast äkta behov.

Nya ytor

  • POST /api/orders/import — mode validate | dry_run | execute; server-parsad RFC4180 (ingen eval), server-omvalidering via @siax/contracts-kerneln (validateRows) + hostregler; exekvering via befintlig createOrder (tenant-guardad via requireOrderOwner, per-rad-atomsäk, radtak 500 → 413, okänd header → 400, ingen principal → 401).
  • /admin/import — renderar @siax/ui ImportWizard (0.14.0) över @siax/import-export runtime-store (0.2.0). Hosten äger alla steg-callbacks och allt server-I/O.

Beviskedja
import → validation (kernel + host) → progress (wizard executing-steg) → partial/error (per-rad rapport row/field/code; OK-rader importeras) → resulting data (order_ids) → audit (AUD0 via createAud0Client, durable outbox; emission-fel loggas, blockerar ej) → reload-persistens (efter execute läses /api/orders om och nya rader listas på sidan) → browser E2E (efter merge/deploy).

Ärliga gap

  • Batch-importen är per-rad-atomsäk, inte en gemensam DB-transaktion (medvetet: en felrad får inte rulla tillbaka OK-rader).
  • AUD0-emission är fire-and-forget med loggning vid fel (outbox-mönstret äger leveransen).
  • ui 0.14.0 deklarerar @siax/contracts 0.11.0 + @siax/import-export 0.2.1 som ännu ej publicerats → pnpm-overrides till 0.10.0/0.2.0 (ImportWizard-API:t finns i båda).

Tester: 12 route-test + 3 SSR-render-test; full svit 1169 gröna; typecheck + lint + build gröna (/admin/import + /api/orders/import i build-output).

## C8 IMPORTWIZARD-HOST — 0pt **Värd:** 0pt — orders har CSV-export sedan våg 3.4 → symmetrisk CSV-import är det naturligaste; befintlig admin-yta + befintlig orderlogik = billigast äkta behov. **Nya ytor** - `POST /api/orders/import` — mode `validate | dry_run | execute`; server-parsad RFC4180 (ingen eval), server-omvalidering via `@siax/contracts`-kerneln (`validateRows`) + hostregler; exekvering via befintlig `createOrder` (tenant-guardad via `requireOrderOwner`, per-rad-atomsäk, radtak 500 → 413, okänd header → 400, ingen principal → 401). - `/admin/import` — renderar `@siax/ui` ImportWizard (0.14.0) över `@siax/import-export` runtime-store (0.2.0). Hosten äger alla steg-callbacks och allt server-I/O. **Beviskedja** import → validation (kernel + host) → progress (wizard executing-steg) → partial/error (per-rad rapport row/field/code; OK-rader importeras) → resulting data (`order_ids`) → audit (AUD0 via `createAud0Client`, durable outbox; emission-fel loggas, blockerar ej) → reload-persistens (efter execute läses `/api/orders` om och nya rader listas på sidan) → browser E2E (efter merge/deploy). **Ärliga gap** - Batch-importen är per-rad-atomsäk, inte en gemensam DB-transaktion (medvetet: en felrad får inte rulla tillbaka OK-rader). - AUD0-emission är fire-and-forget med loggning vid fel (outbox-mönstret äger leveransen). - ui 0.14.0 deklarerar `@siax/contracts 0.11.0` + `@siax/import-export 0.2.1` som ännu ej publicerats → pnpm-overrides till 0.10.0/0.2.0 (ImportWizard-API:t finns i båda). **Tester:** 12 route-test + 3 SSR-render-test; full svit 1169 gröna; typecheck + lint + build gröna (`/admin/import` + `/api/orders/import` i build-output).
admin added 1 commit 2026-09-30 13:36:49 +00:00
feat(orders): CSV-import admin-yta — första riktiga ImportWizard-värden (C8)
CI (SIAX Cloud) / integration (push) Skipped
CI (SIAX Cloud) / sonar (push) Skipped
CI (SIAX Cloud) / security (push) Successful in 22s
Security Scan (SIAX Cloud) / security (push) Successful in 22s
masterplan-lock / check (push) Successful in 31s
CI (SIAX Cloud) / sonar (pull_request) Skipped
masterplan-lock / check (pull_request) Successful in 6s
CI (SIAX Cloud) / security (pull_request) Successful in 18s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 20s
CI (SIAX Cloud) / quality (push) Successful in 1m1s
CI (SIAX Cloud) / integration (pull_request) Successful in 30s
CI (SIAX Cloud) / quality (pull_request) Successful in 1m56s
c1648c04a7
Symmetrisk mot våg 3.4 CSV-export: POST /api/orders/import (validate |
dry_run | execute) + /admin/import som renderar @siax/ui ImportWizard
(0.14.0) över @siax/import-export runtime (0.2.0).

- Servern är enda auktoritet: RFC4180-parse (ingen eval), omvalidering
  via frysta @siax/contracts-kerneln (validateRows) + hostregler,
  exekvering genom BEFINTLIG orderlogik (createOrder, tenant-guardad).
- Fail-closed: 401 utan principal, 400 okänd header, 413 vid radtak
  (500), per-rad-atomsäkra inserts — felrad kan aldrig skada OK-rader.
- Partiell import: OK-rader skapas, felrader rapporteras per rad
  (row/field/code). AUD0-audit via 0pts enda producer-boundary
  (durable outbox under DATABASE_URL).
- Reload-persistens: efter execute läses /api/orders om och de nya
  raderna listas på sidan.
- Tester: 12 route-test (happy, partial, auth fail-closed, tak,
  no-write validate, header, quoting, rad-fel mitt i batch) + 3
  SSR-render-test av ImportWizard över runtime-storen.
- Deps: @siax/ui ^0.14.0, @siax/charts ^0.5.0, @siax/import-export
  ^0.2.0; pnpm-overrides till contracts 0.10.0 / import-export 0.2.0
  (ui 0.14.0 deklarerar 0.11.0/0.2.1 som ännu ej publicerats).
CODEOWNERS rules requested review from sax3l 2026-09-30 13:36:49 +00:00
admin merged commit a32a64e91d into main 2026-09-30 13:41:31 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/0pt#145