Odontograms (Dental)

A complete guide to the Odontograms module — dental charting, tooth condition mapping, treatment tracking, and managing patient dental records.

Written By Dev010

Last updated 19 days ago

The Odontograms module provides interactive dental charting for dental clinic types. It allows doctors to map tooth conditions, record diagnoses per tooth, and track treatments across a patient's full 32-tooth dental chart. Each odontogram represents a snapshot of a patient's dental health at a specific examination date.

Dental clinics only. The Odontograms module appears in the sidebar exclusively for clinics with type set to dental. General and ophthalmology clinics use the Medical Records module instead. To switch clinic type, go to Dashboard → Settings → Clinic.

Accessing the Module

Sidebar → Odontograms

Direct URL:

https://yourdomain.com/dashboard/odontograms

Who can access:

Action

Admin

Doctor

Receptionist

Nurse

View odontograms

Create odontogram

Edit odontogram

Delete odontogram

What Is an Odontogram

An odontogram is a standardized dental chart that maps the condition of each tooth in a patient's mouth. CareNova uses the universal 32-tooth numbering system covering:

  • 16 upper teeth (maxillary arch)

  • 16 lower teeth (mandibular arch)

Each tooth can be individually selected on the chart and assigned one or more conditions — such as decay, missing, crowned, filled, or extracted. The chart provides a visual map that dentists can review at a glance during any subsequent visit.

Odontogram List

The main odontograms page shows a paginated, searchable list of all dental charts across all patients.

Each row displays:

  • Patient name

  • Examining doctor

  • Examination date

  • Status

  • Version number

  • Action buttons (view, edit, delete)

Search

The search bar filters odontograms by:

  • Patient name

  • Doctor name

Creating an Odontogram

Click the New Odontogram button on the odontograms list page.

Required Fields

Field

Notes

Patient

Search and select from registered patients

Doctor

Select the examining dentist

Examined At

Date of the dental examination

Optional Fields

Field

Notes

Diagnosis

Overall dental diagnosis for this examination

Notes

General notes about the examination

Status

active by default

Tooth Data

The core of the odontogram is the interactive tooth chart. After selecting a patient and doctor:

  1. Click any tooth on the chart to select it

  2. Assign one or more conditions to the selected tooth

  3. Repeat for each tooth that requires documentation

  4. Tooth data is stored as a JSON array in tooth_data

Tooth Conditions

Common conditions that can be mapped per tooth:

Condition

Description

Healthy

No issues — normal tooth

Decay

Caries or cavity present

Filled

Previously restored with filling

Crowned

Tooth has a crown

Missing

Tooth has been extracted or is absent

Extracted

Removed during or before this visit

Implant

Dental implant in place

Root Canal

Endodontic treatment performed

Fractured

Cracked or broken tooth

Bridge

Part of a dental bridge

Impacted

Tooth has not fully erupted

Condition options are rendered from the odontogram editor component. The full list of available conditions depends on the tooth chart implementation in the codebase.

Treatments

The odontogram also supports a treatments field — a JSON array that records procedures performed or planned per tooth during the visit:

Field

Description

Tooth number

Which tooth the treatment applies to

Treatment type

Procedure name (e.g. Extraction, Filling)

Status

Planned or completed

Notes

Treatment-specific notes

Treatments are stored in the treatments jsonb column alongside tooth_data.

Saving the Odontogram

Click Save Odontogram to create the record. The odontogram is saved with version 1 and status active. It appears immediately in the odontograms list.

Versioning

Each odontogram has a version number starting at 1. When a patient returns for a follow-up examination, a new odontogram record is created for that visit rather than overwriting the previous one.

This means a patient can have multiple odontogram records over time — one per examination — giving a complete history of how their dental health has changed across visits.

Property

Value

Initial version

1

New examination

New record with incremented version

Previous records

Preserved — never overwritten

To view a patient's full dental history, filter the odontograms list by patient name and review all records chronologically.

Odontogram Status

Status

Description

active

Current examination record

Other

Custom status as needed

Editing an Odontogram

Click the Edit button on any odontogram row to update the record.

All fields are editable including the tooth chart conditions, treatments, diagnosis, and notes. Editing updates the existing record in place — it does not create a new version.

To record a new examination for the same patient, create a new odontogram rather than editing the existing one. This preserves the examination history.

Teeth Images

The odontogram chart uses tooth images to render the visual dental chart. Images are served from:

GET /api/teeth-image

