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.
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 withpkg_items
;billing_units
— unit used for NDC billing;amount
andmeasure
— 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.
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
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).
- https://rxnav.nlm.nih.gov/REST/ — list of endpoints
- https://rxnav.nlm.nih.gov/REST/ndcproperties?id=00143926110 — properties for specific NDC
An example query:
curl https://rxnav.nlm.nih.gov/REST/ndcproperties?id=50090456200