Skip to content

The report

The report is the result of a successful analysis: the E/M code the note supports, why, and what to check before you bill. It's in the report field of an analysis whose status is succeeded.

Overview

The report is a JSON object with these parts:

FieldAlways presentWhat it tells you
codingAnalysisYesThe code and how it was chosen.
mdmAnalysisWhen coding by medical decision makingThe overall MDM level and the three elements, each with a quote from the note.
timeBasedJustificationWhen coding by timeThe clinician's total time and what it was spent on.
revenueAndComplianceYesServices the note may support that weren't billed, and documentation risks.
supplementalCodesYesAdd-on codes and modifiers that may apply.
cmsEditsAnalysisWhen you sent CPT codes and a state appliesMedicare coverage and correct-coding checks for the codes you sent.

mdmAnalysis and timeBasedJustification are null when they don't apply. cmsEditsAnalysis is left out of the report when the checks didn't run.

Field names inside the report are camelCase; the analysis around it uses snake_case. Ignore fields you don't recognize: new ones can appear within /v1.

Note:

The report supports a coding decision. The coder or clinician who signs off on the claim makes the final decision.

codingAnalysis

codingAnalysis
{
  "finalCptCode": "99214",
  "codingBasis": "Medical Decision Making (MDM)",
  "governingGuideline": "Health E/M Coding Guidelines (CY 2026)"
}
FieldMeaning
finalCptCodeThe office or outpatient E/M code the documentation supports: 99202 to 99205 for a new patient, 99211 to 99215 for an established patient. It's null in the rare case that the documentation doesn't determine a code.
codingBasisHow the level was chosen: Medical Decision Making (MDM) or Total Time.
governingGuidelineThe guideline set and year the analysis applied.

mdmAnalysis

Present when codingBasis is Medical Decision Making (MDM). Medical decision making has three elements, and the analysis rates each one.

mdmAnalysis
{
  "finalMdmLevel": "Moderate",
  "mdmElements": [
    {
      "elementName": "Problems Addressed",
      "levelAchieved": "Moderate",
      "justification": "The note names the problems addressed at this visit.",
      "exactSnippet": "Established patient seen for follow-up of type 2 diabetes and hypertension"
    },
    {
      "elementName": "Data Reviewed",
      "levelAchieved": "Moderate",
      "justification": "The note records data reviewed or ordered.",
      "exactSnippet": "A1c 7.4% reviewed"
    },
    {
      "elementName": "Risk of Management",
      "levelAchieved": "Moderate",
      "justification": "The note records a management decision.",
      "exactSnippet": "Plan: increase lisinopril to 20 mg daily, recheck BMP in 2 weeks, follow up in 3 months"
    }
  ]
}
FieldMeaning
finalMdmLevelThe overall MDM level: Straightforward, Low, Moderate, or High.
mdmElementsExactly three entries, one for each element: Problems Addressed, Data Reviewed, and Risk of Management.
mdmElements[].elementNameWhich element the entry rates.
mdmElements[].levelAchievedThe level the note supports for this element: Straightforward, Low, Moderate, or High.
mdmElements[].justificationWhy the element reaches that level, in plain language.
mdmElements[].exactSnippetThe evidence: text quoted from the note that supports the level.

Show the evidence

exactSnippet is quoted from the note so that a reviewer can see the words behind each level. To highlight it in your own interface, search for it in the note text you sent. Match it while ignoring differences in whitespace and line breaks, and show the justification without a highlight if no match is found.

timeBasedJustification

Present when codingBasis is Total Time; otherwise null.

timeBasedJustification
{"totalClinicianMinutes": 42, "activitySummary": "Reviewed outside records, examined the patient, counseled on treatment options, and documented the visit."}
FieldMeaning
totalClinicianMinutesThe total time the physician or other qualified clinician spent on the date of the visit, as documented.
activitySummaryWhat the time was spent on.

revenueAndCompliance

revenueAndCompliance
{
  "missedRevenueOpportunities": ["The documented smoking cessation counseling may support a separate code if its time is recorded."],
  "denialRiskAssessment": [
    {"riskFactor": "The plan doesn't state the follow-up interval.", "mitigationRecommendation": "Add the follow-up interval to the plan."}
  ]
}
FieldMeaning
missedRevenueOpportunitiesServices the note may support that weren't coded, as sentences. Often empty.
denialRiskAssessmentDocumentation gaps that could lead a payer to deny or downcode the claim. Each entry has a riskFactor and a mitigationRecommendation. Often empty.

