Making Sense of Drug Prices

Drug pricing is complicated. In this post I take a look at reconciling ASP and WAC prices, focusing on normalising the WAC price per billing unit to achieve a price which is comparable to ASP. This post includes a number of case studies with the objective of laying out and testing a methodology for understanding and dealing with these data. There’s a fair amount of repetition, but I wanted to test the approach across a number of drugs.

First we need to lay out some terminology.

HCPCS and NDC

HCPCS (Healthcare Common Procedure Coding System) is a set of codes managed by the CMS (Centres for Medicare & Medicaid Services) used to refer to drugs and procedures.

  hcpcs                                            description
1 A4218 Sterile saline or water, metered dose dispenser, 10 ml
2 J9357            Injection, valrubicin, intravesical, 200 mg
3 Q2010                Injection, glatiramer acetate, per dose

A HCPCS code consists of 5 characters (one letter followed by four digits). The letter encodes a category:

  • A: Transportation, Medical & Surgical Supplies, Miscellaneous & Experimental
  • B: Enteral and Parenteral Therapy
  • C: Temporary Hospital Outpatient Prospective Payment System
  • D: Dental Procedures
  • E: Durable Medical Equipment
  • G: Temporary Procedures & Professional Services
  • H: Rehabilitative Services
  • J: Drugs Administered Other Than Oral Method, Chemotherapy Drugs
  • K: Temporary Codes for Durable Medical Equipment Regional Carriers
  • L: Orthotic/Prosthetic Procedures
  • M: Medical Services
  • P: Pathology and Laboratory
  • Q: Temporary Codes
  • R: Diagnostic Radiology Services
  • S: Private Payer Codes
  • T: State Medicaid Agency Codes
  • V: Vision/Hearing Services

NDC (National Drug Code) is a set of codes, each of which refers to a specific product.

A single HCPCS code can be associated with multiple NDCs. For example, A4218 is associated with just one NDC (49502-0501-20), while Q2010 is linked to two NDCs and J9357 is connected to four NDCs.

  hcpcs         ndc
1 A4218 49502050120
2 J9357 53014021604
3 J9357 53014021624
4 J9357 67979000101
5 J9357 67979000102
6 Q2010 00088115003
7 Q2010 00088115330

Equally, it’s possible for an NDC to map to multiple HCPCS. For example, NDC 00002850101 is linked to HCPCS J1815, J1817 and J1820.

          ndc hcpcs
1 00002850101 J1815
2 00002850101 J1817
3 00002850101 J1820
4 00078041761 J7527
5 00078041761 J7599
6 00078041761 J8561
7 62991109903 J7669
8 62991109903 J7670

An NDC code consists of 11 digits, divided into three groups, which encode the manufacturer, product and package size. For example, both NDCs for Q2010 come from the same manufacturer (00088), while for J9357 the NDCs come from two distinct manufacturers (53014 and 53014). The two NDCs 67979-0001-01 and 67979-0001-02 represent two different package sizes (01 and 02) for the same product (0001), while 00088-1150-03 and 00088-1153-30 are for different products and package sizes.

Drug Prices

There are a variety of different approaches to drug pricing. The ones that will be pertinent here are:

  • WAC (Wholesale Acquisition Cost) — The price at which a manufacturer sells a drug to a wholesaler. It does not include any discounts, rebates or concessions. This is effectively the nominal price. WAC prices are assigned per NDC code.
  • ASP (Average Sales Price) — The average price at which a drug is sold, including any discounts, rebates or concessions. Only applies to Part B drugs (drugs which are administered by a service provider like a doctor, hospital or clinic), which are reimbursed at a rate of ASP plus 6%. ASP prices are assigned per HCPCS (billing) code.

ASP is calculated based on information submitted to CMS by the drug manufacturers. ASP is a weighted average over NDCs and represents the average price per billing unit. The weighting factor takes into account the number of billing units per NDC.

A manufacturer sells a carton of 5 ampoules. Each ampoule contains 50 mg of the drug. The billing code is per 10 mg. The total amount of the drug in the carton is 250 mg, so it corresponds to 25 (250 mg / 10 mg) billing units.
A manufacturer sells 50 ml ampoules containing a drug with strength 2 mg/ml. The corresponding billing unit is 1 mg. Each ampoule contains 100 mg of the drug, which corresponds to 100 (100 mg / 1 mg) billing units.

