# TRACEABILITY - MAE-013: Inventarios
metadata:
  modulo: MAE-013
  nombre: Inventarios
  version: 1.0.0
  fecha: 2025-12-06
  reutilizacion_core: 75%
  descripcion: Sistema integral de gestión de inventarios para construcción con control de almacenes, movimientos, conteos físicos y traspasos entre obras
  dependencias:
    - MGN-001 # Usuarios y Autenticación
    - MGN-002 # RBAC
    - MGN-003 # Multi-tenancy
    - MGN-005 # Catálogos
    - MAE-012 # Compras (para recepciones)
  apps_moviles:
    - MOB-002 # Almacenista

requerimientos:
  - id: RF-INV-001
    titulo: Almacenes y Ubicaciones
    descripcion: Gestión de almacenes con ubicaciones físicas y control de responsables
    prioridad: alta
    especificaciones:
      - id: ESP-INV-001-01
        descripcion: Crear y configurar almacenes por obra o sede central
      - id: ESP-INV-001-02
        descripcion: Definir estructura de ubicaciones (zonas, pasillos, estantes, niveles)
      - id: ESP-INV-001-03
        descripcion: Asignar responsables y almacenistas por almacén
      - id: ESP-INV-001-04
        descripcion: Clasificar almacenes por tipo (general, herramientas, peligrosos, temporal)
      - id: ESP-INV-001-05
        descripcion: Establecer niveles mínimos y máximos de inventario por material
      - id: ESP-INV-001-06
        descripcion: Control de capacidad y espacio disponible
      - id: ESP-INV-001-07
        descripcion: Alertas automáticas de existencias bajas o sobre-stock
    historias_usuario:
      - id: US-INV-001-01
        titulo: Como jefe de obra necesito crear almacenes en el proyecto
        criterios_aceptacion:
          - Registrar almacén con nombre, ubicación física y tipo
          - Asignar almacenista responsable del catálogo de usuarios
          - Definir horarios de operación y políticas de acceso
          - Activar/desactivar almacenes según necesidad
      - id: US-INV-001-02
        titulo: Como almacenista necesito organizar ubicaciones dentro del almacén
        criterios_aceptacion:
          - Crear jerarquía de ubicaciones (zona > pasillo > estante > nivel)
          - Asignar código único a cada ubicación
          - Marcar capacidad y dimensiones de ubicaciones
          - Generar mapa visual del almacén
      - id: US-INV-001-03
        titulo: Como jefe de compras necesito establecer niveles de inventario
        criterios_aceptacion:
          - Definir nivel mínimo por material y almacén
          - Definir nivel máximo para control de sobre-stock
          - Configurar punto de reorden automático
          - Recibir alertas cuando se alcancen los niveles críticos
      - id: US-INV-001-04
        titulo: Como residente necesito consultar disponibilidad en almacenes
        criterios_aceptacion:
          - Ver listado de almacenes de la obra
          - Consultar existencias actuales por almacén
          - Identificar ubicación física de materiales
          - Verificar responsable de cada almacén
    tablas:
      - inventory_management.almacenes
      - inventory_management.tipos_almacen
      - inventory_management.ubicaciones
      - inventory_management.niveles_inventario
      - inventory_management.almacenes_responsables
    endpoints:
      - POST /api/v1/almacenes
      - GET /api/v1/almacenes
      - GET /api/v1/almacenes/:id
      - PUT /api/v1/almacenes/:id
      - DELETE /api/v1/almacenes/:id
      - GET /api/v1/almacenes/obra/:obra_id
      - POST /api/v1/almacenes/:id/ubicaciones
      - GET /api/v1/almacenes/:id/ubicaciones
      - PUT /api/v1/almacenes/:id/ubicaciones/:ubicacion_id
      - DELETE /api/v1/almacenes/:id/ubicaciones/:ubicacion_id
      - POST /api/v1/almacenes/:id/niveles-inventario
      - GET /api/v1/almacenes/:id/alertas-stock
      - GET /api/v1/almacenes/:id/capacidad
    componentes_ui:
      - AlmacenesListView
      - AlmacenFormModal
      - AlmacenDetailView
      - UbicacionesTreeView
      - UbicacionFormModal
      - NivelesInventarioTable
      - AlertasStockPanel
      - AlmacenResponsableSelector
      - MapaAlmacenView
    app_movil: MOB-002
    integraciones:
      - modulo: MGN-005
        descripcion: Catálogo de materiales y unidades de medida
      - modulo: MGN-001
        descripcion: Asignación de almacenistas y responsables
      - modulo: MAI-001
        descripcion: Vinculación con obras y proyectos
    estado: pendiente

  - id: RF-INV-002
    titulo: Movimientos de Inventario
    descripcion: Registro y control de entradas, salidas y ajustes de inventario
    prioridad: alta
    especificaciones:
      - id: ESP-INV-002-01
        descripcion: Registrar entradas de inventario desde órdenes de compra
      - id: ESP-INV-002-02
        descripcion: Registrar salidas de inventario para consumo en obra
      - id: ESP-INV-002-03
        descripcion: Procesar devoluciones de material (proveedor y obra)
      - id: ESP-INV-002-04
        descripcion: Realizar ajustes de inventario (mermas, faltantes, sobrantes)
      - id: ESP-INV-002-05
        descripcion: Trazabilidad completa de movimientos por lote y número de serie
      - id: ESP-INV-002-06
        descripcion: Validación automática de existencias antes de salidas
      - id: ESP-INV-002-07
        descripcion: Cálculo de costos por método PEPS o promedio ponderado
      - id: ESP-INV-002-08
        descripcion: Generación de documentos de entrada/salida con firma digital
    historias_usuario:
      - id: US-INV-002-01
        titulo: Como almacenista necesito registrar entradas de material desde app móvil
        criterios_aceptacion:
          - Seleccionar orden de compra o entrada manual
          - Escanear código de barras/QR del material
          - Registrar cantidad, lote y fecha de caducidad
          - Asignar ubicación física en almacén
          - Capturar fotos del material recibido
          - Generar comprobante de entrada con firma
      - id: US-INV-002-02
        titulo: Como residente necesito solicitar salidas de material
        criterios_aceptacion:
          - Seleccionar materiales del inventario disponible
          - Especificar cantidad y partida presupuestal destino
          - Indicar ubicación de entrega en obra
          - Enviar solicitud a almacenista para aprobación
          - Recibir notificación de aprobación/rechazo
      - id: US-INV-002-03
        titulo: Como almacenista necesito procesar salidas de material en campo
        criterios_aceptacion:
          - Ver solicitudes pendientes en app móvil
          - Verificar existencias disponibles en tiempo real
          - Aprobar o rechazar solicitud con comentarios
          - Registrar entrega con firma digital del receptor
          - Actualizar inventario automáticamente
          - Generar vale de salida en PDF
      - id: US-INV-002-04
        titulo: Como jefe de almacén necesito realizar ajustes de inventario
        criterios_aceptacion:
          - Registrar tipo de ajuste (merma, faltante, sobrante, corrección)
          - Especificar material, cantidad y ubicación
          - Documentar motivo y evidencia del ajuste
          - Requerir aprobación para ajustes mayores
          - Actualizar kardex con el movimiento
      - id: US-INV-002-05
        titulo: Como contador necesito consultar valuación de inventario
        criterios_aceptacion:
          - Ver valor total de inventario por almacén
          - Consultar costo promedio por material
          - Generar reporte de kardex detallado
          - Exportar movimientos para contabilidad
          - Comparar valor contable vs físico
    tablas:
      - inventory_management.movimientos_inventario
      - inventory_management.entradas_inventario
      - inventory_management.salidas_inventario
      - inventory_management.ajustes_inventario
      - inventory_management.solicitudes_salida
      - inventory_management.kardex
      - inventory_management.lotes
      - inventory_management.existencias_por_ubicacion
    endpoints:
      - POST /api/v1/inventario/entradas
      - GET /api/v1/inventario/entradas
      - GET /api/v1/inventario/entradas/:id
      - POST /api/v1/inventario/salidas
      - GET /api/v1/inventario/salidas
      - GET /api/v1/inventario/salidas/:id
      - POST /api/v1/inventario/solicitudes-salida
      - GET /api/v1/inventario/solicitudes-salida
      - POST /api/v1/inventario/solicitudes-salida/:id/aprobar
      - POST /api/v1/inventario/solicitudes-salida/:id/rechazar
      - POST /api/v1/inventario/ajustes
      - GET /api/v1/inventario/ajustes
      - GET /api/v1/inventario/movimientos
      - GET /api/v1/inventario/kardex/:material_id
      - GET /api/v1/inventario/existencias
      - GET /api/v1/inventario/existencias/:material_id/ubicaciones
      - GET /api/v1/inventario/valuacion
      - GET /api/v1/inventario/lotes/:material_id
    componentes_ui:
      - MovimientosInventarioListView
      - EntradaInventarioFormModal
      - SalidaInventarioFormModal
      - SolicitudSalidaFormModal
      - SolicitudesSalidaPanel
      - AjusteInventarioFormModal
      - KardexMaterialView
      - ValuacionInventarioReport
      - MovimientoDetailView
      - LotesTable
      - ExistenciasPorUbicacionView
      - FirmaDigitalCapture
    app_movil: MOB-002
    funcionalidades_movil:
      - Consultar existencias en tiempo real
      - Escanear códigos de barras/QR
      - Registrar entradas con captura de fotos
      - Procesar solicitudes de salida
      - Captura de firma digital
      - Modo offline con sincronización
      - Geolocalización de entregas
      - Historial de movimientos
    integraciones:
      - modulo: MAE-012
        descripcion: Entradas desde órdenes de compra
      - modulo: RF-INV-001
        descripcion: Actualización de existencias por ubicación
      - modulo: MGN-005
        descripcion: Catálogo de materiales y unidades
    estado: pendiente

  - id: RF-INV-003
    titulo: Conteos Físicos
    descripcion: Gestión de inventarios físicos cíclicos y anuales con cuadre de diferencias
    prioridad: media
    especificaciones:
      - id: ESP-INV-003-01
        descripcion: Programar conteos físicos cíclicos por almacén o categoría
      - id: ESP-INV-003-02
        descripcion: Generar hojas de conteo con existencias del sistema
      - id: ESP-INV-003-03
        descripcion: Captura de conteo físico desde app móvil
      - id: ESP-INV-003-04
        descripcion: Comparación automática de conteo físico vs sistema
      - id: ESP-INV-003-05
        descripcion: Identificación y análisis de diferencias
      - id: ESP-INV-003-06
        descripcion: Aprobación de ajustes resultantes del conteo
      - id: ESP-INV-003-07
        descripcion: Bloqueo de movimientos durante conteo físico
      - id: ESP-INV-003-08
        descripcion: Reporte de exactitud de inventario
    historias_usuario:
      - id: US-INV-003-01
        titulo: Como jefe de almacén necesito programar conteos físicos
        criterios_aceptacion:
          - Crear programa de conteo cíclico (semanal, mensual, trimestral)
          - Seleccionar almacenes, ubicaciones o categorías a contar
          - Asignar responsables del conteo
          - Definir fecha y hora del conteo
          - Bloquear movimientos en áreas durante conteo
      - id: US-INV-003-02
        titulo: Como almacenista necesito realizar conteo físico con app móvil
        criterios_aceptacion:
          - Descargar hoja de conteo asignada en app móvil
          - Ver lista de materiales a contar con existencia teórica
          - Escanear códigos de barras durante conteo
          - Registrar cantidad física encontrada
          - Capturar fotos de materiales con diferencias
          - Trabajar en modo offline
          - Sincronizar resultados al finalizar
      - id: US-INV-003-03
        titulo: Como jefe de almacén necesito analizar diferencias de conteo
        criterios_aceptacion:
          - Ver comparativo de existencia teórica vs física
          - Identificar materiales con diferencias significativas
          - Consultar detalles y fotos de diferencias
          - Solicitar reconteo de materiales específicos
          - Aprobar o rechazar ajustes sugeridos
          - Generar reporte de exactitud de inventario
      - id: US-INV-003-04
        titulo: Como auditor necesito consultar historial de conteos
        criterios_aceptacion:
          - Ver historial de conteos físicos realizados
          - Consultar resultados y diferencias encontradas
          - Analizar tendencias de exactitud por almacén
          - Identificar materiales problemáticos recurrentes
          - Exportar reportes de auditoría
    tablas:
      - inventory_management.conteos_fisicos
      - inventory_management.conteos_detalle
      - inventory_management.conteos_diferencias
      - inventory_management.conteos_aprobaciones
      - inventory_management.programas_conteo_ciclico
    endpoints:
      - POST /api/v1/inventario/conteos
      - GET /api/v1/inventario/conteos
      - GET /api/v1/inventario/conteos/:id
      - PUT /api/v1/inventario/conteos/:id
      - POST /api/v1/inventario/conteos/:id/iniciar
      - POST /api/v1/inventario/conteos/:id/finalizar
      - GET /api/v1/inventario/conteos/:id/hoja-conteo
      - POST /api/v1/inventario/conteos/:id/capturar-conteo
      - GET /api/v1/inventario/conteos/:id/diferencias
      - POST /api/v1/inventario/conteos/:id/aprobar-ajustes
      - POST /api/v1/inventario/conteos/:id/rechazar-ajustes
      - GET /api/v1/inventario/conteos/:id/reporte-exactitud
      - POST /api/v1/inventario/programas-conteo-ciclico
      - GET /api/v1/inventario/programas-conteo-ciclico
    componentes_ui:
      - ConteosListView
      - ConteoFormModal
      - ConteoDetailView
      - HojaConteoView
      - CapturaConteoPanel
      - DiferenciasTable
      - AprobacionAjustesModal
      - ReporteExactitudView
      - ProgramaConteoCiclicoForm
      - HistorialConteosChart
    app_movil: MOB-002
    funcionalidades_movil:
      - Descargar hojas de conteo
      - Escanear códigos durante conteo
      - Captura de cantidades físicas
      - Fotografías de diferencias
      - Modo offline completo
      - Sincronización de resultados
      - Vista de materiales pendientes
    integraciones:
      - modulo: RF-INV-001
        descripcion: Conteos por almacén y ubicación
      - modulo: RF-INV-002
        descripcion: Generación de ajustes de inventario
      - modulo: MGN-005
        descripcion: Catálogo de materiales
    estado: pendiente

  - id: RF-INV-004
    titulo: Traspasos entre Almacenes/Obras
    descripcion: Transferencias de material entre almacenes de diferentes obras o sedes
    prioridad: alta
    especificaciones:
      - id: ESP-INV-004-01
        descripcion: Crear solicitudes de traspaso entre almacenes
      - id: ESP-INV-004-02
        descripcion: Aprobación multinivel de traspasos (origen, destino, dirección)
      - id: ESP-INV-004-03
        descripcion: Registro de salida en almacén origen
      - id: ESP-INV-004-04
        descripcion: Registro de entrada en almacén destino
      - id: ESP-INV-004-05
        descripcion: Documentación de material en tránsito
      - id: ESP-INV-004-06
        descripcion: Control de transportista y guía de remisión
      - id: ESP-INV-004-07
        descripcion: Seguimiento de estatus del traspaso
      - id: ESP-INV-004-08
        descripcion: Validación de cantidades recibidas vs enviadas
    historias_usuario:
      - id: US-INV-004-01
        titulo: Como residente necesito solicitar traspaso de material de otra obra
        criterios_aceptacion:
          - Seleccionar almacén origen y destino
          - Buscar materiales disponibles en origen
          - Especificar cantidad requerida y fecha necesaria
          - Justificar la solicitud de traspaso
          - Enviar solicitud para aprobación
          - Recibir notificación de respuesta
      - id: US-INV-004-02
        titulo: Como jefe de obra necesito aprobar/rechazar traspasos desde mi almacén
        criterios_aceptacion:
          - Ver solicitudes de traspaso pendientes
          - Consultar impacto en mis existencias
          - Verificar disponibilidad de material
          - Aprobar o rechazar con comentarios
          - Notificar al solicitante y destino
      - id: US-INV-004-03
        titulo: Como almacenista origen necesito procesar envío de traspaso
        criterios_aceptacion:
          - Ver traspasos aprobados pendientes de envío
          - Preparar material para envío
          - Registrar salida con cantidades reales
          - Generar documento de traspaso (remisión)
          - Capturar datos de transportista
          - Marcar traspaso como "en tránsito"
          - Actualizar inventario de origen
      - id: US-INV-004-04
        titulo: Como almacenista destino necesito recibir traspasos en app móvil
        criterios_aceptacion:
          - Ver traspasos en tránsito esperados
          - Verificar documentación de envío
          - Registrar cantidades recibidas
          - Identificar diferencias vs cantidad enviada
          - Capturar fotos del material recibido
          - Asignar ubicación en almacén destino
          - Generar entrada de traspaso
          - Actualizar inventario de destino
      - id: US-INV-004-05
        titulo: Como director de operaciones necesito monitorear traspasos entre obras
        criterios_aceptacion:
          - Ver dashboard de traspasos activos
          - Consultar material en tránsito por obra
          - Identificar traspasos retrasados
          - Ver costos de traspasos realizados
          - Generar reporte de movimientos entre obras
    tablas:
      - inventory_management.traspasos
      - inventory_management.traspasos_detalle
      - inventory_management.traspasos_aprobaciones
      - inventory_management.traspasos_documentos
      - inventory_management.material_en_transito
    endpoints:
      - POST /api/v1/inventario/traspasos
      - GET /api/v1/inventario/traspasos
      - GET /api/v1/inventario/traspasos/:id
      - PUT /api/v1/inventario/traspasos/:id
      - DELETE /api/v1/inventario/traspasos/:id
      - POST /api/v1/inventario/traspasos/:id/aprobar-origen
      - POST /api/v1/inventario/traspasos/:id/aprobar-destino
      - POST /api/v1/inventario/traspasos/:id/aprobar-direccion
      - POST /api/v1/inventario/traspasos/:id/rechazar
      - POST /api/v1/inventario/traspasos/:id/procesar-envio
      - POST /api/v1/inventario/traspasos/:id/procesar-recepcion
      - GET /api/v1/inventario/traspasos/:id/documento
      - GET /api/v1/inventario/traspasos/almacen/:almacen_id
      - GET /api/v1/inventario/traspasos/en-transito
      - GET /api/v1/inventario/traspasos/pendientes-recepcion
    componentes_ui:
      - TraspasosListView
      - TraspasoFormModal
      - TraspasoDetailView
      - TraspasoAprobacionPanel
      - TraspasoEnvioModal
      - TraspasoRecepcionModal
      - MaterialEnTransitoTable
      - TraspasoDocumentoView
      - TraspasosMapView
      - TraspasosStatusTimeline
    app_movil: MOB-002
    funcionalidades_movil:
      - Ver traspasos pendientes de recepción
      - Escanear remisión de traspaso
      - Registrar recepción con cantidades
      - Captura de fotos del material
      - Firma digital de recepción
      - Registro de diferencias
      - Asignación a ubicaciones
      - Notificaciones push de traspasos
    integraciones:
      - modulo: RF-INV-001
        descripcion: Actualización de inventarios origen y destino
      - modulo: RF-INV-002
        descripcion: Generación de movimientos de salida y entrada
      - modulo: MGN-001
        descripcion: Aprobadores y responsables
      - modulo: MGN-005
        descripcion: Catálogo de materiales
    estado: pendiente

