library(testthat) library(rHL7) library(stringr) library(dplyr) test_that("Comprehensive Round-Trip Validation for 113 Segments", { # Sample HL7 v2.3 segment strings covering various types sample_segments <- c( ACC = "ACC|199901011200|1|2|3|4", AL1 = "AL1|1|DA|3^Penicillin|U|Hish rash", DG1 = "DG1|1|I9|250.00^DIABETES MELLITUS|20230101|A", EVN = "EVN|A01|202301011200|||OP01", FT1 = "FT1|1||20230101|20230101|CG|PRO|123.45|1|1", MRG = "MRG|12345^^^MRN|67890", MSA = "MSA|AA|MSG001|Success", MSH = "MSH|^~\\&|SENDAPP|SENDFAC|RECAPP|RECFAC|202301011200||ADT^A01|MSG001|P|2.3", OBR = "OBR|1|ORD001|UNIQ001|80053^BMP|R||202301011200", OBX = "OBX|1|NM|100^GLUCOSE|1|99|mg/dL|70-105|N|||F", PID = "PID|1||12345^^^MRN||DOE^JOHN|DOE^JANE|19800101|M||W|123 MAIN ST^^NEW YORK^NY^10001", PR1 = "PR1|1|I9|12.34^PROCEDURE|20230101", PV1 = "PV1|1|I|200^1^A^FAM||||123^SMITH^JOHN^DR", PV2 = "PV2|1|^S|DIAG|NONE", TXA = "TXA|1|CN|202301011200|||202301011200|||||REF001", NK1 = "NK1|1|DOE^JANE|SPO^SPOUSE|123 MAIN ST", ORC = "ORC|NW|ORD001|UNIQ001|1|202301011200", RXA = "RXA|0|1|202301011200|202301011200|999^ASPIRIN|325|mg", ERR = "ERR|1^2^3^4^5^6^7^8^9", SCH = "SCH|1|2|3|4|5|6|7|8|9|10" ) for (seg in names(sample_segments)) { # 1. Parse the segment get_func <- getExportedValue("rHL7", paste0("get_", toupper(seg))) sample_data <- get_func(sample_segments[seg]) expect_true(is.data.frame(sample_data)) expect_gt(nrow(sample_data), 0) # Check Smart Splitting for PV1 if (seg == "PV1") { expect_true("PATIENT_LOCATION_ROOM" %in% names(sample_data)) expect_equal(as.character(sample_data$PATIENT_LOCATION_ROOM), "1") } # 3. Write the segment write_func <- getExportedValue("rHL7", paste0("write_", toupper(seg))) res_written <- write_func(sample_data) expect_true(is.character(res_written)) expect_true(grepl(seg, res_written)) # 4. Round-trip: re-parse the written string final_data <- get_func(res_written) expect_equal(nrow(final_data), nrow(sample_data)) } })