Data

To understand the relationship between the ASP and WAC prices we’re going to use two sources of information on NDC packages. The first of these is a combined crosswalk between NDC and HCPCS provided by the National Bureau of Economic Research (NBER) (National Bureau of Economic Research). These data are rather wide, but a sample of columns is shown below.

           ndc hcpcs pkg_items pkg_measure pkg_type route billing_units amount measure   cf
1  00002751659 J1815       3.0          ML       CT    SC            ML    5.0       U 20.0
2  00002751659 J1820       3.0          ML       CT    SC            ML  100.0       U  1.0
3  00002879859 J1815       3.0          ML       SR    SC            ML    5.0       U  2.0
4  00003281411 J0129       0.4          ML       SR    SC            ML   10.0      MG 12.5
5  00006386203 J8501       3.0          EA       PG    PO            EA    5.0      MG 19.0
6  00006386203 K0415       3.0          EA       PG    PO            EA    1.0      MG 95.0
7  00781941292 J0290       1.0          EA       VL    IJ            EA  500.0      MG  2.0
8  23155060041 J2250       2.0          ML       VL    IJ            ML    1.0      MG  1.0
9  42023017905 J0592       1.0          ML       VL    IJ            ML    0.1      MG  3.0
10 63323069030 J7608       3.0          ML      SOL    IH            ML    1.0      GM  0.2
11 76045000410 J2274       1.0          ML       SR    IJ            ML   10.0      MG  0.2
12 76045000410 J2275       1.0          ML       SR    IJ            ML   10.0      MG  0.2

These are the key fields:

  • pkg_items — amount of product in NDC package;
  • pkg_measure — unit associated with pkg_items;
  • billing_units — unit used for NDC billing;
  • amount and measure — amount of product in a HCPCS billing unit;
  • cf — rate to convert HCPCS quantity to NDC quantity (ratio of NDC amount to HCPCS amount).

The second source of data is the quarterly NDC/HCPCS crosswalk provided by CMS. We’ll be using the data for October 2020.

           ndc hcpcs                   drug_name pkg_size pkg_qty bill_units bill_units_pkg
1  00002751659 J1815                     Humalog        3       5       60.0          300.0
2  00002751659 J1817                     Humalog        3       5        6.0           30.0
3  00002879859 J1815           Humalog Mix 50/50        3       5       60.0          300.0
4  00003281411 J0129                     ORENCIA      0.4       4        5.0           20.0
5  00006386203 J8501              Emend Tri-Fold        1       3       57.0           57.0
6  00781941292 J0290           Ampicillin Sodium        1      10        2.0           20.0
7  23155060041 J2250               Midazolam HCl        2      25        2.0           50.0
8  42023017905 J0592 Buprenorphine HCl Injection        1       5        3.0           15.0
9  63323069030 J7608              Acetylcysteine       30       3        6.0           18.0
10 76045000410 J2270            Morphine Sulfate        1      24        0.2            4.8

In almost all cases the value of bill_units_pkg (billable units per package) appears to be the product of pkg_qty (items per package) and bill_units (billable units per package). I assume that the exceptions are either anomalies or dirty data. We’ll ignore those for the moment and just assume that the bill_units_pkg field is redundant and this drop it.

That’s everything we need. So let’s take a look at some examples.

Picture of vials of Lioresal with details.

Case Study: Baclofen

The HCPCS code J0475 is for a Baclofen 10 mg injection. It corresponds to a number of NDC codes. The ASP price for J0475 for the period 1 January to 31 March 2022 is 181.57 USD. After adjusting for the 6% premium this becomes 171.29 USD. This is the price for 10 mg (the “billing unit”) of the drug.

Let’s take a look at the description and strength for a subset of NDC codes associated with J0475. This information is gathered from the National Drug Codes List.

          ndc                                                  description    strength
