Notice-D: Concepts for TX_PVLS

TL;DR: The proposal is to use CIEL:856 with a threshold of 1000 copies / mL to calculate the numerator of TX_PVLS and all CIEL:856 + CIEL:1305 to calculate the denominator. For disaggregates for this project we will only calculate sex and age breakdowns using the PEPFAR MER version of these.

Our work on patient-level indicator reporting (Notice D) is supposed to be based on generating data to calculate a single PEPFAR indicator, the TX_PVLS indicator. This indicator counts the “Percentage of ART patients with a suppressed viral load (VL) result (<1000 copies/ml) documented in the medical or laboratory records/laboratory information systems (LIS) within the past 12 months”. The guidance from PEPFAR adds that this should only consider “patients who have been on ART for at least 3 months” and only “the most recent result” if more than one result exists for the last 12 months.

I’ve been putting some thought into what concepts we need to use to store this data, but would welcome thoughts from the community, particularly any implementors who actually calculate this metric.

Viral Loads

Identifying viral loads seems to be fairly straight-forward, at least basing this on CIEL: 856 is the concept for viral loads with a numeric value; 1305 is the concept for qualitative viral loads. Obviously, the indicator itself is easiest to calculate using 856 (since we have a defined numeric threshold, though PEPFAR does allow variations to account for local standards).

Some Implementations

