# F-081 — Architect: Inventory PRECIO NETO wrong format and no save ## Root cause `InventorySection.tsx` (the inventory tab inside the product editor) initialises `priceValue` with `String(price.netUnitAmountCents)`. The input is `type="number"` so it shows a cents value (`1000` for €10.00), and `savePrice` reads it back with `parseInt(r.priceValue, 10)` which it sends as cents. Two consequences: 1. The visible number (1000) does not look like a price — operators either type "10" thinking euros and end up saving 10 cents, or paste euros and corrupt the price. 2. The OK button *does* exist and *does* call PATCH /variants/:id/set-price, but the persisted value is wrong by ~100x. The Prices tab (PricingSection.tsx) already does this right with `centsToEur` and `eurToCents` helpers — same component pattern should be reused here. ## Design Inventory-only fix in `InventorySection.tsx`: 1. Add two local helpers (mirroring PricingSection): ```ts const centsToEur = (cents: number) => (cents / 100).toFixed(2); const eurToCents = (input: string) => { if (!input) return 0; const v = parseFloat(String(input).replace(',', '.')); return isNaN(v) ? 0 : Math.round(v * 100); }; ``` 2. Initialise `priceValue` from `centsToEur(price.netUnitAmountCents)`. 3. Display the read-only cell with `formatCents` (already exists) — no change. 4. Edit cell: switch `` to `` so comma/dot are accepted and digits can be deleted freely (same UX as PricingSection). 5. `savePrice`: parse with `eurToCents(r.priceValue)` → call existing `pricingApi.setVariantPrice(variantId, cents, r.vatRate)` (no contract change). 6. `cancelEditPrice`: restore from `r.price.netUnitAmountCents` using `centsToEur`. 7. On save success, refresh `priceValue` from the cents returned by the API so the cell shows exactly what was persisted. The standalone `/inventory` page is **not** affected — it doesn't render Precio Neto at all (out of F-081 scope; addressed in F-082 for the InventorySection row when needed). ## Risk Low. Behaviour-equivalent on the wire: cents go to the same endpoint. Format-only change in the cell. ## Acceptance mapping - "Inventory PRECIO NETO accepts ',' and '.' as decimal separator" → `type="text"` + `eurToCents`. - "Operator can freely type, delete digits and decimal separator" → text input + state-driven value. - "Editing triggers PATCH /variants/:id" → existing `savePrice` flow. - "On success the new value is persisted and shown back" → `setRows` updates `price.netUnitAmountCents` and `priceValue` to the API-returned cents. - "On error inline error is shown and old value is restored" → existing `saveMsg` + `cancelEditPrice` pattern. - "Format identical to Prices tab Neto (sin IVA)" → uses `centsToEur` and `eurToCents` mirroring PricingSection. - "verify.sh is green" → typecheck + lint clean.