Replace ComponentSourceType with general SourceType

This commit is contained in:
Michael Pivato
2024-01-03 18:08:21 +10:30
parent 318da4f17d
commit 6946317a68

View File

@@ -41,6 +41,29 @@ impl TryFrom<&String> for SourceType {
}
}
impl SourceType {
fn from_component_source_type(value: &str) -> anyhow::Result<Self> {
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<Self, Self::Error> {
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(),
)