# Aplicación Móvil
app_movil:
  id: MOB-002
  nombre: Almacenista
  descripcion: Aplicación móvil para control de inventario en campo
  plataformas:
    - Android
    - iOS
  tecnologias:
    - React Native
    - Expo
    - SQLite (offline)
    - Axios (sync)
  funcionalidades:
    - login_offline: Autenticación con modo offline
    - consulta_inventario: Consulta de existencias en tiempo real
    - registro_entradas: Registro de entradas de material
    - procesamiento_salidas: Aprobación y entrega de salidas
    - escaneo_codigos: Escaneo de códigos de barras y QR
    - firma_digital: Captura de firma en entregas
    - conteo_fisico: Captura de conteo físico
    - recepcion_traspasos: Recepción de traspasos entre almacenes
    - captura_fotos: Captura de fotos de materiales
    - geolocalizacion: Registro de ubicación en entregas
    - sincronizacion: Sincronización automática con servidor
    - notificaciones_push: Alertas y notificaciones en tiempo real
  requerimientos_vinculados:
    - RF-INV-001 # Consulta de almacenes y ubicaciones
    - RF-INV-002 # Movimientos de inventario
    - RF-INV-003 # Conteos físicos
    - RF-INV-004 # Recepción de traspasos
  estado: pendiente