supplementalCodes

supplementalCodes
{"addOnCodes": ["99417"], "modifiers": ["25"]}
FieldMeaning
addOnCodesAdd-on codes the documentation may support, such as 99417 for prolonged services.
modifiersModifiers that may apply, such as 25 when a significant, separate E/M service is billed with a procedure.

cmsEditsAnalysis

Present when you sent at least one CPT code in cpts and a state applies (the jurisdiction you sent, or your organization's default state). It checks the codes you sent, not the code the analysis recommends, against Medicare coverage articles and National Correct Coding Initiative (NCCI) edits for that state. If the checks can't run, the field is left out and the analysis still completes.

cmsEditsAnalysis
{
  "jurisdiction": "TX",
  "providerType": "practitioner",
  "evaluatedAtUtc": "2026-10-25T05:09:30Z",
  "submittedCpts": [{"code": "99214", "units": 1, "modifiers": []}],
  "submittedIcds": ["E11.9", "I10"],
  "overallVerdict": "clean",
  "overallMessage": "CMS medical-necessity, correct-coding, and submission-validity checks passed.",
  "lcd": [
    {
      "cpt": "99214",
      "verdict": "standard_necessity",
      "rationale": "No LCD or Billing-and-Coding Article in TX governs CPT 99214 with an ICD coverage list. Standard medical-necessity documentation applies.",
      "supportingIcds": [],
      "supportingArticles": [],
      "governingArticles": [],
      "excludingIcds": [],
      "excludingArticles": [],
      "governingArticlesTruncated": false
    }
  ],
  "ncci": {"ptpViolations": [], "ptpClearedByModifier": [], "mueViolations": [], "addonViolations": []},
  "submissionValidation": []
}
FieldMeaning
jurisdictionThe state the checks used.
providerTypeThe provider category the NCCI edits were applied for.
evaluatedAtUtcWhen the checks ran.
submittedCpts, submittedIcdsThe codes you sent, as checked.
overallVerdictclean when every check passed, or violation when at least one found a problem.
overallMessageA one-line summary of the verdict.
lcdOne coverage verdict for each CPT code. See the following table.
ncciCorrect-coding edits. See NCCI edits.
submissionValidationProblems with the codes themselves. See Submission checks.

Coverage verdicts

Each entry in lcd checks whether the diagnoses you sent support Medicare coverage of one CPT code, based on Local Coverage Determinations (LCDs) and billing and coding articles.

verdictMeaning
passedAt least one diagnosis you sent supports coverage. supportingIcds and supportingArticles say which, and where.
failedCoverage requires specific diagnoses, and none of the ones you sent qualify. governingArticles lists the articles.
excludedA diagnosis you sent is listed as not covered for this code. excludingIcds and excludingArticles say which, and where.
standard_necessityNo article for this state ties the code to a list of diagnoses. Standard medical-necessity documentation applies.

rationale explains the verdict in a sentence. Each article has an articleId and a title. governingArticlesTruncated is true when governingArticles was shortened.

NCCI edits

FieldMeaning
ptpViolationsPairs of codes that aren't normally billed together (procedure-to-procedure edits). Each has column1, column2, modifierIndicator (0: a modifier can't allow the pair; 1: an appropriate modifier can), a rationale, and, when one applies, a recommendedModifier and the code it goes on (modifierTarget).
ptpClearedByModifierPairs that would be an edit, but a modifier you sent allows them: column1, column2, clearingModifier, modifierTarget, and rationale.
mueViolationsCodes billed with more units than Medicare allows for one patient on one day (medically unlikely edits): cpt, submittedUnits, maxUnits, mai (the MUE adjudication indicator), and rationale.
addonViolationsAdd-on codes sent without a primary code they can be billed with: addonCode, a sample of valid primary codes (validPrimariesSample), and rationale.

Submission checks

Each entry in submissionValidation has a cpt, an optional modifier, a findingType, and a rationale.

findingTypeMeaning
deleted_codeThe code is no longer valid.
bundled_statusMedicare pays for this code only as part of another service.
non_covered_statusMedicare doesn't cover this code.
invalid_bilateral_modifierA bilateral modifier was sent with a code that doesn't allow one.
invalid_pctc_modifierA professional or technical component modifier was sent with a code that doesn't allow one.
The report ยท MedChartScan E/M