Code Types

From OpenEMR Project Wiki

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.

SNOMED

  • Follow instructions at Administration->Other->External Data Loads->SNOMED

CPT4

  • Read through the following script here: openemr/contrib/util/load_cpt_desc.plx

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 but needs to be specified??/used for??)
  • 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 " - "/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.