HCPCS code S0104 is the Level II code for zidovudine, oral, 100 mg, an antiretroviral drug used to treat HIV. Practices bill it to state Medicaid programs and commercial payers, because Medicare does not pay S-series codes. One unit covers 100 mg of zidovudine, so the quantity billed comes from the dose, not from the visit.
The unit rule is what makes the quantity field matter here. A 300 mg tablet is three units, and a 600 mg daily dose is six. Payers that accept the code on a medical claim also expect the product’s National Drug Code, or NDC, on the same line. The claim then needs an HIV diagnosis such as Z21 or B20 to support medical necessity.
Key takeaways
HCPCS code S0104 is the Level II code for zidovudine, oral, 100 mg, an antiretroviral drug used against HIV
One unit covers 100 mg, so a 300 mg tablet is billed as three units and a 600 mg daily dose as six
S-series codes are not payable by Medicare, so S0104 belongs on Medicaid and commercial payer claims
A payer that accepts S0104 on a medical claim almost always wants the 11-digit NDC and the drug quantity reported with it
Pair the claim with an HIV diagnosis such as Z21 or B20, and follow the ICD-10-CM sequencing rules for HIV
Most oral zidovudine is dispensed under the pharmacy benefit, so confirm which benefit the payer wants before you bill S0104
Practice management software like Pabau keeps S-series drug claims out of Medicare files and tracks each one to payment
HCPCS code S0104: Quick reference
The table below summarizes the reference data for HCPCS code S0104. The code sits in the S0012 to S0197 range, the block of S-series codes that describe drugs. CMS publishes it in the HCPCS Level II file for non-Medicare payer use.
S0104 is active in the current HCPCS Level II file. Active does not mean covered, though. No federal rule obliges a payer to recognize an S-series code, so acceptance still has to be confirmed plan by plan.
Full descriptor: “Zidovudine, oral, 100 mg”
The official long descriptor for S0104 is “Zidovudine, oral, 100 mg.” Three elements carry the meaning: the drug, the route, and the quantity in one unit. Each one rules something out.
Zidovudine is a nucleoside reverse transcriptase inhibitor, sold as Retrovir and as generics. It was the first antiretroviral approved for HIV. It stays in use today for treatment and for reducing perinatal transmission.
Which zidovudine products S0104 covers
Oral zidovudine is supplied in three forms, and each one converts to units differently. Read the strength off the label, then divide the quantity dispensed by 100 mg.
Lamivudine and zidovudine tablets, sold as Combivir and as generics, are a different product. So is the abacavir, lamivudine and zidovudine tablet. S0104 describes zidovudine alone, so a combination product needs the payer’s own code or a non-specific drug code.
S-series HCPCS code classification explained
S-series codes are temporary HCPCS Level II codes created for the private sector. CMS publishes them so commercial insurers can process drugs, services, and supplies that carry no other national code. State Medicaid programs use them too.
- Private payer origin: S codes exist to meet private sector needs, covering drugs and services with no national code of their own. CMS publishes them in the HCPCS Level II file.
- Not payable by Medicare: CMS states this directly in its HCPCS Level II coding procedures. No local or national coverage determination changes it.
- Used by Medicaid: state Medicaid programs do recognize S codes, though each state decides which ones it pays. The state drug fee schedule is the place to check.
- Temporary by design: an S code can be revised or deleted in an annual HCPCS update. S0073 and S0077 were both retired that way.
- No national rate: there is no Medicare fee schedule amount for S0104. Every accepting payer sets its own.
For a practice that bills both Medicare and Medicaid, the practical risk is routing. An S code in a Medicare claim file rejects, and often at the clearinghouse rather than the payer. That extra hop is what makes the rework expensive.