KenyaEMR appears to use 1305 (qualitative VL) as part of the calculation for both the denominator (all patients with a VL result in the last 12 months) and the numerator (at least if the result is “Not Detected” (CIEL:1302). They also use CIEL:856 with the 1000 copies / mL threshold.

UgandaEMR uses the same two concepts, but in a slightly different way. Here they count as suppressed those viral loads where the result is coded as CIEL:1306 (BEYOND DETECTABLE LIMIT) or the numeric viral load is below the 1000 copies / mL threshold.

AMPATH’s code I find a bit hard to follow (in terms of what is still actually in use), but as far as I can tell, viral loads in AMPATH are consistently represented with only CIEL:856 using a threshold of 1000 copies / mL.


For the purposes of our PLIR, I think it’s sufficient to use values from CIEL:856 with a threshold of < 1000 copies / mL as the standard for viral load suppression. Since observations have a date, identifying the “latest” result should be fairly trivial. This will constitute the numerator for the TX_PVLS indicator.

In order to calculate the denominator for TX_PVLS, we need the total number of viral loads recorded in the system. For these purposes, I think we should take into consideration any patients with a relevant CIEL:1305 result but only if the patient does not have a CIEL:856 result. This means we only count qualitative results if there are no numeric results. Obviously, the denominator is the count of all patients with any kind of viral load result.


So far this is pretty simple, but, of course, the real difficulty comes in identifying and calculating all the necessary disaggregates. In particular, disaggregates are to be classified by whether the VL gathered was routine or targetted (routine and targetted are apparently new to the 2020 reporting requirements). The indicator also asks for disaggregations by age and sex at birth, disaggregations by those who are pregnant or breastfeeding and the following key populations: “People who inject drugs (PWID); Men who have sex with men (MSM); Transgender people (TG); Female sex workers (FSW); or People in prison and other closed settings”.

Unless I’m missing something, we don’t really have an easy way to identify all the disaggregates PEPFAR asks for. In particular, determining whether a viral load was ordered as part of a routine checkup or not probably requires an additional observation, as we would need for PWID, MSM, TG, FSW, and prisoners. For the purposes of our Notice D work, I would suggest that we focus on the disaggregates for sex and age as these are likely to be there for any data set we use.

Qualified Patients

The last thing we need to determine is whether patients have been on ARTs for at least 3 months in our sample data set. How we go about doing this is highly dependent on the sample data set we are working with, as it’s likely represented in different ways in different data sets. I don’t have a concrete proposal for what we do here, but would welcome any suggestions.

@akanter Are there relevant CIEL concepts that I might’ve missed?

I’d also value input from any PEPFAR implementors as to whether or not any of the proposals I have made here will over-simplify things too much to make this a valid test of calculating the TX_PVLS indicator.

Copying @ddesimone and @ball into this, but for our purposes in the modeling we are doing for our latest HIV system design, we are considering both a quantitative and qualitative result in our Viral Load analysis, and I would think you would want to consider both for this as well @ibacher.

My interpretation is that, for most practical purposes, a result of LDL (Lower than detectable limit) should be counted as “< 1000 copies” for our indicator calculations, and should not be ignored here. I think this would vastly undercount the number of patients with suppressed viral loads.

I think you need to consider the three cases of:

  1. A numeric result, which is a specific value < 1000
  2. A result of just “LDL” or “Beyond Detectable Limit”
  3. A result of “< 300”, “< 500”, etc., which we represent as something similar but distinct from #2

Any viral load construct with one of these Obs in it should constitute a viral load result, and should be in the denominator. Any of these Obs matching cases 1-3 above indicated above should constitute a value < 1000, and should be in the numerator.

That’s my take - but interested if there are opinions from those with more clinical HIV or laboratory knowledge who feel otherwise.

Other other data point that we have just decided to start collecting in our construct as well is one that indicates whether the Viral Load is “Routine” or “Targeted”. Typically I would guess that this is something you’d collect on the Viral Load ordering encounter, but it could also be represented within the result construct.

Best, Mike

@mogoodrich FYI


Thanks @mseaton… for the purpose of the indicator as I understand it I would agree 100%

Tangentially, we really have been struggling with the distinction between a result of “LDL” and “<300” and I’d really love to get a clear answer to the question that @ddesimone poses here:

Pasted here for convenience:

"We are getting feedback from our site team in Malawi that the viral load results come in one of 3 forms:

  • Qualitative LDL - lower than detectable limit
  • Quantitative - a precise result in copies/ml
  • A quantitative “less than” value – sometimes the result will come as something like “< 500 copies/ml”. We are being told that this is not the same as LDL and also this is not necessarily the detectable lower limit of the machine. It’s a completely different way sometimes the results are communicated.

Historically, we’ve only captured the first 2 and were planning on moving forward with a model similar to that referenced in that older tread .

Does anyone else capture “less than” results like this? Would be interested in hearing what others are doing!"

@burke @akanter @jteich any thoughts on the above thread or who might be best to answer it? Any lab experts in the OpenMRS community I’m not thinking of? Even though we’ve been told otherwise, from the modeling I’m seeing elsewhere I’m continuing to doubt the that third bullet point above “A quantitative “less than” value…” is really a distinct thing, rather than just shorthand to report LDL and the detection limit of the machine.

Take care, Mark

Thanks @ibacher , for starting this .

Just a supplement ,
given that when calculating the the denominator ,we will consider a qualitative value if the patient doesnt have a quantitative value

its equally trivial to do the same when calculating the nominator .

Atleast we use values from CIEL:856 with a threshold of < 1000 copies / mL as the standard for viral load suppression ,and in case the patient doesnt have a quantitative value but has a a qualitative value
we consider CIEL:1306 where the value is (BEYOND DETECTABLE LIMIT)

So, if we’re considering qualitative values (and from the discussion above, I think we should be) the calculation of the numerator is somewhat different, as the instructions for the TX_PVLS indicator are to base it on the last available result. That means that in calculating the numerator we should take the most recent viral load result, regardless of if it’s qualitative or quantitative and only count it if it indicates a suppressed VL. Some of this depends, ultimately, on what the dataset we’re working with looks like. Hopefully we’ll either have a sample dataset identified relatively soon or a plan for creating one ourselves.

1 Like

Thats true @ibacher ,

My concern was that if we decide to use (Quantitative OR Qualitative ) values when calculating the denominator , then we should equally use (Quantitative Or Qualitative) values when calculating the nominator.

Else we consider to use Only Quantitative values for both denominator and nominator.

My point is , if we use (Quantitative OR Qualitative ) values calculating the denominator , and then we consider Only Quantitative values for the nominator (as per your innitial proposal) , it looks to me like it gives inacurate results.

1 Like