Skip to main content
OraCalm — open, multilingual scoring for validated dental-anxiety instruments: MDAS, Corah's DAS, and MCDASf

OraCalm

Open, dependency-free scoring for validated dental-anxiety instruments — the Modified Dental Anxiety Scale (MDAS), Corah's Dental Anxiety Scale, and the child faces MCDASf — with multilingual item sets, published cut-offs, and a live web demo.

PyPI License: MIT Python Tests DOI

dental anxiety · MDAS · Corah DAS · MCDASf · dental phobia · psychometrics · screening · oral health · patient-reported outcome · odontophobia

[!IMPORTANT] OraCalm is an educational and research aid, not a diagnostic device. It computes published scoring keys for screening only. It does not diagnose dental anxiety or phobia, stores no personal data, and never replaces clinical judgement or the original instruments' manuals.

Contents · Why · Instruments · Install · Python API · CLI · Web demo · Provenance & licensing · Publishing & DOI · Cite · References


Why OraCalm

Dental anxiety is common, frequently under-detected, and measured with well-validated questionnaires — yet those instruments live in PDFs and journal appendices, and every project re-implements the scoring by hand. OraCalm encodes the scoring keys, cut-offs, and interpretation bands of widely used dental-anxiety instruments once, correctly, and with citations, as a small dependency-free Python library plus a clean web demo.

The scoring keys and cut-offs are facts; item wording is reproduced from the published instruments with attribution (see Provenance & licensing).

Instruments

id Instrument Population Items Range Validated cut-off Languages Source
mdas Modified Dental Anxiety Scale Adults 5 5–25 ≥19 high anxiety / possible phobia EN · TR · FA Humphris et al. 1995
corah_das Corah's Dental Anxiety Scale Adults 4 4–20 ≥13 clinically anxious; ≥15 severe EN Corah 1969
mcdasf Modified Child Dental Anxiety Scale (faces) Children ~8–15y 8 8–40 no single agreed cut-off EN Howard & Freeman 2007

Install

pip install oracalm          # once published to PyPI
# or, from a clone:
pip install -e .

Quick start (Python)

import oracalm

# Score a completed MDAS (one integer per item, in order)
result = oracalm.score("mdas", [3, 3, 4, 2, 5])
print(result.total)        # 17
print(result.band_label)   # 'Moderate dental anxiety'
print(result.flags)        # [] (below the ≥19 cut-off)

# A high-anxiety MDAS
oracalm.score("mdas", [4, 4, 4, 4, 3]).flags
# ['>=19: High dental anxiety / possible dental phobia']

# Interpret a raw total without re-scoring
oracalm.interpret("corah_das", 15)["label"]   # 'Severe anxiety (possible dental phobia)'

# Discover what's available
oracalm.list_instruments()

Every ScoreResult carries the total, the min/max range, the interpretation band, cut-off flags, and a human-readable interpretation, and serialises with .to_dict().

Command line

oracalm list                    # list instruments
oracalm show mdas --lang tr      # print the questionnaire (Turkish)
oracalm score mdas 3 3 4 2 5     # score (space- or comma-separated)
oracalm score das 4,4,4,3
$ oracalm score das 4,4,4,3
Corah's Dental Anxiety Scale (Corah DAS)
  Total: 15 / 20  (range 4-20)
  Band:  Severe anxiety (possible dental phobia)
  Flags:
    - >=13: Clinically significant anxiety (per some references)
    - >=15: Severe anxiety / possible dental phobia
  Source: Corah NL (1969). Development of a dental anxiety scale. Journal of Dental Research.

Web demo

A self-contained, mobile-friendly demo lives in demo/index.html — pick an instrument, choose a language (MDAS: EN/TR/FA, with right-to-left support for Persian), tap through the items, and watch the score, severity band, and cut-off flags update live. No data leaves the page. Open the file directly, or host it on GitHub Pages.

The interface follows Apple's fluid-design principles — instant press feedback, calm critically-damped motion, translucent materials, optical typography, and full prefers-reduced-motion / -transparency / -contrast support — kept deliberately gentle for an anxiety-sensitive context.

