← Methods repository
concept

ATC Classification and Defined Daily Dose (DDD)

The WHO Anatomical Therapeutic Chemical (ATC) classification assigns every drug substance to a five-level hierarchy — from broad anatomical group down to the specific chemical substance — while the Defined Daily Dose (DDD) is a standardized unit of measurement (not a prescribing recommendation) representing the assumed average adult maintenance dose per day for the main indication; together, ATC and DDD are the international standard currency for drug utilization research, enabling cross-country and time-trend comparisons that are impossible with US-centric NDC codes alone.

Data_Standardatcddddefined-daily-dosecoding-systemdata-standarddrug-classificationwho-atcdrug-utilization
Methods reference only. Use primary source citations and local policy before applying this in a study protocol, regulatory submission, payer dossier, or clinical decision.

In plain language

The WHO ATC (Anatomical Therapeutic Chemical) system is a five-level coding hierarchy that organizes every drug from broad organ system down to the specific molecule — for example, metformin gets the code A10BA02, placing it in the diabetes drug group (A10), biguanide class (A10BA), and then the specific substance (A10BA02). The DDD (Defined Daily Dose) is the number the WHO assigns as the typical adult maintenance dose per day for that drug's main use — for metformin it is 2 g (2000 mg). Crucially, the DDD is a measurement unit like a "standard drink," not a prescription: it lets researchers count and compare how much of a drug a population uses, without that number telling them anything about whether any individual patient was on the right dose. US pharmacy claims use NDC drug codes instead of ATC, so analysts working with American data must convert through an intermediate vocabulary (RxNorm) to reach ATC — a translation that sometimes fails for drugs with multiple uses or newly approved medicines.

The ATC hierarchy: five levels from organ system to molecule

The Anatomical Therapeutic Chemical (ATC) classification system, maintained by the WHO Collaborating Centre for Drug Statistics Methodology in Oslo, organizes every marketed drug substance into a five-level code. Walking through A10BA02 (metformin) makes each level concrete:

  • Level 1 — Anatomical main group (1 letter): A = Alimentary tract and metabolism. The 14
  • Level 2 — Therapeutic subgroup (2 digits): A10 = Drugs used in diabetes. This level
  • Level 3 — Pharmacological subgroup (1 letter): A10B = Blood glucose-lowering drugs,
  • Level 4 — Chemical subgroup (1 letter): A10BA = Biguanides. The fourth level reaches the
  • Level 5 — Chemical substance (2 digits): A10BA02 = metformin. The fifth level uniquely

Analysts query ATC at whichever level the research question demands. A stewardship report on all antidiabetics queries A10. A comparative study of biguanides queries A10BA. A study of metformin specifically queries A10BA02. The hierarchy is the design tool; the level chosen is an analytic decision that must be pre-specified.

DDD: a measurement unit, not a dose recommendation

The DDD is the assumed average maintenance dose per day for a drug used for its main indication in adults. It is purely a measurement unit — a yardstick that makes the volume of different drugs comparable — not a therapeutic recommendation and not the dose any individual patient should receive. The WHO states this explicitly and emphatically: "The DDD is a unit of measurement and does not necessarily reflect the recommended or prescribed daily dose."

This distinction is the single most important honesty point in applying DDD-based metrics. An analyst who reports "patients received 1.5 DDDs per day on average" is not saying they were over-dosed; they are saying the volume of drug dispensed, expressed as a fraction of the reference unit, was 1.5. The clinical interpretation of that number depends entirely on context.

For metformin (A10BA02), the WHO DDD is 2 g (2000 mg). This is the assumed daily maintenance dose for type 2 diabetes. A patient receiving metformin 500 mg twice daily (1000 mg/day) is receiving 0.5 DDDs/day. A patient on 1000 mg twice daily (2000 mg/day) is receiving 1.0 DDD/day. A patient on 1000 mg three times daily (3000 mg/day) is receiving 1.5 DDDs/day. All three patients are within the licensed dosing range; the DDD simply standardizes the comparison.

Why international RWE speaks ATC while US pharmacy claims speak NDC

US pharmacy claims use NDC (National Drug Code) as the primary drug identifier. NDC is package-level and labeler-specific — excellent for identifying the exact dispensed product, but ill-suited for international comparison or therapeutic-class grouping without a mapping layer.

