use serde::{Deserialize, Serialize};

/// CompositeMedicalProcedureIdentifier : Identifies relevant medical procedures by their standard codes and modifiers (if applicable).
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct CompositeMedicalProcedureIdentifier {
    /// The diagnosis code pointer.
    #[serde(
        rename = "diagnosisCodePointer",
        skip_serializing_if = "Option::is_none"
    )]
    pub diagnosis_code_pointer: Option<Vec<String>>,
    /// The procedure code. Many payers do not support eligibility checks for specific procedure codes. If the payer does not support procedure codes, they return a generic benefits response for the service type code `30`.
    #[serde(rename = "procedureCode", skip_serializing_if = "Option::is_none")]
    pub procedure_code: Option<String>,
    /// Procedure modifiers that provides additional information related to the performance of the service.
    #[serde(rename = "procedureModifiers", skip_serializing_if = "Option::is_none")]
    pub procedure_modifiers: Option<Vec<String>>,
    /// The product or service ID. This value represents the end of the range of applicable procedure codes. The beginning of the range is listed in `procedureCode`.
    #[serde(rename = "productOrServiceID", skip_serializing_if = "Option::is_none")]
    pub product_or_service_id: Option<String>,
    /// The name of the `productOrServiceIdQualifierCode`. For example, `American Dental Association`.
    #[serde(
        rename = "productOrServiceIdQualifier",
        skip_serializing_if = "Option::is_none"
    )]
    pub product_or_service_id_qualifier: Option<String>,
    /// Identifies the external code list used to provide the specified procedure or service codes. Can be `AD` - American Dental Association, `CJ` - Current Procedural Terminology (CPT) codes, `HC` - Health Care Financing Administration Common Procedural Coding System (HCPCS) Codes, `ID` - International Classification of Diseases 9th Revision, Clinical Modification (ICD-9-CM) - Procedure, `IV` - Home Infusion EDI Coalition (HIEC) Product/Service Code, `N4` - National Drug Code in 5-4-2 Format, or `ZZ` - Mutually Defined
    #[serde(
        rename = "productOrServiceIdQualifierCode",
        skip_serializing_if = "Option::is_none"
    )]
    pub product_or_service_id_qualifier_code: Option<String>,
}

impl CompositeMedicalProcedureIdentifier {
    /// Identifies relevant medical procedures by their standard codes and modifiers (if applicable).
    pub fn new() -> CompositeMedicalProcedureIdentifier {
        CompositeMedicalProcedureIdentifier {
            diagnosis_code_pointer: None,
            procedure_code: None,
            procedure_modifiers: None,
            product_or_service_id: None,
            product_or_service_id_qualifier: None,
            product_or_service_id_qualifier_code: None,
        }
    }
}
