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 analysis 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: Final Annotation is AbsoluteOP
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: Final Annotation is DirectPCS
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. Here in this approach we are using Java class also to get the standard bodyparts,Bodysystems . i.e in the JAPE rules we creating object to the BodyPartsInfo class.
1 2 3 4 5 6 7 8 | |
In this getBPInfo() we are using Standard table to get the information 'medminemaster.dbo.standardbodyparts2'.
finally we get the all standard terms . these terms sending input to Medminemaster.dbo.PCSTabular and get the 7 - digt Pcscode.
PCS Analysis¶
In the Document Analysis side when we run the perticular jobid, first of all check the worktype of that jobid i.e 'O'/DIREP/Other than 'O' .
Then load the all DEF files of PCS by using the getRequiredDefs().
In the runJAPE(String workType) we are calling the 'getRequiredJapes(String wt)' method.
here based on the worktype we are loading the set of JAPE rules .
Apply those particular set of JAPEs on the document. and final set of Annotations are getting ,and processing in AnnotationProcessor java programe.
JAPEs Contains PCS3¶
Present some of the JAPES used PCS3 annotations are Biopsy, Bronchoscopt, ESWL, GastricBand, Polypectomy, Tracheostomy etc..