# Esquemas de Base de Datos
esquemas:
  - nombre: inventory_management
    descripcion: Esquema para gestión integral de inventarios
    tablas:
      - almacenes
      - tipos_almacen
      - ubicaciones
      - niveles_inventario
      - almacenes_responsables
      - movimientos_inventario
      - entradas_inventario
      - salidas_inventario
      - ajustes_inventario
      - solicitudes_salida
      - kardex
      - lotes
      - existencias_por_ubicacion
      - conteos_fisicos
      - conteos_detalle
      - conteos_diferencias
      - conteos_aprobaciones
      - programas_conteo_ciclico
      - traspasos
      - traspasos_detalle
      - traspasos_aprobaciones
      - traspasos_documentos
      - material_en_transito

# Políticas RLS
rls_policies:
  archivo: ET-INV-rls-policies.sql
  descripcion: Políticas de seguridad a nivel de fila para multi-tenancy
  tablas_protegidas:
    - inventory_management.almacenes
    - inventory_management.movimientos_inventario
    - inventory_management.traspasos
    - inventory_management.conteos_fisicos

# Reportes
reportes:
  - id: REP-INV-001
    nombre: Inventario Valorizado
    descripcion: Valuación de inventario por almacén, obra o categoría
    parametros: [fecha_corte, obra_id, almacen_id, categoria_id]
  - id: REP-INV-002
    nombre: Kardex de Material
    descripcion: Movimientos detallados por material
    parametros: [material_id, fecha_inicio, fecha_fin, almacen_id]
  - id: REP-INV-003
    nombre: Existencias por Almacén
    descripcion: Listado de existencias actuales por almacén
    parametros: [almacen_id, categoria_id, solo_con_existencia]
  - id: REP-INV-004
    nombre: Materiales con Existencias Bajas
    descripcion: Materiales que han alcanzado el nivel mínimo
    parametros: [obra_id, almacen_id, categoria_id]
  - id: REP-INV-005
    nombre: Movimientos por Período
    descripcion: Detalle de entradas, salidas y ajustes por período
    parametros: [fecha_inicio, fecha_fin, almacen_id, tipo_movimiento]
  - id: REP-INV-006
    nombre: Exactitud de Inventario
    descripcion: Análisis de diferencias en conteos físicos
    parametros: [periodo, almacen_id, categoria_id]
  - id: REP-INV-007
    nombre: Traspasos entre Obras
    descripcion: Reporte de traspasos realizados entre almacenes
    parametros: [fecha_inicio, fecha_fin, obra_origen, obra_destino]
  - id: REP-INV-008
    nombre: Material en Tránsito
    descripcion: Listado de material en proceso de traspaso
    parametros: [fecha_corte, obra_destino]
  - id: REP-INV-009
    nombre: Rotación de Inventario
    descripcion: Análisis de rotación por material y categoría
    parametros: [periodo, categoria_id, almacen_id]
  - id: REP-INV-010
    nombre: Inventario Inmovilizado
    descripcion: Materiales sin movimiento en período definido
    parametros: [dias_sin_movimiento, almacen_id, valor_minimo]

