USE hm;
CREATE TABLE IF NOT EXISTS ingresos_egresos (
 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, codigo VARCHAR(30) NOT NULL UNIQUE, fecha DATE NOT NULL,
 tercero_tipo ENUM('Cliente','Proveedor') NOT NULL, cliente_id INT UNSIGNED NULL, proveedor_id INT UNSIGNED NULL,
 descripcion VARCHAR(255) NOT NULL, naturaleza ENUM('A Cobrar','A Pagar') NOT NULL,
 monto DECIMAL(15,2) NOT NULL, fecha_vencimiento DATE NOT NULL, creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 INDEX idx_ie_fecha(fecha), INDEX idx_ie_vencimiento(fecha_vencimiento),
 CONSTRAINT fk_ie_cliente FOREIGN KEY(cliente_id) REFERENCES clientes(id) ON DELETE RESTRICT,
 CONSTRAINT fk_ie_proveedor FOREIGN KEY(proveedor_id) REFERENCES proveedores(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS caja_movimientos (
 id INT AUTO_INCREMENT PRIMARY KEY, codigo VARCHAR(30) NOT NULL UNIQUE, fecha DATE NOT NULL,
 origen ENUM('Ingreso/Egreso','Cuenta') NOT NULL, ingreso_egreso_id INT UNSIGNED NULL, concepto_cuenta VARCHAR(150) NULL,
 cuenta_bancaria_id INT NOT NULL, tipo ENUM('Ingreso','Egreso') NOT NULL, descripcion VARCHAR(255) NOT NULL,
 monto DECIMAL(15,2) NOT NULL, usuario_id INT NULL, creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 INDEX idx_caja_fecha(fecha), INDEX idx_caja_ie(ingreso_egreso_id),
 CONSTRAINT fk_caja_ie FOREIGN KEY(ingreso_egreso_id) REFERENCES ingresos_egresos(id) ON DELETE RESTRICT,
 CONSTRAINT fk_caja_banco FOREIGN KEY(cuenta_bancaria_id) REFERENCES cuentas_bancarias(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