How scoring works

Each instrument is defined declaratively (see oracalm/instruments.py) as: item stems, response options, total-score range, interpretation bands that tile the whole range, validated cut-offs, and a full citation. The engine (oracalm/core.py) validates that every response is one of the item's allowed values and that the count matches, sums the responses, resolves the interpretation band, and evaluates cut-offs. The test suite proves that each instrument's achievable min/max equals its declared range and that the bands cover the range with no gaps or overlaps.

Provenance & licensing

The software is MIT-licensed. The instruments are the intellectual property of their authors and are reproduced here for educational/research use with attribution:

  • MDAS — made freely available for use by the authors provided the source is cited (official MDAS site, University of St Andrews). English wording is canonical; the Turkish and Persian strings are convenience translations and should be checked against the officially validated versions before clinical use.
  • Corah's DAS (1969) — a classic, widely reproduced 4-item scale.
  • MCDASf (Howard & Freeman 2007) — faces version of the Modified Child Dental Anxiety Scale (Wong et al. 1998).

If you plan commercial redistribution, verify the reuse terms of each instrument with its authors/publisher.

Roadmap

  • IDAF-4C+ (Index of Dental Anxiety and Fear) once reuse terms are confirmed.
  • Additional validated language sets (contributions welcome, with a citation per translation).
  • A CITATION.cff-linked Zenodo DOI on first tagged release.

Publishing & DOI

Maintainer notes for releasing OraCalm live on GitHub, PyPI, and Zenodo — a full copy-paste walkthrough — are in PUBLISHING.md. In short: push to GitHub, upload the assets/social-preview.png as the repo's social preview, set the GitHub About description and topics for discoverability, publish to PyPI, then connect Zenodo and tag a Release to mint a citable DOI (after which the DOI badge above is replaced with the real one).

Citing OraCalm

If OraCalm supports your work, please cite the software (see CITATION.cff) and the original instrument(s) you used (see below). Once a Zenodo DOI is minted it will appear here and in CITATION.cff.

References

Instrument sources (retrieved via PubMed; DOIs/PMIDs linked):

  • Humphris GM, Morrison T, Lindsay SJE. The Modified Dental Anxiety Scale: validation and United Kingdom norms. Community Dent Health. 1995;12(3):143–150. PMID 7584581
  • Corah NL. Development of a dental anxiety scale. J Dent Res. 1969;48(4):596. doi:10.1177/00220345690480041801
  • Howard KE, Freeman R. Reliability and validity of a faces version of the Modified Child Dental Anxiety Scale. Int J Paediatr Dent. 2007;17(4):281–288. doi:10.1111/j.1365-263X.2007.00830.x

Recent validations motivating multilingual support: Höglund et al., Acta Odontol Scand. 2024 (Swedish MDAS) doi:10.2340/aos.v83.42436; Enshaei et al., Clin Exp Dent Res. 2024 (Persian child measure) doi:10.1002/cre2.830.

Contributing

Issues and pull requests welcome — especially validated translations (please include a citation) and additional validated instruments. Please keep the library dependency-free and add tests for any new instrument.

License

MIT © 2026 Hossein Boustani Hezarani

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oracalm-0.1.0.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oracalm-0.1.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file oracalm-0.1.0.tar.gz.

File metadata

  • Download URL: oracalm-0.1.0.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.4

File hashes

Hashes for oracalm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4c6aad26acaeac79e663b5c3785d22b8dfd5fddd3295a5e3680f288220866f04
MD5 e4635d027ad5b513e8bff87316c713e4
BLAKE2b-256 51a9a738f878dcfdc4881d97a41acc843e98c4c3dadc9106e77e9a2062aa9644

See more details on using hashes here.

File details

Details for the file oracalm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: oracalm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.4

File hashes

Hashes for oracalm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d24fa262e4e95474e5d8c5bad4cf455b2ba51f3dd99c2a96d87b8813ac6d6687
MD5 d7047a643e21b43d66c149f0c355cb35
BLAKE2b-256 807f0e1b4e6d58d85d51112d70227f80a95cc02a33c862f768ccfb608579dc67

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page