1 58281056001 1 ampoule in 1 package; each ampoule is 20 ml (total: 20 ml) 0.5 [mg/ml]
2 58281056002 2 ampoule in 1 package; each ampoule is 20 ml (total: 40 ml) 0.5 [mg/ml]
3 58281056102  2 ampoule in 1 package; each ampoule is 5 ml (total: 10 ml) 2.0 [mg/ml]
4 58281056301 1 ampoule in 1 package; each ampoule is 20 ml (total: 20 ml) 2.0 [mg/ml]
5 58281056302 2 ampoule in 1 package; each ampoule is 20 ml (total: 40 ml) 2.0 [mg/ml]
6 70257056301 1 ampoule in 1 package; each ampoule is 20 ml (total: 20 ml) 2.0 [mg/ml]
7 70257056302 2 ampoule in 1 package; each ampoule is 20 ml (total: 40 ml) 2.0 [mg/ml]

The values in the amount and measure columns are all the same since the the HCPCS code J0475 corresponds to 10 mg of Baclofen. The combination of pkg_items and pkg_measure gives the ampoule size (see the description data).

Let’s try to understand these data.

NDC 58281056001

NDC 58281056001 is one 20 ml ampoule. The strength is 0.5 mg/ml, so this equates to 10 mg of the drug per ampoule. Since the billing unit of the drug is 10 mg, each ampoule is 1 billing unit. The package of one ampoule is thus 1 billing unit.

NDC 70257056302

The Lioresal Intrathecal Baclofen 2,000 mcg/mL Injection Kit consists of two ampoules, each of which contains 20 ml of the drug. The strength is 2 mg/ml, so this equates to 40 mg of the drug per ampoule. Since the billing unit of the drug is 10 mg, each ampoule is 4 billing units. The package of two ampoules is thus 8 billing units.

We can use the same logic to derive the number of billing units for each of the NDCs.

          ndc                                                  description    strength billing_units
1 58281056001 1 ampoule in 1 package; each ampoule is 20 ml (total: 20 ml) 0.5 [mg/ml]             1
2 58281056002 2 ampoule in 1 package; each ampoule is 20 ml (total: 40 ml) 0.5 [mg/ml]             2
3 58281056102  2 ampoule in 1 package; each ampoule is 5 ml (total: 10 ml) 2.0 [mg/ml]             2
4 58281056301 1 ampoule in 1 package; each ampoule is 20 ml (total: 20 ml) 2.0 [mg/ml]             4
5 58281056302 2 ampoule in 1 package; each ampoule is 20 ml (total: 40 ml) 2.0 [mg/ml]             8
6 70257056301 1 ampoule in 1 package; each ampoule is 20 ml (total: 20 ml) 2.0 [mg/ml]             4
7 70257056302 2 ampoule in 1 package; each ampoule is 20 ml (total: 40 ml) 2.0 [mg/ml]             8

Note that the calculated billing_units is the product of the pkg_qty and bill_units from the crosswalk data.

Prices

The ASP price for J0475 is 181.57 USD (based on a billing unit of 10 mg). This price applies to the HCPCS code. Let’s look at the WAC prices (which apply individually to each NDC code).

          ndc price_type   unit package
1 58281056001        WAC 10.750  215.00
2 58281056002        WAC 10.750  430.00
3 58281056102        WAC 43.000  430.00
4 58281056301        WAC 43.000  860.00
5 58281056302        WAC 43.000 1720.00
6 70257056301        WAC 47.257  945.14
7 70257056302        WAC 47.257 1890.28

The WAC price is quoted as a unit price or a package price. The unit price takes into account the strength of the product. For example, 58281056001 and 58281056002 have a WAC unit price of 10.75 USD, while the remaining NDCs have a WAC unit price approximately four times larger. This is because 58281056001 and 58281056002 have a strength of 0.5 mg/ml, while the rest have a strength of 2 mg/ml. The package price takes into account the number of billing units. If we divide the package price through by the number of billing units then we get a normalised WAC price which is comparable to the ASP price (based on the same volume of the drug).

          ndc price_type   unit package billing_units normalised
1 58281056001        WAC 10.750  215.00             1    215.000
2 58281056002        WAC 10.750  430.00             2    215.000
3 58281056102        WAC 43.000  430.00             2    215.000
4 58281056301        WAC 43.000  860.00             4    215.000
5 58281056302        WAC 43.000 1720.00             8    215.000
6 70257056301        WAC 47.257  945.14             4    236.285
7 70257056302        WAC 47.257 1890.28             8    236.285

If you don’t normalise the WAC prices appropriately then comparison of WAC and ASP is meaningless. The ASP is consistently lower than the WAC because it is the discounted price.

Crosswalk

