-- Tabel penyimpanan hasil generate tiap fungsi report Fisik (report duatahun). -- Satu baris = satu fungsi untuk satu So_ResultEntryID + bahasa (M_LangID). -- Bahasa: 1 = Indonesia, 2 = English. Keduanya disimpan di tabel yang sama (bukan tabel/kolom terpisah). -- UNIQUE key X_UNIK: satu kombinasi (So_ResultEntryID, T_OrderHeaderID, M_LangID, FunctionName) hanya satu baris (insert ulang = update). -- Database: onedev (sama dengan so_resultentry, t_orderheader, dll) CREATE TABLE `x_report_duatahun_fisik_result` ( `X_ReportDuaTahunFisikResultID` int(11) NOT NULL AUTO_INCREMENT, `X_ReportDuaTahunFisikResultSo_ResultEntryID` int(11) NOT NULL COMMENT 'FK ke so_resultentry', `X_ReportDuaTahunFisikResultT_OrderHeaderID` int(11) NOT NULL COMMENT 'Denormalized, FK ke t_orderheader', `X_ReportDuaTahunFisikResultM_LangID` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1=Indonesia, 2=English (satu tabel untuk semua bahasa)', `X_ReportDuaTahunFisikResultFunctionName` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Nama key hasil: pribadi, keluhan_saat_ini, visus_left, dll', `X_ReportDuaTahunFisikResultResultJSON` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Hasil generate: selalu JSON (array/object/string di-encode jadi JSON)', `X_ReportDuaTahunFisikResultStatusVal` char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Status validasi: Y=validated (val1), N=unvalidated (unval1)', `X_ReportDuaTahunFisikResultCreatedAt` datetime NOT NULL DEFAULT current_timestamp(), `X_ReportDuaTahunFisikResultUpdatedAt` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`X_ReportDuaTahunFisikResultID`), UNIQUE KEY `X_UNIK` (`X_ReportDuaTahunFisikResultSo_ResultEntryID`,`X_ReportDuaTahunFisikResultT_OrderHeaderID`,`X_ReportDuaTahunFisikResultM_LangID`,`X_ReportDuaTahunFisikResultFunctionName`), KEY `idx_T_OrderHeaderID` (`X_ReportDuaTahunFisikResultT_OrderHeaderID`), KEY `idx_UpdatedAt` (`X_ReportDuaTahunFisikResultUpdatedAt`), KEY `X_ReportDuaTahunFisikResultSo_ResultEntryID` (`X_ReportDuaTahunFisikResultSo_ResultEntryID`), KEY `X_ReportDuaTahunFisikResultM_LangID` (`X_ReportDuaTahunFisikResultM_LangID`), KEY `X_ReportDuaTahunFisikResultFunctionName` (`X_ReportDuaTahunFisikResultFunctionName`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cache hasil generate per-fungsi report Fisik (report duatahun)'; -- Jika tabel sudah ada, tambah kolom status validasi: -- ALTER TABLE x_report_duatahun_fisik_result -- ADD COLUMN X_ReportDuaTahunFisikResultStatusVal char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Status validasi: Y=validated (val1), N=unvalidated (unval1)' AFTER X_ReportDuaTahunFisikResultResultJSON;