# Notificaciones
notificaciones:
  - evento: existencias_bajas
    destinatarios: [almacenista, residente_obra, compras]
    canal: [email, app, push_movil]
  - evento: solicitud_salida_pendiente
    destinatarios: [almacenista]
    canal: [app, push_movil]
  - evento: salida_aprobada
    destinatarios: [solicitante]
    canal: [app]
  - evento: salida_rechazada
    destinatarios: [solicitante]
    canal: [app]
  - evento: entrada_registrada
    destinatarios: [residente_obra, jefe_compras]
    canal: [app]
  - evento: ajuste_inventario_pendiente
    destinatarios: [jefe_almacen, auditor]
    canal: [email, app]
  - evento: conteo_asignado
    destinatarios: [almacenista]
    canal: [app, push_movil]
  - evento: diferencias_conteo_significativas
    destinatarios: [jefe_almacen, auditor]
    canal: [email, app]
  - evento: traspaso_solicitado
    destinatarios: [jefe_obra_origen, almacenista_origen]
    canal: [email, app]
  - evento: traspaso_aprobado
    destinatarios: [solicitante, almacenista_origen, almacenista_destino]
    canal: [app, push_movil]
  - evento: traspaso_rechazado
    destinatarios: [solicitante]
    canal: [app]
  - evento: traspaso_enviado
    destinatarios: [almacenista_destino, jefe_obra_destino]
    canal: [app, push_movil]
  - evento: traspaso_recibido
    destinatarios: [almacenista_origen, jefe_obra_origen]
    canal: [app]

