# F-138 — Documentation (API contract) ## Resumen del cambio de comportamiento **No hay nuevas rutas ni parámetros públicos.** F-138 corrige una brecha de integridad de datos: al crear una variante de producto, **ahora se inserta inmediatamente una fila en `pricing_variant_prices` con valores por defecto** (`net_unit_amount_cents=0`, `vat_rate='general'`, `currency='EUR'` por defecto de DDL). ## Impacto en la API - `POST /products` → autovariante `SKU-MV-{id}`: la variante ya creada pasa a tener fila de precio (antes 404 hasta asociar precio). - `GET /products/:id/variants` (lazy, admin): si crea la variante default, también se sembrará su precio. - `POST /products/:id/variants`: la variante creada pasa a tener fila de precio. - `GET /pricing/variants/:variantId`: deja de devolver 404 inmediatamente después de crear una variante (antes devolvía 404 hasta que un admin asociara un precio). ## Idempotencia El sembrado usa `INSERT ... ON CONFLICT (variant_id) DO NOTHING`, por lo que es re-sembrable sin efecto ni errores (AC2). Mantiene la invariante: **toda variante creada tiene al menos una fila de precio**. ## Best-effort El sembrado es best-effort dentro de `CreateProductVariant.execute`: si falla (p.ej. error transitorio de BD), la creación de la variante primaria **no** se revierte ni falla. El `variant_id` es UNIQUE/PK por definición de la tabla, por lo que el seed no introduce duplicados. ## Seguridad - SQL parameterizado (`$1` con el UUID de la variante). - Valores por defecto son constantes de código, no input de usuario. - No hay nueva ruta ni query parameter.