International drug utilization research — WHO drug statistics, OECD health data, ECDC antimicrobial surveillance, EMA post-authorization safety studies, pan-European pharmacoepidemiology networks — uses ATC/DDD as the common currency. This is because:

1. ATC transcends country-specific billing codes. The same metformin molecule carries ATC A10BA02 in the US, UK, Sweden, Germany, and Japan, allowing direct cross-country comparison. 2. DDD/1000 inhabitants/day is scale-invariant. A rate of 300 DDD/1000/day for metformin means the same thing regardless of the currency or healthcare system.

The NDC-to-ATC crosswalk path is: NDC → RxNorm (ingredient level via RxNav) → ATC (via the RxClass service using the `classType=ATC1-4` endpoint). This three-step chain is the standard approach for US claims studies that need to report in ATC terms or link to European registries. The chain is lossy in at least three documented ways:

  • Combination products map to multiple ATC codes. A fixed-dose combination tablet containing
  • One substance, multiple ATC codes for different indications. Aspirin is the canonical
  • ATC assignment lag for new substances. Newly approved drugs may lack an ATC code at

DDD/1000 inhabitants/day: the population utilization metric

The standard WHO aggregate drug utilization metric is:

DDD / 1000 inhabitants / day = (Total DDDs dispensed in period) / (population × days in period) × 1000

This quantity answers: "Of every 1000 people in this population, how many are (notionally) on a full DDD of this drug every day?" A value of 300 DDD/1000/day for metformin means that, if everyone took exactly one DDD per day, 30% of the population (300 per 1000) would be treated. It is a utilization intensity measure, not a prevalence measure — the two will differ whenever the actual prescribed dose differs from the DDD.

When computing DDD/1000/day from US pharmacy claims rather than census population, the denominator should be enrolled person-days, not census population. Mixing the two numerator and denominator populations creates a ratio that is neither interpretable nor comparable to WHO country-level statistics.

DDD vs days_supply vs PDC: what each measures and when to prefer each

These three quantities answer different questions from the same dispensing record:

  • DDDs: Volume of drug (how much was dispensed in WHO standardized units). Answers "how
  • days_supply: Coverage duration as recorded by the dispensing pharmacy. Answers "how long
  • PDC (Proportion of Days Covered): Adherence metric. Uses days_supply to build an exposure

For US claims adherence studies (PDC, MPR, persistence), days_supply is the correct input — DDD is irrelevant. For international utilization comparison and volume measurement, DDD is the correct metric — days_supply units differ across countries and pharmacy systems.

Where DDD breaks: seven documented failure modes

1. Pediatrics. The DDD is defined for adults. Pediatric dosing is weight-based and age- adjusted; a child prescribed amoxicillin at the correct pediatric dose will appear to receive a fraction of the DDD that has no clinical interpretation. DDD/1000/day is uninformative for pediatric populations and should never be used as an adherence proxy.

2. Renal and hepatic dosing. Drugs with mandatory dose reductions in renal impairment (e.g., metformin is contraindicated in severe CKD; most direct oral anticoagulants require dose reduction) will show patients receiving less than 1 DDD/day — not because of poor adherence but because 1 DDD is the wrong target for their physiology.

3. PRN (as-needed) medications. NSAIDs, analgesics, migraine treatments, and benzodiazepines used on demand have no stable daily dose. DDD/1000/day for a PRN drug mixes usage intensity with number of users in a way that is difficult to disentangle.

4. Topical and transdermal formulations. Many dermatological preparations have DDDs expressed in grams of ointment, which bears no obvious relationship to therapeutic effect or coverage.

5. Combination products. As noted above, a single dispensing event for a fixed-dose combination generates multiple DDDs for different component ATC codes, requiring care to avoid double-counting at the patient level while correctly attributing volume to each component at the population level.

6. Biologics and many specialty drugs. Some injectable biologics have no assigned DDD, either because the molecule was approved after ATC assignment was established or because weight-based or body-surface-area dosing makes a fixed DDD meaningless. Adalimumab, for example, has a DDD of 1.4 mg assigned in a specific formulation unit that requires careful strength conversion. Checking the WHO ATC/DDD index for a "no DDD assigned" status before computing any volume metric is essential.

