Common ICD-10-CM codes for primary care SOAP notes
The ICD-10-CM codes family physicians, nurse practitioners and physician assistants use often: low back pain (M54.50), chest pain (R07.9, R07.89), UTI (N39.0), abdominal pain (R10.-), hypertension (I10), type 2 diabetes (E11.9, E11.65), hyperlipidemia (E78.5), URI (J06.9), pharyngitis (J02.9), cough (R05.1-R05.9), headache (R51.9), fatigue (R53.83), GERD (K21.9), obesity with BMI (E66.-, Z68.-) and the annual exam (Z00.00, Z00.01). Each comes with when to use it and what to write in the SOAP Assessment so the note supports it.
Want to see an AI-drafted Medical SOAP note first? Open a fictional medical visit note in the MentalNote editor, no sign-up needed.
Codes and titles checked on 23 October 2026 against the CMS ICD-10-CM code files for FY2026 and FY2027 (FY2027 took effect October 1, 2026). General information, not coding, billing or clinical advice: the clinician chooses and is responsible for the codes reported, and payer rules vary. All examples are fictional.
Quick answer
- Low back pain: M54.50 (unspecified), M54.51 (vertebrogenic) or M54.59 (other). M54.5 is a heading, not a billable code.
- Chest pain: R07.9 (unspecified) or R07.89 (other chest pain, including atypical, musculoskeletal and non-cardiac chest pain).
- UTI: N39.0, or N30.00 / N30.01 when you document acute cystitis.
- Abdominal pain: code the location, such as R10.13 epigastric or R10.31 right lower quadrant; R10.9 only when the location is not documented.
- Chronic conditions: I10 hypertension, E11.9 or E11.65 type 2 diabetes, E78.5 hyperlipidemia (E78.00 or E78.2 when the type is documented), K21.9 GERD without esophagitis, E66.9 or E66.811-E66.813 obesity with a Z68 BMI code.
- Acute respiratory: J06.9 URI, J02.9 pharyngitis, J02.0 strep pharyngitis, and R05.1-R05.9 for cough by type.
- Other symptoms: R51.9 headache, R53.83 fatigue.
- Annual exam: Z00.00 without or Z00.01 with abnormal findings (adults); Z00.129 or Z00.121 for a routine child health check.
Report every code with all of its characters: categories and subcategories such as M54.5, R05, R07, R10, E11.4, E66.81 and Z00.0 are headings, not billable codes. MentalNote does not assign codes; the clinician chooses codes.
Pain and common symptoms
| Code | Description (CMS title) | When to use | Documentation tip for the Assessment |
|---|---|---|---|
| M54.50 | Low back pain, unspecified | Low back pain (lumbago NOS) with no more specific diagnosis. | Write onset, side, radiation and red-flag negatives. With sciatica, use M54.41 (right) or M54.42 (left); a documented low back strain is S39.012A at the initial encounter. |
| M54.51 | Vertebrogenic low back pain | Only when you document vertebrogenic low back pain (low back vertebral endplate pain). | Write the term "vertebrogenic" and what supports it; the code is not a synonym for ordinary mechanical back pain. |
| M54.59 | Other low back pain | A specified type of low back pain that has no more specific code. | Name the type of pain you diagnosed. If you cannot, M54.50 is usually the more accurate choice. |
| R07.9 | Chest pain, unspecified | Chest pain with no further description. | Add character and context where you can: "atypical", "musculoskeletal", "precordial" or "on breathing" each lead to a more specific R07 code. |
| R07.89 | Other chest pain | Chest pain documented as atypical, musculoskeletal or non-cardiac; anterior chest-wall pain; chest pressure or discomfort. | If you diagnose the cause (for example costochondritis, M94.0, or GERD, K21.9), code the cause instead. "Rule out angina" stays a symptom code in outpatient care. |
| R10.9 | Unspecified abdominal pain | Abdominal pain when the location is not documented. | Document the site: R10.11 right upper quadrant, R10.13 epigastric, R10.31 right lower quadrant, R10.84 generalized. Flank pain has its own codes (R10.A0-R10.A3) since FY2026. |
| R10.13 | Epigastric pain | Epigastric pain; the code also includes dyspepsia. | Functional dyspepsia is coded K30 instead. Note what makes the pain better or worse and the alarm features you asked about. |
| R51.9 | Headache, unspecified | Headache, unspecified (also facial pain NOS). | When you diagnose migraine (G43.-) or tension-type headache (for example G44.209), code that diagnosis instead, because the headache is part of it. |
| R53.83 | Other fatigue | Fatigue NOS, tiredness, lack of energy, lethargy. | R53.82 is chronic fatigue, unspecified; myalgic encephalomyelitis/chronic fatigue syndrome is G93.32. Record the duration and the workup ordered. |
| R05.1 | Acute cough | Acute cough. | State how long the cough has lasted; ICD-10-CM does not define the durations. Use R05.2 for subacute and R05.3 for chronic (persistent) cough. |
| R05.9 | Cough, unspecified | Cough when the type is not documented. | Document the cough type in the Assessment as well as its duration, for example "acute cough, 4 days" when that is your assessment. R05.9 is right when the type remains unspecified; do not infer acute, subacute or chronic from duration alone. If you diagnose the cause, a cough that is a routine part of it is usually not coded separately. |
Two code families were split on October 1, 2021 (FY2022): low back pain M54.5 became M54.50, M54.51 and M54.59, and cough R05 became R05.1-R05.9. Older templates and superbills that still list M54.5 or R05 need updating. Pelvic and perineal pain (now R10.20-R10.24) and flank pain (R10.A0-R10.A3) were expanded on October 1, 2025 (FY2026).
Acute infections
| Code | Description (CMS title) | When to use | Documentation tip for the Assessment |
|---|---|---|---|
| J06.9 | Acute upper respiratory infection, unspecified | Acute upper respiratory infection NOS. | A common cold (acute nasopharyngitis) is J00 instead. When the organism is known, ICD-10-CM asks for an additional code from B95-B97, such as B97.4 for RSV. |
| J02.9 | Acute pharyngitis, unspecified | Acute pharyngitis or sore throat NOS, without a confirmed organism. | Record the decision-rule items and any test result. While a strep test is pending, "suspected strep" is not coded as strep in outpatient care. |
| J02.0 | Streptococcal pharyngitis | Streptococcal pharyngitis (strep throat) that you diagnose, for example with a positive rapid antigen test or culture. | Write the result that supports the diagnosis ("rapid strep positive"). Scarlet fever has its own codes (A38.-). |
| N39.0 | Urinary tract infection, site not specified | Urinary tract infection when the site is not specified. | If you document acute cystitis, use N30.00 (without hematuria) or N30.01 (with hematuria). For cystitis with no type documented, use N30.90 (without hematuria) or N30.91 (with hematuria); other documented types have their own codes. Add the organism from B95-B97 when it is known, such as B96.20 for E. coli. |
Chronic conditions
| Code | Description (CMS title) | When to use | Documentation tip for the Assessment |
|---|---|---|---|
| I10 | Essential (primary) hypertension | Essential (primary) hypertension, including high blood pressure NOS. | Hypertension with CKD is coded I12.- plus an N18 stage code unless documented as unrelated. If hypertensive heart disease is also present, use I13.- instead of I12.-, keep the N18 stage code and add an I50.- code if heart failure is present. The presumed hypertension-heart link applies only to heart conditions linked by the Index, not every heart diagnosis. An elevated reading without a diagnosis of hypertension is R03.0. |
| E11.9 | Type 2 diabetes mellitus without complications | Type 2 diabetes with no complications documented. | Write the status ("at goal", "not at goal") and add Z79.84, Z79.4 or Z79.85 for long-term drug use. If you document remission, E11.A (added in FY2026) applies; "resolved" does not mean remission. |
| E11.65 | Type 2 diabetes mellitus with hyperglycemia | Type 2 diabetes with hyperglycemia; the Index sends poorly controlled, inadequately controlled and out-of-control diabetes here. | Write "with hyperglycemia" or "poorly controlled" when that is your assessment; "not at goal" alone does not say it. "Uncontrolled" must say whether you mean hyperglycemia or hypoglycemia. |
| E11.22 | Type 2 diabetes mellitus with diabetic chronic kidney disease | Type 2 diabetes with diabetic chronic kidney disease. | The classification presumes the link between diabetes and CKD. Add the N18 stage code, for example N18.31 for stage 3a. |
| E78.5 | Hyperlipidemia, unspecified | Hyperlipidemia when the type is not documented. | Name the type if you know it: E78.00 pure hypercholesterolemia, E78.1 pure hyperglyceridemia (elevated fasting triglycerides), E78.2 mixed hyperlipidemia. |
| E78.2 | Mixed hyperlipidemia | Mixed hyperlipidemia (combined; elevated cholesterol with elevated triglycerides). | Put the lipid values that support it in the Objective section and the type in the Assessment. |
| K21.9 | Gastro-esophageal reflux disease without esophagitis | GERD without esophagitis (esophageal reflux NOS). | Use K21.00 (with esophagitis, without bleeding) only when esophagitis is documented, for example on endoscopy. |
| E66.9 | Obesity, unspecified | Obesity NOS, when no class or cause is documented. | Document the class instead when you can: E66.811 class 1, E66.812 class 2, E66.813 class 3. E66.01 is morbid (severe) obesity due to excess calories; E66.3 is overweight. |
| Z68.32 | Body mass index [BMI] 32.0-32.9, adult | Adult BMI 32.0-32.9 (example). Adult BMI codes run from Z68.18 to Z68.45 and are for ages 20 and over. | A BMI code is a secondary code that goes with an associated diagnosis, such as obesity, documented by the provider; the BMI value itself may come from another clinician, such as a nurse or dietitian. Ages 2 to 19 use pediatric percentile codes (Z68.51-Z68.56). Not used in pregnancy. |
From October 1, 2026 (FY2027), Z68.1 (adult BMI 19.9 or less) is no longer billable: it was split into Z68.18 (BMI 18.4 or less) and Z68.19 (BMI 18.5-19.9). Every other code on this page has the same title and status in the FY2026 and FY2027 files.
Annual exam
| Code | Description (CMS title) | When to use | Documentation tip for the Assessment |
|---|---|---|---|
| Z00.00 | Encounter for general adult medical examination without abnormal findings | Adult annual or periodic exam (adult health check-up NOS) with no abnormal findings. | It is acceptable to code "without abnormal findings" if nothing abnormal was found and results are not back yet. A visit for a specific complaint is coded to the complaint instead. |
| Z00.01 | Encounter for general adult medical examination with abnormal findings | Adult annual exam that finds a new condition or a change in severity of a chronic one, such as uncontrolled hypertension. | List Z00.01 first and add a code for each abnormal finding. Write the finding as a numbered problem in the Assessment. For children, use Z00.121 or Z00.129. |
How to write an Assessment that supports the code
- Name the diagnosis in words. A code is chosen from what you write. "Type 2 diabetes with hyperglycemia" supports E11.65; "DM2, A1c 8.6" does not say it.
- Give the detail the code asks for. Location for abdominal pain, side for sciatica, duration for cough, class for obesity, stage for CKD, and the organism when it is known.
- Code what you know at this visit. In outpatient care, "probable", "suspected" and "rule out" diagnoses are not coded; the symptom, sign or abnormal result is.
- Leave out symptoms that are part of the diagnosis. Sore throat is part of pharyngitis and cough is part of an acute URI.
- Code every condition you managed. Chronic conditions that you treated at this visit, or that affected care, are coded at this visit too.
- Keep codes in step with the plan. Number the problems in the Assessment and use the same numbers in the Plan, so each order is tied to a diagnosis.
Example: Assessment and Plan with codes
A fictional, shortened illustration of a chronic-care visit that also covers an acute problem. The codes in brackets show how a clinician might list them; the clinician chooses them.
Fictional example: 56-year-old at a 3-month follow-up. A human-written illustration of a fictional visit (no real patient). It is not verbatim app output, not treatment guidance and not coding advice for a specific patient.
Assessment
- Type 2 diabetes with hyperglycemia, not at goal: A1c 8.6% today (7.9% three months ago) on metformin. [E11.65, Z79.84]
- Essential hypertension, at goal: BP 126/78 on lisinopril. [I10]
- Mixed hyperlipidemia on atorvastatin: LDL 104 mg/dL, triglycerides 210 mg/dL. [E78.2]
- Obesity, class 1, BMI 32.4. [E66.811, Z68.32]
- Acute upper respiratory infection, likely viral: 4 days of cough and nasal congestion, afebrile, lungs clear. [J06.9; cough not coded separately]
Plan
- Continue metformin 1000 mg twice daily. Discussed adding a second medication; patient prefers to try diet and activity changes first. Referral to diabetes self-management education. Basic metabolic panel and urine albumin-to-creatinine ratio today. Repeat A1c in 3 months.
- Continue lisinopril 20 mg daily. Home BP log.
- Increase atorvastatin from 20 mg to 40 mg daily. Repeat lipid panel in 4 to 12 weeks.
- Counselled on nutrition and a goal of 150 minutes a week of moderate activity. Recheck weight at next visit.
- Supportive care: fluids, rest, saline nasal spray. No antibiotics.
Follow-up: 3 months, sooner as needed.
Return precautions: fever over 100.4 F (38 C), shortness of breath, chest pain, or cough lasting more than 3 weeks.
Why it works: each problem is written in words that match a code title ("with hyperglycemia", "mixed hyperlipidemia", "class 1"), the numbers behind each status are in the note, and the plan numbers match the assessment numbers. The cough is not coded on its own because it is part of the URI diagnosis.
Draft primary care SOAP notes with MentalNote
MentalNote records the visit in your browser with the patient's consent and drafts a Medical SOAP note: Chief Complaint, History of Present Illness, Review of Systems, Objective, a numbered Assessment and Plan. MentalNote does not assign codes; the clinician chooses codes. A draft includes a diagnosis or code only when you state one, and it writes "Not documented." for anything the visit did not cover. You check, edit and sign every note.
MentalNote is HIPAA-compliant, with a BAA included on every plan. The free plan includes 5 web-app scribe sessions a month with no credit card; Premium is $99/month or $990/year (pricing). You can open a fictional medical visit in the editor without signing up. See also the family medicine SOAP note examples, the Medical SOAP note generator and the AI scribe for primary care.
Sources
- Centers for Medicare & Medicaid Services. ICD-10-CM code descriptions in tabular order, FY2027 (effective October 1, 2026) and FY2026; ICD-10-CM tabular list and index, FY2027. cms.gov/medicare/coding-billing/icd-10-codes.
- ICD-10-CM Official Guidelines for Coding and Reporting, FY2027: Sections I.A.15 ("With"), I.B.5 (integral conditions), I.B.14 (documentation by other clinicians), I.B.18 (sign, symptom and unspecified codes), I.C.4.a (diabetes), I.C.9.a (hypertension), I.C.21.c.3 (BMI), IV.H (uncertain diagnosis), IV.J (coexisting conditions) and IV.P (general medical examinations with abnormal findings).
- CMS ICD-10-CM code files for FY2021 and FY2022 (M54.5 and R05 expansion, effective October 1, 2021) and the FY2026 and FY2027 addenda.
Primary care ICD-10 codes: common questions
What is the ICD-10 code for low back pain?
M54.50 (Low back pain, unspecified) is the usual code for low back pain without a more specific diagnosis. M54.51 is vertebrogenic low back pain, and M54.59 is other low back pain. M54.5 itself has not been a billable code since October 1, 2021 (FY2022), when it was split into these three. For low back pain with sciatica, use M54.4- (M54.41 right side, M54.42 left side), and for a documented low back strain use S39.012A at the initial encounter.
What is the ICD-10 code for chest pain?
R07.9 (Chest pain, unspecified) is for chest pain with no more detail. R07.89 (Other chest pain) covers chest pain documented as atypical, musculoskeletal or non-cardiac, anterior chest-wall pain, and chest pressure or discomfort. R07.2 is precordial pain and R07.1 is chest pain on breathing. When you diagnose the cause, such as GERD or costochondritis, code the cause instead of the symptom.
What is the ICD-10 code for a urinary tract infection?
N39.0 is urinary tract infection, site not specified. N39.0 excludes infections of a specified site. For documented acute cystitis, use N30.00 (without hematuria) or N30.01 (with hematuria). For cystitis with no type documented, use N30.90 (without hematuria) or N30.91 (with hematuria); other documented types have their own codes. ICD-10-CM asks for an additional code from B95-B97 for the organism when it is known, such as B96.20 for E. coli.
What are the ICD-10 codes for hypertension and type 2 diabetes?
Essential hypertension is I10. Type 2 diabetes without complications is E11.9; with hyperglycemia it is E11.65, which is also where the Index sends diabetes documented as poorly controlled, inadequately controlled or out of control. Add Z79.84 for oral diabetes drugs, Z79.4 for insulin or Z79.85 for injectable non-insulin drugs. Unless documented as unrelated, hypertension with chronic kidney disease is coded I12.- and type 2 diabetes with CKD is coded E11.22; add an N18 code for the stage. If hypertensive heart disease is also present, use I13.- instead of I12.- and add an I50.- code if heart failure is present.
What is the ICD-10 code for cough?
Since October 1, 2021 (FY2022), cough is coded by type: R05.1 acute cough, R05.2 subacute cough, R05.3 chronic cough, R05.4 cough syncope, R05.8 other specified cough and R05.9 cough, unspecified. For cough syncope, the Tabular List instructs you to code R55 (syncope and collapse) before R05.4. R05 alone is not billable. ICD-10-CM does not define the durations, so state how long the cough has lasted. If you diagnose the cause, such as an acute upper respiratory infection (J06.9), the cough is part of it and is usually not coded separately.
What ICD-10 code is used for an annual physical?
For an adult, Z00.00 (general adult medical examination without abnormal findings) or Z00.01 (with abnormal findings). The coding guidelines define an abnormal finding as a newly identified condition or a change in severity of a chronic condition, such as uncontrolled hypertension; with Z00.01 you also code the finding. For a routine child health check, use Z00.129 (without abnormal findings) or Z00.121 (with abnormal findings). A visit for a specific symptom is coded to the symptom, not Z00.0-.
Should I code the symptom or the diagnosis in the assessment?
Code the diagnosis when you have made one, and leave out symptoms that are a routine part of it. In outpatient care, the ICD-10-CM guidelines say not to code a diagnosis written as probable, suspected, rule out or similar; code the symptoms, signs or abnormal results instead. So "chest pain, rule out angina" is coded R07.9 until a diagnosis is confirmed. Symptom and unspecified codes are acceptable when they are the most accurate description of that visit.
Does MentalNote assign ICD-10 codes?
No. MentalNote does not assign codes; the clinician chooses codes. MentalNote drafts a Medical SOAP note from the recorded visit and includes a diagnosis or code only when you state one. You choose, check and enter the code, and review every draft before it goes in the record.
Record the visit. Review the SOAP draft. Choose the codes.
Open a fictional medical visit and edit a prepared Medical SOAP note. When you're ready, sign up free: 5 web-app scribe sessions a month, no credit card. Premium is $99/month or $990/year.
Try the medical sample, no signup