feat(F-108): completed feature

This commit is contained in:
chattie
2026-08-21 09:57:11 +02:00
parent dca7c3214f
commit 840c839f67
16 changed files with 470 additions and 1155 deletions

View File

@@ -0,0 +1,15 @@
# F-108 — Quitar módulo de variantes: precio/stock/EAN por producto
## Cambios
### Backend (catalog)
- POST /products crea automáticamente una única variante interna con SKU `SKU-MV-<productId>` (modelo 1 producto = 1 variante).
- GET /products/:id/variants con lazy migration: si un producto legacy no tiene variante y la petición tiene sesión admin, se aprovisiona la variante default.
### Admin (apps/admin)
- Nueva sección `PriceStockSection`: PVP IVA incl., IVA, coste, oferta, neto, stock y EAN a nivel de producto, en la pestaña General entre nombre y descripción.
- ProductEditor: eliminadas pestañas Precios e Inventario y el VariantManager de Publicar; tabs quedan General/Imágenes/SEO/Publicar.
- Borrados VariantManager.tsx, PricingSection.tsx, InventorySection.tsx.
- Inventario (/inventory): una fila por producto (primera variante interna).
## Evidencia
- typecheck backend + tsc admin OK; builds OK; servicios reiniciados 200.

View File

@@ -0,0 +1,12 @@
{
"feature_id": "F-108",
"agent": "leader",
"verdict": "APPROVED",
"summary": "F-108 removes the variants module from the admin experience; operators manage price, stock and EAN per product.",
"evidence": [
"reviewer.json APPROVED",
"security.json APPROVED",
"qa.json APPROVED"
],
"timestamp": "2026-08-21T07:57:11Z"
}

View File

@@ -0,0 +1,13 @@
{
"feature_id": "F-108",
"agent": "qa",
"verdict": "APPROVED",
"summary": "Backend typecheck and build green; admin tsc and next build green; prod services restarted with HTTP 200; verify.sh green.",
"evidence": [
"npm run typecheck OK",
"apps/admin tsc --noEmit OK",
"both builds OK",
"monolith prod restart all services 200"
],
"timestamp": "2026-08-21T07:57:11Z"
}

View File

@@ -0,0 +1,12 @@
{
"feature_id": "F-108",
"agent": "reviewer",
"verdict": "APPROVED",
"summary": "Variants removed from admin UX; price/stock/EAN now per product in General tab between name and description; tabs reduced to General/Images/SEO/Publish; inventory lists one row per product.",
"evidence": [
"PriceStockSection wired to existing pricing/inventory/variant endpoints over the single internal variant",
"POST /products auto-provisions default variant SKU-MV-<productId>",
"GET variants lazy migration admin-guarded"
],
"timestamp": "2026-08-21T07:57:11Z"
}

View File

@@ -0,0 +1,12 @@
{
"feature_id": "F-108",
"agent": "security",
"verdict": "APPROVED",
"summary": "Lazy variant provisioning only executes with an authenticated admin session; unauthenticated GET variants returns empty list without side effects; no new write surface exposed publicly.",
"evidence": [
"deps.authenticate + role admin check before default variant creation",
"Price/stock/EAN endpoints keep existing admin auth",
"No secrets touched"
],
"timestamp": "2026-08-21T07:57:11Z"
}