The above analysis was manual and relied on the retrieval and processing of the package information. Wouldn’t it be useful if that information was readily available? Here’s the corresponding crosswalk data (merged from both sources).

          ndc hcpcs amount measure pkg_items  cf pkg_size pkg_qty bill_units
1 58281056001 J0475     10      mg        20 1.0       20       1          1
2 58281056002 J0475     10      mg        20 2.0       40       1          2
3 58281056102 J0475     10      mg         5 2.0       10       1          2
4 58281056301 J0475     10      mg        20 4.0       20       1          4
5 58281056302 J0475     10      mg        20 8.0       40       1          8
6 70257056301 J0475     10      mg        20 0.2       20       1          4
7 70257056302 J0475     10      mg        20 0.2       20       2          4

If we multiply the pkg_qty and bill_units column then we get precisely the same values of billing_units as before!

          ndc hcpcs amount measure pkg_items  cf pkg_size pkg_qty bill_units billing_units
1 58281056001 J0475     10      mg        20 1.0       20       1          1             1
2 58281056002 J0475     10      mg        20 2.0       40       1          2             2
3 58281056102 J0475     10      mg         5 2.0       10       1          2             2
4 58281056301 J0475     10      mg        20 4.0       20       1          4             4
5 58281056302 J0475     10      mg        20 8.0       40       1          8             8
6 70257056301 J0475     10      mg        20 0.2       20       1          4             4
7 70257056302 J0475     10      mg        20 0.2       20       2          4             8
Picture of bottle of Prednisone and dropper with details.

Case Study: Prednisone

The HCPCS code J7512 is for a Prednisone. The ASP price for J7512 for the period 1 January to 31 March 2022 is 0.016 USD. This is the price for 1 mg (the “billing unit”) of the drug. Let’s take a look at some of the associated NDCs.

          ndc                                                    description strength     total billing_units
1 00054001720 10 packs in 1 carton; 10 tablets per pack (total: 100 tablets)    10 mg 1000 [mg]          1000
2 00054001725                   100 tablets in 1 bottle (total: 100 tablets)    10 mg 1000 [mg]          1000
3 00054001729                   500 tablets in 1 bottle (total: 500 tablets)    10 mg 5000 [mg]          5000
4 00054372144                               30 ml in 1 bottle (total: 30 ml)  5 mg/ml  150 [mg]           150
5 00054372250                             120 ml in 1 bottle (total: 120 ml)  1 mg/ml  120 [mg]           120
6 00054372263                             500 ml in 1 bottle (total: 500 ml)  1 mg/ml  500 [mg]           500

This is slightly different to the previous example because there are two types of NDC: tablets (with strength in mg) and solution (with strength in mg/ml). In either case it’s a simple matter to derive the total mass of the drug per package and hence the number of billing units (based on 1 mg per billing unit for the ASP price).

Now let’s introduce the WAC prices and merge in the billing units which we have just calculated.

          ndc price_type    unit package billing_units normalised
1 00054001720        WAC 0.21360   21.36          1000  0.0213600
2 00054001725        WAC 0.19420   19.42          1000  0.0194200
3 00054001729        WAC 0.19226   96.13          5000  0.0192260
4 00054372144        WAC 4.33333  130.00           150  0.8666667
5 00054372250        WAC 0.66667   80.00           120  0.6666667
6 00054372263        WAC 0.62000  310.00           500  0.6200000

The normalised WAC prices for the first three NDCs compare well with the ASP price (0.016 USD), but the last three don’t. Why? Not sure for the moment.

Here’s the corresponding crosswalk data. Data for the first three drugs are unfortunately not included in the October 2020 crosswalk.

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units
1 00054001720 J7512      1      mg       100 10     <NA>      NA         NA
2 00054001725 J7512      1      mg       100 10     <NA>      NA         NA
3 00054001729 J7512      1      mg       500 10     <NA>      NA         NA
4 00054372144 J7512      1      mg        30  5       30       1        150
5 00054372250 J7512      1      mg       120  1      120       1        120
6 00054372263 J7512      1      mg       500  1      500       1        500

