//! Additional identification numbers for dependents.
//!
//! This module contains structures for providing additional identification numbers
//! for dependents in healthcare eligibility checks. These identifiers are rarely
//! required for standard eligibility checks but may be needed in specific scenarios.
//!
//! ## Usage
//!
//! Most eligibility checks don't require additional identification beyond the
//! standard demographic information (name, date of birth) and member ID. Only
//! include additional identifiers when:
//!
//! - Specifically required by the payer
//! - Requested during error resolution
//! - Dealing with complex insurance arrangements
//! - Working with property and casualty insurance
//!
//! ## Available Identifiers
//!
//! - Insurance policy numbers
//! - Medical record numbers
//! - Plan network identifiers
//! - Patient account numbers
//! - Contract numbers
//! - Identification card serial numbers

use serde::{Deserialize, Serialize};

/// AdditionalIdentificationDependent : Use this object when you need to provide an additional identification number for the dependent. This is rarely required for standard eligibility checks.
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct AdditionalIdentificationDependent {
    /// The Property and Casualty Claim Number associated with the patient. You should only submit this value when when you are submitting an eligibility request to a property and casualty payer.
    #[serde(rename = "agencyClaimNumber", skip_serializing_if = "Option::is_none")]
    pub agency_claim_number: Option<String>,
    /// The contract number for an existing contract between the payer and the provider requesting the eligibility check.
    #[serde(rename = "contractNumber", skip_serializing_if = "Option::is_none")]
    pub contract_number: Option<String>,
    /// This property is never used in practice.
    #[serde(
        rename = "healthInsuranceClaimNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub health_insurance_claim_number: Option<String>,
    /// The identification card serial number. You can include this when the ID card has a number in addition to the member ID number. The Identification Card Serial Number uniquely identifies the card when multiple cards have been or will be issued to a member, such as a replacement card.
    #[serde(
        rename = "identificationCardSerialNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub identification_card_serial_number: Option<String>,
    /// The insurance policy number.
    #[serde(
        rename = "insurancePolicyNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub insurance_policy_number: Option<String>,
    /// The medical record identification number.
    #[serde(
        rename = "medicalRecordIdentificationNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub medical_record_identification_number: Option<String>,
    /// Not intended for most use cases. Only set this when the property and casualty patient identifier is a member ID that would be used in an 837 claim submission.  If the patient has their own member ID for the health plan, you should identify them in the `subscriber` object. If the patient doesn't have their own member ID, don't set this property.
    #[serde(
        rename = "memberIdentificationNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub member_identification_number: Option<String>,
    /// The patient account number.
    #[serde(
        rename = "patientAccountNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub patient_account_number: Option<String>,
    /// The plan network identification number.
    #[serde(
        rename = "planNetworkIdentificationNumber",
        skip_serializing_if = "Option::is_none"
    )]
    pub plan_network_identification_number: Option<String>,
    /// The insurance plan number.
    #[serde(rename = "planNumber", skip_serializing_if = "Option::is_none")]
    pub plan_number: Option<String>,
    /// The insurance group or policy number.
    #[serde(rename = "policyNumber", skip_serializing_if = "Option::is_none")]
    pub policy_number: Option<String>,
}

impl AdditionalIdentificationDependent {
    /// Use this object when you need to provide an additional identification number for the dependent. This is rarely required for standard eligibility checks.
    pub fn new() -> AdditionalIdentificationDependent {
        AdditionalIdentificationDependent {
            agency_claim_number: None,
            contract_number: None,
            health_insurance_claim_number: None,
            identification_card_serial_number: None,
            insurance_policy_number: None,
            medical_record_identification_number: None,
            member_identification_number: None,
            patient_account_number: None,
            plan_network_identification_number: None,
            plan_number: None,
            policy_number: None,
        }
    }
}
