Code Types
Overview
Code types include billing, diagnosis, performance and other miscellaneous code sets (such as immunizations). By default, OpenEMR is set up to use ICD9 for diagnosis and CPT4/HCPCS for billing. OpenEMR can also support ICD10/SNOMED/DSMIV code types along with any other code types (guessing each country has their own flavor of these) and importing of these alternative code sets.
Import Code Sets
- Code sets can be imported in several ways, depending on the code type. See the Import Standard Tables wiki page for detailed/updated import instructions.
ICD9
- Follow instructions at Administration->Other->External Data Loads->ICD9
- For a new install of code set, basically just need to click 'INSTALL'.
- For upgrade of code set, follow the instructions offered there.
ICD10
- Follow instructions at Administration->Other->External Data Loads->ICD10
- For a new install of code set, basically just need to click 'INSTALL'.
- For upgrade of code set, follow the instructions offered there.
ICPC
(Copy right instructions can be found here: ICPC WONCA)
- Follow instructions. Goto: Administration->Other-> Database-> select table-> Import CSV-file with correct information.
- For a new install of code set be sure to follow all instructions as mentioned and not ruin the relations for different Codes in Code Types.
- For upgrade of code set, follow the instructions to be made available in due time.
- Changing Code-ID or Key in upgrades will ruin the history of coded patient information, be sure to add new codes at end of each table.
SNOMED
- Follow instructions at Administration->Other->External Data Loads->SNOMED
CPT4
Via .plx Import
CPT4 is for billing codes (Mainly US based countries).
- In the Demo version it is used to connect the New patients with brief etc, till comprehensive and Established patients brief, etc, till comprehensive and are connected to a Fee.
- If the complete CPT4 List is incorporated in the different tables it can also be used in other parts of OpenEMR to create a claim. (In the Demo version the Fee amount is defined as 0 and are not defined in Codes)
- After population of the CPT4 codes 99201 till 99210, (this can be done manually if you know the code and discription in Administration => Services) these codes can be found in the Search options in Fee-sheet. To accomplish this:
- Administration => Other => Codes (V.4.1.2)
- Administration => Other => Services (V.4.1.1 and earlier) and can be viewed in the Codes table, this is also true for: New Local Installs.
- Read through the following script here: openemr/contrib/util/load_cpt_desc.plx
- This is a rather complicated script/method. See the following wiki page for how to configure it (note the wiki page discusses another script load_icd_desc.plx, so ensure you substitute/use the load_cpt_desc.plx script instead): OpenEMR_Billing_Setup_Howtos#Load_and_Update_Billing_Codes
- To poulate the Fee tables with CSV-files you need to be aware that CPT4 codes and Fee's are stored in separate tables, one for Defining the Code and one for the Fee to be paid for a certain procedure.
Via .sql Import
1. Purchase and download the CPT data set from the AMA Store. The data file is probably in ASCII .txt format. This is only an assumption, never having actually worked with it. The CPT codes used as illustrations are derived from our office.
2. Download and deploy OpenOffice Calc. This application is not the simplest to use. It is open source and hence its major advantage. The Help section is not very enlightening. OpenOffice Calc online tutorials and other online resources are far more helpful.
Before commencement of the data construction for conversion to a .sql file, be certain that in Tools/Options/ OpenOffice Calc/View/Display that the Formula box is unchecked. If it is checked, the text in the Input Line will remain text without stringing the entries in the cells together (Concatenate).
3. Paste this text into C1, leaving no space after the left parenthesis:
INSERT INTO `codes` (`code_text`, `code`, `code_type`) VALUES(
4. Copy and paste the descriptions into Column A, starting with A2.
5. Copy and paste the codes into Column B, starting with B2.
6. Click C2 and fx, Function Wizard. Working in the Input Line may not bring about Concatenation.
7. In the Formula box paste:
$C$1& "'"& A2& "'"& ",'"& B2& "'"& ","& "1"& ");"
and hit Enter. It is not necessary to use the word, Concatenate, with the above syntax. It is always a good sign when there is no error message in the Result box.
8. Output should look like this:
INSERT INTO `codes` (`code_text`, `code`, `code_type`) VALUES('Comprehensive Exam, New ','92004',1);
9. Drag the lower right corner of C2 down to the last row and the rest of Column C will have the corresponding output as in C2.
Giving this result.
10. Copy & paste from C2 downward into Notepad++.
11. Import via phpMyAdmin
or Configuration Import from Backup.
12. Check in Database/codes and Admininstration/Codes for proper importation.
This technique can be used for the CPT modifiers, which should be included in the data set.
Configure/Add Code Types
- A code type can be configured or added at Administration->Lists->'Code Types' . Below is a description of each element in the Code Types Editor and note this is only applicable for OpenEMR versions 4.1.1 and above.
- Active - Toggle to turn on/off the code type.
- Key - Name of key used to identify code type within database. This should not be altered and needs to be unique.
- ID - ID used to identify code type. This should not be altered and needs to be unique.
- Label - Label of the code type (ok to alter this)
- Seq - Order of the code type when showing the listing.
- ModLength - Maximum length of modifier (0 means there is no modifier used for the code type)(12 is another used ModLength) More information on Modifiers can be found in Forums of OpenEMR: [1] ModLength might be a length for 0 => None to 12 => Can be used for four modifiers. Two characters separated by Space or Colon as specified by Medicaid for modifiers. (Please feel free to add comments, since this conclusion for ModLength might be wrong)
- Justify - If billing justification is used, enter the name of the diagnostic code type. OR: Enter the Key of the code type that is used to justify this code type (blank means no justification is used with the code type)
- Mask - Input formatting for consistency in Code. (# = Numeric, @ = Alpha, * = any character. Literal like " - " for dash, and others for literal consistency. Empty if not used)
- Claims - Toggle to turn on/off whether the code type is used in insurance claims.
- Fees - Toggle to turn on/off whether the code type is associated with fees.
- Relations - Used to link the Code to another Code type.
- Hide - Toggle to turn on/off whether the code type shown in the Fee Sheet searching option.
- Procedure - Toggle to turn on/off whether the code type represents procedure/service codes.
- Diagnosis - Toggle to turn on/off whether the code type represents diagnosis codes.
- Clinical Term - Toggle to turn on/off whether the code type represents a clinical term. Can assign these to the Administration->Lists elements(codes entry). (OpenEMR 4.1.2)
- Medical Problem - Toggle to turn on/off if the code type represents medical problems (ie. Issues). (OpenEMR 4.1.2)
- External - Menu to choose where the code set of the code type is stored. When the code set is stored in an External table, this allows users to upgrade their reference code sets without losing their code set modifications (for example, fees or other flags set to specific codes).
- No - The code set is stored in the 'codes' sql table.
- ICD9 Diagnosis - The code set is stored in the standard ICD9 diagnosis tables.
- ICD9 Procedure/Service - The code set is stored in the standard ICD9 procedure/service tables.
- ICD10 Diagnosis - The code set is stored in the standard ICD10 diagnosis tables.
- ICD10 Procedure/Service - The code set is stored in the standard ICD10 procedure/service tables.
- SNOMED (RF1) Diagnosis - The code set is stored in the standard SNOMED diagnosis tables.
- SNOMED (RF1) Clinical Term - The code set is stored in the standard SNOMED diagnosis tables. (OpenEMR 4.1.2)
- SNOMED (RF1) Procedure - The code set is stored in the standard SNOMED diagnosis tables. (OpenEMR 4.1.2)
- If you want to add a new External code set mechanism, can add it in the custom/code_types.inc.php script
- OpenEMR 4.1.2
- Incorporate it into the $code_external_tables metadata.
- OpenEMR 4.1.1
- Add it to the $cd_external_options array.
- Incorporate it into the code_set_search() and lookup_code_descriptions() functions.
- If you are adding a code type, recommend using the same ct_key and ct_id values as in below table. If creating a new code type, then recommend making sure the ct_id is greater than 100. If you think the code type has general use, then please request to have it added to the official OpenEMR codebase.
- After making a new code type, the code set can either be stored in the 'codes' table by making External setting 'No' or you can create your own sql tables to store it, which can be added as an option to the External setting (see above).
Current Official Code Types
ct_key | ct_id | description |
---|---|---|
CPT4 | 1 | Procedure/Service Codes |
ICD9 | 2 | Diagnosis Codes |
HCPCS | 3 | Procedure/Service Codes |
OPCS | 6 | Sports Medicine Procedure Codes |
PTCJ | 7 | Sports Medicine Physiotherapy Codes |
OSICS10 | 9 | Sports Medicine Diagnosis Codes |
SMPC | 10 | Sports Medicine Radiology Codes |
IPPF | 11 | Family Planning Statistical Codes |
MA | 12 | Family Planning Service Codes |
ACCT | 13 | Family Planning Accounting Codes |
REF | 16 | Family Planning Referral Codes |
CVX | 100 | Immunization Codes |
DSMIV | 101 | Diagnostic and Statistical Manual of Mental Disorders, 4th edition |
ICD10 | 102 | The International Statistical Classification of Diseases and Related Health Problems, 10th Revision |
SNOMED | 103 | Systematized Nomenclature of Medicine - Diagnosis Codes |
CPTII | 104 | Performance Measure Codes |
ICD9-SG | 105 | Procedure/Service Codes |
ICD10-PCS | 106 | Procedure/Service Codes |
SNOMED-CT | 107 | Systematized Nomenclature of Medicine - Clinical Terms |
SNOMED-PR | 108 | Systematized Nomenclature of Medicine - Procedure Codes |
ICPC-TI | 110 | International Coding system for General Practitioners/Family doctors (Chapters/Titles) |
ICPC-SX | 111 | International Coding system for General Practitioners/Family doctors (Symptoms and Complaints) |
ICPC-DI | 112 | International Coding system for General Practitioners/Family doctors (Diagnostic, Screening, Prevention) |
ICPC-TR | 113 | International Coding system for General Practitioners/Family doctors (Treatment, Procedures, Medicaton) |
ICPC-TE | 114 | International Coding system for General Practitioners/Family doctors (Test Results) |
ICPC-AD | 115 | International Coding system for General Practitioners/Family doctors (Administrative) |
ICPC-OT | 116 | International Coding system for General Practitioners/Family doctors (Other) |
ICPC-DD | 117 | International Coding system for General Practitioners/Family doctors (Diagnosis and Diseases) |
LOCAL-F | 118 | Local Fees for Services rendered (Fees for Service) |
LEGEND:
- RED - Mandatory setting for this code type
- Italic - Optional setting for this code type (ie. the ct_id can be anything greater than or equal to 100 for this code type)
- BLUE - ICPC-coding is in testing phase and will take more time before flowless total implementation is available. (Date: 20130715)
- Note the ct_key and ct_id are columns from the sql 'code_types' table and that the ct_id column is equal to the code_type column of entries in the sql 'codes' table.
Code Type Issues (For Developers)
- Two elements in the code_types table are considered to be invariant. The ct_key element which holds a text identifier and the ct_id element which holds an id identifier. Changes either of these for ICD9, CPT4, or HCPCS caused problems in prior OpeneMR versions. To support allowance of incorporating new code sets in OpenEMR version 4.1.0+, it was important to modify the OpenEMR codebase and future code in a way that only the ct_key is invariant (ie. the ct_id does not need to be a pre-determined number). An example of this is the CVX code type that was added in OpenEMR version 4.1 and the SNOMED, DSMIV and ICD10 code sets that were added in OpenEMR version 4.1.1 . When adding new codesets during an upgrade, we are using a ct_id above 100 (in a flexible manner; ie. if already exists then increment and try the next and so on) to ensure we don't affect any current users that have added their own code types.