Using the same approach as before, we calculate billing_units based on pkg_qty and bill_units.

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units billing_units
1 00054001720 J7512      1      mg       100 10     <NA>      NA         NA            NA
2 00054001725 J7512      1      mg       100 10     <NA>      NA         NA            NA
3 00054001729 J7512      1      mg       500 10     <NA>      NA         NA            NA
4 00054372144 J7512      1      mg        30  5       30       1        150           150
5 00054372250 J7512      1      mg       120  1      120       1        120           120
6 00054372263 J7512      1      mg       500  1      500       1        500           500

Seems good for the last three NDCs, but the data are missing for the first three. Looking carefully at these data you might note that the conversion factor (cf) is numerically equal to the drug strength. This means that we can use the crosswalk data to calculate the number of billing units. We have a backup plan!

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units billing_units
1 00054001720 J7512      1      mg       100 10     <NA>      NA         NA          1000
2 00054001725 J7512      1      mg       100 10     <NA>      NA         NA          1000
3 00054001729 J7512      1      mg       500 10     <NA>      NA         NA          5000
4 00054372144 J7512      1      mg        30  5       30       1        150           150
5 00054372250 J7512      1      mg       120  1      120       1        120           120
6 00054372263 J7512      1      mg       500  1      500       1        500           500

Perfect!

Case Study: Methylprednisolone

The HCPCS code J7509 is for a Methylprednisolone. The ASP price for J7509 for the period 1 January to 31 March 2022 is 0.252 USD. This is the price for 4 mg (the “billing unit”) of the drug. As before, let’s take a look at some of the associated NDCs.

          ndc                                                 description strength    total billing_units
1 00009005602                100 tablets in 1 bottle (total: 100 tablets)     4 mg 400 [mg]           100
2 00009005604 1 pack in 1 carton; 21 tablets per pack (total: 21 tablets)     4 mg  84 [mg]            21
3 59746000106                100 tablets in 1 bottle (total: 100 tablets)     4 mg 400 [mg]           100
4 59746000204                  25 tablets in 1 bottle (total: 25 tablets)     8 mg 200 [mg]            50
5 59746000314                  50 tablets in 1 bottle (total: 50 tablets)    16 mg 800 [mg]           200
6 59746001504                  25 tablets in 1 bottle (total: 25 tablets)    32 mg 800 [mg]           200

Now let’s take a look at the WAC data.

          ndc price_type    unit package billing_units normalised
1 00009005602        WAC 0.30460   30.46           100  0.3046000
2 00009005604        WAC 0.30429    6.39            21  0.3042857
3 59746000106        WAC 0.32080   32.08           100  0.3208000
4 59746000204        WAC 1.60840   40.21            50  0.8042000
5 59746000314        WAC 2.48460  124.23           200  0.6211500
6 59746001504        WAC 3.70000   92.50           200  0.4625000

All of the WAC prices are of the correct order of magnitude to be comparable with the ASP price.

What about the corresponding crosswalk data? Again unfortunately some of the NDCs are not included in the October 2020 crosswalk.

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units
1 00009005602 J7509      4      mg       100  1      100       1        100
2 00009005604 J7509      4      mg        21  1       21       1         21
3 59746000106 J7509      4      mg       100  1     <NA>      NA         NA
4 59746000204 J7509      4      mg        25  2     <NA>      NA         NA
5 59746000314 J7509      4      mg        50  4     <NA>      NA         NA
6 59746001504 J7509      4      mg        25  8     <NA>      NA         NA

Let’s try using the crosswalk data to create an independent calculation of the number of billing units. Fortunately we already have a backup plan for dealing with missing data.

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units billing_units
1 00009005602 J7509      4      mg       100  1      100       1        100           100
2 00009005604 J7509      4      mg        21  1       21       1         21            21
3 59746000106 J7509      4      mg       100  1     <NA>      NA         NA           100
4 59746000204 J7509      4      mg        25  2     <NA>      NA         NA            50
5 59746000314 J7509      4      mg        50  4     <NA>      NA         NA           200
6 59746001504 J7509      4      mg        25  8     <NA>      NA         NA           200

Great! Those agree precisely with the values that we calculated manually using the package specifications.

We noted in the Prednisone example that the conversion factor (cf) was numerically equal to the drug strength. This doesn’t appear to be true here: the strength is four times cf. However, for Prednisone the billing unit was 1 mg, while for Methylprednisolone it’s 4 mg. Perhaps cf needs to be multiplied by the billing unit?

Case Study: Heparin Sodium