Payer coverage: Medicaid, commercial and Medicare
S0104 sent to traditional Medicare Part B will not be paid. That is the one certainty in the payer picture. The rest depends on the individual plan.
Medicaid programs and commercial plans do accept S codes, but not uniformly. A code paid in one state can be denied in the next. Run an eligibility check before the drug leaves your stock, so the plan type is known before the claim is built.
Medicare Advantage trips up billing teams more often than the other rows. The plan is run by a commercial insurer, so its benefit design may well include S codes. Check the individual plan’s drug policy before you write the code off.
Pharmacy benefit versus medical benefit
Most oral zidovudine never reaches S0104 at all. The patient fills a prescription at a pharmacy, the pharmacy bills the plan on an NCPDP claim, and the NDC drives the payment. No HCPCS code appears on that claim.
S0104 belongs to the other route, where the practice buys the drug and supplies it directly. HIV clinics, Ryan White-funded programs, and practices that dispense on site are the usual cases. Ask the payer which benefit applies before the drug goes out.
Billing the medical benefit for a drug the plan pays under pharmacy produces a denial no appeal will fix. The question costs a phone call. The appeal costs a month. The three checks below settle the routing before either cost lands.

How to bill HCPCS code S0104
A clean S0104 claim rests on four details. Get the unit count, the NDC, the diagnosis link, and the claim form fields right, and most preventable rejections disappear.
Unit of service and NDC reporting
One unit of S0104 is 100 mg of zidovudine. Take the quantity from the prescription or the medication administration record, then divide by 100. A 300 mg tablet is three units, and a standard 600 mg daily dose is six.
This is dosage-based billing. Do not report one unit per visit or per service, and do not round a partial dose up to a full 100 mg unit. Where a pediatric dose of the oral solution falls below 100 mg, ask the payer how it wants the quantity reported.
A payer that accepts a drug HCPCS code on a professional claim almost always wants the NDC with it. On the CMS-1500, the NDC goes in the shaded area of box 24A.
Report the N4 qualifier, the 11-digit NDC in 5-4-2 format, a unit of measure qualifier, and the quantity. Retrovir 100 mg capsules carry NDC 49702-0211-20, reported as 49702021120 with the qualifier UN. The 837P transaction holds the same detail in its LIN and CTP segments.
Modifiers for S0104
S0104 carries no required modifier of its own. Modifier rules come from the payer, and they differ by state Medicaid program and by commercial contract. The table below covers the ones that come up on S-series drug lines.
Two modifier families do not belong on an S0104 line. NU, RR, and UE describe durable medical equipment, and S0104 is a drug. JW and JZ report drug discarded from a single-dose vial or package, which does not describe a capsule or a tablet.
Place of service and claim form fields
Match the place of service code to where the drug was supplied. Office is 11 and outpatient hospital is 22, with other settings taking their own code. A mismatch between the POS code and the service location triggers a claim edit.
Put S0104 in box 24D of the CMS-1500 and the unit count in box 24G. The line also needs the rendering provider’s NPI and a diagnosis pointer to the HIV code.
Pro Tip
Before the first S0104 claim of the year, check two rules in your state Medicaid drug billing chapter. Check whether zidovudine sits on the pharmacy benefit or the medical benefit. Then check which modifier the state wants on a 340B-purchased drug. Both rules change more often than the code does, and both cost less to check than to appeal.
S0104 reimbursement and fee schedule guidance
There is no Medicare fee schedule amount for S0104, because Medicare does not pay S codes. Each accepting payer sets its own rate. Most build that rate off a drug pricing benchmark rather than a procedure relative value.
- State Medicaid rates: states pay covered outpatient drugs at actual acquisition cost plus a professional dispensing fee. Many price off the National Average Drug Acquisition Cost file that CMS publishes.
- Medicaid managed care: an MCO sets its own rate, and it can differ from the state fee-for-service schedule inside the same state.
- Commercial rates: these are contracted, often tied to a wholesale benchmark less a discount. Zidovudine has been generic for years, so the margin on a 100 mg unit is thin.
- 340B pricing: a covered entity buys at the 340B ceiling price. The claim then has to be flagged, so the manufacturer is not billed a Medicaid rebate on the same unit.
Track payment per unit by payer rather than payment per claim. A plan paying below acquisition cost shows up quickly at that level of detail. That gives you something concrete to take into a contract review.
ICD-10 codes commonly paired with S0104
Every S0104 claim needs an ICD-10-CM diagnosis that supports antiretroviral therapy. Zidovudine treats HIV infection and is used to reduce perinatal transmission. The supporting diagnosis therefore comes from the HIV codes, not from a general chronic care or wellness category.
The codes below are the ones that appear most often on a zidovudine claim. Use the most specific code the record supports.
The ICD-10-CM guidelines set the order, and payers follow them. Use B20 once an HIV-related illness is documented, then keep using B20 at every later encounter. Z21 is for a patient who is HIV positive with no HIV-related condition documented.
Never return to Z21 after B20 has been assigned. For a pregnant patient, the O98.7- code is sequenced first, followed by B20 or Z21. Z11.4 reports screening for HIV, and screening alone does not support a zidovudine claim.
Confirm the descriptor your payer recognizes with the NLM HCPCS Level II lookup before you build the crosswalk into your charge sheet.
Related HCPCS codes for zidovudine and antiretrovirals
Billing teams in HIV care, infectious disease, and obstetrics meet several codes alongside S0104. Knowing which one fits keeps the drug on the claim matching the drug in the record. The wider HCPCS code set holds the permanent J codes listed below.
J8499 is the fallback when a payer takes no specific code for an oral drug. It needs an invoice and full drug identification, and it draws slower adjudication. Reserve it for the payers that ask for it.
Documentation requirements and medical necessity
A payer reviewing a zidovudine claim checks three points. The drug had to be medically necessary, ordered by a licensed prescriber, and supplied in the quantity billed. The record should show all three without an auditor reconstructing them.
- Prescriber order: dated and signed, naming zidovudine, the strength, the oral route, and the frequency. A verbal order needs a timely countersignature.
- Product identification: the NDC of the exact product supplied, including the labeler. The claim and the purchase record should name the same product.
- Quantity supplied: how many capsules, tablets, or milliliters left your stock, and how that figure converts into 100 mg units.
- Diagnosis support: a note documenting the HIV diagnosis, the pregnancy, or the exposure that the ICD-10 code reports. “HIV positive” with no further detail will not carry B20.
- Benefit confirmation: a record of which benefit the payer confirmed, and who confirmed it. A denial months later is much easier to answer with that note in hand.
- 340B status: where the drug was bought at 340B pricing, record it and apply the state’s flagging rule on the claim.
Pro Tip
Reconcile S0104 units against your dispensing log monthly, not annually. Purchase records, the NDC on the claim, and the units billed should tell the same story. Where they do not, the difference is usually a 300 mg tablet billed as one unit instead of three. Catching that inside 30 days keeps it a correction rather than a refund request.
Common billing errors with S0104
Most S0104 denials come from a short list of avoidable mistakes. Each one has a fix that costs less than the appeal.
- Treating S0104 as a visit code. It is a dosage unit. Reporting one unit per encounter understates a 300 mg dose by two thirds.
- Sending it to Medicare. S codes are not payable by Medicare, and the rejection often lands at the clearinghouse instead of the payer. Rework tracking misses it there.
- Leaving the NDC off. A drug line with no NDC fails the payer’s edit before anyone looks at medical necessity.
- Using an equipment or waste modifier. NU, RR, UE, JW, and JZ describe equipment or discarded vial contents. None of that fits an oral capsule.
- Pairing a generic diagnosis. A wellness or chronic care code does not support an antiretroviral. Link the HIV code the record documents.
- Billing a combination product. Lamivudine and zidovudine tablets are a separate product, and S0104 describes zidovudine alone.
Group S-series denials together rather than reading them as scattered one-offs. A pattern shows up fast that way, and a structured denial review turns it into a fix at the source.
How Pabau keeps S0104 claims in the right payer lane
Plenty of practices keep the S0104 rules in one person’s head. That person knows which plans take the code, which want the NDC, and which pay zidovudine on the pharmacy benefit instead. The arrangement works until they take a week off.
Practice management software like Pabau moves those rules onto the claim itself. Eligibility results, payer type, and the drug’s charge line sit on one record. An S code heading for a Medicare file gets flagged before the batch goes out. The NDC and the unit count stay attached to the charge.
Pabau’s claims management software then tracks each submitted line through to payment or denial. Your billers spend their hours on the appeals worth fighting, instead of on rework a routing check would have prevented.
Keep S-code drug claims out of the wrong payer file
Pabau’s claims management tools flag Medicare-incompatible codes before submission and hold the NDC and unit count on the charge line. Track every claim through to payment from one dashboard.
Conclusion
S0104 is a drug code, and the descriptor does the work. Zidovudine, oral, 100 mg tells you the unit size, the route, and which product belongs on the line. The diagnosis follows from the drug rather than from the visit type.
The payer lane is the other half of the job. Medicaid and commercial plans take the code, traditional Medicare does not, and the pharmacy benefit may take the drug instead. Answer those three questions before the drug is supplied, not after the denial arrives.
Keeping drug claims straight across several payer types is where eligibility checks, NDC capture, and denial tracking earn their keep. To see how Pabau handles S-series and other HCPCS drug codes, book a demo.
Continue your research
Working out what a clean drug claim needs? Clean claim submission sets out the elements every claim line needs to clear a payer’s first-pass edits.
Seeing repeat rejections on S-series codes? Denial management in healthcare covers how to group denials by cause and appeal the ones worth appealing.
Need to know the benefit before the drug goes out? Insurance eligibility verification walks through confirming plan type and coverage ahead of the encounter.
Frequently asked questions
What is HCPCS code S0104?
HCPCS code S0104 is the Level II code with the official descriptor “Zidovudine, oral, 100 mg.” It reports oral zidovudine, an antiretroviral drug used against HIV, on Medicaid and commercial payer claims.
What drug does S0104 describe?
S0104 describes zidovudine taken by mouth. Zidovudine is a nucleoside reverse transcriptase inhibitor sold as Retrovir and as generics. It treats HIV infection and is used to reduce perinatal transmission.
How many units of S0104 do I bill?
One unit of S0104 is 100 mg of zidovudine. A 100 mg capsule is one unit and a 300 mg tablet is three units. The 10 mg per mL oral solution gives one unit per 10 mL. Take the quantity from the prescription or the administration record.
Is S0104 covered by Medicare?
No. S codes are not payable by Medicare, and no local or national coverage determination changes that. Some Medicare Advantage plans include S codes in their own benefit designs, so verify each plan individually.
Does an S0104 claim need an NDC?
Usually, yes. A payer that accepts a drug HCPCS code on a professional claim almost always wants the National Drug Code with it. On the CMS-1500, the NDC goes in the shaded area of box 24A with the N4 qualifier, a unit of measure qualifier, and the quantity.
Diagnosis, product, and benefit questions
What ICD-10 codes are billed with S0104?
S0104 pairs with HIV diagnoses. B20 reports HIV disease once an HIV-related illness is documented, and Z21 reports asymptomatic HIV infection status. Pregnancy encounters take an O98.7- code first, and Z20.6 covers exposure before a diagnosis is confirmed.
Can S0104 be used for combination HIV tablets?
No. S0104 describes zidovudine on its own. Lamivudine and zidovudine tablets, and abacavir, lamivudine and zidovudine tablets, are separate products. Ask the payer which code it wants for a combination product.
What is the difference between S0104 and J3485?
The route. S0104 covers oral zidovudine in 100 mg units and is a non-Medicare S code. J3485 covers injection, zidovudine, 10 mg, and it is a permanent J code that Medicare recognizes.
Is zidovudine billed under the pharmacy benefit or the medical benefit?
Most oral zidovudine is dispensed by a pharmacy and billed on an NCPDP claim under the pharmacy benefit, where the NDC drives payment. S0104 applies when the practice buys and supplies the drug itself. Confirm which benefit the plan uses before the drug goes out.