# US-MMD001-003: Configurar Catalogo de Servicios

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | US-MMD001-003 |
| **Epica** | EPIC-MMD-001 - Fundamentos |
| **Modulo** | fundamentos |
| **Prioridad** | P0 |
| **Story Points** | 8 |
| **Sprint** | Sprint 1 |
| **Estado** | Backlog |
| **Asignado a** | Por asignar |

---

## Historia de Usuario

**Como** administrador del taller,
**quiero** configurar un catalogo de servicios con precios estandar,
**para** cotizar rapidamente y mantener consistencia en precios.

## Descripcion Detallada

El catalogo de servicios permite definir todos los tipos de trabajo que ofrece el taller con sus precios base. Esto agiliza la creacion de cotizaciones y ordenes de servicio, evitando errores de precio.

---

## Criterios de Aceptacion

**Escenario 1: Ver catalogo de servicios predefinido**
```gherkin
DADO que accedo al catalogo de servicios
CUANDO veo la lista inicial
ENTONCES veo servicios predefinidos para talleres diesel:
  | Codigo | Servicio | Unidad | Precio |
  | SRV-001 | Diagnostico Computarizado | Evento | $500 |
  | SRV-002 | Cambio de Aceite | Evento | $350 |
  | SRV-003 | Afinacion Mayor | Evento | $2,500 |
  | SRV-004 | Reparacion Bomba Inyeccion | Hora | $450 |
```

**Escenario 2: Crear nuevo servicio**
```gherkin
DADO que quiero agregar un servicio nuevo
CUANDO completo el formulario:
  | Campo | Valor |
  | Codigo | SRV-020 |
  | Nombre | Calibracion Turbo |
  | Categoria | Motor |
  | Unidad | Evento |
  | Precio | $1,200 |
  | Tiempo estimado | 2 horas |
ENTONCES el sistema guarda el servicio
Y aparece en el catalogo
```

**Escenario 3: Modificar precio de servicio**
```gherkin
DADO que selecciono el servicio "Cambio de Aceite"
CUANDO modifico el precio de $350 a $400
ENTONCES el sistema actualiza el precio
Y guarda historial del precio anterior
```

**Escenario 4: Buscar servicio**
```gherkin
DADO que tengo 50+ servicios en el catalogo
CUANDO busco "inyector"
ENTONCES veo solo servicios que contienen "inyector" en nombre o descripcion
Y la busqueda responde en menos de 200ms
```

**Escenario 5: Categorizar servicios**
```gherkin
DADO que tengo servicios de diferentes tipos
CUANDO filtro por categoria "Motor"
ENTONCES veo solo servicios de esa categoria
```

---

## Categorias de Servicio

| Categoria | Descripcion |
|-----------|-------------|
| DIAGNOSTICO | Pruebas y evaluaciones |
| MOTOR | Reparaciones de motor |
| INYECCION | Bombas, inyectores, turbo |
| ELECTRICO | Sistema electrico |
| FRENOS | Sistema de frenos |
| SUSPENSION | Suspension y direccion |
| TRANSMISION | Caja y embrague |
| MANTENIMIENTO | Servicios preventivos |
| OTROS | Servicios varios |

---

## Tareas Tecnicas

**Database:**
- [ ] DB-006: Crear tabla `service_catalog` en schema `workshop_core`
- [ ] DB-007: Crear tabla `service_categories`
- [ ] DB-008: Crear tabla `service_price_history` para historial
- [ ] DB-009: Insert de servicios predefinidos (seed)

**Backend:**
- [ ] BE-009: Crear ServiceCatalogEntity
- [ ] BE-010: Crear ServiceCatalogService con CRUD
- [ ] BE-011: Crear ServiceCatalogController
- [ ] BE-012: Implementar busqueda full-text

**Frontend:**
- [ ] FE-009: Crear ServiceCatalogPage
- [ ] FE-010: Crear ServiceCard y ServiceForm components
- [ ] FE-011: Implementar busqueda y filtros
- [ ] FE-012: Crear catalogStore

**Tests:**
- [ ] TEST-005: Test CRUD servicios
- [ ] TEST-006: Test busqueda < 200ms

---

## Dependencias

**Depende de:**
- [ ] US-MMD001-001: Configurar taller

**Bloquea:**
- [ ] MMD-002: Ordenes de Servicio (usa catalogo)
- [ ] MMD-006: Cotizaciones (usa catalogo)

---

## Notas Tecnicas

**Endpoints involucrados:**
| Metodo | Endpoint | Descripcion |
|--------|----------|-------------|
| GET | /api/services | Listar servicios (paginado) |
| POST | /api/services | Crear servicio |
| GET | /api/services/:id | Detalle servicio |
| PATCH | /api/services/:id | Actualizar servicio |
| DELETE | /api/services/:id | Desactivar servicio |
| GET | /api/services/search | Busqueda full-text |
| GET | /api/service-categories | Listar categorias |
| POST | /api/services/import | Import desde Excel |

**Estructura de Servicio:**
```typescript
interface ServiceCatalog {
  id: string;
  code: string;         // SRV-001
  name: string;         // Nombre del servicio
  description?: string; // Descripcion detallada
  category_id: string;  // Categoria
  unit: 'evento' | 'hora' | 'km';
  price: number;        // Precio actual
  estimated_time?: number; // Minutos estimados
  requires_parts: boolean; // Requiere refacciones tipicamente
  status: 'active' | 'inactive';
}
```

---

## Definition of Done (DoD)

- [ ] CRUD de servicios funcionando
- [ ] Categorias configurables
- [ ] Busqueda full-text < 200ms
- [ ] Import desde Excel
- [ ] Historial de precios
- [ ] Tests pasando

---

**Creada por:** Requirements-Analyst
**Fecha:** 2025-12-06
