Skip to content

ICD-10 PCS Coding

PCS coding is to identify ICD 10 codes for procedures. Usually coder codes Diagnosis codes by reviewing index file first, later goes to tabular file to give a complete code. For Procedure coding also coder does same work(check for operation in index then goes to particular pcs table).

But for system its quiet different. We have a comprehensive combinations for diagnoses. In addition we are handling 80% of JAPE logic handling in disease. jape and disease1.jape rules. We wrote separate rules for Cancer, Fracture, burns, OBG, and drug effects.

For PCS coding we cannot go in same way as we did for diagnoses. Reason is for diagnoses 90% of time combinations appear in same line. But for procedure coding all factors scattered in whole document.

So we tried in 3 different ways to achieve proper coding. We believe solution 1 is failure. Solution 2 is success but complicated. Solution 3 is success and simple. But this will be decided by time and accuracy.

Before going to explain solutions, I will provide brief introduction of PCS coding.

Usually any PCS code contains 7 digits. Each digit has different feature. Digit 1 represents section. Depends on section remaining digit features will change.

Ex: For Medical and Surgical section and Administration section we have below features.

SectionId Digit1 Digit2 Digit3 Digit4 Digit5 Digit6 Digit7
0 Medical and Surgical Body System Root Operation BodyPart Approach Device Qualifier
3 Administration Physiological System or Anatomical Region Root Operation Body System or Region Approach Substance Qualifier

For PCS coding most of the codes comes from Medical and Surgical section only.
Total PCS codes: 75789

Medical and Surgical 65676
Imaging 2934
Radiation Therapy 1939
Administration 1427
Physical Rehabilitation and Diagnostic Audiology 1380
Placement 861
Nuclear Medicine 463
Measurement and Monitoring 342
Obstetrics 300
Osteopathic 100
Chiropractic 90
Other Procedures 60
Substance Abuse Treatment 59
Extracorporeal Therapies 46
New Technology 41
Extracorporeal Assistance and Performance 41
Mental Health 30


Even though we need to concentrate on different types of sections. Because every operation comes up with different operations.
For example Angioplasty is a Medical and surgical procedure. Before doing that physician will do left heart catheterization, ventriculogram(which are related to Imaging).
I am going to give documentation on 3 approaches we worked.
Note: procedure or operation --> both meaning is same.

Approach 1: Final Annotation PCS3/PCS4

Using this approach we have developed around 15 major procedures. some small procedures also there. We tried to do this approach in disease analysis concept. But it's a failed for procedures. Initially it gave good results, later we did lot of changes to application to handle complex combinations. We found that we couldn't place all procedures combinations in single rule.

This concept contains List files like Operations.lst, Bodypart.lst, device.lst, approach.lst, Qualifier.lst, oboperatins.lst, and negative.lst.
and JAPEs like PCS.jape, PCSAnalysis.jape, HemoDialysis.jape, PCS3.jape....etc...

You can find above files under DGPCSJAPE/MedResource/ICD/

After running PCS.def gazetteer, we will run JAPEs.
PCSAnalysis.jape: It analyses negative and history words to identify temporality and negation of procedures.

PCS.jape: It identifies all basic annotations related to a Procedure code digits, like (Operation, Bodypart, Bodypartloc, Approach, Device and Qualifier)
HemoDialysis.jape: It is handling hemodialysis, blood transfusion and Obsteric codes.
PCS2.jape: After identifying procedure features, this rule tries to find combinations among procedure, bodypart and bodypartloc.
PCS3.jape: This rule tries to identify temporality and negation and remove those procedures. In addition it will remove procedures from unnecessary headings also.

MedmineMaster tables:
PCSTabular: Its a key table contains all procedure codes along with each digit information. In addition it contains a group id which represents a part of procedure table.

Section 4 Measurement and Monitoring
Body System A Physiological Systems
Operation 1 Monitoring
0 Central Nervous 7 Via Natural or Artificial Opening
B Pressure
K Temperature
R Saturation
D Intracranial


Above combinations will comes under one group id.(4A107BD, 4A107KD, and 4A107RD).

PCSOperation: contains procedures from index data with partial codes.
Ex: Arthroplasty
see Repair, Upper Joints 0RQ
see Replacement, Upper Joints 0RR
see Supplement, Upper Joints 0RU
see Repair, Lower Joints 0SQ
see Replacement, Lower Joints 0SR
see Supplement, Lower Joints 0SU

PCSOPSynonyms: contains synonyms for operations. PCSBodypart: bodyparts, bodypart parts synonyms and bodypart locations for standard bodyaprt which was defined in PCSTabular. PCSBodypatsynonyms: Bodyparts and bodypart synonyms by operations. PCSDevice: Device names with synonyms based on groupid. PCSQualifier: Qualifier names with synonyms based on groupid.

PCSAnalysis:
After analysing defs and japes AnnotationProcessor.getPCS() method will be called.
We will read all features like PCSBodyPart, Qualifier, Device, Comb(Substance, Osmolar level), approach, Procedure(PCS/PCS4) and some other procedures which used Approach 1

  1. we will read PCSBodyPart annotations and insert them into PCSBodypart table.
  2. we will read Qualifier annotations and insert them into PCSQualifier table.
  3. we will read Approach annotations and insert them into PCSApproach.
  4. we will read Device annotations and insert them into PCSDevice table.
  5. we will read Comb annotations and insert them into PCSCombinations.
  6. Now we will read PCS3/PCS4 annotations


These annotations contains Procedure, bodypart and bodypartloc. If it doesn’t have bodypart loc feature, I am obtaining from bodypart annotations.

  1. Then we are inserting these details into Pcsoperation table. We are fetching standard names from medminemaster.dbo.PCSOPSynonyms table.
  2. SP: InsertOpDetails
  3. Adding other inclusion procedures and excluding unnecessary procedures.
  4. SP: ICD10PCSElemination.
  5. Insert standard device name for devices
  6. SP: InsertOpDeviceComb
  7. Remove non priority devices
  8. ex: when you have ceramic synthetic substitute... remove simple synthetic substitute SP: DeviceElemination
  9. insertPacemakerBodypart --> some procedures don’t have direct bodyparts for those we need to join with medminemaster.dbo.pcsbodypartsynonyms.
  10. checkOperationCompleteness --> Here for certain procedures we need Extent annotations (partial or total hemi arthoplasty)
  11. If you find extent annotation we need to update extent column in PCSOperation table .
  12. Executing ICD10InsertProcedureCodes stored procedure to find out relevant code for given procedure.
  13. Inserting PCS codes includes for this procedure.
  14. getInsertProcedurePriority --> assigned priorities to procedures based on coder auditor Vasantha’s instructions.
  15. getPCSExclusion --> PCS Eliminations by Code
  16. UpdateMissingInfoTableStatus --> if we find any incomplete codes we are storing that information in another table.

Approach 2: We faced many issues with approach 1. Huge number of codes inserting into table. So it creates lot of confusion for coders. Complexity also increased. So we went with approach2.

In this approach we wrote separate rules for each procedure. We hard coded some ICD codes in the jape rules itself.
Discreteelements.jape and Discreteprocedures.jape are key jape rules. Here we will write all our rules to avoid token and lookup in Procedure rules.
MedmineMaster.dbo.StandardBodyParts2 is a key table which stores bodyparts, operations along with codes. AbsoluteOP is a key annotation which will deliver output.
We will join our operations along with bodyparts to find exact code.

Approach 3:

getDirectPCS --> here we will do same as approach2, but we do these all work in jape only. We are accessing database from jape rule and finding exact features for that procedure.