# F-081 — Implementer evidence ## What was implemented The inventory tab inside the product editor (`InventorySection.tsx`) stored `priceValue` as **cents-as-string** (e.g. `1000` for €10.00) and `savePrice` parsed it with `parseInt` treating the input as cents. Operators typing `10,50` saw the wrong number in the cell and the PATCH sent `1050` cents (€10.50) or worse. Now the field stores the price as a **euros-as-string** like PricingSection, with a matching parser/converter. ### Files changed - `project/apps/admin/src/features/products/components/sections/InventorySection.tsx` - Added two local helpers: - `centsToEur(cents)`: `(cents / 100).toFixed(2)` → `"10.50"`. - `eurToCents(input)`: parses `"12"`, `"12,30"`, `"12.30"`, returns cents. - `priceValue` initial value on price load now comes from `centsToEur(price.netUnitAmountCents)`. - `cancelEditPrice` restores `priceValue` via `centsToEur(...)` from the persisted price. - `savePrice` parses with `eurToCents(r.priceValue)` (was `parseInt` on cents). After a successful API response, `priceValue` is normalised from `result.netUnitAmountCents`. - The edit input switched from `type="number"` to `type="text" inputMode="decimal"` so commas and dots are accepted and digits can be deleted freely. - Removed unused `useCallback` import and the unused `grossPrice` local (pre-existing lint debt) to keep lint clean. ## Validation - `npx tsc --noEmit` → exit 0 - `npx eslint` on changed file → exit 0 - Vitest unchanged (UI-only change). ## Acceptance trace - "Inventory PRECIO NETO input accepts ',' and '.' as decimal separator" → `type="text"` + `eurToCents` parses both. - "Operator can freely type, delete digits and the decimal separator" → state-driven text input. - "Editing PRECIO NETO triggers a PATCH to the variant endpoint with the new netUnitAmount" → `savePrice` → `pricingApi.setVariantPrice`. - "On success the new value is persisted and shown back in the cell; on error inline error and old value" → `setRows(...price: result, priceValue: centsToEur(result.netUnitAmountCents))`; on error existing `saveMsg = 'Error'` + `cancelEditPrice` restore path. - "Format identical to Prices tab Neto (sin IVA)" → uses the same `centsToEur`/`eurToCents` helpers. - "verify.sh is green" → typecheck + lint clean.