The HCPCS code J1644 is for a Heparin Sodium. The ASP price for J1644 for the period 1 January to 31 March 2022 is 0.247 USD. This is the price for 1000 units (the “billing unit”) of the drug. What do the corresponding NDCs tell us?

          ndc                                             description         strength          total billing_units
1 00338043103   18 bags in 1 carton; 500 ml in 1 bag (total: 9000 ml)     2 [units/ml]  18000 [units]            18
2 00338043304 12 bags in 1 carton; 1000 ml in 1 bag (total: 12000 ml)     2 [units/ml]  24000 [units]            24
3 00409762003      18 bag in 1 case; 500 ml in 1 bag (total: 9000 ml)     2 [units/ml]  18000 [units]            18
4 00409762059    12 bag in 1 case; 1000 ml in 1 bag (total: 12000 ml)     2 [units/ml]  24000 [units]            24
5 00409765062      24 bag in 1 case; 250 ml in 1 bag (total: 6000 ml)   100 [units/ml] 600000 [units]           600
6 63739098625     25 vials in 1 carton; 1 ml in 1 vial (total: 25 ml) 20000 [units/ml] 500000 [units]           500

As was the case for Methylprednisolone we note that the drug strength is the product of the conversion factor (cf) and the billing unit (1000 units).

Now let’s take a look at the WAC data.

          ndc price_type     unit package billing_units normalised
1 00338043103        WAC  0.00870   78.33            18   4.351667
2 00338043304        WAC  0.00657   78.82            24   3.284167
3 00409762003        WAC  0.01099   98.91            18   5.495000
4 00409762059        WAC  0.00673   80.78            24   3.365833
5 00409765062        WAC  0.03887  233.19           600   0.388650
6 63739098625        WAC 13.38000  334.50           500   0.669000

The normalised price for the last two NDCs is appreciably smaller than for the other NDCs presumably because these are larger packages and hence benefit from bulk pricing.

What’s the relationship between the unit price and package price? Well, we’re using the package price for comparison with the ASP price. However, these two prices are related by the number of units per package, which can be found from the crosswalk data as the product of pkg_size and pkg_qty.

Here’s the crosswalk data. We’ve used the same approach as before to calculate the number of billing units.

          ndc hcpcs amount measure pkg_items     cf pkg_size pkg_qty bill_units billing_units
1 00338043103 J1644   1000       U       500  0.002     <NA>      NA         NA             1
2 00338043304 J1644   1000       U      1000  0.002     1000      12          2            24
3 00409762003 J1644   1000       U       500  0.002      500      18          1            18
4 00409762059 J1644   1000       U      1000  0.002     1000      12          2            24
5 00409765062 J1644   1000       U       250  0.100      250      24         25           600
6 63739098625 J1644   1000       U         1 20.000        1      25         20           500

Everything works fine except for 00338043103. What’s going on there? I’m not sure TBH.

Case Study: Medroxyprogesterone Acetate

The HCPCS code J1050 is for Medroxyprogesterone Acetate. The ASP price for J1050 for the period 1 January to 31 March 2022 is 0.571 USD for a billing unit of 1 mg. There are a few NDCs linked to this HCPCS, but we’ll focus on just one.

          ndc                      description    strength     total billing_units
1 00009062601 2.5 ml in 1 vial (total: 2.5 ml) 400 [mg/ml] 1000 [mg]          1000

What about the WAC data?

          ndc price_type    unit package billing_units normalised
1 00009062601        WAC 215.548  538.87          1000    0.53887

The magnitude of the normalised WAC price is consistent with the ASP price.

Here’s the crosswalk data.

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units billing_units
1 00009062601 J1050    100      mg       2.5  4      2.5       1       1000          1000

Case Study: Eculizumab

The HCPCS code J1300 is for Eculizumab. The ASP price for J1300 for the period 1 January to 31 March 2022 is 228.943 USD for a billing unit of 10 mg. There are a few NDCs linked to this HCPCS, but we’ll focus on just one.

          ndc                                        description   strength    total billing_units
1 25682000101 1 vial in 1 carton; 30 ml in 1 vial (total: 30 ml) 10 [mg/ml] 300 [mg]            30

What about the WAC data?

          ndc price_type     unit package billing_units normalised
1 25682000101        WAC 217.4333    6523            30   217.4333