7. Off-label or non-main-indication use. A drug prescribed for an indication other than the main indication used to set the DDD will appear to receive more or fewer DDDs than expected. Aspirin at antithrombotic doses (75–100 mg) is prescribed at roughly 1/10 of the 500 mg analgesic DDD (N02BA01); a patient on aspirin for secondary prevention will appear to receive only 0.15–0.2 DDDs/day using the analgesic DDD, which is exactly wrong for characterizing antithrombotic use.

ATC-DDD versioning: the reproducibility requirement

The WHO Collaborating Centre updates the ATC/DDD system annually, typically effective 1 January. Updates include: new ATC codes for newly approved substances, DDD changes for existing drugs (based on accumulating prescribing evidence), reclassifications moving a drug from one ATC branch to another, and deletions. A DDD that was 2 g in one year may change in a subsequent update.

For RWE reproducibility, this means: (1) always report the ATC/DDD version used; (2) pin the version at study initiation and do not update mid-study; (3) when replicating an earlier study, use the version in force at the time of the original analysis; (4) be alert to version-change artifacts in longitudinal trend data — a step in DDD/1000/day over time may be an ATC reclassification rather than a real change in prescribing practice.

Pros, cons, and trade-offs

ATC classification - Pros: internationally standardized and maintained by a single authoritative body (WHO Collaborating Centre, Oslo); enables cross-country and cross-database drug class comparison without vocabulary harmonization; hierarchical design allows analysis at any level of therapeutic granularity; freely available and openly documented; used as the classification layer in OMOP CDM and linked to RxNorm via RxClass; required for regulatory submissions to EMA and many HTA bodies; ESAC, OECD, WHO country-level statistics all report in ATC/DDD. - Cons: not natively present in US pharmacy claims (requires NDC→RxNorm→ATC crosswalk with associated lossiness); annual versioning creates reproducibility obligations; combination products require multi-code assignment; indication-dependent codes (aspirin) demand clinical context that claims rarely provide; lag for newly approved substances.

DDD as a utilization unit - Pros: scale-invariant, enabling direct comparison across drugs of different potency; internationally recognized and applied consistently; allows computation of "treated patient equivalents" for budget-impact and policy purposes; technically simple once the DDD value is known (dispensed quantity × strength / DDD). - Cons: not a recommended dose, not a therapeutic target, not a coverage measure, and not an adherence metric; systematically wrong for pediatrics, renally-adjusted doses, PRN use, biologics without DDDs, and off-label use; requires knowledge of dispensed quantity (tablets) and strength (mg), which is sometimes absent or unreliable in claims; combination products require splitting.

When to use

Use ATC classification when: building drug exposure definitions that must be comparable across data sources, countries, or time periods; reporting to regulatory bodies or HTA organizations that require ATC codes; constructing therapeutic-class-level drug lists from US claims (NDC→RxNorm→ATC→expand back to ingredient) for inclusion/exclusion criteria; linking US claims data to international registries or European databases; constructing off-label use studies where therapeutic class membership is the independent variable.

Use DDD/1000/day when: measuring population-level drug utilization volume for post-marketing surveillance, stewardship programs, or market-access submissions; comparing utilization across countries, regions, or time periods in a format consistent with WHO/OECD statistics; computing budget-impact denominators at the health system level; expressing drug volume in a unit that is independent of the number of dosing units per package.

When NOT to use

Do NOT use DDD as a proxy for adherence or days of coverage in individual-level analyses. For adherence, use days_supply-based PDC or MPR. A patient who fills 90 DDDs of metformin (180 tablets × 1000 mg) is not necessarily adherent for 90 days; the actual coverage depends on the prescribed regimen, which the DDD does not encode.

Do NOT apply ATC/DDD to pediatric populations without explicitly acknowledging and quantifying the dose-DDD mismatch. Reporting DDD/1000 children/day for an antibiotic is numerically computable but clinically misleading.

Do NOT treat the ATC/DDD crosswalk as a solved problem in US claims. The NDC→RxNorm→ATC chain fails silently for: combination products (one NDC → multiple ATC codes), off-label use (wrong ATC level selected), biologics without DDDs, and newly approved drugs without ATC codes. Always audit unmapped NDCs and report the fraction assigned an ATC code.

Do NOT use a stale ATC/DDD version across a multi-year study without checking whether any relevant DDD assignments or reclassifications occurred during the study period. A trend artifact created by a WHO version update is indistinguishable from a real prescribing shift in the data.

