From 6946317a68fbd81dcda9b61e83b10627e7d3e7d1 Mon Sep 17 00:00:00 2001 From: Michael Pivato Date: Wed, 3 Jan 2024 18:08:21 +1030 Subject: [PATCH] Replace ComponentSourceType with general SourceType --- src/products/csv.rs | 67 ++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/src/products/csv.rs b/src/products/csv.rs index 6bccfad..4f4ddc2 100644 --- a/src/products/csv.rs +++ b/src/products/csv.rs @@ -41,6 +41,29 @@ impl TryFrom<&String> for SourceType { } } +impl SourceType { + fn from_component_source_type(value: &str) -> anyhow::Result { + match value { + "CD" => Ok(SourceType::CodingDiagnosis), + "CP" => Ok(SourceType::CodingProcedure), + "E" => Ok(SourceType::Encounter), + "P" => Ok(SourceType::Patient), + "R" => Ok(SourceType::Revenue), + "S" => Ok(SourceType::Service), + "T" => Ok(SourceType::Transfer), + "EC" => Ok(SourceType::Encounter), + "CDX" => Ok(SourceType::CodingDiagnosis), + "CPX" => Ok(SourceType::CodingProcedure), + "EX" => Ok(SourceType::Encounter), + "PX" => Ok(SourceType::Patient), + "RX" => Ok(SourceType::Revenue), + "SX" => Ok(SourceType::Service), + "TX" => Ok(SourceType::Transfer), + _ => bail!("Invalid ComponentSourceType found: {}", value), + } + } +} + #[derive(Hash, PartialEq, PartialOrd)] pub enum FilterType { Equal, @@ -78,48 +101,10 @@ pub enum ExtraType { Transfer, } -#[derive(PartialEq)] -pub enum ComponentSourceType { - CodingDiagnosis, - CodingProcedure, - Encounter, - Patient, - Revenue, - Service, - Transfer, - Extra(ExtraType), - Classification, -} - -impl TryFrom<&str> for ComponentSourceType { - type Error = anyhow::Error; - - fn try_from(value: &str) -> Result { - match value { - "CD" => Ok(ComponentSourceType::CodingDiagnosis), - "CP" => Ok(ComponentSourceType::CodingProcedure), - "E" => Ok(ComponentSourceType::Encounter), - "P" => Ok(ComponentSourceType::Patient), - "R" => Ok(ComponentSourceType::Revenue), - "S" => Ok(ComponentSourceType::Service), - "T" => Ok(ComponentSourceType::Transfer), - "EC" => Ok(ComponentSourceType::Classification), - "CDX" => Ok(ComponentSourceType::Extra(ExtraType::CodingDiagnosis)), - "CPX" => Ok(ComponentSourceType::Extra(ExtraType::CodingProcedure)), - "EX" => Ok(ComponentSourceType::Extra(ExtraType::Encounter)), - "PX" => Ok(ComponentSourceType::Extra(ExtraType::Patient)), - "RX" => Ok(ComponentSourceType::Extra(ExtraType::Revenue)), - "SX" => Ok(ComponentSourceType::Extra(ExtraType::Service)), - "TX" => Ok(ComponentSourceType::Extra(ExtraType::Transfer)), - _ => bail!("Invalid ComponentSourceType found: {}", value), - } - } -} - pub enum Component { Constant(String), // File, column_name - Field(String, String), + Field(SourceType, String), } // Frequency per type: @@ -345,10 +330,10 @@ where Component::Constant(record.get("ComponentValueOrField").unwrap().to_owned()) } source => { - let component_source_type = ComponentSourceType::try_from(source)?; + let component_source_type = SourceType::from_component_source_type(source)?; Component::Field( // TODO: Figure this out, should be determined from the source type - "".to_owned(), + component_source_type, // TODO: Field probably needs to be enumed to match onto the correct column in input files record.get("ComponentValueOrField").unwrap().to_owned(), )