HOWTO: Add Custom Service Codes To The Fee Sheet - Updated

From OpenEMR Project Wiki


OpenEMR CE (‘Community Edition’) has a feature that allows treatment, diagnostic or other types of codes to be grouped in dropdowns (AKA 'categories') on the Fee Sheet for convenience in recording the charges in an encounter. These codes may be individual ones from an installed codeset, or collections of codes, which I've arbitrarily called, 'Custom Service Codes' or CSCs.

You may see references to documentation titled ‘Fee Sheet Custom Service Categories’ or ‘Multiple Code Fee Sheet List Categories’. That documentation is for OpenEMR v4.x and is not completely applicable in v7+.

In the standard OpenEMR the fee sheet comes pre- configured with the code categories, 'New Patient' and 'Established Patient'. These dropdowns contain the management codes for visits (e.g., 'Brief, 'Limited',"Extended', etc) but it has no treatment or diagnosis codes. Those must be imported separately using instructions elsewhere in the wiki. But note that the codes must already be in the EMR before they can be added to CSCs.

Grouping codes on the fee sheet provides two benefits.

1. Code categories can display together on the fee sheet a collection of individual codes that are related in some way, thus making it easier to locate the one you want.

2. CSCs can contain a group of codes in one entry which can all be added to the fee sheet in one click. For example, you may have a fee sheet category (dropdown) for different types of visits, and in that dropdown a CSC for each one: a Minor Surgery visit or a generic Office Visit. Each one when selected will automatically add all the treatment and diagnostic codes that are typically used for that visit.

Procedure Overview

The short story of this process:

1. Plan the categories - decide what the dropdowns will be called and which codes will be in each
2. Prep the codes - identify and list the codes that will be used
3. Create the CSCs
4. Add codes to their categories

Here’s a screenshot of the fee sheet we’re going to build. It contains the default categories of ‘New-’ and ‘Established Patient’ but also the new categories ‘Visits’ and ‘Immunizations’

Depending on the theme you use your display will be different.



An Administrator- privileged user account must be used to do this.

Note: since the CPT4 codes are proprietary some licensing issues may arise from different uses made of them in OpenEMR. I am NOT a lawyer so I will simply link to the relevant page of the AMA site and let the user make their own decision on the implications of how they are used in their own OpenEMR instance.

Plan the categories and codes

This is only the planning stage, don’t edit anything in the EMR yet!

1. First, we're going to name a category (dropdown) that will contain the CSCs that apply to different (fictitious) types of visits.


Inside this dropdown we will put one item for each of our three types of health visits:

Pediatrics Surgery – which contains the codes:
CPT4:12001 laceration repair etc
CVX:35 Tetanus Toxoid

Office Visit – the codes:
CPT4:90791 clinical intake

Cancellation Fee – note this is a single code CSC and it is of code type ‘INHOUSE. See the Appendix below for more on that.

2. Prepare the codes

Go through the CPT codes and be sure they're complete. Refer to: HOWTO:_Add_Or_Edit_A_Billing_Code_In_OpenEMR#2._Add_Codes_To_System

Create the CSC

1. Open the fee sheet list: from main menu, 'Admin/ Forms/ Lists' (oval)


2. Enter the name of the form, ‘Fee Sheet’:


This (below) displays the controls of the Fee Sheet as they will appear when our custom CSCs are added. Let’s walk through all the elements.

Notice that to keep image size smaller we only show the first default group ‘New Patient’ here...


3. Add to the bottom of the list, the new item in each column:

Group - AKA Category, appears as the name of the dropdown in the fee sheet.


Option – displayed as the items inside the fee sheet dropdown.
Here are displayed the CSCs in the category ‘Visits’


Generates - the codes that are added to the fee sheet.

Add your own and pay attention to the numbering convention.

1. Groups

  • are numbered consecutively
  • all the items in the same group have the same initial number
  • the group name follows the number with no space
  • you will have one Group line for each 'Option' item in that Group.

2. Option

  • each Option item in the group is numbered consecutively
  • use the same number/ naming conventions as with the Group names

