-- ========================================
-- MÓDULO COMPLETO DE ODONTOLOGÍA
-- Sistema de Gestión Dental Integral
-- Base de datos: histkjpq_medipruebas
-- ========================================

-- ========================================
-- 1. TABLA DE PROCEDIMIENTOS DENTALES
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_procedimiento` (
  `idprocedimiento` int(11) NOT NULL AUTO_INCREMENT,
  `codigo` varchar(20) DEFAULT NULL,
  `nombre` varchar(255) NOT NULL,
  `descripcion` text DEFAULT NULL,
  `categoria` varchar(100) DEFAULT 'General',
  `precio` decimal(10,2) NOT NULL DEFAULT 0.00,
  `estado` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`idprocedimiento`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 2. TABLA DE PRESUPUESTOS/PLANES DE TRATAMIENTO
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_presupuesto` (
  `idpresupuesto` int(11) NOT NULL AUTO_INCREMENT,
  `idpersona` int(11) NOT NULL,
  `idusuario` int(11) NOT NULL,
  `fecha_emision` datetime DEFAULT current_timestamp(),
  `fecha_vencimiento` date DEFAULT NULL,
  `subtotal` decimal(10,2) DEFAULT 0.00,
  `descuento_total` decimal(10,2) DEFAULT 0.00,
  `total` decimal(10,2) DEFAULT 0.00,
  `idforma_pago` int(11) DEFAULT NULL,
  `tiene_cuotas` tinyint(1) DEFAULT 0,
  `saldo_pendiente` decimal(10,2) DEFAULT 0.00,
  `estado_pago` enum('Pendiente','Parcial','Pagado') DEFAULT 'Pendiente',
  `estado` enum('Borrador','Pendiente','Aprobado','Rechazado','Completado') DEFAULT 'Borrador',
  `observaciones` text DEFAULT NULL,
  PRIMARY KEY (`idpresupuesto`),
  KEY `fk_presupuesto_persona` (`idpersona`),
  KEY `fk_presupuesto_usuario` (`idusuario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 3. TABLA DE DETALLE DE PRESUPUESTO
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_detalle_presupuesto` (
  `iddetalle` int(11) NOT NULL AUTO_INCREMENT,
  `idpresupuesto` int(11) NOT NULL,
  `idprocedimiento` int(11) NOT NULL,
  `diente` varchar(10) DEFAULT NULL,
  `cara` varchar(20) DEFAULT NULL,
  `cantidad` int(11) DEFAULT 1,
  `precio_unitario` decimal(10,2) NOT NULL,
  `descuento` decimal(10,2) DEFAULT 0.00,
  `subtotal` decimal(10,2) NOT NULL,
  `estado_detalle` enum('Pendiente','Realizado','Cancelado') DEFAULT 'Pendiente',
  PRIMARY KEY (`iddetalle`),
  KEY `fk_detalle_presupuesto` (`idpresupuesto`),
  KEY `fk_detalle_procedimiento` (`idprocedimiento`),
  CONSTRAINT `fk_detalle_presupuesto` FOREIGN KEY (`idpresupuesto`) REFERENCES `odont_presupuesto` (`idpresupuesto`) ON DELETE CASCADE,
  CONSTRAINT `fk_detalle_procedimiento` FOREIGN KEY (`idprocedimiento`) REFERENCES `odont_procedimiento` (`idprocedimiento`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 4. TABLA DE FORMAS DE PAGO
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_forma_pago` (
  `idforma_pago` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) NOT NULL,
  `requiere_referencia` tinyint(1) DEFAULT 0,
  `estado` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`idforma_pago`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 5. TABLA DE PAGOS
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_pago` (
  `idpago` int(11) NOT NULL AUTO_INCREMENT,
  `idpresupuesto` int(11) NOT NULL,
  `fecha_pago` datetime DEFAULT current_timestamp(),
  `monto` decimal(10,2) NOT NULL,
  `idforma_pago` int(11) NOT NULL,
  `numero_referencia` varchar(100) DEFAULT NULL,
  `observaciones` text DEFAULT NULL,
  `idusuario` int(11) NOT NULL,
  PRIMARY KEY (`idpago`),
  KEY `fk_pago_presupuesto` (`idpresupuesto`),
  KEY `fk_pago_forma` (`idforma_pago`),
  CONSTRAINT `fk_pago_presupuesto` FOREIGN KEY (`idpresupuesto`) REFERENCES `odont_presupuesto` (`idpresupuesto`) ON DELETE CASCADE,
  CONSTRAINT `fk_pago_forma` FOREIGN KEY (`idforma_pago`) REFERENCES `odont_forma_pago` (`idforma_pago`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 6. TABLA DE PLAN DE CUOTAS
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_plan_cuotas` (
  `idplan_cuotas` int(11) NOT NULL AUTO_INCREMENT,
  `idpresupuesto` int(11) NOT NULL,
  `numero_cuotas` int(11) NOT NULL,
  `monto_cuota` decimal(10,2) NOT NULL,
  `fecha_inicio` date NOT NULL,
  `periodicidad` enum('Semanal','Quincenal','Mensual') DEFAULT 'Mensual',
  `estado` enum('Activo','Completado','Cancelado') DEFAULT 'Activo',
  PRIMARY KEY (`idplan_cuotas`),
  KEY `fk_plan_presupuesto` (`idpresupuesto`),
  CONSTRAINT `fk_plan_presupuesto` FOREIGN KEY (`idpresupuesto`) REFERENCES `odont_presupuesto` (`idpresupuesto`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 7. TABLA DE CUOTAS
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_cuota` (
  `idcuota` int(11) NOT NULL AUTO_INCREMENT,
  `idplan_cuotas` int(11) NOT NULL,
  `numero_cuota` int(11) NOT NULL,
  `monto` decimal(10,2) NOT NULL,
  `fecha_vencimiento` date NOT NULL,
  `monto_pagado` decimal(10,2) DEFAULT 0.00,
  `estado` enum('Pendiente','Pagada','Vencida','Parcial') DEFAULT 'Pendiente',
  `fecha_pago` datetime DEFAULT NULL,
  PRIMARY KEY (`idcuota`),
  KEY `fk_cuota_plan` (`idplan_cuotas`),
  CONSTRAINT `fk_cuota_plan` FOREIGN KEY (`idplan_cuotas`) REFERENCES `odont_plan_cuotas` (`idplan_cuotas`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- 8. TABLA DE APLICACIÓN DE PAGOS A CUOTAS
-- ========================================
CREATE TABLE IF NOT EXISTS `odont_pago_cuota` (
  `idpago_cuota` int(11) NOT NULL AUTO_INCREMENT,
  `idpago` int(11) NOT NULL,
  `idcuota` int(11) NOT NULL,
  `monto_aplicado` decimal(10,2) NOT NULL,
  PRIMARY KEY (`idpago_cuota`),
  KEY `fk_pc_pago` (`idpago`),
  KEY `fk_pc_cuota` (`idcuota`),
  CONSTRAINT `fk_pc_pago` FOREIGN KEY (`idpago`) REFERENCES `odont_pago` (`idpago`) ON DELETE CASCADE,
  CONSTRAINT `fk_pc_cuota` FOREIGN KEY (`idcuota`) REFERENCES `odont_cuota` (`idcuota`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ========================================
-- AGREGAR FOREIGN KEY A odont_presupuesto
-- ========================================
ALTER TABLE `odont_presupuesto` 
ADD CONSTRAINT `fk_presup_forma` FOREIGN KEY (`idforma_pago`) REFERENCES `odont_forma_pago` (`idforma_pago`);

-- ========================================
-- DATOS INICIALES: FORMAS DE PAGO
-- ========================================
INSERT INTO `odont_forma_pago` (`nombre`, `requiere_referencia`) VALUES
('Efectivo', 0),
('Tarjeta de Crédito', 1),
('Tarjeta de Débito', 1),
('Transferencia Bancaria', 1),
('Cheque', 1);

-- ========================================
-- DATOS INICIALES: PROCEDIMIENTOS DENTALES
-- ========================================
INSERT INTO `odont_procedimiento` (`codigo`, `nombre`, `categoria`, `precio`) VALUES
('CONS-001', 'Consulta Odontológica General', 'Diagnóstico', 30.00),
('PROF-001', 'Profilaxis (Limpieza Dental)', 'Prevención', 40.00),
('RES-001', 'Resina Simple (1 superficie)', 'Restauradora', 35.00),
('RES-002', 'Resina Compuesta (2 superficies)', 'Restauradora', 45.00),
('RES-003', 'Resina Compleja (3+ superficies)', 'Restauradora', 60.00),
('EXT-001', 'Extracción Simple', 'Cirugía', 50.00),
('EXT-002', 'Extracción Tercer Molar (Simple)', 'Cirugía', 80.00),
('EXT-003', 'Extracción Tercer Molar (Compleja)', 'Cirugía', 120.00),
('ENDO-001', 'Endodoncia Unirradicular', 'Endodoncia', 120.00),
('ENDO-002', 'Endodoncia Multirradicular', 'Endodoncia', 180.00),
('COR-001', 'Corona Metal-Porcelana', 'Prótesis Fija', 250.00),
('COR-002', 'Corona de Porcelana Pura', 'Prótesis Fija', 350.00),
('BLANQ-001', 'Blanqueamiento Dental (Consultorio)', 'Estética', 150.00),
('BLANQ-002', 'Blanqueamiento Dental (Casa)', 'Estética', 100.00),
('PROT-001', 'Prótesis Total Superior', 'Prótesis Removible', 400.00),
('PROT-002', 'Prótesis Total Inferior', 'Prótesis Removible', 400.00),
('PROT-003', 'Prótesis Parcial Removible', 'Prótesis Removible', 300.00),
('ORTOD-001', 'Ortodoncia Metálica (Mensualidad)', 'Ortodoncia', 80.00),
('ORTOD-002', 'Ortodoncia Estética (Mensualidad)', 'Ortodoncia', 120.00),
('RAD-001', 'Radiografía Periapical', 'Radiología', 10.00),
('RAD-002', 'Radiografía Panorámica', 'Radiología', 25.00),
('PERIO-001', 'Curetaje por Cuadrante', 'Periodoncia', 60.00),
('PERIO-002', 'Cirugía Periodontal', 'Periodoncia', 150.00);

-- ========================================
-- FIN DE LA INSTALACIÓN
-- ========================================
-- Tablas creadas: 8
-- Procedimientos insertados: 23
-- Formas de pago insertadas: 5
-- ========================================