# Métricas y KPIs
metricas:
  - nombre: exactitud_inventario
    descripcion: Porcentaje de exactitud en conteos físicos
    unidad: porcentaje
    objetivo: "> 95%"
  - nombre: rotacion_inventario
    descripcion: Veces que rota el inventario por período
    unidad: veces/mes
    objetivo: "> 2"
  - nombre: valor_inventario_inmovilizado
    descripcion: Valor de materiales sin movimiento > 90 días
    unidad: moneda
    objetivo: "< 5% del total"
  - nombre: tiempo_procesamiento_salidas
    descripcion: Tiempo promedio para procesar solicitudes de salida
    unidad: horas
    objetivo: "< 4 horas"
  - nombre: diferencias_traspasos
    descripcion: Porcentaje de diferencias en cantidades de traspasos
    unidad: porcentaje
    objetivo: "< 2%"
  - nombre: nivel_servicio_almacen
    descripcion: Porcentaje de solicitudes atendidas a tiempo
    unidad: porcentaje
    objetivo: "> 95%"
  - nombre: costo_almacenamiento
    descripcion: Costo de almacenamiento como % del valor inventario
    unidad: porcentaje
    objetivo: "< 8%"

# Validaciones y Reglas de Negocio
reglas_negocio:
  - codigo: RN-INV-001
    descripcion: No se permiten salidas de inventario si no hay existencias suficientes
  - codigo: RN-INV-002
    descripcion: Las salidas de inventario deben estar vinculadas a una partida presupuestal o destino específico
  - codigo: RN-INV-003
    descripcion: Los ajustes de inventario mayores al 5% requieren aprobación de jefe de almacén
  - codigo: RN-INV-004
    descripcion: Los traspasos deben ser aprobados por los responsables de ambos almacenes
  - codigo: RN-INV-005
    descripcion: No se permiten movimientos en almacenes durante conteo físico activo
  - codigo: RN-INV-006
    descripcion: El costo de materiales debe actualizarse según método PEPS o promedio ponderado
  - codigo: RN-INV-007
    descripcion: Los conteos físicos con diferencias > 10% requieren reconteo
  - codigo: RN-INV-008
    descripcion: Los traspasos deben registrar salida antes de poder registrar entrada
  - codigo: RN-INV-009
    descripcion: Las ubicaciones no pueden exceder su capacidad máxima definida
  - codigo: RN-INV-010
    descripcion: Los materiales con fecha de caducidad deben alertar 30 días antes

