Signature
P_mean = (c_1 + c_2 + c_3 + c_4 + c_5) / 5; P_low = min(min(min(min(c_1, c_2), c_3), c_4), c_5); P_high = max(max(max(max(c_1, c_2), c_3), c_4), c_5)
| Inputs | Definition | Unit |
|---|---|---|
c_1 | Price in the first basket country converted to the home currency with HE-FM-BOC-001 | home currency per unit |
c_2 | Price in the second basket country converted to the home currency with HE-FM-BOC-001 | home currency per unit |
c_3 | Price in the third basket country converted to the home currency with HE-FM-BOC-001 | home currency per unit |
c_4 | Price in the fourth basket country converted to the home currency with HE-FM-BOC-001 | home currency per unit |
c_5 | Price in the fifth basket country converted to the home currency with HE-FM-BOC-001 | home currency per unit |
P_mean | Arithmetic mean of the five converted basket prices | home currency per unit |
|---|---|---|
P_low | Lowest of the five converted basket prices | home currency per unit |
P_high | Highest of the five converted basket prices, the highest international price in the PMPRB's terms | home currency per unit |
Function
Basket-of-countries reference price and currency conversion function
Maps the prices of one medicine observed in a basket of reference countries, each in its own currency, and the exchange rates or purchasing power parities that express them in one currency, to a domestic reference price under an aggregation rule and to a ceiling for a proposed domestic price. The same conversions move any cost record between currencies. A cost from another year is first moved to the common price year with the live price-year adjustment HE-FM-COST-002 of the resource costing function HE-FN-COST-001, and the index itself belongs to the Consumer Price Index concept. A basket price reflects what other countries list, while the economically justifiable price HE-FM-EJP-001 and the break-even price HE-FM-BEA-001 give the highest price at which a technology is cost-effective at home. Notation follows the Basket of Countries article.
Computational function
Computational function for a basket reference price and ceiling with countries that have no price
Takes the prices and exchange rates of any number of basket countries, a flag for whether each country has an observed price, a ceiling multiplier and a proposed domestic price, and returns the number of priced countries, their mean, median, lowest and highest converted price, the ceiling of HE-FM-BOC-004 and the margin of the proposed price over it. Countries without a price drop out of every aggregate, which is how the article's launch-sequencing case raises the ceiling. The calculator line covers five countries and the mean; the R and Python code take any number of countries and also return the median. The inputs therefore differ from the formula's variables, which assume five priced countries.
Inputs and outputs:
p_iande_iare the price and rate of country i (HE-FM-BOC-001) andc_ithe converted price.d_iis 1 when country i has an observed price and 0 when it does not.kis the ceiling multiplier andP_propthe proposed domestic price.nis the number of priced countries,P_meantheir mean,Tthe ceiling andDthe margin of the proposed price over the ceiling, positive when the price is above it.Assumption: At least one country has a price, so
nis 1 or more. A country without a price is a missing observation, not a price of zero, and the rule for missing prices is stated with the basket, as the article recommends. The prices are the article's illustrative prices, already in the home currency, so everye_iis 1.Worked example (Basket B before the country priced at 70 launches): As in the article, the four observed prices give a mean of 96.25 and a ceiling of 120.3125, and the proposed price of 130 is 9.6875 above it. The median of the four is 97.5 (computed here for illustration).
d_1 = 0; c_1 = 70; d_2 = 1; c_2 = 80; d_3 = 1; c_3 = 95; d_4 = 1; c_4 = 100; d_5 = 1; c_5 = 110; k = 1.25; P_prop = 130; n = 4; P_mean = 96.25; T = 120.3125; D = 9.6875Worked example (Basket B after launch): With all five prices observed the ceiling falls to 113.75 and the margin rises to 16.25; the median is 95.
d_1 = 1; c_1 = 70; d_2 = 1; c_2 = 80; d_3 = 1; c_3 = 95; d_4 = 1; c_4 = 100; d_5 = 1; c_5 = 110; k = 1.25; P_prop = 130; n = 5; P_mean = 91; T = 113.75; D = 16.25Worked example (Basket A): The proposed price is 1.25 below the ceiling and is accepted; the median is 100.
d_1 = 1; c_1 = 80; d_2 = 1; c_2 = 95; d_3 = 1; c_3 = 100; d_4 = 1; c_4 = 110; d_5 = 1; c_5 = 140; k = 1.25; P_prop = 130; n = 5; P_mean = 105; T = 131.25; D = -1.25Excel: With the flags in ObservedFlags and the converted prices in ConvertedPrices,
=SUMPRODUCT(ObservedFlags,ConvertedPrices)/SUM(ObservedFlags)returns the mean into BasketMeanObserved and=CeilingMultiplier*BasketMeanObservedthe ceiling into BasketCeilingObserved. For the median a helper column holds=IF(D2=1,C2,"")for each country, with the flag in column D and the converted price in column C, and=MEDIAN(HelperPrices)over that column returns BasketMedianObserved, since MEDIAN skips text.R:
basket_ref <- function(p, e, d, k, proposed) { c_obs <- (p*e)[d == 1]; m <- mean(c_obs); list(n = length(c_obs), mean = m, median = median(c_obs), lowest = min(c_obs), highest = max(c_obs), ceiling = k*m, margin = proposed-k*m) }Returns a named list.Python:
def basket_ref(p, e, d, k, proposed): c = sorted(pi*ei for pi, ei, di in zip(p, e, d) if di == 1); n = len(c); m = sum(c)/n; med = (c[(n-1)//2]+c[n//2])/2; return n, m, med, c[0], c[-1], k*m, proposed-k*mPlain Python with no imports, returning a tuple in the order of the outputs.Test (Launch-sequencing ceiling reproduced): With the first worked example's inputs BasketCeilingObserved is 120.3125. Expected result TRUE. Flagging the unlaunched country as observed with a price of 0 gives a mean of 77 and a ceiling of 96.25, and keeping its price of 70 gives 113.75; either makes it FALSE. Excel check
=ABS(BasketCeilingObserved-120.3125)<1E-9Test (Median of the priced countries): With the same inputs BasketMedianObserved is 97.5. Expected result TRUE. Leaving the unlaunched country's 70 in the helper column gives 95 and makes it FALSE. Excel check
=ABS(BasketMedianObserved-97.5)<1E-9Common error (Launch order ignored when comparing ceilings): Taking Basket B's ceiling as 113.75 while the country priced at 70 has not launched understates it by 6.5625, against 120.3125, and puts the margin of the proposed price of 130 at 16.25 instead of 9.6875, the effect of launch order that the article describes.
Source: Rémuzat C, Urbinati D, Mzoughi O, El Hammi E, Belgaied W, Toumi M. Overview of external reference pricing systems in Europe. Journal of Market Access and Health Policy. 2015;3:27675. Section Potential consequences of ERP, subsection Patient access to medicines, on launch sequence strategies used to delay or avoid launching new drugs in countries with potentially lower prices. Kanavos P, Fontrier AM, Gill J, Efthymiadou O. Does external reference pricing deliver what it promises? Evidence on its impact at national level. European Journal of Health Economics. 2020;21(1):129-151. Introduction, on the lowest price, the average and the median as reference-price rules.
n = d_1 + d_2 + d_3 + d_4 + d_5; P_mean = (d_1 * c_1 + d_2 * c_2 + d_3 * c_3 + d_4 * c_4 + d_5 * c_5) / n; T = k * P_mean; D = P_prop - T
Try this function
Implementations
Excel
Basket aggregates from a named range of converted prices
With the five converted prices in the range BasketPrices, the four formulas return the values held in BasketMean, BasketLowest, BasketHighest and BasketMedian. AVERAGE, MIN, MAX and MEDIAN skip blank cells, so a country without a price is left blank, never set to zero.
=AVERAGE(BasketPrices); =MIN(BasketPrices); =MAX(BasketPrices); =MEDIAN(BasketPrices)
Assumptions
Same product and price type across the basket
Every c_i is for the same strength and dosage form, as in the PMPRB definition of the highest international price, and for the same price type. Kanavos and colleagues report that ex-factory prices are mostly used and that pricing authorities rely mostly on list prices rather than transaction prices, so confidential discounts are not reflected.
All five basket countries priced
Each of the five countries has a price. The article treats a missing price as informative, since it may reflect a delayed launch, so a country without a price is dropped from the count, as HE-CF-BOC-002 does, never entered as a zero.
Worked examples
Article's Basket A mean, lowest and highest prices
Basket A of the article, 80, 95, 100, 110 and 140, has a mean of 105, a lowest price of 80 and a highest price of 140 (illustrative prices already in the home currency).
c_1 = 80; c_2 = 95; c_3 = 100; c_4 = 110; c_5 = 140; P_mean = 105; P_low = 80; P_high = 140
Article's Basket B mean, lowest and highest prices
Basket B drops the country priced at 140 and adds one priced at 70, so the mean falls to 91, the lowest price to 70 and the highest to 110, as in the article.
c_1 = 70; c_2 = 80; c_3 = 95; c_4 = 100; c_5 = 110; P_mean = 91; P_low = 70; P_high = 110
Basket with one common price
When all five countries list the same converted price the three aggregates are equal, a limiting case that checks an implementation.
c_1 = 100; c_2 = 100; c_3 = 100; c_4 = 100; c_5 = 100; P_mean = 100; P_low = 100; P_high = 100
Common errors
Missing basket price entered as zero
Recording the unlaunched country of Basket B as 0 gives a mean of 77 and a lowest price of 0, against 96.25 and 80 when it is left out, and a ceiling at 1.25 times the mean of 96.25 in place of 120.31 (computed here for illustration).
Larger basket assumed to give a lower reference price
Adding a sixth country priced at 130 to Basket A raises the mean from 105 to about 109.17 while the lowest price stays at 80 (computed here for illustration). Under a lowest-price rule an added country can never raise the benchmark, as the article notes, while under the mean or the median it can.
Sources
Kanavos and colleagues on list prices and aggregation rules in external reference pricing
Kanavos P, Fontrier AM, Gill J, Efthymiadou O. Does external reference pricing deliver what it promises? Evidence on its impact at national level. European Journal of Health Economics. 2020;21(1):129-151. Introduction, which states that ex-factory prices are used in the majority of cases and that pricing authorities rely mostly on list prices rather than transaction prices, and that the lowest price in the basket is often used but the average or the median is not uncommon.
Rémuzat and colleagues on basket calculation methods in Europe
Rémuzat C, Urbinati D, Mzoughi O, El Hammi E, Belgaied W, Toumi M. Overview of external reference pricing systems in Europe. Journal of Market Access and Health Policy. 2015;3:27675. Abstract results, 15 countries using the average price, 7 the lowest price and 7 other methods, with baskets of 1 to 31 countries; and the Results subsection Main calculation methods, which names the average price, the average of the three or four lowest prices and the lowest price among the reference countries.
PMPRB definition of the highest international price
Patented Medicine Prices Review Board. Guidelines for PMPRB Staff, in effect 1 January 2026. Glossary, which defines the highest international price (HIP) as the highest price of the same strength and dosage form of the same patented medicine among the Schedule Countries.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
