Files
cpone_dashboard/cpone-dashboard/db/migrations/001_init_schema.sql
2026-04-30 14:27:01 +07:00

124 lines
7.3 KiB
SQL

-- Migration 001: Initial schema for cpone_dashboard
-- Naming convention: table=snake_case, column=Prefix_PascalCase (mengikuti cpone)
-- Tidak menggunakan foreign key constraint
-- ============================================================
-- mcu_project
-- Source: cpone.mgm_mcu JOIN cpone.corporate
-- ============================================================
CREATE TABLE IF NOT EXISTS mcu_project (
Mcu_ProjectID INT AUTO_INCREMENT PRIMARY KEY,
Mcu_ProjectMcuID INT NOT NULL, -- Mgm_McuID
Mcu_ProjectCorporateID INT NOT NULL, -- Mgm_McuCorporateID
Mcu_ProjectCorporateName VARCHAR(255), -- corporate.CorporateName
Mcu_ProjectNumber VARCHAR(50), -- Mgm_McuNumber
Mcu_ProjectLabel VARCHAR(255), -- Mgm_McuLabel
Mcu_ProjectBranchID INT DEFAULT 0, -- Mgm_McuM_BranchID
Mcu_ProjectStartDate DATE, -- Mgm_McuStartDate
Mcu_ProjectEndDate DATE, -- Mgm_McuEndDate
Mcu_ProjectIsActive CHAR(1) DEFAULT 'Y', -- Mgm_McuIsActive
Mcu_ProjectTotalParticipant INT DEFAULT 0, -- Mgm_McuTotalParticipant
Mcu_ProjectSyncedAt DATETIME,
UNIQUE KEY uq_mcu_id (Mcu_ProjectMcuID),
INDEX idx_is_active (Mcu_ProjectIsActive),
INDEX idx_dates (Mcu_ProjectStartDate, Mcu_ProjectEndDate)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- mcu_patient
-- Source: cpone.mcu_preregister_patients
-- ============================================================
CREATE TABLE IF NOT EXISTS mcu_patient (
Mcu_PatientID INT AUTO_INCREMENT PRIMARY KEY,
Mcu_PatientPreregisterID INT NOT NULL, -- Mcu_PreregisterPatientsID
Mcu_PatientMcuID INT NOT NULL, -- Mcu_PreregisterPatientsMgm_McuID
Mcu_PatientName VARCHAR(150), -- Mcu_PreregisterPatientsPatientName
Mcu_PatientNIP VARCHAR(50), -- Mcu_PreregisterPatientsNIP
Mcu_PatientGender VARCHAR(10), -- Mcu_PreregisterPatientsGender
Mcu_PatientDOB DATE, -- Mcu_PreregisterPatientsDOB
Mcu_PatientDepartment VARCHAR(500), -- Mcu_PreregisterPatientsDepartment
Mcu_PatientDivision VARCHAR(500), -- Mcu_PreregisterPatientsDivisi
Mcu_PatientPosisi VARCHAR(500), -- Mcu_PreregisterPatientsPosisi
Mcu_PatientIsRegistered CHAR(1) DEFAULT 'N', -- Mcu_PreregisterPatientsIsRegistered
Mcu_PatientOrderID INT DEFAULT 0, -- Mcu_PreregisterPatientsT_OrderHeaderID
Mcu_PatientIsActive CHAR(1) DEFAULT 'Y', -- Mcu_PreregisterPatientsIsActive
Mcu_PatientSyncedAt DATETIME,
UNIQUE KEY uq_preregister_id (Mcu_PatientPreregisterID),
INDEX idx_mcu_id (Mcu_PatientMcuID),
INDEX idx_order_id (Mcu_PatientOrderID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- mcu_patient_schedule
-- Source: cpone.mcu_preregister_date
-- Catatan: tidak semua pasien punya jadwal (opsional)
-- ============================================================
CREATE TABLE IF NOT EXISTS mcu_patient_schedule (
Mcu_PatientScheduleID INT AUTO_INCREMENT PRIMARY KEY,
Mcu_PatientSchedulePreregisterID INT NOT NULL, -- Mcu_PreregisterDateMcu_PreregisterPatientsID
Mcu_PatientScheduleDate DATE NOT NULL, -- Mcu_PreregisterDateCheckinSchedule
Mcu_PatientScheduleIsActive CHAR(1) DEFAULT 'Y', -- Mcu_PreregisterDateIsActive
Mcu_PatientScheduleSyncedAt DATETIME,
INDEX idx_preregister_id (Mcu_PatientSchedulePreregisterID),
INDEX idx_schedule_date (Mcu_PatientScheduleDate)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- mcu_checkinout
-- Source: cpone.preregister_checkin_checkout
-- Catatan: 1 pasien bisa punya > 1 baris (multi-hari)
-- ============================================================
CREATE TABLE IF NOT EXISTS mcu_checkinout (
Mcu_CheckinoutID INT AUTO_INCREMENT PRIMARY KEY,
Mcu_CheckinoutCheckinoutID INT NOT NULL, -- PreregisterCheckInCheckOutID
Mcu_CheckinoutPreregisterID INT NOT NULL, -- PreregisterCheckInCheckOutPreregisterID
Mcu_CheckinoutOrderID INT DEFAULT 0, -- PreregisterCheckInCheckOutT_OrderHeaderID
Mcu_CheckinoutDate DATE NOT NULL, -- PreregisterCheckInCheckOutDate
Mcu_CheckinoutInTime TIME, -- PreregisterCheckInCheckOutInTime
Mcu_CheckinoutOutTime TIME, -- PreregisterCheckInCheckOutOutTime
Mcu_CheckinoutOutUserID INT DEFAULT 0, -- PreregisterCheckInCheckOutOutUserID
Mcu_CheckinoutNextDate DATE, -- PreregisterCheckInCheckOutNextPreregisterDate
Mcu_CheckinoutNote TEXT, -- PreregisterCheckInCheckOutNote
Mcu_CheckinoutIsActive CHAR(1) DEFAULT 'Y', -- PreregisterCheckInCheckOutIsActive
Mcu_CheckinoutSyncedAt DATETIME,
UNIQUE KEY uq_checkinout_segment (
Mcu_CheckinoutPreregisterID,
Mcu_CheckinoutDate,
Mcu_CheckinoutInTime
),
INDEX idx_preregister_id (Mcu_CheckinoutPreregisterID),
INDEX idx_date (Mcu_CheckinoutDate),
INDEX idx_order_id (Mcu_CheckinoutOrderID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- mcu_station_progress (Phase 2)
-- Source: cpone.t_ordersample (lab)
-- + cpone.t_orderdetail->t_test->group_resultdetail->group_result (nonlab)
-- ETL flatten kedua sumber menjadi satu tabel
-- ============================================================
CREATE TABLE IF NOT EXISTS mcu_station_progress (
Mcu_StationProgressID INT AUTO_INCREMENT PRIMARY KEY,
Mcu_StationProgressOrderID INT NOT NULL, -- T_OrderHeaderID
Mcu_StationProgressPreregisterID INT NOT NULL,
Mcu_StationProgressMcuID INT NOT NULL,
Mcu_StationProgressStationID INT NOT NULL, -- T_SampleStationID
Mcu_StationProgressStationName VARCHAR(100), -- T_SampleStationName
Mcu_StationProgressSource VARCHAR(10), -- 'lab' | 'nonlab'
Mcu_StationProgressCheckinDate DATE, -- tanggal checkin pasien
Mcu_StationProgressSamplingAt DATETIME, -- lab: SamplingDate+Time
Mcu_StationProgressReceiveAt DATETIME, -- lab: ReceiveDate+Time
Mcu_StationProgressProcessAt DATETIME, -- lab: ProcessingDate+Time
Mcu_StationProgressDoneAt DATETIME, -- lab: DoneDate+Time | nonlab: result entry time
Mcu_StationProgressSyncedAt DATETIME,
INDEX idx_order_id (Mcu_StationProgressOrderID),
INDEX idx_preregister_id (Mcu_StationProgressPreregisterID),
INDEX idx_mcu_id (Mcu_StationProgressMcuID),
INDEX idx_station_id (Mcu_StationProgressStationID),
INDEX idx_checkin_date (Mcu_StationProgressCheckinDate)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;