Files
mercadodevida/work/artifacts/F-085/architect.md
2026-08-20 06:10:48 +02:00

26 lines
1.6 KiB
Markdown

# F-085 — Architect: /tax-rates TIPO column is not editable
## Root cause
`/admin/tax-rates` PATCH route (`project/src/modules/pricing/api/pricing.routes.ts`) only accepts `{ name, ratePercent, active }`; `appliesTo` is not in the body schema and not written to the DB. The admin page renders the column as plain `<td>{r.appliesTo}</td>`.
## Design
1. Extend the PATCH body Zod schema with `appliesTo: z.enum(['general','reduced','super-reduced']).optional()`. Server validates the value against the enum (no DB constraint, but rejection is fast and the error message is clear).
2. Add a new UPDATE branch for `applies_to` mirroring the existing ones.
3. In the admin page, the TIPO cell is now click-to-edit:
- Click `<button>` → switches to a `<select autoFocus>` with the three valid values.
- On `change`, if the new value differs, fire PATCH immediately and close edit mode.
- On `blur`, if value still equals the original, just close; if different and `change` already fired, no-op.
4. Success path updates the row in-place (`rates.map(...)`).
## Risk
Low. Server-side enum validation; no SQL injection; no new deps.
## Acceptance mapping
- "TIPO cell enters edit mode on click and shows a select with allowed types" → button → select.
- "Selecting a new type and confirming triggers PATCH /tax-rates/:id" → onChange path.
- "Invalid types are rejected client and server side" → Zod enum on server; select restricts client.
- "Successful change is reflected without a full page reload" → in-place state update.
- "verify.sh is green" → typecheck + lint clean.