The magnitude of the normalised WAC price is consistent with the ASP price. It’s smaller than the ASP, which implies that there are some other NDC codes for this HCPCS which have a substantially higher normalised WAC.

Here’s the crosswalk data.

          ndc hcpcs amount measure pkg_items cf pkg_size pkg_qty bill_units billing_units
1 25682000101 J1300     10      mg        30  1        1       1         30            30

Case Study: Alteplase Recombinant

The HCPCS code J2997 is for Alteplase Recombinant. The ASP price for J2997 for the period 1 January to 31 March 2022 is 87.67 USD for a billing unit of 1 mg.

          ndc                                         description  strength    total billing_units
1 50242004164    1 vial in 1 carton; 2 ml in 1 vial (total: 2 ml) 1 [mg/ml]   2 [mg]             2
2 50242004413   1 kit in 1 carton; 50 ml in 1 vial (total: 50 ml) 1 [mg/ml]  50 [mg]            50
3 50242008527 1 kit in 1 carton; 100 ml in 1 vial (total: 100 ml) 1 [mg/ml] 100 [mg]           100

Here are the WAC data.

          ndc price_type    unit package billing_units normalised
1 50242004164        WAC  153.06  153.06             2    76.5300
2 50242004413        WAC 4400.18 4400.18            50    88.0036
3 50242008527        WAC 8800.36 8800.36           100    88.0036

As before the normalised WAC prices are consistent with the order of magnitude of the ASP price.

What about the crosswalk data?

          ndc hcpcs amount measure pkg_items  cf pkg_size pkg_qty bill_units billing_units
1 50242004164 J2997      1      mg         1   2        1       1          2             2
2 50242004413 J2997      1      mg         1  50        1       1         50            50
3 50242008527 J2997      1      mg         1 100        1       1        100           100

Case Study: Dobutamine Hydrochloride

The HCPCS code J1250 is for Dobutamine Hydrochloride. The ASP price for J1250 for the period 1 January to 31 March 2022 is 6.798 USD for a billing unit of 250 mg.

We’ll start by looking at the data for the associated NDCs.

          ndc                       description   strength   units billing_units
1 50090456200   250 ml in 1 bag (total: 250 ml)    4 mg/ml 1000 mg             4
2 54868571700  1 vial in 1 box; 20 ml in 1 vial 12.5 mg/ml  250 mg             1
3 54868571701 10 vial in 1 box; 40 ml in 1 vial 12.5 mg/ml 5000 mg            20
4 54868571702 10 vial in 1 box; 20 ml in 1 vial 12.5 mg/ml 2500 mg            10
5 55390056090                        20 ml vial 12.5 mg/ml  250 mg             1

Now we can use those data to normalise the WAC prices.

          ndc price_type      unit   package billing_units normalised
1 50090456200        WAC 0.0004000   0.10000             4   0.025000
2 54868571700        WAC 0.8700000  17.40000             1  17.400000
3 54868571701        WAC 0.4016250 160.65000            20   8.032500
4 54868571702        WAC 0.4659583  93.19167            10   9.319167
5 55390056090        WAC 0.1925000  38.50000             1  38.500000

All of those make sense (compared to the ASP price of 6.798 USD) except for 50090456200. What’s going on there? Maybe the crosswalk data can help?

What about the crosswalk data?

          ndc hcpcs amount measure pkg_items   cf pkg_size pkg_qty bill_units billing_units
1 54868571700 J1250    250      mg        20 0.05     <NA>      NA         NA             1
2 54868571701 J1250    250      mg        40 0.05     <NA>      NA         NA             2
3 54868571702 J1250    250      mg       200 0.05     <NA>      NA         NA            10
4 55390056090 J1250    250      mg        20 0.05     <NA>      NA         NA             1

Oh! That’s not very helpful at all: there’s no crosswalk data for 50090456200. I guess that we’ll just need to chalk that one up as a mystery. For reference though, the information here confirms that our calculation of the number of billing units for 50090456200 is correct. My suspicion lies with the accuracy of the WAC data.

But there are further problems here: the billing_units calculated from the crosswalk disagrees with what we got manually. Comparing the information that we have for 54868571701 and 54868571702 (they are the same except for the vial size), we would expect billing_units to be twice as big for 54868571701 as for 54868571702. However, based on the crosswalk data it’s ten times smaller than we expected? What’s going on here? Well in this instance I’m skeptical about the value of pkg_items for 54868571701, which I suspect should actually be 400. Of course, I might be very wrong.