# Seguridad
seguridad:
  permisos:
    - inventario.almacenes.crear
    - inventario.almacenes.leer
    - inventario.almacenes.editar
    - inventario.almacenes.eliminar
    - inventario.ubicaciones.gestionar
    - inventario.movimientos.crear
    - inventario.movimientos.leer
    - inventario.entradas.registrar
    - inventario.salidas.solicitar
    - inventario.salidas.aprobar
    - inventario.salidas.rechazar
    - inventario.ajustes.crear
    - inventario.ajustes.aprobar
    - inventario.conteos.programar
    - inventario.conteos.ejecutar
    - inventario.conteos.aprobar
    - inventario.traspasos.solicitar
    - inventario.traspasos.aprobar
    - inventario.traspasos.procesar
    - inventario.reportes.generar
    - inventario.reportes.exportar
  roles_sugeridos:
    - nombre: almacenista
      permisos: [inventario.movimientos.*, inventario.entradas.*, inventario.salidas.aprobar, inventario.conteos.ejecutar]
    - nombre: jefe_almacen
      permisos: [inventario.*, -inventario.almacenes.eliminar]
    - nombre: residente_obra
      permisos: [inventario.almacenes.leer, inventario.salidas.solicitar, inventario.movimientos.leer]
    - nombre: auditor
      permisos: [inventario.*.leer, inventario.conteos.*, inventario.reportes.*]

