feat: version 4.12.0 -- Conexiones externas: pacientes de SAGA, empleados de nomina y medicos
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
-- Conexiones externas (conectores de solo lectura, contrato v1 en data/conectores/README.md),
|
||||
-- empleados importados de nómina y vínculo de pacientes con el sistema origen. Idempotente.
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS external_connections (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(120) NOT NULL,
|
||||
base_url VARCHAR(255) NOT NULL,
|
||||
token_encrypted TEXT NOT NULL,
|
||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_by INT NULL,
|
||||
edit_version INT UNSIGNED NOT NULL DEFAULT 1,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_ext_conn_creator FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Una fuente por destino: qué tabla del conector alimenta Pacientes o Empleados, cómo (importar o
|
||||
-- consultar en vivo), el mapeo de campos y el estado de la última sincronización.
|
||||
CREATE TABLE IF NOT EXISTS external_sources (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
purpose ENUM('patients','employees') NOT NULL UNIQUE,
|
||||
connection_id INT NOT NULL,
|
||||
source_key VARCHAR(64) NOT NULL,
|
||||
table_name VARCHAR(64) NOT NULL,
|
||||
mode ENUM('import','live') NOT NULL DEFAULT 'import',
|
||||
field_map_json TEXT NOT NULL,
|
||||
filter_json TEXT NULL,
|
||||
changed_field VARCHAR(64) NULL,
|
||||
last_full_sync_at DATETIME NULL,
|
||||
last_sync_at DATETIME NULL,
|
||||
last_max_recno INT UNSIGNED NULL,
|
||||
last_changed_value VARCHAR(40) NULL,
|
||||
last_result_json TEXT NULL,
|
||||
edit_version INT UNSIGNED NOT NULL DEFAULT 1,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_ext_source_conn FOREIGN KEY (connection_id) REFERENCES external_connections(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS employees (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
identification VARCHAR(40) NOT NULL UNIQUE,
|
||||
last_names VARCHAR(120) NOT NULL DEFAULT '',
|
||||
first_names VARCHAR(120) NOT NULL DEFAULT '',
|
||||
phone VARCHAR(40) NULL,
|
||||
phone2 VARCHAR(40) NULL,
|
||||
birth_date DATE NULL,
|
||||
position VARCHAR(120) NULL,
|
||||
department_name VARCHAR(120) NULL,
|
||||
hire_date DATE NULL,
|
||||
leave_date DATE NULL,
|
||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
in_source TINYINT(1) NOT NULL DEFAULT 1,
|
||||
user_id INT NULL UNIQUE,
|
||||
synced_at DATETIME NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_employee_name (last_names, first_names),
|
||||
CONSTRAINT fk_employee_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Origen del empleado: nómina (se sincroniza) o proveedor de SAGA cargado a mano (médicos que facturan;
|
||||
-- la sincronización de nómina no los inactiva). Correo: los proveedores lo tienen, la nómina no.
|
||||
ALTER TABLE employees ADD COLUMN IF NOT EXISTS origin ENUM('payroll','provider') NOT NULL DEFAULT 'payroll' AFTER is_active;
|
||||
ALTER TABLE employees ADD COLUMN IF NOT EXISTS email VARCHAR(160) NULL AFTER phone2;
|
||||
|
||||
-- Pacientes vinculados al origen (SAGA): source_name guarda el nombre tal como viene (SAGA no
|
||||
-- separa nombres y apellidos ni respeta un orden); mientras recepción no lo separe a mano, el
|
||||
-- nombre visible es ese. Manda el origen en identificación/teléfono/correo/nombre de origen.
|
||||
ALTER TABLE clinic_patients ADD COLUMN IF NOT EXISTS external_source VARCHAR(20) NULL AFTER notes;
|
||||
ALTER TABLE clinic_patients ADD COLUMN IF NOT EXISTS external_id VARCHAR(40) NULL AFTER external_source;
|
||||
ALTER TABLE clinic_patients ADD COLUMN IF NOT EXISTS source_name VARCHAR(160) NULL AFTER external_id;
|
||||
ALTER TABLE clinic_patients ADD COLUMN IF NOT EXISTS name_split TINYINT(1) NOT NULL DEFAULT 1 AFTER source_name;
|
||||
ALTER TABLE clinic_patients ADD COLUMN IF NOT EXISTS synced_at DATETIME NULL AFTER name_split;
|
||||
ALTER TABLE clinic_patients MODIFY phone VARCHAR(40) NOT NULL DEFAULT '';
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_clinic_patient_external ON clinic_patients (external_source, external_id);
|
||||
Reference in New Issue
Block a user