-- =====================================================
-- NODASA - Órdenes de mantenimiento (Flota)
-- Requiere: tb_vehiculos, tb_mant_parametros, tb_proveedores, tb_usuarios
-- La lectura de cierre de las órdenes PREVENTIVAS cerradas es la base
-- para calcular el próximo servicio en Alertas (Km/Horas).
-- =====================================================

CREATE TABLE IF NOT EXISTS `tb_mant_ordenes` (
  `id_orden` int unsigned NOT NULL AUTO_INCREMENT,
  `nro_orden` varchar(15) COLLATE utf8mb4_spanish_ci DEFAULT NULL,
  `id_vehiculo` int NOT NULL,
  `tipo_mant` enum('PREVENTIVO','CORRECTIVO') COLLATE utf8mb4_spanish_ci NOT NULL DEFAULT 'PREVENTIVO',
  `id_param` int DEFAULT NULL COMMENT 'Regla del plan que atiende (solo preventivo)',
  `prioridad` enum('BAJA','MEDIA','ALTA') COLLATE utf8mb4_spanish_ci NOT NULL DEFAULT 'MEDIA',
  `estado` enum('ABIERTA','CERRADA','ANULADA') COLLATE utf8mb4_spanish_ci NOT NULL DEFAULT 'ABIERTA',
  `um` enum('H','KM') COLLATE utf8mb4_spanish_ci DEFAULT NULL COMMENT 'Unidad de las lecturas',
  `fecha_apertura` datetime NOT NULL,
  `lectura_apertura` decimal(10,2) DEFAULT NULL,
  `descripcion` varchar(500) COLLATE utf8mb4_spanish_ci NOT NULL,
  `fuera_servicio` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 = la unidad queda en MANTENIMIENTO mientras la orden esté abierta',
  `id_prov` int DEFAULT NULL COMMENT 'Taller / proveedor externo',
  `responsable` varchar(100) COLLATE utf8mb4_spanish_ci DEFAULT NULL,
  `fecha_cierre` datetime DEFAULT NULL,
  `lectura_cierre` decimal(10,2) DEFAULT NULL,
  `trabajos_realizados` text COLLATE utf8mb4_spanish_ci,
  `costo_mano_obra` decimal(12,2) NOT NULL DEFAULT '0.00',
  `costo_repuestos` decimal(12,2) NOT NULL DEFAULT '0.00',
  `costo_otros` decimal(12,2) NOT NULL DEFAULT '0.00',
  `costo_total` decimal(12,2) NOT NULL DEFAULT '0.00',
  `motivo_anula` varchar(255) COLLATE utf8mb4_spanish_ci DEFAULT NULL,
  `fecha_anula` datetime DEFAULT NULL,
  `usuario_crea_id` int unsigned DEFAULT NULL,
  `usuario_cierra_id` int unsigned DEFAULT NULL,
  `usuario_anula_id` int unsigned DEFAULT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_orden`),
  UNIQUE KEY `uk_nro_orden` (`nro_orden`),
  KEY `idx_mo_vehiculo_estado` (`id_vehiculo`,`estado`),
  KEY `idx_mo_estado` (`estado`),
  KEY `idx_mo_fecha` (`fecha_apertura`),
  KEY `idx_mo_param` (`id_param`),
  KEY `idx_mo_prov` (`id_prov`),
  KEY `fk_mo_usuario_crea` (`usuario_crea_id`),
  KEY `fk_mo_usuario_cierra` (`usuario_cierra_id`),
  KEY `fk_mo_usuario_anula` (`usuario_anula_id`),
  CONSTRAINT `fk_mo_vehiculo` FOREIGN KEY (`id_vehiculo`) REFERENCES `tb_vehiculos` (`id_vehiculo`),
  CONSTRAINT `fk_mo_param` FOREIGN KEY (`id_param`) REFERENCES `tb_mant_parametros` (`id_param`),
  CONSTRAINT `fk_mo_prov` FOREIGN KEY (`id_prov`) REFERENCES `tb_proveedores` (`id_prov`),
  CONSTRAINT `fk_mo_usuario_crea` FOREIGN KEY (`usuario_crea_id`) REFERENCES `tb_usuarios` (`id_usua`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_mo_usuario_cierra` FOREIGN KEY (`usuario_cierra_id`) REFERENCES `tb_usuarios` (`id_usua`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_mo_usuario_anula` FOREIGN KEY (`usuario_anula_id`) REFERENCES `tb_usuarios` (`id_usua`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish_ci;
