{
  "schema_version": "1.0",
  "description": "Controlled vocabulary values for enumerated columns in the TwinFyRx prod schema. All values are validated at ingestion time and stable across minor schema versions.",
  "enums": {
    "therapy_pattern": {
      "description": "Therapy behavior classification — how a drug is typically dosed and how long therapy continues. Used to filter the suspecting rules pipeline and segment economics analyses.",
      "values": ["maintenance_continuous", "maintenance_intermittent", "acute_short_course", "prn_chronic", "prn_acute", "mixed_contextual"],
      "tables": ["drug_profile", "suspecting_rule"]
    },
    "benefit_channel": {
      "description": "Which benefit type reimburses this drug — retail pharmacy (Part D / commercial Rx), medical (Part B / J-code claim), or both.",
      "values": ["pharmacy_only", "medical_only", "dual_channel"],
      "tables": ["drug_profile"]
    },
    "rule_category": {
      "description": "The primary clinical signal type that drives a suspecting rule. Determines the shape of the rule_logic JSON — see rule_logic_schema.json for per-category schemas.",
      "values": ["prescriber_specialty", "patient_age", "patient_gender", "concurrent_rx", "medical_claims_history", "compound", "single_indication"],
      "tables": ["suspecting_rule"]
    },
    "rule_strength": {
      "description": "How strongly the rule affects the suspected diagnosis. 'exclusion' rules lower confidence (away-from logic); 'strong_prior' is high-confidence toward a diagnosis; 'weak_prior' is a supporting signal.",
      "values": ["exclusion", "strong_prior", "weak_prior"],
      "tables": ["suspecting_rule"]
    },
    "indication_direction": {
      "description": "Whether the rule moves a claim toward a suspected diagnosis, away from one, or switches between multiple targets based on a branching field (prescriber specialty).",
      "values": ["toward", "away", "switch"],
      "tables": ["suspecting_rule"]
    },
    "signal_source": {
      "description": "Which data source(s) the rule consumes. Matches the data_requirements array in the rule row.",
      "values": ["rx_only", "demographics", "concurrent_rx", "medical_claims_history", "compound"],
      "tables": ["suspecting_rule"]
    },
    "price_source": {
      "description": "Which pricing benchmark a mart_ndc_economics row derives from.",
      "values": ["nadac", "asp"],
      "tables": ["mart_ndc_economics", "mart_clinical_drug_economics", "mart_ingredient_economics", "mart_atc_class_economics"]
    },
    "billing_unit": {
      "description": "The unit of measure used for pricing and normalized package-size calculations.",
      "values": ["EA", "ML", "GM"],
      "tables": ["nadac_pricing", "asp_payment_limits", "normalized_package_size"]
    },
    "package_econ_confidence": {
      "description": "Confidence in the normalized_billing_unit assignment for a given NDC package.",
      "values": ["high", "medium", "low"],
      "tables": ["normalized_package_size", "mart_ndc_economics"]
    },
    "friction_category": {
      "description": "Composite access friction tier derived from the access_friction_score (0–1). Indicates how difficult Part D payers make it to obtain this drug.",
      "values": ["very_low", "low", "moderate", "high", "very_high"],
      "tables": ["drug_access_friction"]
    },
    "attribution_method": {
      "description": "How the PBM was attributed to a pharmacy claim or plan — direct inference from Medicare plan data, backfill from BIN/PCN, or BIN-only backfill.",
      "values": ["inference", "bin_pcn_backfill", "bin_backfill"],
      "tables": ["pbm_market_snapshot", "pbm_inference"]
    },
    "pharmacy_type": {
      "description": "High-level pharmacy category in the national pharmacy directory.",
      "values": ["independent_unaffiliated", "national_chain", "mass_merch", "ltc", "grocery", "specialty", "regional", "mail_order"],
      "tables": ["pharmacy_directory"]
    }
  }
}