Do NOT use DDD to compare dosing adequacy across renally-impaired patients versus normal-renal patients. The apparent lower DDDs in CKD patients reflects guideline-concordant dose reduction, not inadequate treatment.

Interpreting the output

In the worked example, a single dispensing of metformin 1000 mg × 180 tablets yields 90 DDDs. At the plan level, 90000 DDDs dispensed across 10000 members in a 30-day month yields 300 DDD/1000 members/day.

(1) Formal interpretation. The 90-DDD single-dispensing quantity is a volume measure expressing how many "standard treatment days" (at the WHO assumed maintenance dose of 2000 mg) are contained in this dispensing event. The ratio DDDs = 180000 mg / 2000 mg = 90 is dimensionless in the sense that it expresses dispensed volume relative to the reference unit. The population rate of 300 DDD/1000 members/day is a utilization intensity measure: if the entire plan population took exactly one DDD of metformin daily, 30% of members (300 per 1000) would be on therapy. Because actual prescribed doses (typically 1000–2000 mg/day) bracket the 2000 mg DDD closely for metformin, this metric is reasonably well-behaved for this drug — but the same arithmetic applied to aspirin or a biologic would require far more interpretation.

(2) Practical interpretation. A plan pharmacist reviewing the 300 DDD/1000/day figure can compare it to WHO country-level benchmarks or prior-year plan data to assess whether metformin utilization is changing. A formulary analyst can multiply the total DDDs dispensed by the cost per DDD to estimate plan spend. Neither can conclude from this metric alone that patients are adherent, that doses are appropriate, or that metformin is causing any clinical outcome. If the question becomes "are patients taking enough metformin to achieve glycemic targets," the DDD is the wrong tool — the analyst needs HbA1c laboratory data and prescribed dose, not DDDs.

Worked example

Scenario

A health plan pharmacist wants to report metformin utilization for March 2023 in the format required by a WHO drug utilization study: DDDs per 1000 members per day. She starts with one representative pharmacy claim to confirm the DDD arithmetic, then scales to the full plan population. Metformin's ATC code is A10BA02 and its WHO DDD is 2000 mg (2 g).

Dataset

One pharmacy claim for metformin (representative of the plan data), plus the plan-level aggregate. The claim shows the dispensed product at the ATC and DDD level needed for calculation. Strength is per tablet; quantity is the number of tablets dispensed.

claim_idfill_datedrug_nameatc_codewho_ddd_mgquantity_tabletsstrength_mg_per_tablet
C0012023-03-01metforminA10BA0220001801000

Steps

  • Total milligrams dispensed in claim C001: 180 * 1000 = 180000 mg.

  • Convert to DDDs: 180000 / 2000 = 90 DDDs. This single dispensing contains 90 standard treatment days of metformin at the WHO reference dose — note this does not mean the patient is adherent for 90 days; the actual coverage depends on the prescribed regimen (days_supply on the claim, not the DDD).

  • Summing across all metformin claims for the plan's 10000 members in March 2023 (30 days), total DDDs dispensed = 90000 DDDs (hypothetical plan-level aggregate).

  • Compute denominator in person-days: 10000 * 30 = 300000 person-days.

  • DDD per person per day: 90000 / 300000 = 0.3.

  • Scale to per 1000 members: 0.3 * 1000 = 300 DDD/1000 members/day. This is the standard WHO utilization rate. It means: if every member took exactly one DDD of metformin daily, 300 out of 1000 (30%) would be on therapy.

Result

Single claim: 180 1000 = 180000 mg total; 180000 / 2000 = 90 DDDs. Plan level March 2023: 90000 DDDs across 10000 members over 30 days; denominator = 10000 30 = 300000 person-days; rate = 90000 / 300000 = 0.3 DDD/person/day; scaled = 0.3 * 1000 = 300 DDD/1000 members/day. This rate is a volume measure — it does not indicate adherence, prescribed dose adequacy, or clinical outcomes.

Runnable example

python implementation

Three utilities for ATC/DDD work in US pharmacy claims: (A) look up a substance's DDD value from the RxClass/WHO index via the RxNav API; (B) convert a dispensing record's quantity and strength to DDDs; (C) compute the DDD/1000 enrolled members/day...

import requests
import pandas as pd

