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
- we will read PCSBodyPart annotations and insert them into PCSBodypart table.
- we will read Qualifier annotations and insert them into PCSQualifier table.
- we will read Approach annotations and insert them into PCSApproach.
- we will read Device annotations and insert them into PCSDevice table.
- we will read Comb annotations and insert them into PCSCombinations.
- 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.
- Then we are inserting these details into Pcsoperation table. We are fetching standard names from medminemaster.dbo.PCSOPSynonyms table. SP: InsertOpDetails
- Adding other inclusion procedures and excluding unnecessary procedures. SP: ICD10PCSElemination.
- Insert standard device name for devices SP: InsertOpDeviceComb
- Remove non priority devices ex: when you have ceramic synthetic substitute... remove simple synthetic substitute SP: DeviceElemination
- insertPacemakerBodypart --> some procedures don’t have direct bodyparts for those we need to join with medminemaster.dbo.pcsbodypartsynonyms.
- checkOperationCompleteness --> Here for certain procedures we need Extent annotations (partial or total hemi arthoplasty) If you find extent annotation we need to update extent column in PCSOperation table .
- Executing ICD10InsertProcedureCodes stored procedure to find out relevant code for given procedure.
- Inserting PCS codes includes for this procedure.
- getInsertProcedurePriority --> assigned priorities to procedures based on coder auditor Vasantha’s instructions.
- getPCSExclusion --> PCS Eliminations by Code
- 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.