Left Shoulder Pain ICD-10: Complete Coding Guide & Diagnostic Reference
The code is M25.512, pain in left shoulder. Billable, side specific, unchanged since the day ICD-10-CM switched on in October 2015. If somebody has sent you here because a claim bounced and you need the number, that is the number, and if the chart says left shoulder pain with no cause named, you are done.
I am going to keep going anyway because I coded orthopaedics for 6 years and shoulders were a third of everything we billed, and I have a lot of opinions about M25.512 that I never got to say out loud in a cubicle. The main one is this. M25.512 is the easiest code in the shoulder and it is also the one that causes the most trouble, because people cannot let go of it. It goes on the first visit, which is right, and then it stays on the record through the MRI, the injection, the surgery consult and half the physio, which is wrong, and every one of those later claims is carrying a symptom code where a diagnosis should be.
What is M25.512
It sits in Chapter 13, musculoskeletal, category M25 (other joint disorder, not elsewhere classified), subcategory M25.51, pain in shoulder, and the last digit is the side. 1 is right, 2 is left, 9 is unspecified. That is the whole anatomy of it.
The 9 is the one I want to talk about. M25.519, pain in unspecified shoulder, exists because the code set has to have somewhere to put a note that does not say which side. It should almost never be used and in 6 years I think I used it 3 times, all on records from an outside urgent care that I could not query. If your own provider has written “shoulder pain” and stopped, the answer is a query, not M25.519, because the payers run laterality edits and an unspecified code with a specific alternative available is a denial you sent them on purpose. I had a surgeon who dictated “shoulder” with no side for a solid year and the fix in the end was not a coding fix, it was his practice manager standing behind him during dictation for a week.
Acute or chronic makes no difference to M25.512, it covers both, and the “does it hurt for the first time or has it hurt for a year” question does not change the code. There is a chronic pain code, G89.29, that can go alongside it, but only when the provider has actually written “chronic pain” as an assessment, and “pain for 4 months” is not the same sentence. I lost that argument with a physiatrist twice before I found the guideline paragraph and printed it.
The Day You Stop Using It
The rule is not complicated. Symptoms get coded when nobody has named the cause. Once the cause is named, the symptom that belongs to it comes off. A rotator cuff tear hurts. Coding the tear and then coding the pain as well is like coding pneumonia and then adding a cough.
| The note now says | The code becomes |
|---|---|
| Rotator cuff strain, fell on it | S46.012A |
| Rotator cuff tear, wore it out | M75.102 (unspecified) or M75.112 partial, M75.122 complete |
| Impingement, positive Neer or Hawkins | M75.42 |
| Bicipital tendinitis | M75.22 |
| Frozen shoulder | M75.02 |
| Calcific tendinitis on the film | M75.32 |
| Bursitis | M75.52 |
| Osteoarthritis of the joint | M19.012 |
| AC joint sprain | S43.52XA |
A few things about that table that took me longer to learn than they should have.
The M75.1 codes and the S46.0 codes will not sit on the same claim. One is a tendon that wore out, one is a tendon that got hurt, and there is an Excludes1 note between them, which in plain English means pick one. The provider picks, by writing either a mechanism of injury or the word degenerative, and if the note has neither you query. Do not split the difference.
S43.52XA has an X in it and the X is not a mistake. Some injury codes run out of characters before they reach the 7th position, so the code set pads them with X to hold the place. Strip the X because it looks wrong and the code fails validation, and yes I did that, in my first month, on about 40 claims.
And “likely rotator cuff” is still M25.512. So is “probable”, “suspected”, “consistent with” and “rule out”. Outpatient coding treats all of those as not yet diagnosed and you code the symptom. Surgeons hate this. I had one tell me he could feel a tear through the skin and did not need an MRI to know. Possibly true, but the claim went out as M25.512 until the MRI report said tear, and then it did not.
The 7th Character, Briefly
Every S code for a shoulder injury needs a 7th character, and the letter follows the phase of treatment, not the visit number.
- A is active treatment, and it stays A through the surgery and the follow ups where the surgeon is still managing it, however many visits that is.
- D is the recovery phase, once the surgeon has handed the patient to physio and is not doing anything further.
- S is a late problem caused by the original injury, the stiff shoulder 2 years after the repair.
The error I corrected most was the first physio visit going out as D because the physio had never seen the patient before, and the surgeon’s 3rd post op visit going out as A because the surgeon was still “initially” treating it. The letter is about what is being done to the shoulder, not who is in the room. That sentence took me about a year to be able to say cleanly.
The One Left Shoulder Pain That Is Not A Shoulder Problem

I want this bit read by clinicians and I want it read by patients, and I do not much care that it does not fit the coding guide shape.
The heart refers pain to the left shoulder and down the left arm. Every coder knows it as a fact and almost none of us have ever seen a chart where it mattered, because by the time a cardiac patient reaches us the codes are I20 or I21 and the shoulder is a footnote. But I did see one. A man in his 50s, 2 visits with our group for left shoulder pain, examination unremarkable both times, coded M25.512 both times, injected once, and the 3rd contact was the hospital discharge summary. A left shoulder that hurts on effort, with nothing to find on examination, is not a musculoskeletal case until someone has said so, and M25.512 on that record is not a coding error, it is a record that hides what happened. If a cardiac cause is being worked up, the codes follow that, I20, I21, or R07.9 for chest pain under investigation, and the shoulder pain is not coded on its own because it belongs to the cardiac picture.
Neck is the other one. Cervical radiculopathy, M54.12, sends pain into the shoulder with a completely normal shoulder examination, and it lands on M25.512 more than it should because the patient said shoulder and nobody examined the neck.
If you are a patient and M25.512 is on your bill, it means the pain was recorded and not yet explained, and that is fine, that is what a first visit looks like. If it is still on your bill at visit 4 and nobody has told you what is wrong, ask. And if the pain comes when you walk uphill and eases when you stop, ask about your heart before you ask about your shoulder. I am not a clinician. I just coded the chart of the man who did not.