WHO_DDD_TABLE = {
    "A10BA02": {"ddd_mg": 2000, "unit": "mg", "substance": "metformin"},
    "C10AA01": {"ddd_mg": 20,   "unit": "mg", "substance": "simvastatin"},
    "C10AA05": {"ddd_mg": 20,   "unit": "mg", "substance": "atorvastatin"},
    "N02BA01": {"ddd_mg": 3000, "unit": "mg", "substance": "aspirin (analgesic)"},
    "B01AC06": {"ddd_mg": 75,   "unit": "mg", "substance": "aspirin (antiplatelet)"},
}
# NOTE: always load DDD values from the pinned WHO ATC/DDD index release for your study;
# this table is illustrative only. Pin the release year in every study protocol.
ATC_DDD_RELEASE = "2024"


# ── A. DDD value lookup ──────────────────────────────────────────────────────
def get_ddd_mg(atc_code: str) -> dict | None:
    """Return the WHO DDD metadata for an ATC code from the local reference table.
    In production, load the full WHO index CSV; this snippet uses a small illustrative dict."""
    entry = WHO_DDD_TABLE.get(atc_code.upper())
    if entry:
        return {**entry, "atc": atc_code, "release": ATC_DDD_RELEASE}
    return None


# ── B. Convert a single dispensing to DDDs ───────────────────────────────────
def dispensing_to_ddds(quantity_units: int, strength_mg: float, atc_code: str) -> float | None:
    """Convert a dispensing event (quantity × strength) to DDDs for the given ATC code.

    Parameters
    ----------
    quantity_units : number of tablets, capsules, or other unit-dose items dispensed
    strength_mg    : milligrams per unit-dose item
    atc_code       : 7-character ATC code (e.g. 'A10BA02')

    Returns None if the ATC code has no DDD entry (e.g. biologic without a DDD).

    Examples
    --------
    >>> dispensing_to_ddds(180, 1000, "A10BA02")
    90.0  # 180 * 1000 / 2000
    >>> dispensing_to_ddds(30, 20, "C10AA05")
    30.0  # 30 * 20 / 20
    """
    ddd_info = get_ddd_mg(atc_code)
    if ddd_info is None:
        return None
    total_mg = quantity_units * strength_mg
    return total_mg / ddd_info["ddd_mg"]


# ── C. DDD/1000 enrolled members/day from a claims DataFrame ────────────────
def ddd_per_1000_per_day(
    rx: pd.DataFrame,
    enroll: pd.DataFrame,
    atc_code: str,
    period_start: pd.Timestamp,
    period_end: pd.Timestamp,
) -> float:
    """Compute WHO aggregate DDD/1000 enrolled members/day for one ATC code and period.

    rx columns: fill_date (Timestamp), atc_code (str), quantity_units (int), strength_mg (float)
    enroll columns: person_id (any), enroll_start (Timestamp), enroll_end (Timestamp),
                    ma_only (bool)  — exclude MA-only spans (no FFS pharmacy claims)

    Returns nan if no enrolled person-days in the period.
    """
    ddd_info = get_ddd_mg(atc_code)
    if ddd_info is None:
        return float("nan")

    # Numerator: total DDDs dispensed in the period
    mask = (
        (rx["atc_code"] == atc_code)
        & (rx["fill_date"] >= period_start)
        & (rx["fill_date"] <= period_end)
    )
    rx_period = rx.loc[mask].copy()
    rx_period["ddds"] = (
        rx_period["quantity_units"] * rx_period["strength_mg"] / ddd_info["ddd_mg"]
    )
    total_ddds = rx_period["ddds"].sum()

    # Denominator: FFS-observable enrolled person-days in the period
    e = enroll.loc[~enroll["ma_only"]].copy()
    e["days"] = (
        e["enroll_end"].clip(upper=period_end) - e["enroll_start"].clip(lower=period_start)
    ).dt.days.clip(lower=0)
    person_days = e["days"].sum()

    if person_days == 0:
        return float("nan")

    return 1000.0 * total_ddds / person_days