# Pruebas
pruebas:
  unitarias:
    - calcular_costo_promedio_ponderado
    - validar_existencias_disponibles
    - calcular_diferencias_conteo
    - validar_capacidad_ubicacion
    - calcular_rotacion_inventario
  integracion:
    - flujo_completo_entrada_inventario
    - flujo_completo_salida_inventario
    - proceso_conteo_fisico_con_ajustes
    - proceso_traspaso_completo
    - sincronizacion_app_movil
  e2e:
    - ciclo_vida_material_entrada_salida
    - proceso_conteo_fisico_app_movil
    - proceso_traspaso_entre_obras
    - gestion_existencias_multiples_ubicaciones

# Cronograma Estimado
cronograma:
  - fase: Análisis y Diseño
    duracion: 2 semanas
    entregables: [modelos_datos, diagramas_flujo, especificaciones_api]
  - fase: Desarrollo Backend
    duracion: 5 semanas
    entregables: [api_almacenes, api_movimientos, api_conteos, api_traspasos, rls_policies]
  - fase: Desarrollo Frontend
    duracion: 5 semanas
    entregables: [ui_almacenes, ui_movimientos, ui_conteos, ui_traspasos, reportes]
  - fase: Desarrollo App Móvil
    duracion: 4 semanas
    entregables: [app_almacenista, modo_offline, sincronizacion, escaneo_codigos]
  - fase: Pruebas
    duracion: 2 semanas
    entregables: [pruebas_unitarias, pruebas_integracion, pruebas_usuario, pruebas_campo]
  - fase: Documentación y Capacitación
    duracion: 1 semana
    entregables: [manual_usuario, manual_tecnico, manual_app_movil, videos_capacitacion]

# Notas de Implementación
notas:
  - Priorizar desarrollo de RF-INV-001 y RF-INV-002 (funcionalidad básica de almacenes y movimientos)
  - Desarrollar app móvil MOB-002 en paralelo con backend de movimientos
  - Implementar sincronización offline-online robusta para app móvil
  - Considerar integración con lectores de códigos de barras industriales
  - Evaluar implementación de tecnología RFID para almacenes grandes
  - Planificar estrategia de migración de saldos iniciales de inventario
  - Definir políticas de conteo cíclico antes de implementar RF-INV-003
  - Considerar integración futura con sistemas de transporte para tracking de traspasos
  - Implementar dashboard de métricas en tiempo real para jefes de almacén
  - Validar método de costeo (PEPS vs Promedio) con departamento contable