By default, teeth images are loaded from an external base URL. If you want to self-host them, set the environment variable:

TEETH_IMAGES_BASE_URL=https://yourdomain.com/teeth

Then run the download script to fetch all tooth images locally:

npm run download-teeth

This downloads tooth images into the public/ directory so they are served from your own domain.

If tooth images are not loading in the odontogram chart, confirm TEETH_IMAGES_BASE_URL is set correctly or that the default external image URL is accessible from your deployment environment.

Viewing Odontograms Per Patient

To review all odontogram records for a specific patient:

  1. Sidebar → Odontograms

  2. Search by patient name in the search bar

  3. All odontograms for that patient appear sorted by examination date

Alternatively, access the patient detail page for a full history view:

  1. Sidebar → Patients

  2. Find the patient → View Full Profile

  3. Navigate to the relevant tab

Database Schema Reference

odontograms

Column

Type

Description

id

uuid

Unique odontogram ID

patient_id

uuid

FK → patients (cascade delete)

doctor_id

uuid

FK → users (set null on delete)

status

text

active or custom status

version

integer

Examination version number

examined_at

timestamptz

Date of examination

tooth_data

jsonb

Array of tooth condition objects

diagnosis

text

Overall dental diagnosis

notes

text

General examination notes

treatments

jsonb

Array of treatment objects

created_at

timestamptz

Record creation timestamp

updated_at

timestamptz

Last updated timestamp

tooth_data JSON Structure

Each entry in the tooth_data array represents one tooth:

[  {    "toothNumber": 11,    "conditions": ["decay", "filled"],
    "notes": "Mesial decay, composite fill"
  },
  {
    "toothNumber": 36,
    "conditions": ["missing"],
    "notes": "Extracted 2023"
  }
]

treatments JSON Structure

Each entry in the treatments array represents one treatment:

[  {    "toothNumber": 11,    "type": "Composite Filling",    "status": "completed",    "notes": "Mesial surface restored"  },  {    "toothNumber": 18,    "type": "Extraction",    "status": "planned",    "notes": "Wisdom tooth removal scheduled"  }]

Relationship to Other Modules

Module

Relationship

Patients

Every odontogram belongs to one patient

Users

Each odontogram is assigned to an examining doctor

Appointments

Odontograms can be linked to a specific visit

Workflow Examples

Recording a new patient's initial dental examination:

  1. Sidebar → Odontograms → New Odontogram

  2. Select patient and doctor

  3. Set examination date to today

  4. Click each affected tooth on the chart

  5. Assign conditions per tooth

  6. Add any planned treatments

  7. Enter overall diagnosis and notes

  8. Save — version 1 created

Recording a follow-up examination:

  1. Sidebar → Odontograms → New Odontogram

  2. Select the same patient

  3. Set new examination date

  4. Map current tooth conditions (may differ from previous visit)

  5. Record completed and new planned treatments

  6. Save — new record created (previous examination preserved)

Reviewing a patient's dental history before a visit:

  1. Sidebar → Odontograms

  2. Search by patient name

  3. Review all records sorted by examination date

  4. Compare tooth conditions across versions to track progression or improvement

Checking planned treatments before a procedure:

  1. Open the patient's most recent odontogram

  2. Review the treatments JSON for entries with status: "planned"

  3. Update to status: "completed" after the procedure

Troubleshooting

Odontograms not in sidebar:

  • Confirm clinic type is set to dental in Dashboard → Settings → Clinic

  • General and ophthalmology clinic types do not show this module

  • Confirm your role has odontogram.view permission in Dashboard → Permissions

Tooth images not loading in the chart:

  • Check browser console for image load errors

  • Confirm TEETH_IMAGES_BASE_URL is set correctly if self-hosting

  • Run npm run download-teeth to download images locally

  • Check that /api/teeth-image route is accessible

Tooth conditions not saving:

  • Confirm you have odontogram.create or odontogram.edit permission

  • Check browser console for any form validation errors

  • Confirm tooth_data is being populated — check Supabase → Table Editor → odontograms

Cannot find previous examination for a patient:

  • Search by patient name in the odontograms list

  • Previous examinations are stored as separate records — each with a different version number and examination date

  • Sort by examined_at descending to see the most recent first

New Odontogram button missing:

  • Confirm your role has odontogram.create permission

  • Only Admin and Doctor roles have create access by default

Next Step

Continue to the Invoices & Billing module guide to learn how to create and manage patient invoices in CareNova.