# US-MMD004-001: Registrar Refacciones ## Metadata | Campo | Valor | |-------|-------| | **ID** | US-MMD004-001 | | **Epica** | EPIC-MMD-004 - Inventario | | **Modulo** | inventario | | **Prioridad** | P0 | | **Story Points** | 5 | | **Sprint** | Sprint 2 | | **Estado** | Backlog | --- ## Historia de Usuario **Como** almacenista, **quiero** registrar refacciones con codigo, descripcion y ubicacion, **para** tener control del inventario y encontrar las piezas rapidamente. ## Descripcion Detallada Cada refaccion debe tener un codigo unico, descripcion clara, categoria, ubicacion en almacen, precios (costo y venta), y stock minimo para alertas. --- ## Criterios de Aceptacion **Escenario 1: Crear refaccion nueva** ```gherkin DADO que quiero agregar una refaccion CUANDO completo el formulario: | Campo | Valor | | Codigo | INY-0001 | | Descripcion | Inyector Cummins ISX15 | | Categoria | INY | | Marca | Cummins | | Numero OEM | 4954434 | | Unidad | PZA | | Costo | $2,500 | | Precio venta | $3,500 | | Stock minimo | 2 | | Ubicacion | A-01-03 | ENTONCES la refaccion se crea en el sistema Y stock inicial es 0 ``` **Escenario 2: Codigo unico** ```gherkin DADO que intento crear refaccion con codigo existente CUANDO guardo ENTONCES el sistema muestra error "Codigo ya existe" Y no permite duplicados ``` **Escenario 3: Asignar ubicacion** ```gherkin DADO que asigno ubicacion "A-01-03" CUANDO guardo ENTONCES se interpreta como: | Rack | A | | Estante | 01 | | Nivel | 03 | Y es buscable por cualquier parte de la ubicacion ``` **Escenario 4: Agregar equivalencias** ```gherkin DADO que la refaccion tiene equivalentes CUANDO agrego equivalencias: "4954434RX", "4062569" ENTONCES al buscar cualquier codigo equivalente Se encuentra esta refaccion ``` --- ## Estructura de Refaccion ```typescript interface Part { id: string; code: string; // INY-0001 barcode?: string; // Codigo de barras description: string; // Inyector Cummins ISX15 short_name: string; // Inyector ISX category_id: string; // INY brand?: string; // Cummins oem_number?: string; // 4954434 unit: string; // PZA cost: number; // 2500.00 price: number; // 3500.00 min_stock: number; // 2 max_stock?: number; // 10 location_id: string; // A-01-03 equivalences: string[]; // ["4954434RX", "4062569"] status: 'active' | 'discontinued'; notes?: string; } ``` --- ## Tareas Tecnicas **Database:** - [ ] DB-040: Crear schema `parts_management` - [ ] DB-041: Crear tabla `parts` - [ ] DB-042: Crear tabla `part_categories` - [ ] DB-043: Crear tabla `part_locations` - [ ] DB-044: Crear tabla `part_equivalences` **Backend:** - [ ] BE-080: Crear PartEntity - [ ] BE-081: Crear PartService con CRUD - [ ] BE-082: Crear PartController - [ ] BE-083: Validacion de codigo unico - [ ] BE-084: Gestion de equivalencias **Frontend:** - [ ] FE-080: Crear PartsListPage - [ ] FE-081: Crear PartForm component - [ ] FE-082: Crear LocationInput component - [ ] FE-083: Crear EquivalenceManager --- ## Definition of Done (DoD) - [ ] CRUD de refacciones - [ ] Codigo unico validado - [ ] Ubicacion estructurada - [ ] Equivalencias funcionando - [ ] Tests pasando --- **Creada por:** Requirements-Analyst **Fecha:** 2025-12-06