# ── Demo ─────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
    # Single-claim DDD verification from the worked example
    qty, strength, atc = 180, 1000, "A10BA02"
    ddds = dispensing_to_ddds(qty, strength, atc)
    print(f"{qty} tablets × {strength} mg / {get_ddd_mg(atc)['ddd_mg']} mg DDD = {ddds:.0f} DDDs")
    # → 180 tablets × 1000 mg / 2000 mg DDD = 90 DDDs

    # Population rate: 90000 DDDs across 10000 members in 30 days
    total_ddds_plan = 90000
    members = 10000
    days = 30
    rate = 1000 * total_ddds_plan / (members * days)
    print(f"Plan rate: 1000 * {total_ddds_plan} / ({members} * {days}) = {rate:.0f} DDD/1000/day")
    # → Plan rate: 1000 * 90000 / (10000 * 30) = 300 DDD/1000/day
r implementation

R equivalents using base R and dplyr: (A) DDD lookup from a local reference table; (B) per-claim DDD conversion; (C) DDD/1000 enrolled members/day from a data frame of claims. Structure mirrors the Python version. In production, load the WHO ATC/DDD index...

library(dplyr)

# WHO DDD reference (illustrative subset — load from the full WHO index in production)
WHO_DDD_TABLE <- data.frame(
  atc_code    = c("A10BA02", "C10AA01", "C10AA05", "N02BA01", "B01AC06"),
  substance   = c("metformin", "simvastatin", "atorvastatin",
                  "aspirin (analgesic)", "aspirin (antiplatelet)"),
  ddd_mg      = c(2000, 20, 20, 3000, 75),
  unit        = rep("mg", 5),
  stringsAsFactors = FALSE
)
ATC_DDD_RELEASE <- "2024"


# ── A. DDD lookup ────────────────────────────────────────────────────────────
get_ddd_mg <- function(atc_code) {
  row <- WHO_DDD_TABLE[WHO_DDD_TABLE$atc_code == toupper(atc_code), ]
  if (nrow(row) == 0) return(NULL)
  as.list(c(row, release = ATC_DDD_RELEASE))
}


# ── B. Convert a dispensing to DDDs ──────────────────────────────────────────
dispensing_to_ddds <- function(quantity_units, strength_mg, atc_code) {
  # quantity_units: tablets/capsules/units dispensed
  # strength_mg: mg per unit-dose item
  # Returns NA if ATC code has no DDD entry.
  ddd_info <- get_ddd_mg(atc_code)
  if (is.null(ddd_info)) return(NA_real_)
  total_mg <- quantity_units * strength_mg
  total_mg / ddd_info$ddd_mg
}


# ── C. DDD/1000 enrolled members/day ─────────────────────────────────────────
ddd_per_1000_per_day <- function(rx, enroll, atc_code, period_start, period_end) {
  # rx: fill_date (Date), atc_code (chr), quantity_units (int), strength_mg (dbl)
  # enroll: person_id, enroll_start (Date), enroll_end (Date), ma_only (lgl)
  ddd_info <- get_ddd_mg(atc_code)
  if (is.null(ddd_info)) return(NA_real_)

  # Numerator: total DDDs in period
  rx_period <- rx |>
    filter(atc_code == !!atc_code,
           fill_date >= period_start,
           fill_date <= period_end) |>
    mutate(ddds = quantity_units * strength_mg / ddd_info$ddd_mg)
  total_ddds <- sum(rx_period$ddds, na.rm = TRUE)

  # Denominator: FFS-observable enrolled person-days (exclude MA-only spans)
  person_days <- enroll |>
    filter(!ma_only) |>
    mutate(days = as.integer(
      pmin(enroll_end, period_end) - pmax(enroll_start, period_start)
    ) |> pmax(0L)) |>
    pull(days) |>
    sum()

  if (person_days == 0) return(NA_real_)
  1000 * total_ddds / person_days
}


# ── Demo: verify worked-example arithmetic ────────────────────────────────────
ddds_one_claim <- dispensing_to_ddds(180, 1000, "A10BA02")
cat(sprintf("180 tablets x 1000 mg / 2000 mg DDD = %.0f DDDs\n", ddds_one_claim))
# -> 180 tablets x 1000 mg / 2000 mg DDD = 90 DDDs

plan_rate <- 1000 * 90000 / (10000 * 30)
cat(sprintf("Plan rate: 1000 * 90000 / (10000 * 30) = %.0f DDD/1000/day\n", plan_rate))
# -> Plan rate: 1000 * 90000 / (10000 * 30) = 300 DDD/1000/day