3. Generates

  • this column contains the code(s) which are added to the fee sheet when the Option CSC is clicked.
  1. click 'Add' link and see the ‘Add Code’ dialog (image below).
  2. choose the codetype from the dropdown (highlighted)
  3. click on the desired the code in the list that appears (arrow)
  4. click 'Close' (oval)
  5. IMPORTANT: each Option MUST have at least one code in the ‘Generates’ column else it will distort the display of that dropdown in the fee sheet.


4. Repeat from step ‘1. Groups’ above, for more new code Categories and CSCs.

To add the single code CSCs shown in the 'Immunization' dropdown, simply put the immunization's name in the Option column for each one, and its single code in the 'Generates' column.

And here’s a shot of how a single click of the ‘Pedes Minor Surgery Visit’ drops all the configured codes onto the fee sheet. All that remains to complete the fee sheet entry is to select the treatment code's justifying diagnosis.



Since OpenEMR's early releases it has had 2 different methods of adding codes to the fee sheet. They both still do in fact work, but the documentation for them can be confusing at best, and the interface is radically worse in the older versions. But just for historical completeness, here are the wiki links.

Also, here is an older doc on the topic of code types. It’s fairly advanced material but may be useful.

Appendix: In-House Codes

The previous instructions describe different methods of grouping standardized treatment and diagnosis codes such as the CPT4 and ICD10 codes. Let me conclude this tutorial by describing a very useful, though not completely obvious, use for CSCs: to add your own non- standard codes to the fee sheet.

Let's call them, 'In-house Codes', though they can be named anything you wish. These are codes that are peculiar to your practice and they do not get sent with claims for insurance payment. However, they are carried on the patient's practice account and appear in the payment/ checkout screens, invoices and reports.

In-house codes are just another code type to add to the fee sheet. They may be put in the same category (dropdown) with other treatments in Multi-Code CSCs, as we have with the cancellation fee. You can make an 'In- House' category and put them all there. Or just list them individually in the fee sheet outside any category dropdowns. The steps to create in-house codes are similar to what is described above, except for two things.

1. you need to create a new code type
2. you need to create the codes themselves

One example of an in-house code might be the 'No Show' fee we used above for patients' failure to appear for their appointments. Another might be to record supplies given to the patient that aren't covered by insurance. Or perhaps for some non- paid activity that you want to track in reports.

1. Create an in-house code type

In main menu go to 'Admin/ Forms/ Lists'. Enter 'Code Types' and view that screen:


Add at the bottom the parameters of your new code type.

Again, you can refer to this page for details:

Active - yes it's going to be active
Key - short name for the code type. Make it relevant, brief and all caps. Let's use ‘ INHOUSE ‘
ID - item's identifier unique to this table
Label - text for human- readable display. Let's use 'In House'
Seq - where it appears in the Code Type dropdown lists
ModLength - make it 0 (you won't want code modifier text for these)
Justify - leave blank; code will not require justification like CPT4 codes do.
Mask - #### (four hash marks '#') means you want 4 numeric values; see next section)
Claims - off
Fees – on, so you can assign a fee to this code type
Relations - off
Hide - off, so it WILL appear in fee sheet code search list
Procedure – off, unless this custom code type will be just for procedures
Diagnosis - off, unless this custom code type will be just for diagnoses
Clinical Term - off
Medical Problem - off
Drug - off
External - no

2. Create the codes

Let us say we decide that we want our in-house codes to simply be 4 numeric digits. That is why the 'Mask' parameter in the previous section is: '####' : this prevents anything besides 4 numerals from being entered when inputting the code, . See ‘Code Types’ for other masks.

For instructions how to enter codes, see see: HOWTO:_Add_Or_Edit_A_Billing_Code_In_OpenEMR#2._Add_Codes_To_System

and be sure to select 'In House' for the code type.

3. Treat them the same as any other code.

Again, these will appear in the Checkout and Payments screens but will not be sent in claim files to clearinghouses for insurance payments.