Case Study: Cefazolin Sodium

One last case study! The HCPCS code J0690 is for Cefazolin Sodium. The ASP price for J0690 for the period 1 January to 31 March 2022 is 0.769 USD for a billing unit of 500 mg.

           ndc                                                   description strength     units billing_units
1  00143926110                                           10 vial in 1 carton     10 g 100000 mg           200
2  00143926225                                           25 vial in 1 carton      1 g  25000 mg            50
3  00143992390                                           25 vial in 1 carton   500 mg  12500 mg            25
4  00143992490                                           25 vial in 1 carton      1 g  25000 mg            50
5  00143998303                                           10 vial in 1 carton     10 g 100000 mg           200
6  00264310311 24 container in 1 case; 50 ml in 1 container (total: 1200 ml) 20 mg/ml  24000 mg            48
7  00338350341             24 bag in 1 case; 50 ml in 1 bag (total: 1200 ml) 20 mg/ml  24000 mg            48
8  00409258501                                           25 vial in 1 carton      1 g  25000 mg            50
9  00781345095                                           10 vial in 1 carton   500 mg   5000 mg            10
10 00781345196          25 vial in 1 carton; 10 ml in 1 vial (total: 250 ml) 0.1 g/ml  25000 mg            50
11 00781345295                                           10 vial in 1 carton     10 g 100000 mg           200

We can use that information to normalise the WAC prices.

           ndc price_type     unit package billing_units normalised
1  00143926110        WAC  8.50000   85.00           200  0.4250000
2  00143926225        WAC  1.05200   26.30            50  0.5260000
3  00143992390        WAC  2.00200   50.05            25  2.0020000
4  00143992490        WAC  1.36760   34.19            50  0.6838000
5  00143998303        WAC 11.05000  110.50           200  0.5525000
6  00264310311        WAC 11.35000   11.35            48  0.2364583
7  00338350341        WAC  0.10528  126.34            48  2.6320833
8  00409258501        WAC  2.73200   68.30            50  1.3660000
9  00781345095        WAC  2.10300   21.03            10  2.1030000
10 00781345196        WAC  1.50000   37.50            50  0.7500000
11 00781345295        WAC 12.00000  120.00           200  0.6000000

All of the normalised WAC prices look to be in an appropriate range for the ASP price.

Let’s see if the crosswalk data give us consistent values for billing_units.

           ndc hcpcs amount measure pkg_items    cf pkg_size pkg_qty bill_units billing_units
1  00143926110 J0690    500      mg        10 20.00        1      10         20           200
2  00143926225 J0690    500      mg        25  2.00        1      25          2            50
3  00143992390 J0690    500      mg         1  1.00        1      25          1            25
4  00143992490 J0690    500      mg         1  2.00        1      25          2            50
5  00143998303 J0690    500      mg         1 20.00        1      10         20           200
6  00264310311 J0690    500      mg        50  0.04       50      24          2            48
7  00338350341 J0690    500      mg        50  0.04       50      24          2            48
8  00409258501 J0690    500      mg        25  2.00        1      25          2            50
9  00781345095 J0690    500      mg         1  1.00        1       1         10            10
10 00781345196 J0690    500      mg         1  2.00       10      25          2            50
11 00781345295 J0690    500      mg         1 20.00       10      10         20           200

Yes! Those all look grand.

Conclusion

I know that there are a bunch of case studies in this post and it probably doesn’t make for scintillating. However, the objective was to understand the relationship between these data sets. I think that this has been largely achieved. However, there are still some outstanding questions. I suspect that in some instances these might be due to questionable data, but I’m happy to be proven wrong. If you have insight into these data and can clear up any of these issues, then I’d really appreciate hearing from you.

Resources

Crosswalk data are available from:

  • NBER and
  • CMS (select a link on the LHS to get data for a specific year). You can also get the ASP price data here.

The WAC data were transcribed from IBM Micromedex Red Book.

The RxNav API is another useful way to get information about drugs (although not used directly in this analysis).

An example query:

curl https://rxnav.nlm.nih.gov/REST/ndcproperties?id=50090456200