The cdcf file

Why make a chart format?

Because it hasn’t been done before. Apparently nobody has ever decided to create a file format and spec for dental charting. This will be the first.


First of all, all tooth numbers are going by the American / Universal Standard. Just to review, here is the basic chart (taken from the Wikipedia article):

Starting with patient’s upper right, the patient’s maxillary right 3rd molar is tooth #1. As you move to the patient’s left, you increase in number with the patient’s maxillary right 2nd molar being tooth #2. Then, with the maxillary left 3rd molar being #16, then, still staying on the left side, the left mandibular 3rd molar is tooth #17, and working towards the right, the mandibular right 3rd molar is #32.

As for primary (baby) teeth, the standard system (using tooth #A-T) will be used in a similar fashion.

What about European Standards?

Having a UI convert from American to the FDI World Dental Federation Notation is actually very simple. Therefore, whichever system is actually used in the file does not matter as much. But still, why go with American? There is no real good answer outside of the fact this software will be released in the US first and the rest of the world later.

The basic tenants we want in a charting file format

As mentioned in previous posts, we want this file format to be human readable. That way, even if the UI is broken, somebody can at least read the cdcf file using a simple text editor. Therefore, it will use basic text in a way that most dentist can learn in a single day. The side effect of this is that using a system like git, we can be able to push changes via a simple diff rather than uploading an entire binary file.

We also want to use terms that most people can understand. However, things like the CDT codes complicate things. Most people do not know on top of their head what code is assigned to which procedure. Therefore, we need to minimize any kind of CDT code in the format itself. However, there are indeed cases where normal terminology is not sufficient and a code needs to be used to explain what is existing and what kind of procedure was done with the patient. Eventually, as Clear Dental goes international, all the terms will be properly explained in the CDT codes will be unnecessary.

As mentioned before, this will be released in the US first. Therefore, all terms will be in English. Even when Clear Dental makes its way to other countries, the terms will be kept in English.

One real important thing about this format is that when you are reading the file, you are reading the current status of the patient. In order to get a history of what was done you need to use git to see the logs of the changes done to the file and you can use diff to find the difference between the two versions. Of course, in the UI, this will all be integrated so the user does not have to type in command lines to check the history (but that option is always there).

What belongs in the file and does not

Because you want to get a comprehensive view of the patient’s status, it will include all of the following:

  • Existing / missing teeth
  • Restorations (amalgams, composites, crowns, etc.)
  • Implants
  • Existing endodontic treatment (including post/core) and endodontic diagnosis
  • Caries, chip, fractures, abrasions, abfractions, malpositions, braces, diastemas, incipient lesions, open margins, watches

What will not be included:

  • Periodontal probing, recession, or anything else related to a typical periodontal exam. Not because it is not important or wouldn’t be integrated in a UI, but because it would be too much for a simple cdcf file to handle.
  • The billed out procedure (including exams). If an exam is done, it will be part of the comments of the commit log. For example, of a re-care exam is done, the fact a re-care exam was done will not be in the file (the only way you can find it was done would be looking at the git history). However, you would still see the updates to the chart (if any was done) after the exam was done.
  • Non carious lesions (hard or soft). For now, it will be part of the commit log but eventually there will a file and image directory dedicated just for lesions. Things like ulcerations, Morsicatio buccarum and tori are not charted in this file. Please see softTissue.ini and hardTissue.ini along with tmj.ini for this kind of information
  • Treatment plan. That, oddly enough, is done via git branching what treatment you want to do and then merging the actual treatment when you do it. That way, you can have multiple treatment plans, mix treatment plans and even have treatment plan templates for patients.
  • Chief complaint (will also be in the git log)

File format basics

The file will start off with the line “SpecVersion=X” where X is the current version of the spec. In theory, the spec should be backwards and forwards compatible, but this is added in there just in case. For now, each file will start with “SpecVersion=1”. Then, the file will list off each tooth that is existing by its number and then have the “|” to then specify what attributes it has.

So lets start with a patient who has all 32 teeth, all are erupted and not a single filling or cavity. The file would look like this:



Now lets go with the other extreme. You have a fully edentulous patient. The file would look like this:


That’s it, mostly a blank file with the “SpecVersion=1” there just to informed the reader that the whole file isn’t empty, just the chart.

Now supernumerary teeth are strange because neither tooth is the “real” one. Therefore, to designate which tooth is being charted, the tooth will show up twice. For example, lets say the patient has a supernumerary tooth #7, the chart would have something like this:



Now you know that there are two teeth that are maxillary right lateral incisors. This would even apply with there are 3 or even more supernumerary teeth. Also, the teeth would be in the order that they are charted. For example:


7| DL composite

The tooth with the DL composite would be the distal tooth #7, not the mesial. Likewise:

10| DL composite

The tooth with the DL composite would be the mesial tooth #10, not the distal.

Attribute(s) of the teeth

The general format for each tooth will be:

Tooth Number| attribute 1; attribute 2; ... ; attribute n 

Each attribute will be separated by a semicolon. The last attribute does not require a semicolon but does require a newline to end the tooth

Surfaces of the teeth

The following abbreviations will be used in the chart:

  • M = Mesial
  • O = Occlusal
  • D = Distal
  • B = Buccal (valid only for posterior teeth)
  • L = Lingual (for maxillary teeth, lingual and palatal will mean the same thing)
  • F = Facial (valid only for anterior teeth)
  • I = Incisal (valid only for anterior teeth)


All fillings must have a surface and material. All fillings are basically inlays regardless if it was direct or indirect. Lets say there is a MOD amalgam on tooth #30, the line would be:

30| MOD amalgam

There must be a space between the surfaces and the material. The surfaces can come in any order. Repeat surfaces are ignored. A Class V restoration is not charted in this system as it would be an B or F anyway.

The material type can be anything, but it is recommended to use only “amalgam”, “composite”, “irm”, “gold”, or “porcelain”. Using a something like Fuji IX (resin modified glass ionomer) should be charted as composite for the sake of a simple UI but adding in “RMGI” would still be valid; but not recommended.

An onlay is really a crown, just to a full crown. Please see the crown section for more information.


Similar to fillings, decay must have a surface. For example, if #12 has distal caries, you would chart:

12| D caries

This is independent if you wish to do a DO restoration or if there is existing restorations. If #8 has a ML composite with recurrent decay, you would see:

8| ML composite; ML caries

If the decay is incipient, then it is marked as “incipient decay” like:

3| M incipient decay

The UI at this point would assume you want to watch the surface.


Crowns are marked with the format:

tooth number| [material] 

For example, if #9 as a porcelain fused to metal crown, then:

9| [PFM] 

It is recommended to only use the terms “PFM”, “gold”, “ceramic”, “titanium”, or “zirconia”. Technically, any free text can be valid but then the UI may not be able to convert the term to whatever color/scheme it is using.

If no surfaces are mentioned, then it is assumed you are talking about a full coverage crown. If there is even a single surface, then it is assumed you are talking about an onlay. For example:

3| [DL gold] 

Is a distal lingual gold onlay on tooth #3. Without the “[” and “]”, it is assumed we are talking about a filling (or inlay) rather than an onlay.

You can still combine a filling with a full coverage crown. For example, lets say #30 was endodontically treated with a gold restoration, and then had recurrent infection and had to be retreated with a composite to cover up the access. It would be charted as:

30| RCT; post; composite core; [gold]; O composite

Endodontic treatment

If the tooth had a root canal treatment, then the attribute would be “RCT”. No surfaces. It is implied that if a tooth has the “RCT” attribute, then root canal treatment is done. For example, if #11 had a root canal and it was finished off with the lingual access closed via composite, it would be:

11| RCT; L composite


If a tooth has an implant, it will have the “implant” attribute. If there are no words after the term “implant”, then it means we don’t know the details. For example, if we know that #18 has an implant, and a PFM implant crown, but we don’t know what brand of implant, then we would say:

18| implant; [PFM]

It is implied with this system that any crown with an implant is an implant crown. Let say we know #30 is a T3 model BOPS6515, then we say:

30| implant T3 BOPS6515; abutment custom; [PFM]

Note that first it was the vendor name, and then a space, and then the model name.


Posts do not have a surface, but they have a material. If you place a parapost on #13, then you would have:

13| RCT; post parapost; core amalgam; [PFM]

If is unclear which type of post was placed, then the attribute would just be “post” and that’s it.


Similar to posts, there are no surfaces but there is a material. Is there is a

Additional attributes

So, now that we talked about a lot of examples, lets just go one by one and talk about the remaining attributes. It is assumed you will know what the attribute itself means. Just like the previous examples, if there is a surface for the attribute, it would come first.

  • erosion (surface required)
  • chip (surface required)
  • fracture (surface required)
  • watch (surface required)
  • heavy wear (no surface required)
  • discoloration (no surface required)
  • white spot lesion (surface required)
  • stain (surface required)

Free text comments

All comments start with the “#”. The comment is over with either a newline or semicolon. For example:

19| heavy wear; #patient says he uses that tooth to chew on everything

Anything I am missing?

I am sure I am missing out on some more attributes, please leave a comment or e-mail me for suggestions. Thanks.

Leave a Reply

Your email address will not be published. Required fields are marked *