The Sodlcs Health Handbook

A complete walkthrough of every screen in Sodlcs Health, written for front desk staff, hygienists, and dentists. Each section covers what a feature is for, who can use it, and how to actually use it β€” in that order, so you can skim for the "how to" the second time around.

🦷 For office staff & dentists πŸ“‹ Covers every screen in the staff app πŸ”‘ Includes the Patient Portal
PART 1 Getting started

Logging in β€” passkeys, and now passwords too

Every staff member and every patient can sign in with a passkey β€” the same technology behind "Sign in with Face ID / fingerprint" on your phone or laptop. It's faster than a password and can't be phished, guessed, or reused from a data breach elsewhere, so it's the recommended way to sign in. A traditional username and password is also available as a fallback on every login page, for anyone who'd rather not use a passkey, or is signing in from a device without one set up.

What it is

When your account is set up, your device (phone, laptop, tablet) creates a secure key pair just for Sodlcs Health. Signing in just means proving you have that device β€” with your face, fingerprint, or device PIN, the same way you'd unlock your phone. Nothing is typed, nothing to remember, nothing that can be stolen in a password leak.

How to use it

  1. Get your setup link. An admin or office manager adds you as a staff member (see the Staff section) and sends you a one-time setup link. The link is just for you: it works once and expires after 7 days. If it's been used, has expired, or a newer link was issued for you since, it stops working β€” ask your admin for a fresh one (issuing a new link always replaces the previous one).
  2. Open the link and register your passkey. Your browser or device will prompt you to use Face ID, Touch ID, Windows Hello, or your device's fingerprint/PIN. Confirm it, and your device is now your login.
  3. Sign in any time after that by going to your practice's staff login page and confirming with the same face/fingerprint/PIN prompt β€” no typing required.
  4. Save a recovery code. During setup you'll be offered backup recovery codes β€” store these somewhere safe (a password manager, printed and locked away). If you ever lose the device your passkey lives on, a recovery code is how you get back in. Using one to sign back in only shows you a whole new set once every code in your current batch has been used β€” until then, your other original codes still work.
πŸ’‘
Good to know You can register a passkey on more than one device β€” for example, your work laptop and your phone. Each one works independently to sign you in.

Signing in with a username and password instead

Every login page has a Passkey / Password switch at the top. Choose "Password" to sign in with a username and password instead of your device's face/fingerprint prompt. It's the same account either way β€” nothing about what you can see or do changes based on which method you used to sign in.

  • Setting a password for the first time. Once you're signed in (via passkey or an existing password), go to My Profile and use the Password card to set one. Patients do the same from Account in the Patient Portal. The card always shows whether a password is already set (and when it was last changed) β€” once one exists, the form stays tucked behind a "Change password" button instead of sitting open. Right above the Password card, a Sign-in methods summary shows whether a passkey is actually set up too β€” so it's clear at a glance which of the two methods are configured on the account, not just password status.
  • Password requirements. At least 12 characters β€” that's the only rule. There's no forced mix of uppercase, numbers, or symbols; length alone is the strongest, most reliable predictor of a good password. A strength bar and a checklist of optional boosts (uppercase + lowercase, a number, a symbol) appear as you type, purely as a guide β€” none of them are required to save.
  • A code by email, every time. Once your password is accepted, Sodlcs Health emails a 6-digit verification code to the address on your account and asks for it before signing you in β€” a password alone is never enough. The code expires after 10 minutes and allows five tries. (If the practice hasn't set up outgoing email yet, password sign-in isn't available in a live practice β€” use your passkey.) Patients get the same code step; a patient account with no email on file can only sign in with a passkey until the office adds one.
  • Too many wrong passwords locks the username. Five wrong passwords within 15 minutes lock that username for 15 minutes β€” even the right password is refused until the lock lifts. Passkey sign-in is unaffected. Each attempt, and the lock itself, is recorded in the Audit Log.
  • Forgot your password? Click "Forgot your password?" under the Password tab on the login page and enter your username β€” if the account has an email on file, a reset link is sent to it. The link expires after 1 hour and can only be used once. Resetting your password signs you out everywhere β€” every device signs in again with the new password.
  • Changing your password signs out your other devices. When you change it from the Password card, the device you're on stays signed in, but every other phone, tablet or computer signed in to your account is signed out β€” in case someone else knew the old password.
  • Why the error doesn't say more. When a sign-in, a recovery code or a password reset fails, the message is deliberately general ("couldn't sign you in") rather than saying which part was wrong β€” telling a stranger which usernames exist would help them guess. Check what you typed and try again, or ask your admin.
  • Generate new recovery codes any time. Below the Password card, a Recovery codes card lets you mint a fresh batch whenever you like β€” lost track of the ones you saved, think someone else may have seen them, or just want a clean set. Click Generate new recovery codes, confirm in the dialog that appears (this immediately voids every code you currently have, used or not β€” there's no partial regeneration), and the new codes display exactly once, same "save these now" screen shown the first time you set up a passkey. This only works while you're already signed in; it's a different, proactive path from the recovery-code entry on the sign-in page (see Logging In above) for someone with no working sign-in method left at all.

Automatic lock after inactivity

Leave the app untouched β€” no mouse, keyboard, or tap β€” for the practice's idle window (15 minutes for staff by default, 30 in the Patient Portal; an Admin can change both in Settings β†’ Security & compliance β†’ Security & sessions) and the screen locks. A minute before that, a small "Still there?" countdown appears at the bottom of the page; any activity dismisses it.

  • Nothing on screen is lost. The lock is an overlay on top of the page you were on β€” the half-written note, the open dialog, the filters you set all stay exactly as they were. Sign in again (passkey, or password + emailed code) right on the lock screen and you're back where you were.
  • The session really ends. The lock isn't cosmetic: the system closes the session at the same moment, so a locked workstation can't be used by anyone who doesn't have your passkey or password. "Sign out instead" on the lock screen takes you to the login page if you'd rather start fresh.
  • Laptops that go to sleep come back locked if the window passed while they were closed β€” same overlay, same sign-in-in-place.

Lost your device and your recovery codes?

That's a full lockout β€” but not a permanent one. Ask an admin or office manager to reset your sign-in from the Staff page. They'll give a reason (at least 10 characters), and it removes your old passkey, password, and every recovery code outright, then issues you a brand-new one-time setup link β€” the same kind you used when you first joined. Every session you were signed into ends immediately, the practice's security official is emailed the moment it happens, and the reset is written to the Audit Log. Nobody can reset their own sign-in this way. An Admin's sign-in can only be reset by another Admin β€” an office manager can't do it. If the locked-out person is the practice's only Admin, contact Sodlcs, who can issue a new setup link.

Patients sign in the same way

The Patient Portal (see Patient Portal) uses the exact same passkey and password system, completely separate from staff accounts. A patient's portal login can never see staff data, and a staff login can never sign in as a patient β€” they're two fully separate identities under the hood.

Dashboard

Staff app β†’ Dashboard (your home page)

The first thing you see after signing in β€” your day at a glance. Anything that needs attention shows up as a red count on the left menu rather than as a row of numbers here.

What's on it

πŸ”” Where to see what needs attention

The Dashboard itself doesn't carry a row of counts. Instead, a small red number sits directly on the left menu item it belongs to β€” Training, Patient Communication, Calendar, Patient Billing, Claims, ERA / Insurance Payments, Insurance Requests, Clinical Notes, Charting, Recall & Waitlist, Inventory, Staff Time Clock, and Team Chat (unread messages). That number sits on the thing you'd click to act on it, and you can see it from every page, not only the Dashboard β€” see The left menu, grouped. More than nine shows as 9+.

Three of those badges add two things together: Recall & Waitlist is overdue recalls plus the waiting list, Inventory is low stock plus expiring soon, and Staff Time Clock is time-off requests waiting for your decision plus a decision on your own request you haven't seen yet. Open the page to see the split.

No number on a menu item means nothing is waiting there. If a count can't be loaded at all, you'll see a grey ! instead of a number β€” that means "open the page and check", never "you're all clear".

Looking for upcoming appointments? That's the Appointments menu item (third in the Schedule group, after Calendar and Day Sheet) β€” it opens on "Next 30 days" by default and has an "All upcoming" option β€” see Appointments. Patient List and Providers in the menu are where the full patient and provider lists live; neither carries a badge.

πŸ“… Today's schedule

The day's appointments in order, with patient name, provider, and status. Click one to open it directly on the Calendar page (on whichever day the card is showing).

Two controls sit at the top of the card. Mine / Everyone appears only if you have an active provider record β€” and that, not your role, is what decides it. It starts on Mine, so your dashboard opens on your own day rather than the whole practice's; click Everyone to see every provider's appointments. Anyone without one β€” front desk, office manager, admin β€” doesn't get the toggle and simply sees the whole practice, the way the card has always worked. Worth knowing: this can happen to a dentist or hygienist too. If your provider record was never created, or has been deactivated, the toggle disappears and your dashboard shows the whole practice, even though your role hasn't changed. Having the Dentist role and having a provider record are two separate things β€” an admin can add or reactivate yours from Providers.

The date controls let you look at another day without leaving the Dashboard β€” the same four you already use on the Calendar page, in the same order: ‹ and › step back and forward one day, the date box jumps to any day, and Today brings you back. The card's heading and its "nothing scheduled" message both follow it β€” it only says Today's schedule when you're actually looking at today, and names the day otherwise.

🦷 Ready for you

Dentists and hygienists only β€” everyone else's dashboard doesn't show this card at all. Lists every chair where a patient has been seated and is waiting for you: their name, which chair, how long they've been waiting (longest wait first), and what's planned for the visit. Click a row to open that patient's chart β€” that click is also what tells the chair it's now In treatment, so you don't have to do anything else. If you'd rather open the chart from the Calendar instead (which is what most clinicians do at the chairside computer), use the Start treatment button on the appointment there β€” see Calendar β†’ Chair status. Either one works, neither is required, and whichever you use first is the one that counts β€” clicking the other afterward does nothing. Refreshes automatically about once a minute, and not at all while the tab is in the background, so a row you've had on screen a while may be out of date: if that chair has since been checked out, cleaned and re-seated with someone else, the click still opens the chart you asked for but deliberately does not mark the new patient as in treatment, and the stale row disappears on the next refresh.

Two things you might see go wrong, neither of which blocks you. If the chair couldn't be marked In treatment, a dismissible red notice appears saying so and telling you to click the row again to retry β€” the chart still opened, so you can carry on and retry whenever; the only consequence is that the chair still reads Ready for treatment to everyone else. If the list itself can't load, the card shows Couldn't load who's waiting β€” retrying and keeps trying on its own; it clears by itself once it succeeds. Neither message is ever shown to a patient.

πŸ’‘
Good to know If an appointment on the dashboard shows a patient or provider name followed by (deleted) or (inactive), that record has since been removed or deactivated β€” the appointment itself is kept for the record, just clearly labeled.
πŸ–¨οΈ
Every page can be printed Click your own name/avatar, top-right, to open the account menu, then Print this page β€” it's available on every staff page and prints exactly what's on screen (no sidebar, no header). Some places also have their own dedicated Print button, because they print a formatted copy rather than the screen as it looks: Recall & Waitlist (it covers two different worklists β€” recalls and the waitlist β€” so "whatever's on screen" isn't the whole picture), every report on the Reports page (a letterhead-branded export, not a screenshot of the current view), Practice Analytics, Day Close, Expenses (Bills and Vendors), and each claim's own page. Inside a chart, visit summaries, doctor's notes, prescriptions and the disclosures list have their own Print buttons too. Audit Log, Patient Billing, Charting, Eligibility, Staff Time Clock, and Clinical Notes have no Print button of their own β€” use Print this page from the account menu for those.

AI Assistant

Staff app β†’ Pearl AI, at the bottom of the left menu, on every page Draft / assist only

A quick-help chat for "how do I..." questions about this app, real questions about your own patients, and quick-read chart summaries before you see someone β€” all in one place, always one click away.

πŸ’‘
Meet Pearl The assistant has a name and its own icon β€” click Pearl AI near the bottom of the left menu, just above Team Chat, Audit Log and Settings. Like Team Chat, the panel it opens is a plain floating window, not a popup that blocks the rest of the screen, and you can drag it anywhere on screen by its header. Click Minimize to hide the panel without losing your conversation; click Pearl AI in the sidebar again to bring it back (the Minimize button's tooltip says the same). Hover the menu item any time to see a reminder of what it's for.
ℹ️
A few limits worth knowing
  • Pearl is itself a feature Sodlcs switches on per practice. If it's off, there's no Pearl AI in your menu, and AI patient search and chart summaries aren't available either.
  • Pearl only works with what your practice has switched on. Ask about something that's turned off for your practice (for example Inventory or Eligibility) and it says "… isn't turned on for this practice. Sodlcs can turn it on." rather than showing it.
  • One question gets about a minute and a half and a handful of look-ups. A question that would take longer gets "That took longer than I can spend on one question β€” try asking more specifically." β€” narrow it down (a name, a date range) and ask again.
  • Pearl, AI patient search and chart summaries share one allowance per person (30 requests every 5 minutes). Hit it and you're asked to wait a moment.
  • Name the patient clearly. Pearl looks up the patient you name (whole-name matches) instead of reading the whole patient list, so "Maria Lopez" works better than "Maria".
  • When Pearl offers Review & add for a new patient, the Add patient form opens filled in even if you're already on the Patient List.

Asking a how-to question

Click Pearl AI in the left menu to open it. Ask a how-to question β€” "how do I add an inventory item?", "where do I set the low-stock alert threshold?", "how do I reassign a training?" β€” and it answers directly, in plain language, with no markdown clutter. It remembers the last several messages in the conversation, so a follow-up question like "what about for a different role?" carries context from what you just asked.

✨
How Pearl works now Pearl runs on Claude, an AI model hosted in Sodlcs's own secure, HIPAA-covered cloud account β€” your patients' information never goes to a public AI service. What you'll notice:
  • It knows which screen you're on. Ask "what does this button do?" or "how do I book from here?" and it answers about the page you're looking at.
  • It shows what it's doing β€” "Looking up patients…", "Checking the guide…" β€” and the answer appears as it's written.
  • It looks up one patient precisely. Ask about "Jordan's balance" and it searches your patients by name, phone, date of birth or patient number, then opens only that patient's record. If more than one patient matches, it asks you which one rather than guessing.
  • It can take a few steps on its own β€” find the patient, then check their next appointment and balance β€” in one answer.
  • Same rules as before: it only sees what your role can see, every patient lookup is written to the Audit Log, and anything it drafts (a note, a new patient, a fee) is a card for you to review β€” it never saves anything itself. It still only answers questions about Sodlcs Health.

πŸ” Patient search & practice questions

Ask something that needs real data β€” "how many patients do I have," "find the patient who had a crown last week," "which patients have incomplete treatment plans," "what's the estimated outstanding treatment value," "who hasn't scheduled their recommended crown," "who's overdue for a recall" β€” and it looks it up across every active patient automatically. Matching patients show up right in the conversation as clickable cards β€” click one to open their chart. Dollar figures are estimates from your fee schedules, not bills.

πŸ“ Chart summary

Found a patient (or named one directly), then ask a follow-up like "summarize that patient" or "give me a rundown on them before I see them" β€” it figures out who you mean from the conversation and generates a quick-read draft summary of their chart. It's a draft for your own reading, never saved to the chart itself.

πŸ“‹ What needs attention today

Ask "what needs my attention today?" or "give me the morning huddle" for a prioritized, whole-practice rundown β€” today's schedule, unsigned clinical notes, past visits still needing charting, overdue recalls, the waitlist, planned treatment nobody's booked yet (with its estimated value), and any of today's insured patients whose coverage should be re-verified.

πŸ“¦ Any area of the app

Not just patients β€” ask about inventory ("are we short on gloves?", "what's expiring this month?"), the schedule ("how many appointments tomorrow?"), staff and providers ("who are the hygienists?", "which providers have time off coming up?"), payers and fee schedules ("which insurers do we take?"), the recall and waitlist lists, training ("who still has outstanding training?"), billing ("who has an outstanding balance?", "what's on the ready-to-bill list?"), the practice's own settings ("is the low-stock alert set to 20%?", "what's our tax ID on file?"), or the audit log ("who viewed patient records today?"). Pearl reads the same live data those screens show. It only pulls an area you're allowed to open β€” the Audit Log needs Admin or Office Manager, training assignment data needs Admin β€” and every lookup is written to the Audit Log.

Pearl also answers how many questions about the practice's own records β€” "how many patients do we have", "what's our patient count" β€” with an exact figure counted straight from your records, not an estimate from a sample. And questions about what a role is allowed to do ("can Front Desk see clinical notes?", "who is allowed to delete a patient?", "what can an Office Manager change in Settings?") are answered from the rules this guide describes, so you can check a permission without hunting for it here. Both used to come back as "I can only help with questions about Sodlcs Health" or a blank reply; that was a fault in Pearl, not a limit on what you may ask.

Counting questions work for any period you ask about, not just a fixed few β€” "year to date how many appointments", "how many did we have last 6 months", "how many in March". Pearl adds up exact monthly figures from your own records, so the range you choose is up to you. Cancelled appointments are left out of those counts unless you ask about cancellations specifically.

Answers are also much faster than they were β€” Pearl now looks up only the part of its reference material your question is about, instead of re-reading everything it knows every single time.

One access rule is narrower than it looks: payers and fee schedules together need Admin, full stop β€” even a question as simple as "which insurers do we take?" is refused for an Office Manager, the same as opening Fee Schedules itself, even though an Office Manager can otherwise manage payers from Settings.

Asking Pearl to do something

Pearl can also take you somewhere or get a form started for you β€” not just answer:

  • Open a screen or chart β€” "open the Schedule", "take me to Settings", "pull up Jordan's chart". Pearl navigates there and closes. (It's forgiving about a misspelled or mis-heard name.)
  • Start a new patient β€” "add a new patient, Maria Lopez, DOB 4/2/1990". A card appears in the chat; Review & add opens the real Add Patient form pre-filled with what you said, for you to check and submit.
  • Draft a clinical note πŸ”’ Dentist / Hygienist / Admin β€” "add a note for Jordan that he'll call next week about his pain". Pearl writes a first draft; the card's Review & sign opens the note composer in that patient's chart with the draft filled in, for a clinician to edit and sign.
  • Add a practice standard fee πŸ”’ Admin only β€” "add a standard fee for D2750 at 300", "set our fee for a PFM crown to 950". Pearl looks up the CDT code (by code or by name) and the card's Review & add opens Settings β†’ Money & insurance β†’ Standard fees with the code and amount filled in, for an Admin to check and save.

Each of these appears in the chat as its own card, with a Discard button next to the review button in case you don't want to act on it after all. If Pearl couldn't read part of what you said β€” a date of birth or a fee amount it couldn't make sense of β€” the card shows a short warning below its heading instead of guessing, and leaves that field for you to fill in on the form yourself.

Pearl never saves anything itself β€” every one of these lands you on the normal form, with its normal permission checks, where you're the one who submits. Booking an appointment isn't one of these yet; asking to "book a visit" just opens the Schedule.

It decides on its own whether a message is a how-to question, needs real patient data, wants a summary, wants today's rundown, or is asking it to do something β€” you don't have to say which kind it is.

πŸ’‘
Good to know β€” what it can and can't do It only answers questions about Sodlcs Health and your own patients β€” ask it something unrelated (the weather, a general trivia question, anything about a different app) and it'll politely say it can only help with Sodlcs Health questions, rather than answering off-topic. Any question that looks up real patient data, generates a chart summary, or pulls today's rundown is logged to the Audit Log β€” nothing about asking through the chat is any less tracked than the equivalent action elsewhere in the app. Like every AI feature in Sodlcs Health, a chart summary is a draft for your own reading β€” a human always reviews before anything becomes part of the official record.

Roles & permissions

A staff member's role(s) decide what they can see and do. Front desk staff can't chart a clinical procedure; hygienists can't delete a staff member. Here's the full breakdown.

πŸ’‘
A staff member can hold more than one role For example, an owner who's also the practice's dentist can be both Dentist and Admin at once β€” set with checkboxes on their profile (see Staff) β€” instead of needing two separate logins. Access is granted if ANY of their roles allows it.
Role Can do Cannot do
Admin Everything β€” including Settings, Staff management, Audit Log, and deleting records. Write or reactivate a dentist's Practice Library material β€” reactivating is author-only, and nobody (not even an Admin) can edit one once published; an Admin can still retire any of it.
Office Manager Manage staff and providers, delete patients, view the Audit Log, manage payers, reveal a patient's full SSN (with a reason). Open Settings, but only five of its cards: the read-only Features list, Insurance & payers, Custom reports, and the schedule's Hours & closures and Chairs panels β€” so they can add an operatory, change opening hours, or mark a holiday. Change any of the other Settings cards β€” branding, practice targets, standard fees (even just looking one up needs Admin), fee schedules (even just reading a payer's contracted rates needs Admin), online payments, communication, the privacy notice, inventory alerts, time off & payroll, the switch-over setting, prescribing, imaging devices, the imaging agent, security & sessions, and the other five schedule panels (all Admin only; they aren't shown at all). None of this is just hidden from view β€” standard fees, fee schedules, imaging devices, the imaging agent's activation codes, practice targets, and every other Admin-only Settings card are all blocked automatically too, so there's no way around it. An Office Manager also can't build or run a Custom Report sourced from Billing standard fees, for the same reason (see Reports). Read clinical records (see below). Give or remove the Admin role, change their own roles, or edit, reset, re-invite or deactivate an Admin (see Staff).
Dentist Chart procedures, write and sign clinical/doctor's notes, view Clinical Notes, write Practice Library material and retire or reactivate their own (any dentist can write new material; only the original author can reactivate one β€” an Admin can also retire another dentist's material, but never reactivate or rewrite it; there's no way to edit one once published), everything a Front Desk role can do. Manage staff, delete records, view the Audit Log, change Settings.
Hygienist Same clinical charting access as Dentist. Same restrictions as Dentist, plus can't write Practice Library material (Dentist only).
Front Desk Everyday patient and scheduling work β€” add/edit patients, book and manage appointments, insurance, recall/waitlist, run eligibility checks, send portal invites. Chart clinical procedures or notes, read clinical records (see below), manage staff, delete records, view the Audit Log, reveal a full SSN.

Who can read what β€” the clinical record

Roles don't only decide what you can change; they decide what you can see. HIPAA's "minimum necessary" rule means scheduling and billing work never needs the clinical record itself, so those parts of a chart are for clinical roles only:

  • Dentist, Hygienist, Admin see everything: clinical notes, medical history (conditions, medications, allergies), X-rays and imaging, prescriptions, the tooth chart, and the AI chart summary β€” and every document on file.
  • Front Desk and Office Manager see demographics, contact info, appointments, insurance, billing, consent forms, treatment plans, messages, education materials, doctor's notes, and the administrative documents (ID scans, consent forms, treatment-plan copies). The clinical sections simply don't appear on the chart for them, and a document filed under "Other" needs a clinical role to open. The one clinical fact everyone still sees is the patient's allergies line on the schedule hover card and patient list β€” a safety cue for room prep β€” but not their medications or conditions.
  • Full SSN is Admin/Office Manager only, and revealing it asks for a reason that goes into the Audit Log with your name β€” see The patient chart.
πŸ’‘
If you open a link you don't have access to The menu on the left only shows you the pages your role can use β€” but if you ever type in, or click a saved bookmark for, a page your role isn't allowed to see (say, a Front Desk link straight to Reports or Settings), you'll be taken back to your dashboard instead of seeing that page. Nothing on it is ever shown to you first; the app checks your role before the page appears at all, the same way it always has for the menu links themselves and for the requests those pages make behind the scenes.

Emergency access ("break-glass")

A real dental emergency doesn't wait for a role change. If you're Front Desk or Office Manager and a patient needs clinical attention right now β€” a collapse in the waiting room, a reaction with no dentist reachable β€” an "Emergency access" button appears next to the patient's name (below the consent-status badges). It's only shown to a role that doesn't already have clinical access β€” a Dentist, Hygienist, or Admin never sees it, because the system won't let them start one anyway.

  1. Click Emergency access. A dialog asks what's happening β€” type at least a sentence (10 characters minimum, up to 500); the "Start" button stays disabled until you do.
  2. Click Start emergency access. It always applies to the one patient whose chart you're on β€” there's no way to open every patient's records at once from here.
  3. The chart's clinical sections unlock immediately: medical history, medications, allergies, imaging, prescriptions, and clinical notes, rendered exactly as a Dentist or Hygienist would see them.
  4. A red banner stays at the top of the chart for the whole hour, showing your exact reason in quotes and a live countdown to the exact minute it ends. Click End access there the moment you no longer need it β€” don't leave it running longer than necessary.
ℹ️
What this does β€” and doesn't β€” unlock This is read access only. You can look at the record, but "Chart a procedure," signing a note, and prescribing all still require an actual clinical role β€” a Front Desk user under an active grant can open a chart but still can't chart, sign, or prescribe anything on it. It lasts exactly 60 minutes and ends itself automatically if nobody clicks "End access" first; either the person who started it or an Admin/Office Manager can end it early (nobody else can β€” trying returns an error). Only one grant per person at a time β€” clicking "Emergency access" again while yours is still open just shows you the one you already have running, it won't start a second, separate one.

The instant a grant starts, the practice's security official (see Settings β†’ Security & compliance β†’ Security & sessions) is emailed with your name, your stated reason, and exactly when it expires β€” and whether or not anyone is designated as security official, the start is always written to the Audit Log. Every single record you open while the grant is active β€” every chart, note, image β€” is separately tagged with that grant in the Audit Log, so anyone reviewing it later can see precisely what you looked at and why, not just that a grant existed. This is a genuine emergency tool, not a way around your normal role, and every use of it is reviewed β€” see Audit Log β†’ Security review panel, where every single grant shows up flagged for a second look, on purpose, every time.

Throughout this guide, a πŸ”’ Admin / Office Manager or πŸ”’ Clinical roles tag next to a feature means it's restricted to those roles β€” everyone else either won't see the option, or will see it disabled.

The left menu, grouped

Staff app β†’ every page β†’ the sidebar on the left

The left menu used to be one long flat list. It's now organized into six named groups, so it reads as a map of the practice instead of a list of everything that's ever been added.

The six groups, top to bottom

Dashboard sits alone at the very top β€” it's your home page, not part of any category. Then come six groups, each with a title you click to open or close:

  • Schedule β€” Calendar, Day Sheet, Appointments, Recall & Waitlist.
  • Patients β€” Patient List, Patient Communication.
  • Clinical β€” Charting, Clinical Notes, Unmatched X-Rays, Practice Library.
  • Billing & insurance β€” Patient Billing, Claims, ERA / Insurance Payments, Statements, Eligibility, Insurance Requests.
  • Business β€” Practice Analytics, Expenses, Day Close, Reports.
  • Office β€” Staff, Providers, Staff Time Clock, Training, Inventory.

Pearl AI, Team Chat, Audit Log and Settings sit at the very bottom of the menu, below a thin dividing line β€” a footer, not a seventh group, which is why none of them carries a group title. Pearl AI and Team Chat open a floating window rather than a page; everyone has those two, while Audit Log and Settings appear only for the roles that can use them. If your role can't see a single item in a group, that whole group simply doesn't appear for you β€” there's never an empty heading with nothing under it.

Some items belong to features Sodlcs switches on or off for each practice β€” for example Inventory, Expenses, Claims, Statements, Eligibility, Practice Analytics, Unmatched X-Rays, Staff Time Clock, Training, Team Chat and Pearl AI. If one is switched off for your practice it simply isn't in your menu, and an old bookmark to it shows "This feature isn't turned on for your practice. Contact Sodlcs to turn it on." The same goes for the pieces of other pages that belong to it: on a patient's chart, the Statements card, the Insurance claims card and the coverage (eligibility) block on each insurance policy; on the account ledger, Generate Statement (statements) and the card-payment Refund (online payments); the text-message consent row among consent forms, for staff and in the Portal (texting); Practice targets in Settings (Practice Analytics); and the matching reports in Reports. Nothing is deleted β€” it all comes back when the feature is switched on again.

Three items appear only while there's something in them. If your practice moved over from other software, you may also see Plans needing consent (under Patients), Imported files to match (under Clinical; Dentists, Hygienists and Admins) and Insurance follow-up (under Billing & insurance), each with a count. They're clean-up lists from the move: once everything in one has been dealt with, it disappears from the menu on its own, and a practice that never moved over never sees them. See Consent & education, Imaging and Moving from your old software.

Opening and closing groups

Click a group's title to open or close it β€” the little arrow next to it points down when closed, up when open (it's never sideways). More than one group can be open at the same time. Whichever group contains the page you're currently on opens automatically when you load the app, so you always land somewhere that makes sense; every other group starts closed.

ℹ️
This doesn't remember your choice Opening or closing a group isn't saved anywhere β€” come back tomorrow (or just reload the page) and you're back to only the current page's group being open. That's true everywhere else in the app that opens and closes the same way, too: Settings' own groups, and every collapsible section of a patient's chart.

A closed group still shows you if something needs attention: its title carries a small red count adding up every waiting-for-you number from the items tucked inside it (for example, closed Billing & insurance might show "4" if there are ready-to-bill charges and claims waiting together). Open the group and the heading count disappears β€” each item shows its own number instead, so nothing is ever counted twice. An open group's title also looks noticeably bolder and darker than a closed one's, with a thin vertical line running down beside its items, so you can tell at a glance which groups are currently open without checking every little arrow one by one.

Three items were renamed

Three items had the same word as the group heading sitting directly above them, which read as a mistake. All three were renamed; nothing about how they work changed, and the page you land on says the same thing in its own title:

  • Schedule (inside the Schedule group) is now called Calendar.
  • Patients (inside the Patients group) is now called Patient List.
  • Billing (inside the Billing & insurance group) is now called Patient Billing.

If an older screenshot, a co-worker, or an earlier part of this guide says "click Schedule" or "open Billing" meaning one of these, this is why the sidebar now says something slightly different β€” same page, same data, new name.

A fourth rename happened later, went one step further, and has now settled: for a while the menu carried Patient Chat and Messages as two separate items. They became one item, Patient Communication, with the channels as tabs across the top of it β€” and then on 28 September 2026 the Chat tab itself was removed, because Messages could already do everything it did and two inboxes for one patient meant checking both. Everything you say to a patient is now a message. See Patient Communication and Messages.

⚠️
Fee Schedules is no longer in the sidebar at all It used to have its own place in the left menu. It moved into Settings β†’ "Money & insurance" and, at the same time, was narrowed to Admin only β€” an Office Manager who used it before will no longer see it anywhere, including inside Settings. See Fee Schedules & Payers below for exactly what changed and why.

Reordering or hiding items for yourself

The layout above is the default, not the only option β€” every staff member can personally reorder or hide items in their own sidebar from My Profile's "Customize navigation" section, without needing any special role. It only ever changes what you see; see Staff β†’ My Profile for exactly how it works.

PART 2 Patients

Patient List

formerly "Patients" Staff app β†’ Patients group β†’ Patient List

Every current patient in the practice, searchable, with a one-click path into their full chart.

How to use it

  1. Search by name, the name a patient goes by, Patient ID, any of their phone numbers (typed any way β€” "(925) 555-0181" and "9255550181" both work), date of birth, or email using the search box at the top (email and date of birth only start matching from the third character typed β€” one or two characters would match nearly everyone) β€” it filters as you type, and reaches every matching patient across every page, not just whichever page is on screen.
  2. Show (just under the search box) chooses Current patients (the default), Archived patients, or All patients. A search always includes archived patients, so someone returning after years is never "not found"; they carry an Archived badge.
  3. Click any row to open that patient's full chart.
  4. Every patient has a permanent Patient ID β€” a plain sequential number, shown as its own column here and in the chart header, separate from any internal record id.
  5. Click "Add patient" to create a new record. First name, last name, and date of birth are required; gender, phone, and email are right there too if you have them, but can just as easily be left blank and added later β€” along with insurance, emergency contact, and everything else β€” from the patient's chart. If Pearl (the AI assistant) drafted a new-patient request for you, this same dialog opens automatically with those fields already filled in, ready for you to check over and save.
  6. The list is paginated, with First/Prev/Next/Last and page-number buttons at the bottom, and a Rows per page selector (5/10/25/50/100 β€” see the note under Appointments below). Click the Patient ID, Name, or DOB column header to sort by it; click again to reverse, and a third click returns to the default order. Note: DOB is stored as text (MM/DD/YYYY), so sorting by it groups by month-then-day rather than true chronological age β€” useful for finding patients who share a birthday, not for finding the oldest or youngest patient.
πŸ’‘
Good to know Date of birth is entered as typed text in MM/DD/YYYY format, not a date picker β€” this keeps entry fast for front desk staff typing from an intake form. It must be a real date that isn't in the future: 4/2/1990 and 1990-04-02 are both accepted and saved as 04/02/1990, while a two-digit year or an impossible date (02/30) is refused with a message saying why.

Archived patients

Staff app β†’ a patient's chart β†’ Archive Any staff role

For people who are no longer current patients β€” they moved away, or haven't been seen in years. Archiving is not deleting: nothing on the record changes.

How to use it

  1. Open the patient's chart and click Archive (next to Edit). Add a reason if you like, for example "Moved out of state", then confirm.
  2. The chart shows an Archived banner with the date and reason. Everything else β€” history, insurance, balance, portal access β€” stays exactly as it was.
  3. They leave the default Patient List but still appear in every search, in the patient picker (marked "Archived"), and on their past appointments.
  4. To bring them back, click Unarchive on the banner.

Patients your previous software marked inactive arrive already archived when you bring your data over from your old software, with the reason "Inactive in" and the old system's name.

The patient chart

Staff app β†’ Patients group β†’ Patient List β†’ (any patient)

Every patient's single source of truth β€” demographics, insurance, appointments, and the full clinical record, all on one page, organized top to bottom in the order a visit actually happens.

Top of the chart

Above the patient's name, in this order:

  • Alert banners β€” see Portal access & alerts below.
  • Consent status badges β€” a row of small badges giving a compliance snapshot before you even open the Consent forms section: one badge per consent form type, reading "on file since [date]" or "not on file," plus a Treatment plan badge reading none, presented, or accepted. These answer "has this patient ever signed one of these" β€” a form prepared for a specific visit still shows "on file" here once any copy of that type has been signed, even if today's fresh copy is still waiting.
  • Emergency access β€” see Roles & permissions for how break-glass access works.
  • Guardian access, Log records request, and Produce records β€” three more buttons here for HIPAA-related administrative actions; see Procedures, tooth chart & clinical notes below for all three. If this patient has a records request still waiting, a small panel appears alongside them showing how many days are left to answer it.

The header

  • Patient ID β€” shown next to the patient's name, alongside DOB/gender.
  • Edit β€” update name, date of birth, gender, or contact info.
  • Upload/take photo β€” attach a patient photo for quick visual ID at check-in. Choose a JPEG, PNG, or WebP file (up to 5MB), or use your device's camera directly via the camera button. Once a photo is on file, a Remove button appears next to it.

Contact info, emergency contact & guarantor

ℹ️
Revealing a full SSN needs a reason The SSN is masked (***-**-1234). The eye icon to reveal the full number only appears for Admin / Office Manager, and clicking it asks for a short reason first ("Insurance claim requires subscriber SSN", for example). The reveal, your name, and that reason are written to the Audit Log β€” so every full-SSN view answers "why" without anyone having to ask.

Standard demographic sections β€” phone numbers, email, preferred language, mailing address, an emergency contact, and a guarantor (who's financially responsible for the account, e.g. a parent for a minor patient). All editable from the same "Edit" action as the header, which also has the patient's middle name and preferred name β€” the name they go by shows under their name at the top of the chart ("Goes by Bob") and in the Patients list, and searching for it finds them. A patient can have three numbers: Mobile / main (the one text messages go to), Home and Work; home and work only appear when they're filled in. The Guarantor card here records who is financially responsible; the name statements are addressed to is set separately, in the Account section β€” click Edit next to "Guarantor" there to put the account in a parent's name, for example. Emergency contact and Guarantor each start collapsed, showing just the contact's name (or relationship, for the guarantor) β€” click either header to open it. If the guarantor is the patient ("Self"), the card shows only that relationship badge; there's no separate name, DOB, phone, email, or address to fill in, since it's the same information already on this chart.

βœ‰οΈ
Patients can send you their new phone, email or address themselves A patient can update their own contact details from the Patient Portal (see Patient Portal). It does not change the chart on its own β€” it lands right here as a card above Contact info, headed "The patient asked us to update their contact details", showing what's on file now beside what they've sent, field by field. Check it the way you'd check anything a patient told you over the phone, then click Accept and update the chart to write it in, or Dismiss to leave the chart alone. The card only appears when there's something waiting, any role can action it, and both choices are recorded in the Audit Log with your name and the fields involved. Accepting an email change also moves where that patient's sign-in codes go, so the portal emails their old address to tell them. Their name and date of birth never change this way β€” those reach you as a correction request instead (same place: Patient Portal β†’ Request a correction), because insurance and claims are matched on them.

Contact info also has an optional Social Security Number field. It's encrypted in the database and shown masked by default (e.g. ***-**-1234) β€” click the eye icon next to it to reveal the full number when you actually need it. Every reveal is separately logged to the Audit Log, distinct from just viewing the rest of the chart.

Appointments

A history of every appointment for this patient, past and upcoming, with status β€” newest first. The count in the header is the patient's real total. A patient with more than 100 visits shows them 100 at a time ("Showing 1–100 of 240, newest first"), with Show older and Show newer buttons to page through. Click one to open its full detail β€” see Calendar for what you can do from there (reschedule, cancel, chart a procedure, print an After Visit Summary).

Continuing care

Recall schedules specific to this patient (e.g. "6-month cleaning, next due March") β€” the same data that feeds the practice-wide Recall & Waitlist list.

  1. Click Add recall and fill in a Care type (a short label you choose, e.g. "6-Month Recall") and an Interval in months.
  2. Give either a Last completed date (the due date is worked out from the interval β€” by calendar month, so a cleaning done on 31 August with a 6-month interval is due on the last day of February, never spilling into March) or, for care this patient has never had done here before, a First due date directly β€” not both.
  3. Each row shows the interval and due date. Click Mark completed today whenever it's done to reset the clock, or Deactivate/Reactivate to turn a schedule off or back on without deleting it β€” an inactive schedule stays on the list, labeled "inactive," and drops off the practice-wide Recall & Waitlist list until reactivated.

Recalls moved over from your previous software show a From previous software label, with anything the old system recorded that Sodlcs has no field for shown underneath, read-only. They count on the Recall & Waitlist list exactly like the ones you add here.

Documents

A place to keep any file related to this patient β€” a scanned ID, a signed paper consent form, a printed treatment plan, a payment or refund receipt, released imaging, a copy of their records you produced for them, anything you'd otherwise have floating around outside the system. Click Add, choose a type (ID, Consent form, Treatment plan, Payment receipt, Refund receipt, Released imaging, Records export, X-ray, Photo, Referral, Insurance card, Correspondence, or Other), optionally give it a short label, and click Choose file to attach a PDF, JPEG, PNG, or WebP file (up to 15MB). Payment receipts, refund receipts, released imaging, and records exports are normally added automatically by those features rather than by hand, but nothing stops you from filing one under any type yourself.

The list shows one compact row per document β€” click a row to open its details in a popup, showing the file name and size. From there, View opens the file, and Hide takes it off the chart. A brought-over Insurance card can be opened by anyone at the front desk, like an ID; brought-over X-ray, Photo, Referral and Correspondence documents need a clinical role (Dentist, Hygienist, Admin). A document is never deleted: hiding asks you to confirm ("Hidden documents stay on file; an admin can restore them") and lets you note why (for example "Filed under the wrong patient"). A hidden document disappears from the chart, from the patient's Portal and from records exports. The scan of a signed consent form (or the saved copy of a consent signed in the Portal) can't be hidden β€” it's the proof the patient consented. A Payment receipt, Refund receipt, Released imaging, or Records export document also gets an Email button β€” type an address, or leave it blank to use the patient's own email on file, and click Send to email that document as an attachment. Sending needs the practice's outbound email set up first; if it isn't, Send fails with an error explaining that.

🔒
Who sees, emails and hides which documents Front desk and other non-clinical roles only see ID, Consent form, Treatment plan, Insurance card, Payment receipt and Refund receipt documents on a chart (receipts are billing records β€” Front Desk and the Office Manager take the payments and issue the refunds they record) β€” every other type, including Records export, needs a clinical role (Dentist, Hygienist, Admin) or emergency access. Since October 2026 the same rule covers Email and Hide: you can't email or hide a document you aren't allowed to open. And only an Admin or Office Manager can email a document to an address other than the patient's own β€” everyone else leaves the address blank or types the patient's own address exactly as it's on file (capital letters and stray spaces don't matter), so a record can't be sent to a stranger by mistake. A typo'd address is refused with "That email address isn't valid."

Files that open in your browser. PDFs and pictures (JPEG, PNG, WebP, GIF, BMP) open in a new tab as before. Any other kind of file is always downloaded rather than opened in the browser β€” a safety measure, so a file can never run anything inside the app.

"Imported from …". If your practice's documents were moved over from your previous software, each one shows an Imported from <old software> tag in the list and in its popup, named neutrally by its type and date (for example "Referral 2019-05-05"), with the description your old software had as its label and dated by its original date. They were checked for viruses on the way in. Older formats Sodlcs can't display (old Word files, for example) are marked Download only: their popup says so and offers a Download button instead of View, which saves the file under its neutral name so you can open it on your computer.

"Checking for viruses…" Every file you add is checked by a virus scanner before anyone can open it. Right after you upload, the row shows a yellow Checking for viruses… tag and the popup says the same β€” View and Email aren't offered yet. This usually takes a few seconds; the list refreshes on its own and the tag disappears once the scan is done, with nothing for you to do. Until then the file also doesn't appear in the patient's Portal or in records exports. If the scanner is briefly unavailable, the file simply waits and is checked as soon as the scanner is back β€” it's never lost and never opened unchecked.

"Blocked". If the scanner finds something harmful, the row shows a red Blocked tag. A blocked file is kept on the patient's record but can never be opened, emailed, released or shown to the patient, and the practice's security official gets an email about it automatically. If it was a document you need (a signed form, say), scan the paper again on a different computer and upload the new copy β€” and have the computer the blocked file came from checked. You can still Hide a blocked document to take it off the list.

TIFF scans. Some scanned documents (often from a previous office's system) are TIFF files, which most browsers can't show. For those, View opens a picture of the first page, and Download original gives you the full file; if it has more than one page, the popup tells you how many ("The preview shows page 1 of 3").

Restoring a hidden document (Admin only). An Admin sees Show hidden documents at the bottom of the Documents section. It lists each hidden document with when it was hidden and the reason given; Restore puts it back everywhere it was.

Statements shows this patient's own account's statements β€” the same list as Staff app β†’ Statements, pre-filtered to just this account. Since a family account can be shared by more than one patient, this is that shared account's statements, not only charges billed specifically to this one patient. Each row shows the Statement ID, period, new balance, and status, and links straight to that statement's full detail/review page.

🧭
Sections collapse by default Every section starts collapsed, showing just a count or a short summary in its header (Contact info shows the phone number; Portal access shows whether the patient has registered) β€” click the header to open it. Keeps the chart from just growing longer and longer as a patient's history builds up. Medical History, once opened, goes straight into an editable form if nothing's on file yet, and shows a read-only summary with an Edit button once something's recorded.
🧭
Where things live Top to bottom, the chart runs: Portal access, Contact info, Text message consent, Calls, the "From your previous software" card (only for patients brought over), Emergency contact, Guarantor, Appointments, Continuing care, Medical History (clinical roles only), Insurance, Consent forms, Treatment plans, Account, Statements, Insurance claims, Documents, Disclosures, Procedures, Tooth Chart (clinical roles only), Prescriptions (clinical roles only), Imaging (clinical roles only), Clinical notes (clinical roles only), Education materials, Messages, and Doctor's notes β€” front-desk and paperwork sections first, clinical sections in the middle, and follow-up communication last. Text message consent and Calls appear only when your practice has texting or calling turned on, and Prescriptions and Imaging only when e-prescribing or imaging is turned on.

Portal access & patient alerts

Portal access card

Shows at a glance whether this patient has set up their Patient Portal account yet. If not, you have two ways to invite them:

  • Copy invite link β€” issues a fresh invite link and copies it to your clipboard to send however you like (text, email client, printed).
  • Email invite β€” issues a fresh link and sends it automatically by email, if the patient has an email on file. Grayed out (with an explanation on hover) until the practice's email sending is configured, and again if this particular patient has no email on file.
  • SMS invite β€” sits next to the two buttons above, but is always disabled: this practice can't yet send an invite by text message.
ℹ️
Invite links are personal, single-use, and expire Every invite link (copied, emailed, or the QR code on a printed Doctor's Note / After Visit Summary) carries a one-time code that is only for this patient. It works once and expires after 7 days. Issuing a new one β€” by any of those routes β€” replaces the previous link, so if a patient says "the link doesn't work", just issue a fresh one. A forwarded link can't enroll anyone but the patient it was issued for, and a link that was already used can't be used again.

Once a patient registers, this card shows "Registered" plus an "Email portal link" button β€” not an invite (no one-time code, no expiry), just a plain link to the portal sign-in page. Handy when a patient calls and needs the URL again rather than reading it out over the phone character by character. Same email-configuration and email-on-file requirements as Email invite above.

Patient alerts ("Flag patient")

A clinical or administrative alert that shows as a colored banner at the very top of the chart, above even the patient's name, every time the chart is opened β€” impossible to miss. Use it for things every staff member needs to know before treating or scheduling this patient: an allergy, a balance-due hold, a behavioral note, anything that shouldn't get buried in a note nobody re-reads.

  1. Click "Flag patient" (or "Add another alert" if one already exists) in the banner area.
  2. Write the alert text and pick a severity β€” Info, Warning, or Critical β€” which sets the banner's color and how much it stands out.
  3. Save. It now shows for every staff member who opens this chart, until it's resolved.

A patient can have more than one active alert at once β€” each shows as its own banner, in whatever severity color it was given, with its own Resolve button. Click Resolve on the one that no longer applies; the others keep showing until resolved separately.

Insurance

A patient can carry more than one policy β€” Primary, Secondary, and Tertiary β€” with only one active policy allowed per rank.

How to use it

  1. Click Add in the Insurance section of the patient's chart.
  2. Pick an existing payer from the list, or click New payer and type a name if this is the first time the practice has seen this insurer.
  3. Enter the Member ID, pick a Rank (Primary, Secondary, or Tertiary), and optionally a Plan type (HMO, PPO, or Other).
  4. Edit a policy any time to change any of the above, or add a Group number β€” group number only shows up as a field once you're editing a policy, not on the original Add form.
  5. Deactivate a policy to take it off active status β€” a deactivated policy stays on record but no longer counts as "active" for that rank, freeing it up for a new policy. This happens immediately with no confirmation step, so make sure it's the right policy before clicking.
⚠️
One active policy per rank You can't have two active Primary policies at once β€” the system will stop you with a clear message naming the existing one. Deactivate the old one first if you're replacing it.

Checking coverage

Each policy card has its own eligibility block underneath it, separate from the practice-wide Eligibility worklist.

  • Verify coverage β€” checks coverage with the payer automatically and shows a status badge (Active, Inactive, Not found, or Error), the date it was checked, and β€” when Active β€” the remaining annual maximum and deductible, plus a per-category coverage breakdown when the payer returns one. This button is disabled, with a tooltip explaining why, unless the policy's payer is linked to a real payer record (link one in Settings β†’ Insurance & Payers, or by picking it from the list rather than typing a new name).
  • Record manual verification β€” for when you called the payer or checked their own portal yourself. Pick a coverage status (Active, Inactive, or Not found), optionally fill in the annual maximum, remaining maximum, deductible, and remaining deductible, and write required notes on what you found. This saves the same way an automatic check does, just labeled "manual."
  • History β€” click to expand every past check for this policy, automatic and manual alike, each with its status, date and time, source, who requested it (for a manual entry), and any notes.

Patient-submitted insurance

Patients can also submit an insurance change from the Patient Portal (see Patient Portal) β€” not just a brand-new policy, but a request to edit or remove one of their existing policies too. Every one of those shows up as a pending submission for front desk staff to review, exactly the same way: approve it (optionally linking it to a real payer on file and adding your own notes, for a new or edited policy) or reject it. Rejecting requires a reason β€” it's the only way the patient learns why, and it shows right on their portal card (and, if they have an email on file, in an automatic email too). Nothing a patient submits goes onto their record automatically: approving a new policy creates it, approving an edit updates the existing policy in place, and approving a removal deactivates it β€” none of those ever create a duplicate. Approving also sends the patient a heads-up email automatically if they have one on file. The payer picker you use when adding/editing/linking a policy only lists payers the practice currently accepts (see Settings below) β€” except a policy's own current payer, which always stays selectable even if the practice has since stopped taking it, so editing an existing policy never loses its own selection.

πŸ•
A rejected request doesn't sit there forever. Once the patient has actually seen the rejection on their own Portal, it clears off their Insurance page automatically the following night β€” nothing staff need to do, and the record of the request itself is never deleted, just no longer shown.
πŸ””
You don't have to already be on the patient's chart to know one is waiting. A red count badge on the Insurance Requests item in the sidebar shows how many requests are waiting practice-wide, and opens a worklist of every one of them. Clicking a request there takes you straight to that patient's chart with the right request already open for review. That worklist is paginated, with First/Prev/Next/Last and page-number buttons at the bottom. Click the Patient or Submitted column header to sort by it; click again to reverse, and a third click returns to the default (newest first).

Procedures, tooth chart & clinical notes

πŸ”’ charting requires Dentist / Hygienist / Admin

Procedures & the tooth chart

Every procedure performed or planned for a patient β€” search for the CDT procedure code, pick a tooth (once a tooth is picked, an optional Surfaces box appears: type the letters as you'd write them, e.g. MOD β€” M mesial, O occlusal, D distal, B buccal, L lingual, F facial, I incisal; the same box is on the appointment dialog's Chart a procedure form), and a status (Planned, Completed, etc.). If you're a Dentist, Hygienist, or Admin (or have an active break-glass grant), the tooth picker inside these forms β€” and the appointment dialog's "Teeth of concern" chart β€” shows the exact same real chart as the Tooth Chart section below: an actual crown, filling, root canal, and so on, drawn where it really is. Two things are added on top: a thicker accent ring for whichever teeth you've picked for this form, and a dashed amber outline on any tooth listed under "Planned for this visit" for that appointment, so you can see at a glance which teeth the visit is actually about. Those two are different ideas and can appear on the same tooth: the half-opacity artwork is the patient's standing treatment plan (charted procedures), while the dashed outline is what this one appointment is for. If you don't have clinical access, the picker instead shows a colored ring around each tooth saying only whether it has planned work (amber), completed work (accent), or no history (grey) β€” never what kind, since that level of detail is clinical-role-only. Hover a tooth for its history either way β€” a written description in the real-chart view, the raw procedure list in the ring view.

If the patient's active insurance has a fee schedule on file for the payer, a live estimate ("Est.: $X–$Y") shows next to the code the moment you pick it, before you even save the procedure.

Procedures from your previous software. If your practice's history was moved over from another system, those past procedures appear in the list with a From previous software label, and anything the old system recorded that Sodlcs has no field for (its fee, for example) is shown underneath, read-only. They're history: your old system already billed them, so they never show up in Ready to bill and can't be charged or put on a claim here β€” and they don't show an estimate.

Existing work and conditions. Besides Planned, Completed and Cancelled, a procedure can be charted as Existing β€” work already in the mouth that was done before the patient came to you or by another office (an old crown, a filling from another dentist) β€” or as a Condition β€” something you found on a tooth, like a fracture or decay, that isn't a treatment. On the tooth chart, existing work is drawn in grey and a condition as an amber ring. Neither is ever billed, claimed or counted as your practice's production, and neither shows a fee estimate. If you don't know when existing work was done, tick Date unknown; the chart then says "Date unknown" instead of a date. A procedure that has already been charged can't be changed to Planned, Existing or Condition until the charge is voided on the patient's account.

Completed by mistake? A Dentist, Hygienist or Admin can click Cancel on a Completed procedure's row and confirm. It stays on the chart marked Cancelled β€” never deleted β€” and the change is in the audit log. If the procedure has already been charged or put on a claim, it can't be cancelled until that charge (and any claim) is voided first; the app tells you so.

Long histories. The Procedures list shows the most recent 500 first; if the patient has more, click Show older procedures at the bottom to keep going back. Nothing is ever hidden.

Searching for a code

You don't need to know the exact CDT wording β€” type the word you'd actually say and the picker finds the right code. "Cleaning" finds prophylaxis, "deep cleaning" finds scaling and root planing, "root canal" finds the endodontic codes, "wisdom tooth" finds the impacted-extraction codes, "cap" finds crown codes, "filling" finds amalgam and resin-based codes, "checkup" finds oral evaluation codes, "gum disease" finds periodontal codes, "bridge" finds pontic codes, and "x-ray" or "xray" finds radiographic codes. A handful of shorthand abbreviations front desks already use also work:

TypeFinds
srpScaling and root planing
fmxComplete series x-rays
paPeriapical x-rays
bwBitewing x-rays
perioPeriodontal codes
endoEndodontic codes
extExtraction codes
compResin-based (composite) codes

Search often recovers from a typo β€” "prophilaxis" still finds the right code β€” though an unusual misspelling may not surface the code you want, so try correcting the spelling if nothing looks right. Nothing appears until you've typed at least two characters β€” the picker doesn't show a starting list when the field is empty, so start typing and results appear as you go. Not every everyday term has a matching code yet β€” night guards, whitening, and "prosthodontic" as a shorthand aren't in the current code set, so those searches won't return anything.

If you've already picked a tooth on the form and then pick a code that doesn't usually go with that tooth β€” for example, a front-tooth-only code on a back molar, or a baby-tooth code on an adult tooth β€” you'll see a short warning right under the code field. This is just a heads-up, not a block: there are legitimate reasons a code and tooth might not match the usual pattern, so you can go ahead and save anyway if that's correct for this patient.

A tooth-specific procedure β€” a filling, crown, root canal, endodontic surgery, extraction, sealant, or implant placement, plus any other Restorative or Endodontics code β€” can't be marked Completed without a tooth number, whether you set it when charting or add it in the same request that marks it Completed. Genuinely non-tooth-specific work (an exam, a cleaning, periodontal scaling/maintenance, a denture, orthodontic treatment) is completely exempt β€” Planned is never affected either way, only the move to Completed checks this.

Charted something in error? Two different fixes for two different situations. Mark it Cancelled (via the same status field) when the mistake itself is worth keeping as part of the record β€” the entry stays visible everywhere procedures normally show, just excluded from the graphical chart and the patient's own Portal history. This is also the only fix available once a procedure is Completed. Delete (the trash icon on each procedure row, same Dentist/Hygienist/Admin access as charting) appears on any procedure that isn't Completed β€” Planned or already Cancelled β€” it's for an entry that shouldn't have been made at all β€” wrong patient, wrong tooth, a duplicate β€” before it was ever real clinical work, and asks for a short reason before it disappears from the chart, the tooth chart, and the patient's Portal entirely. Nothing is ever truly erased: the record itself stays in the database and the reason is written to the permanent audit trail, so there's always a real answer to "why isn't this here anymore." Once a procedure shows Completed its Delete button is gone β€” real clinical work that actually happened can't be removed this way, only Cancelled can correct it. Delete also refuses if the procedure is already tied to a ledger entry, a claim, or a treatment plan β€” use Cancel instead once billing is already involved.

The graphical Tooth Chart

πŸ”’ Dentist / Hygienist / Admin (or an active break-glass grant)
A dedicated Tooth Chart section on the patient's chart shows the whole mouth at a glance, drawn as real dental illustrations rather than a plain list β€” the same idea as popping up a separate odontogram window. Unlike the tooth picker above (which only says whether a tooth has work), this chart shows exactly what's currently true about each tooth, surface by surface: a filling or sealant tints only the specific surface it was done on, while a crown, root canal, extraction, or implant covers the whole tooth. It only ever shows current state, not a stacked history β€” the most recent completed work wins per tooth (or per surface, for fillings/sealants; if two procedures share a date, the one entered later wins). Anything still planned is drawn in exactly the same place its finished version would be, but faded to half opacity, so a preview is never mistaken for completed work β€” except a planned extraction, which has no finished version to fade and instead shows a large red cross over the tooth. A tooth that's Missing (whether marked manually or because an extraction was charted) shows the illustration's own empty socket β€” gum and bone still drawn, just no tooth in it; a tooth marked Broken shows a small crack drawn over whatever else is on it.

The legend under the chart matches the artwork's real colors: green for a filling or sealant (they're drawn the same way β€” the illustration has no separate sealant look), a cream-to-tan ceramic cap for a crown, blue for a root canal, violet for endodontic surgery (an apicoectomy, a retrograde filling, or a root amputation β€” surgery around the root tip through the gum/bone, not root canal therapy through the crown; drawn with the same shape as a root canal, just recolored, since related work needs its own label without inventing brand-new artwork), grey metal for an implant, a red line for Broken, and a dashed pink outline for Missing. Fillings and crowns each have a metal-material sibling, too: an amalgam filling, a bare metallic inlay/onlay, or a gold-foil restoration shows as Amalgam / metal filling (grey) instead of the default green, and a full-cast gold/base/noble-metal, bare titanium, or plain stainless steel crown shows as Metal crown (grey) instead of the default tan-gold β€” a porcelain-fused-to-metal or resin-faced crown still shows the default tan-gold, since that's genuinely what it looks like even though there's metal underneath. Hover any tooth for a plain-English description of exactly what was done β€” e.g. "Tooth 14, crown - porcelain fused to high noble metal, resin-based composite - two surfaces on the mesial and occlusal surfaces" β€” the real procedure description, not just its color-coded category, which is also what a screen reader announces.

A Broken or Missing tooth also shows a bold shape centered over the tooth's artwork β€” a red X for Missing (two crossing lines), and a red jagged crack line, tilted at an angle, for Broken β€” since the illustration's own crack line and empty-socket outline are subtle enough to miss at the size a tooth renders on the chart. Both are drawn as plain colored lines rather than a filled icon, so the shape never visually clashes with whatever fill color (a filling, crown, root canal, etc.) is already showing underneath it. A tooth can't be marked Broken once it's already Missing (there's no tooth left to break), so "Mark as Broken" won't even appear in the menu for a tooth that's already missing β€” either set manually, or because a completed extraction was charted on it. The reverse still works: a tooth already marked Broken can later be marked Missing, e.g. once it's actually extracted β€” and if a tooth is both, the chart shows only the Missing X and its hover description says only "missing," dropping the broken fact entirely rather than mentioning both: Missing overrules Broken completely, in the picture and in the text.

The section starts collapsed and doesn't load anything until you open it, so the patient's chart page stays fast (and nothing is recorded as a chart view until you actually look). Click any tooth on this chart to open a small menu β€” Mark as Missing, Mark as Broken, and (once a condition is already set) Clear condition. Missing and Broken each open a short dialog with an optional note field, pre-filled with whatever note is already on that tooth. The note is saved with the condition and shows up in the hover description on the chart β€” for you, for your colleagues, and for the patient on their Portal. This is the first staff UI for recording Missing/Broken at all; it was a real, working feature underneath before this, just with nothing in the app that set it. Only a Dentist, Hygienist, or Admin sees this section and can use its menu (someone with emergency access for that patient can see the chart but not change it) β€” a Front Desk or Office Manager view of the same chart doesn't show a Tooth Chart section, same as Clinical Notes and Medical History.

The patient sees this same graphical chart too, read-only β€” on their own Portal's Health Record page (Medical Info tab), it replaced what used to be a plain text list like "Tooth 14: MISSING." They get the same hover description, including any note you recorded with a Missing or Broken condition.

Clinical notes

Free-text clinical documentation tied to a visit. Click New note, pick the provider it's for, type a short note type of your own choosing (e.g. "progress note," "consult note" β€” there's no fixed list, so use whatever label makes sense), and write the content. Every note starts as a Draft until someone with charting access (Dentist, Hygienist, or Admin) clicks Sign (permanent) on it, which moves it to Signed status. A signed note is a permanent part of the legal record; see Clinical Notes (the practice-wide worklist, formerly called "Unsigned Notes") for how the practice tracks anything still waiting to be signed off.

The moment a note is signed, it appears to the patient in their own Patient Portal (see Patient Portal below) β€” that's the default, not something you have to turn on. If there's a genuine, documented reason a specific note shouldn't be shown to that patient (for example, it could cause harm, or it references another individual's privacy), click Withhold from patient on that note, pick a reason (Preventing harm / References another individual's privacy), and type a required explanation β€” both are saved to the Audit Log. Only a Dentist or Hygienist can withhold a note β€” an Admin who isn't a licensed clinician no longer can, since the "preventing harm" basis requires an individualized clinical judgment call only a licensed provider can make; an Admin can still restore one, since undoing a withhold isn't itself a clinical determination. This only ever affects one note at a time; there is no "hide all notes" setting. A withheld note still shows up in the patient's Portal, it just displays as withheld rather than showing its content, so the patient knows something exists rather than it being silently missing. Click Restore patient access on a withheld note at any time to make it visible again. While a note is withheld, its recorded reason and your explanation show right under it in the chart (e.g. Withheld: Preventing harm β€” "…"), so you can see why it was withheld before deciding to restore it, without digging through the Audit Log. Withholding also sets a 90-day internal review-by date; once that passes, a nightly check flags the note (once, not every night) and it shows up as a "Withheld notes overdue for re-review" finding on the Audit Log page's Security review panel β€” restore it or re-withhold with a fresh explanation, since an indefinite withholding was never one of the Privacy Rule's actual exceptions.

Notes from your previous software. If your practice's notes were moved over from your old system, they're in this list too, by the date they were written (not the day they were moved), already Signed and marked From previous software, with a line like From <old system> Β· written by Dr Lee. Their text is exactly as it was written there β€” line breaks and all β€” and nothing about them can be edited, the same as any signed note. A very long dictated note may be split into two or more signed notes, labelled Part 1 of 2 and so on. Patients see them in the Portal like any signed note, in order of the visit date (a note in parts reads Part 1, Part 2, … in order). Notes your old office kept staff-only (a billing call, an office remark) are in the same list marked Internal (staff only), with the note type they were given (for example Note type: Insurance call): they're never shown to the patient, never offered as a Doctor's Note letter, and β€” like every clinical note β€” only Dentists, Hygienists and Admins (or anyone with emergency access to that patient) can read them.

Guardian access & records requests

Three more buttons sit near the top of every patient's chart, above even the header β€” two restricted, one open to everyone. The last two are the two halves of one job: logging a records request starts the clock, producing the records stops it.

πŸ”’ Admin / Office Manager
Guardian access lets a parent or guardian's own portal sign-in also view this patient's data β€” useful for a minor who has their own chart here but whose parent needs to see it too. The button shows a small count of how many grants are currently active. Click it, search for the guardian by name (they need their own active patient record here already, with a portal account set up the normal way β€” issue them a setup link like anyone else, even if they're not clinically seen at this practice), pick the relationship (Parent, Legal guardian, or Other), and grant access. It defaults to expiring on the minor's 18th birthday (based on their date of birth on file), though you can end it earlier any time from the same dialog, which also lists every grant ever made for this patient. Once granted, the guardian sees a small switcher in their own portal header letting them move between their own account and this patient's β€” see Patient Portal below.

Log records request is open to any active staff member β€” it's for a records request that came in by phone, mail, email, or in person rather than through the portal's own instant download. Pick how it arrived (Phone, Mail, In person, or Email), pick a format (Paper or Electronic), optionally add notes, and log it. This starts the HIPAA response clock β€” generally 30 calendar days, with an additional extension available when permitted and properly documented β€” shown from then on right here on the chart, and on the Audit Log page, until the request is fulfilled.

Producing a patient's records

πŸ”’ Dentist, Hygienist, Admin
Produce records, the button beside Log records request, is how you actually answer the request you just logged. Someone who phones, writes in, or asks at the front desk can't use the portal's own instant download, so this assembles the same record for them. Click it, read the confirmation β€” it puts together the patient's entire record, so it asks once rather than firing on a single click β€” and click Produce.

What comes out is one PDF: demographics, insurance, appointments, procedures, the tooth chart, medical history, medications and allergies, signed clinical notes, prescriptions, a list of what imaging is on file, documents, and the account history. It's filed straight into that patient's own Documents section as a Records export β€” the same record the patient could have downloaded for themselves from their portal, put together the same way, so the office copy and the patient's copy can never say different things. Documents are listed by date, type and label only (for example "May 5, 2019 β€” Referral: Letter to Dr. Example", or "(no description)" when a document has no label) β€” never by file name, since a scanned file's name can mention someone else. Hidden documents aren't listed.

Producing a full record is heavy work, so only a couple run at once. If several are already being produced you'll see "Several records exports are being produced β€” try again in a minute." Nothing was lost β€” just click Produce again shortly.

You don't have to go looking for it. When you close the confirmation notice, the chart opens its Documents section for you and scrolls down to it, with the new Records export row at the top. That section is closed by default and sits a long way down a busy chart, which is why it now opens itself rather than leaving you to hunt.

Nothing is sent automatically. To get it to the patient, open that new document's row in Documents and use View to open the PDF and print it, or Email to send it as an attachment β€” leave the address blank (or type the patient's own) for the patient's own email on file β€” only an Admin or Office Manager can type a different address. Emailing needs the practice's outbound email set up first; if it isn't, Send fails and tells you so, and printing is always there as the fallback. It's exactly how you'd hand over a payment receipt or a released X-ray.

Producing also closes out the clock for you. If this patient has an open records request, the oldest one is marked fulfilled automatically β€” no separate trip to the Audit Log page β€” and the notice afterwards says exactly what happened: what was filed in Documents, and then either "Records request #N is now marked fulfilled," or, when more than one was open, that only the oldest was closed out and the rest are still waiting (an Admin or Office Manager can mark those fulfilled from the Audit Log page if this same copy answers them too). If no request was open at all it says so plainly and produces the records anyway β€” a patient asking at the desk doesn't need one logged first. Every production is written to the Audit Log, naming the patient and the document, since this is a patient's whole record leaving the practice.

ℹ️
The countdown sits right next to the button Whenever a patient has a records request still open, a small panel appears alongside these buttons listing each one β€” its Request #, how it arrived, the format asked for, and where it stands: "logged 28 days ago Β· 2 days remaining," or "N days overdue" once the window has passed, turning red for the last five days. You don't have to open anything to see it, and it's the same count the Audit Log page shows. It only appears when something is actually open, so a chart with nothing outstanding looks exactly as it always did. Anyone who can open the chart sees this panel, even the roles who don't get the Produce records button β€” so front desk can tell a patient where their request stands, then hand the producing to a Dentist, Hygienist, or Admin.

Disclosures & the accounting of disclosures

Further down the chart, past Continuing care and Documents, a Disclosures section. This is how the practice keeps HIPAA's required "accounting of disclosures" (Β§164.528) β€” a patient has the right to ask, once every 12 months for free, who their information was shared with outside the practice over the last six years, for reasons other than their own treatment, payment, or the practice's normal operations.

⚠️
Record a disclosure when it happens β€” nothing else in the app will remind you This only works if it becomes habit. Record one whenever the practice shares a patient's records because of:
  • A subpoena or court order that arrives for a patient's records.
  • A public health report (a reportable condition phoned in or mailed to a health department).
  • A law enforcement request for a patient's records.
  • A workers' compensation request or claim requiring records.
  • A mandated abuse or neglect report to the appropriate agency.
Do NOT record an insurance claim or an electronically-sent prescription here β€” those are treatment/payment disclosures, and the law specifically excludes them from this accounting (they're still in the Audit Log as always, this report just isn't where they belong). Also skip a patient's own portal activity and anything sent to the patient or their guarantor themselves (like a statement) β€” this is only for something sent to someone outside the practice, for a reason other than caring for or billing the patient.

Click Record disclosure and fill in the date it happened, a category (pick the closest match β€” Required by law, Public health reporting, Abuse/neglect report, Health oversight, Judicial or administrative proceeding, Law enforcement request, Coroner/medical examiner/funeral director, Organ or tissue donation, Research, Averting a serious threat, Specialized government function, Workers' compensation, or Other), who received it, what was actually disclosed, and why. There's no edit once it's saved β€” an accounting like this is meant to be a record of fact, so double-check the details before submitting rather than after. An Admin (only β€” not Office Manager) can still remove one entered by mistake, using the trash icon next to it; removing asks for confirmation, and both the removal and what the removed entry said are written to the audit trail, so there's always a real record of the correction.

Below the list of what's been recorded, the accounting of disclosures report itself β€” pick a date range (it opens already set to the full six years the law allows) and click Print for a formal copy to hand a patient or their attorney who asks for one. If nothing accountable has been recorded for this patient in that window, it says so plainly ("No accountable disclosures in this period") rather than looking like something's broken. This report is staff-only β€” a patient cannot see it or request it from inside their own Patient Portal; if a patient asks for their accounting of disclosures, produce this report for them the way you would any other records request.

Doctor's notes

Short, patient-facing notes β€” visit confirmations, work/school excuse notes, that kind of thing. Each one can be printed directly (with the practice's logo and name on the letterhead, and a QR code / link inviting the patient to the portal if they haven't registered yet). To write one, click New note, pick a type (Visit confirmation, Excused β€” work, Excused β€” school, or Excused β€” work & school; the excused ones ask for an "Excused through" date), adjust the wording if needed, and click Save note. Notes can't be edited or deleted once saved. Emailing a doctor's note isn't available yet β€” that button is greyed out.

🧭
X-rays and prescriptions have their own sections See Prescriptions and Imaging below.

Prescriptions

Staff app β†’ any patient's chart β†’ Prescriptions πŸ”’ Viewing: Dentist, Hygienist, Admin πŸ”’ Writing/editing: Dentist only πŸ”’ Signing: Dentist only πŸ”’ Retrying/cancelling: Dentist or Admin

Write, sign, and either send or print a prescription right from a patient's chart. The Prescriptions section itself only shows up for a Dentist, Hygienist, or Admin β€” front desk, office managers, and billing staff don't see it on the chart at all, the same way they don't see Imaging or Clinical Notes. Current medications and allergies are their own structured lists in the chart β€” separate from the older freeform notes in Medical History β€” and read-only in the UI today: an electronically-accepted prescription adds its medication to the patient's list automatically, with no button yet to add one by hand to either list. If your practice doesn't have prescribing turned on, the Prescriptions section doesn't appear at all β€” for paper prescriptions too.

Writing a prescription

  1. Click Write prescription in the Prescriptions section of the chart.
  2. Search for the medication (and, for an electronic one, the pharmacy) β€” both are real type-ahead search, merging this practice's own saved lists with a live external lookup (RxNorm for medications, the NPPES pharmacy directory for pharmacies), so there's no need to remember exact spelling. Picking a live pharmacy result shows its full address and phone so you can confirm it's the right one with the patient before saving.
  3. Choose Delivery: Send electronically (the default; needs a pharmacy picked) or Print (paper) (no pharmacy is asked for β€” the patient can take the printed script to any pharmacy they choose).
  4. Pick the prescribing provider β€” the dropdown lets the draft be written under any dentist, not necessarily whoever's currently signed in, since a draft can be prepared and handed off to the actual prescribing dentist to sign. Once saved, the provider can't be changed by editing the draft β€” cancel it and write a new one if it was assigned to the wrong dentist.
  5. Fill in dose, route, frequency, duration (in days β€” just the number, the directions preview adds "days" for you), quantity, days supply, and refills β€” a plain-English preview of the directions builds itself as you type. There's also an optional Additional instructions box for anything the structured fields don't cover β€” "Take with food," "Avoid alcohol," "Discontinue if rash develops," and similar β€” shown as its own line under the directions in the list and on the printed page, never mixed into the auto-generated directions text. Click Save as draft β€” this opens a confirmation showing exactly what's about to be saved (medication and directions) before anything is actually written; confirm there to finish. Nothing is sent or printed yet.

A saved draft can still be Edited (medication, pharmacy, delivery method, or any dose field except the prescribing provider) or cancelled before it's signed β€” only a Dentist can write or edit one. A draft waiting on a signature shows "Needs a dentist to sign" instead of a Sign button for anyone who isn't a Dentist.

Signing, printing, retrying & cancelling

Signing is the legal act of prescribing either way, so it's Dentist-only, and only works once that dentist has a license number on file (see Staff). Clicking Sign always opens a confirmation first β€” showing the medication and directions plus a delivery-specific warning β€” before anything actually happens. For an electronic prescription, the button reads Sign & send and, once confirmed, queues it for transmission through whichever e-prescribing network this practice has configured (Settings β†’ Prescribing). For a paper prescription, the button reads Sign & print and immediately opens a printable page β€” practice letterhead, patient and date, the medication and directions, and a blank line for the dentist's own ink signature β€” with a Print button on the row afterward (a Hygienist or Admin can reprint a copy too, not just a Dentist β€” or anyone with active emergency access; Front Desk and Office Manager can't) to print another copy any time. If electronic transmission comes back Failed, Retry re-sends the same prescription β€” like Cancel below, this is limited to a Dentist or Admin. Every Cancel click asks you to confirm first β€” a Draft or Failed prescription confirms with a plain "can't be undone" warning, and an already-Printed paper one warns that cancelling voids it but can't take back a copy already handed to the patient β€” either way it cancels outright with nothing sent anywhere; cancelling an electronic one that's already been Accepted shows a stronger warning instead (a real cancellation request goes to the network) and moves it to Cancelling until the network confirms β€” its medication is then marked discontinued on Current medications, normally within a couple of seconds, not in the same instant as the click.

Status badges

StatusMeaning
DraftSaved, not yet signed β€” still fully editable.
SignedElectronic only β€” immediately advances to Sending, so you won't actually see an electronic prescription sitting in this status; it's recorded in the prescription's event history, not shown as a lingering badge.
SendingElectronic only β€” queued and in transit to the e-prescribing network. A double click on Sign or Retry sends it only once. While a prescription is Sending, the section checks on it every few seconds by itself and stops once it settles.
AcceptedElectronic only β€” the network took it. The medication is added to the patient's current-medications list.
RejectedElectronic only β€” the network declined it β€” check the reason and, if needed, write a corrected one.
FailedElectronic only β€” a transmission problem, not a network decision β€” click Retry. One exception: if the reason reads "Transmission outcome unknown: an earlier attempt may have reached the pharmacy", the system was cut off mid-send and can't tell whether the pharmacy got it. Ring the pharmacy first β€” only Retry if they don't have it, or the patient could get it twice.
CancellingElectronic only β€” a cancellation request was sent for an Accepted prescription; waiting on confirmation.
PrintedPaper only β€” its own terminal, successful state. A paper prescription never becomes Sending/Accepted; signing IS the delivery.
CancelledCalled off β€” nothing further happens with it.
⚠️
Electronic prescribing works on screen, but nothing reaches a real pharmacy yet Drafting, signing, queuing, status tracking (Sending/Accepted/Rejected/Failed/Cancelling), and cancelling an electronic prescription all work today, running against a built-in "Mock / testing" network, which every practice is set to until a real network is turned on in Settings β†’ Prescribing. In a live practice, you can't sign an electronic prescription at all until a real network is chosen there β€” paper prescriptions are unaffected either way and work regardless of this setup. Choosing a real network (Weno Exchange, DoseSpot, or DrFirst) does not yet make a real send succeed β€” none of the three can currently deliver a prescription to a pharmacy, though Weno gets further through its own setup steps than DoseSpot or DrFirst before stopping short with a clear error. See Settings β†’ Prescribing for which vendor this practice has picked and exactly what's still needed β€” until it's finished, write every prescription on paper. Controlled substances (anything with a DEA schedule) can't be written in Sodlcs at all, on paper or electronically β€” those always need to be handled outside the app, no matter which network is set up.
πŸ’‘
Testing the electronic workflow in the Mock / testing network To see what a failure looks like without waiting on a real network, write a test prescription with a quantity of 999 and it comes back Failed; a quantity of 998 comes back Rejected ("Prior authorization required"). Any other quantity is accepted normally. Useful for practicing the Retry/Rejected/Failed flow in a training environment.

Imaging (X-rays & photos)

Staff app β†’ any patient's chart β†’ Imaging (if Imaging isn't there, it's switched off for your practice) πŸ”’ Viewing: Dentist, Hygienist, Admin πŸ”’ Taking/importing: Dentist, Hygienist, Admin πŸ”’ Releasing to patient: Dentist, Hygienist, Admin πŸ”’ Deleting: Admin

X-rays and clinical photos live on the patient's chart, in their own Imaging section β€” but the section itself only shows up for a Dentist, Hygienist, or Admin (or for another staff role while an emergency-access grant for that patient is active β€” see Roles & permissions). Front desk, office managers, and billing staff don't see Imaging on the chart at all, the same as Prescriptions and Clinical Notes. Taking a new image, importing an existing one, and releasing one to a patient are all clinical acts gated to that same Dentist/Hygienist/Admin group (the same gate charting a procedure uses); deleting one needs an Admin (the server would also allow an Office Manager, but an Office Manager without a clinical role never sees Imaging, so in practice it's an Admin).

πŸ”
Patients can't view or download their own imaging in the Patient Portal A patient asking to see their X-rays or photos needs staff to release them (below) β€” the portal has no screen that shows or downloads the image itself. Their portal's own full record download (Health Record β†’ Download (PDF) or Download (JSON)) still lists that each imaging study exists β€” its type, date, and how many images are in it β€” as part of a complete record, just without the image. If a patient says they used to be able to see the actual image in the portal and can't anymore, that's expected, not a bug β€” see "Releasing an image to a patient" below for how to get it to them.

Taking an X-ray

Click Take X-Ray, then pick the Provider it's being taken under, the image type (Bitewing, Periapical, Full mouth series, Panoramic, Cephalometric, CBCT, Intraoral photo, Other), and the device, and click Capture. That one click records the order and the capture together β€” what happens next depends on the device you picked. In a training environment, the device list also offers one or more devices labeled Simulated for practicing the flow without real sensor hardware β€” these don't appear in a live practice.

A registered device is driven through the practice's own Imaging Agent β€” a small program installed on the workstation the sensor is plugged into (see "Setting up real sensor capture" below). The dialog can't be closed while a capture is under way β€” it shows a spinner while it waits for the connected workstation to actually take the image, then closes on its own once the image lands in the chart. If nothing ever responds β€” the workstation is off, or the Agent isn't installed β€” the dialog eventually shows a Capture timed out message instead of spinning forever, with a Close button; the order itself stays Pending, so the same order can simply be captured again once the sensor is back online. A capture that fails outright (e.g. the sensor reports an error mid-capture) shows a Capture failed message with the reason, and one that was called off shows Capture cancelled β€” either way with a Close button rather than a spinner that was never going to end.

And if nothing at all comes back β€” no image, and no failure message either, which is what a workstation that's been switched off mid-capture looks like β€” the dialog stops waiting after about five minutes and tells you so: "No image has come back", with a note to check that the sensor's workstation is switched on and the Imaging Agent is running. Close it, sort the workstation out, and take the X-ray again; nothing is lost, and the chart isn't left quietly waiting on a machine that isn't listening.

If the device you picked has been unplugged, switched off, or its workstation is down, you'll be told immediately rather than after a wait β€” the message names the device and when its Imaging Agent last saw it. That's deliberate: it's much better to find out before the patient is in the chair than to sit through a spinner that was never going to succeed. Check the sensor is plugged in and powered on, and that the workstation it's connected to is switched on with the Imaging Agent running. The device stays in the dropdown either way β€” it reappears as usable on its own, normally within about a minute of the sensor coming back.

Intraoral photos β€” taking them chairside

Intraoral photos (next to Take X-Ray) is for the handheld intraoral camera, not the sensor. Plug the camera into the workstation's USB port, open the patient's chart, and click Intraoral photos. Nothing has to be set up first β€” no order, no device registration, no Imaging Agent. An intraoral camera is a plain USB camera as far as the computer is concerned, so this works the same way on any workstation, with any brand.

Pick your camera from the Camera list β€” it shows every camera the computer can see, by name (for example "USB Video Device", "MouthWatch Camera", or the workstation's own built-in webcam). If the only camera connected is the intraoral one, it's already selected for you; when there's more than one, you pick, so the preview never comes up pointing at the wrong camera. The first time you ever do this, the browser asks for permission to use the camera β€” click Allow.

The live preview appears. Click Capture photo (or tap the spacebar, which is easier with a camera in one hand) for each shot you want β€” the preview keeps running, so take as many as the visit needs, up to 20 in one sitting. Each shot appears below the preview, where you can type a label for it or tap one of the ready-made ones: Upper occlusal, Lower occlusal, Left buccal, Right buccal, Anterior. Labels are optional, but they're what tells two similar-looking photos apart later. The bin icon next to a shot throws that one away before anything is saved.

Save to chart files the whole set as one entry in the patient's imaging history, alongside their X-rays, in the same viewer and the same print/export. Photos are only saved when you click it β€” if you close the window with unsaved photos, you're asked to confirm first, because photos taken inside a patient's mouth can't be recovered by "just taking them again" once the patient is out of the chair. If the save fails (a dropped connection, say), the photos stay on screen so you can simply click Save again.

If the preview doesn't come up, the window tells you exactly what's wrong, and each message has a Try again button: the browser is blocking camera access (click the camera icon at the right of the address bar and choose Allow); no camera was found (check the USB connection β€” try a different port, and avoid unpowered hubs); the camera is already in use by another program (very common β€” the camera's own vendor software, or a video call, left running; close it); the page isn't on a secure connection (cameras only work over https:// or on localhost β€” tell whoever set up your workstations); the browser itself can't open a camera at all (an old or unsupported browser β€” try a current version of Chrome or Edge); or, for anything else, a generic message asking you to unplug the camera and plug it back in.

Some camera brands need a one-time driver install. Most intraoral cameras work the moment they're plugged in. A few ship a small driver of their own (Schick's USBCam4, for example) that has to be installed once per workstation from the maker's disc or website β€” after that, the camera shows up in the Camera list here like any other and nothing else is different. If a camera never appears in the list even after installing its driver, and doesn't work in other programs either, it's one of the rare models that only talks to its own manufacturer's software; the workaround is to export the images from that software and use Import below.

A few things this deliberately doesn't do: no video recording (stills only), no sharpening or contrast adjustment (the photo is kept exactly as taken, the same rule every diagnostic image on the chart follows), and the physical button on the camera handle doesn't work as a shutter here β€” web browsers can't see it. Use the Capture photo button or the spacebar.

Telling a chairside photo apart from an imported one: a Photo study carries a small second badge next to "Photo" β€” Captured chairside for one taken through this camera flow, or Imported for one brought in through the Import button below. (An X-ray's badge never gets this second tag β€” there's nothing to distinguish there.) Every study also shows the date and time it was taken next to its badge; if a session had several photos, that one time covers the whole sitting, since they were all taken within moments of each other. Click into any single photo and its own capture time shows underneath its title, in case you need to know exactly when that one shot β€” not the session as a whole β€” was taken.

Importing a file you already have

Click Import for an image that came from somewhere else β€” a previous office's panoramic, a scanned film, an intraoral camera export. Pick what kind of image it is and choose a JPEG, PNG, or DICOM (.dcm) file, up to 25MB. A DICOM file's own embedded details are read and kept alongside it for reference only β€” they never overwrite or second-guess the patient record you imported it into, so the patient you're on is always the patient it's filed under.

Looking at images

The Imaging section is collapsed by default, like every other multi-item chart section β€” its header shows how many studies are on file, or "None" if there aren't any, and expanding it shows "No imaging on file yet" for a patient with none. Images are grouped into studies β€” one per capture or import β€” each shown as a row of thumbnails with its type and date. Thumbnails are small copies made for the grid, so a chart with many images opens quickly. A thumbnail the browser can't preview (a DICOM file, most often) shows a plain "No preview" marker right in the row instead of a broken image. A TIFF image shows through a picture of its first page (the viewer says "Page 1 of 3" when there are more). Click a thumbnail to open the viewer, which has Zoom in, Zoom out, Rotate, and Fit to screen. It's a working diagnostic viewer, not a full PACS workstation β€” no measurements, annotations, or tooth-mapping yet.

"Imported from …". X-rays and photos moved over from your previous software are grouped into studies the way your old software grouped them (or by date and type) and show an Imported from <old software> tag next to the study's type. The original files are kept exactly as they were, and a photo is never made the patient's profile photo.

"Checking for viruses…" Every new image β€” imported, taken with the intraoral camera, captured from a sensor, or received from networked equipment β€” is checked by a virus scanner before anyone can open it. Until the check finishes (usually a few seconds), its thumbnail shows a spinning Checking for viruses… marker, the viewer shows the same, and it can't be released to the patient; the section refreshes on its own. If the scanner is briefly unavailable, the image waits and is checked as soon as it's back β€” never lost, never opened unchecked. If the scanner finds something harmful, the thumbnail says Blocked: the image is kept on the record but can never be opened or released, and the practice's security official is emailed automatically.

Releasing an image to a patient

πŸ”’ Dentist, Hygienist, Admin
A patient can't see their own imaging in the portal anymore, so if one asks for a copy of an X-ray or photo, this is how you get it to them. Open the image in the viewer and click Release to patient, then confirm β€” this copies that image into the patient's own chart Documents as a new "Released imaging" file. From there, use Documents' existing View/print or the Email button to actually get it to the patient, exactly the way you'd hand them a payment receipt (emailing it needs outgoing email set up for this practice, same as any other document β€” see the patient chart's Documents section). Releasing doesn't remove or change anything about the original image on the chart β€” it makes a copy for the patient β€” and every release is written to the Audit Log, naming the image and which patient it went to. This satisfies the same right of access (Β§164.524) the portal's self-service imaging used to β€” the practice still has to produce a patient's own imaging on request, generally within 30 days, this is just a deliberate staff action instead of a self-serve download.

Deleting an image

πŸ”’ Admin
Delete in the viewer removes the image from the chart, but not from the record: a diagnostic image is part of the legal record, so it's kept on file, marked deleted, exactly like a soft-deleted patient. It can't be put back from the app, though β€” the confirmation says so β€” so check it's the right image before you confirm. Every view, import, capture, and deletion is written to the Audit Log.

Setting up real sensor capture (Imaging Agent)

πŸ”’ Admin only on the Settings page
There's no manual "add device" form for real sensors β€” a physically-connected TWAIN sensor is driven by the Sodlcs Imaging Agent β€” a small program installed on the workstation the sensor is plugged into (not this web app itself, since a browser can't talk to locally-attached hardware). From Settings β†’ Clinical systems β†’ Imaging Agent (Admin only), type a name for the workstation (for example "Operatory 1") and click Generate activation code (valid 15 minutes). Click Download Imaging Agent (Windows) on the same card to get the installer, install and run the Agent on that workstation, and enter the code when prompted β€” from then on, that workstation's Agent runs in the background, reports the TWAIN devices it sees, and picks up "Take X-Ray" requests for them automatically. Once an Agent has reported a device, it shows up in the "Take X-Ray" device dropdown like any other, ready to use β€” no further setup per patient or per visit. The same Settings page lists every Agent that's been activated and when it was last seen, so you can tell at a glance whether a workstation's Agent is actually running.

Settings β†’ Clinical systems β†’ Imaging Devices (Admin only β€” anyone can see the device list, which is what the "Take X-Ray" dialog needs, but only an Admin can register or remove one; imaging hardware is a purchase, so it sits with the Admin like the Imaging Agent card beside it) lists every device this practice has, whether reported by an Agent or (in development/test only) added manually β€” click Remove on a row once a piece of equipment is retired or replaced. This doesn't erase anything: every X-ray already taken with that device keeps its record exactly as it was, and it's a one-way action β€” a removed device can't be brought back, so re-adding the same physical sensor later (its Agent will report it again automatically) creates a new device entry rather than restoring the old one.

⚠️
Live TWAIN capture isn't finished yet The Agent installer, activation, and queued-capture flow above are all real β€” but a real capture will currently end up Capture timed out or Capture failed every time, even with the Agent installed and running. Don't tell a patient or a new practice that sensor capture works yet β€” keep taking X-rays with your existing sensor software for now, and use Import above to bring the finished image into the chart.

Real DICOM receipt from networked equipment

Separately from TWAIN/Agent capture, imaging equipment that speaks DICOM directly over the network β€” a panoramic or CBCT unit, for example β€” can be configured to push its studies straight to the practice's DICOM receiver. On the unit, type the patient's Patient ID β€” the number shown on their chart (leading zeros are fine) β€” into its Patient ID field, and their name with the last name as it's on their chart. When a study arrives it's automatically matched to that patient's most recent Pending imaging order and attached to their chart with no staff action needed β€” but only if the last name sent with it agrees with that patient's last name, so a mistyped number can't land a scan on someone else. A name on its own is never enough. A study that doesn't confidently match β€” wrong or missing Patient ID, a last name that doesn't agree, no matching Pending order β€” is never guessed onto a patient; instead it lands in the Unmatched Studies queue below for someone to review by hand.

Your practice's DICOM receiver port and AE Title, once assigned, show up in Settings β†’ Clinical systems β†’ Imaging Devices β€” hand both values to whoever installs or services your imaging equipment.

Unmatched Studies

Staff app β†’ Clinical β†’ Unmatched X-Rays
Any active staff member can open this page and see every DICOM study the practice's equipment sent that couldn't be confidently matched to a patient automatically. Each row shows the study's type, the patient name the sending equipment itself reported (not necessarily this app's own patient record), and when it arrived. Resolving one β€” picking the correct patient and attaching the study to their chart β€” needs πŸ”’ Admin/Office Manager, the same tier as other record-attaching actions in this section; once resolved, the study appears on that patient's chart exactly as a confident auto-match would have.

Imported files to match

Staff app β†’ Imported files to match (Clinical; Dentists, Hygienists and Admins; shown only while something is waiting)
When your practice's documents and x-rays were moved over from your previous software, any file Sodlcs couldn't put on a chart with certainty waits here β€” it's never attached by guesswork. Each row shows the file's category, date, size and why it's waiting (for example No patient found for it or The x-ray names another patient), with up to three suggested patients. These files can be x-rays and other clinical records, so only Dentists, Hygienists and Admins see this page (and its count in the menu); they can View a file (or Download it, for a type your browser can't show). When Sodlcs has a likely patient, their name is already filled in the Patient box β€” check it's the right person before you match (for The x-ray names another patient, the name filled in is the one the old folder gave, so the x-ray may really be the other patient's). To file one, search for the patient, choose where it goes (a Documents type or an Imaging type β€” x-rays start as an x-ray) and press Match πŸ”’ Admin, or an Office Manager who is also a Dentist or Hygienist β€” it then appears on that chart like any other imported file. A file that doesn't belong to anyone can be Set aside with a reason πŸ”’ Admin; it's kept either way, never deleted.

The second tab, Same file under two patients, lists files your old software held under more than one patient (for example a family's shared insurance card). Both copies are kept. Look at each, and if a copy is on the wrong chart, open that patient's Documents and hide it; then press Checked β€” all correct πŸ”’ Admin, or an Office Manager who is also a Dentist or Hygienist to take the group off the list.

The sidebar item shows a count β€” files waiting plus groups to check β€” and disappears once both tabs are empty. The file's original name and folder from your old software are never shown here (they can name someone); judge by opening the file. A row marked Cleared by the virus scanner is a file the scanner first stopped and the Sodlcs team had checked again β€” it's now safe, and just needs a patient. Files the scanner still blocks, damaged files and files Sodlcs can't read at all never reach this page or a chart; the Sodlcs team keeps them aside.

⚠️
DICOM viewing in the browser is still limited Importing a DICOM file and receiving one from networked equipment are both real and live β€” see above. What's still not built is displaying a DICOM file's own image data in the browser: opening one in the viewer shows a "Preview not available for this file type" message instead of the image, even though the file itself is stored, audited, and deletable normally. Import remains available for JPEG/PNG/DICOM files you already have, with no order/capture step at all. If a capture fails or times out, that attempt is marked Failed or Expired with the reason, and the order simply stays Pending so it can be captured again.
PART 3 Scheduling

Calendar

formerly "Schedule" Staff app β†’ Schedule group β†’ Calendar

The practice's calendar β€” book, reschedule, and manage every appointment, viewable by day, week, month, or a longer look-ahead.

Views

πŸ“† Day

Every provider's full day side by side β€” the view you'll use most for day-to-day booking.

πŸ—“οΈ Week

A 7-day overview to spot open slots or a light/heavy week at a glance β€” each day's card lists its real appointments, not just a summary. Click an appointment to open it directly; click anywhere else on a day's card to jump into that day's view. Evening visits sit on their own day (they used to slip onto the next day's card late in the evening in US time zones).

πŸ“… Month

The big picture β€” each day's cell shows up to three real appointments plus a "+N more" link for a busier day (both the link and an individual appointment open straight into that appointment or that day's list); click anywhere else on the cell to jump straight into that day's view.

πŸ”­ 3 Month / 6 Month

A longer look-ahead β€” several small month grids side by side, each day colored by how booked it is (see "Day colors" below; no per-appointment detail at this zoom level). Click any day to jump into Day view for it, same as Month.

🟩 Six-month view & day colors

Under the Day view (scroll down past the last time row) there's a strip of six small months, so you can answer "when's the next opening?" without leaving the day you're on. Click any day to move the Day view to it; use the < and > arrows at the strip's top right to page a month at a time. To hide it, click the words Six-month view at its top left; click them again to bring it back (this computer remembers which you chose).

Green = plenty open (under 60% booked) Β· Yellow = filling up (60–85%) Β· Red = nearly full (85% or more) Β· Grey = closed (closed weekday, holiday/closure, or every provider off). Hover a day for the exact numbers, e.g. "62% booked Β· 4h 30m open". The strip's header shows the day you're on: how many appointments, % booked and open time β€” it stays there even when the months are hidden or paged away.

"Booked" counts every provider's chairs across that day's hours, minus lunch and anyone's time off. A red day may still have a short gap β€” open the day to see it. The colors update on their own every minute.

Why is a day grey? Hover it: a holiday or closure shows its name (e.g. "Closed β€” Thanksgiving"). Weekly hours, lunch and closures are set in Settings β†’ Your practice β†’ Hours & closures; a provider's time off is on the Providers page.

πŸ“‹ Looking for "Upcoming Appointments"?

That page is gone (it was a plain, unsearchable, unfiltered list, and it lost its only reason to exist once the Dashboard number it used to back was removed). Its job is now done by the Appointments menu item β€” a searchable, sortable, paginated list of every appointment, past and upcoming β€” which opens on a "Next 30 days" view by default, and has an "All upcoming" option that shows exactly what the old page used to. See Appointments below for the full picture.

A Today button next to the date picker always jumps straight to Day view for today, whichever of the views above you're currently on β€” picking "today" means one specific day, so it takes you to the one view built for that.

Which views update on their own. Day and Week refresh themselves every 30 seconds, so a booking somebody else just made at the other front-desk computer turns up on your screen without you doing anything β€” that's what these two are for, and it's the view you'll have open when a patient walks in. Month, 3 Month and 6 Month don't: they cover thousands of appointments at once, and re-reading all of them every half-minute on every open Calendar in the practice is a lot of work for a view nobody is watching minute by minute. They're never out of date silently β€” a wide view shows a small "Not auto-updating β€” use Refresh" note next to the Refresh button (the circular-arrow icon) so you can see which kind of view you're on, and clicking Refresh brings it right up to date. A wide view also refreshes by itself whenever you come back to the browser tab, and anything you book, move or cancel yourself shows up immediately regardless of the view.

Booking an appointment

  1. Click Book appointment, or click directly on an open slot on the calendar. The Book appointment button on the Appointments page brings you straight here and opens this same dialog for you β€” it isn't a separate booking form of its own, since picking an actual chair-and-time slot always happens on this page's calendar grid.
  2. Pick the patient and provider β€” the available-times list shows immediately after, before the optional type/concern-teeth/planned-service fields further down, so a closed day or a full schedule shows up right away instead of after filling in everything else. The Patient field is a search box, not a dropdown: start typing and it looks the person up the same way the Patient List search does β€” by name, Patient ID, phone, date of birth or email β€” so a phone number or a date of birth finds them just as well as a name. Each result shows the Patient ID and date of birth under the name, which is what tells two patients with the same name apart. Nothing is searched until you have typed two characters β€” with one exception: a Patient ID is an exact match on its own, so typing just "7" finds patient 7 straight away without waiting for a second character.
  3. Pick a date/time and, optionally, a service type from the dropdown (e.g. "Cleaning", "Crown") β€” picking one sets the visit's length to that type's usual duration and reloads the available times to match; leave it on "No type" and the visit stays the standard 30 minutes. Either way you can still adjust the end time by hand afterward.
  4. The system checks for conflicts automatically β€” it won't let you double-book the same chair, and it respects any time off you've entered for them (see Providers). Conflicts are judged per chair, not per provider: a dentist running two rooms at once can be booked at the same time in Chair 1 and Chair 2, and the available-times list is computed for whichever chair is selected, so changing the Chair field reloads the times for that chair.
πŸ’‘
The Book button always says what it needs "Select a provider first," then "Pick a time slot" once times are showing, or "Enter override PIN" if you've clicked "Override and book anyway" on a closed day β€” it switches to "Book appointment" the moment whichever one you're on is actually satisfied, whether that's a picked slot or a typed PIN. The override PIN is one shared code for the whole practice, not tied to any individual staff member's own sign-in β€” an Admin sets or changes it from Settings β†’ Your practice β†’ Schedule override PIN, and until one is set, the override option isn't usable at all. It only unlocks booking outside hours, on a closed day, or through a provider's time off β€” it never overrides an actual double-booking or a lunch block.

Suggesting the reason for the visit, from an accepted treatment plan

As soon as you pick a patient who has an accepted treatment plan with work still outstanding, a small card appears right under the Patient field naming the plan and its next phase β€” something like "Next up on Wren Castellano's plan: Phase 2 β€” Definitive" β€” with the phase's remaining procedures listed underneath.

Click Use this and it fills in the appointment's planned procedures and picks the matching service type for you, which in turn sets the visit's length, the same as if you'd picked that type yourself. Nothing is filled in until you click the button, and everything it fills stays just as editable afterward as if you'd typed it in by hand β€” add, remove, or change anything before you book.

πŸ’‘
No card doesn't mean something's broken The card only appears when there's genuinely something outstanding to suggest. It stays away when a patient has no treatment plan, when their plan is still a draft or has only been presented and not yet agreed to (suggesting unfinished business at booking would turn a conversation into a commitment the patient never actually made), or when every phase of their plan is already done. If a patient happens to have more than one accepted plan β€” unusual, but it happens β€” the card offers the most recent one and tells you how many others exist; open the chart to see those.

Appointment statuses

StatusMeaning
ScheduledBooked, not yet confirmed or seen.
ConfirmedPatient has confirmed they're coming.
Checked InPatient has arrived and is waiting β€” set regardless of whether their chair is clean yet. Shows as a solid-filled chip, not an outline.
In ProgressPatient has been seated in their chair β€” the visit is underway. Also a solid-filled chip.
CompletedThe visit happened. Shown in neutral grey.
No-showPatient didn't show up for a scheduled visit.
CancelledThe appointment was called off β€” never counted as upcoming or today's schedule.
⚠️
You can't book β€” or reschedule β€” into the past. This applies to everyone: every staff role including Admin, and patients booking through the portal. The override PIN doesn't get around it either. (The PIN still works for what it's for: booking outside practice hours, on a closed day, or through a provider's time off.) Note this is a different rule from editing an appointment whose time has already passed, which an Admin can still do β€” correcting the record of a visit that really happened is fine, inventing one at a time that's already gone by isn't. Changing a past appointment's status (Check In, Seat patient, Check out, Mark completed) is always allowed.

You shouldn't run into that as an error, though β€” the booking form won't let you pick a past date, and any time slot earlier today shows greyed out and struck through instead of being clickable. The patient portal behaves the same way: past dates are unavailable and elapsed times are labelled already passed. If every open time for the day you picked has gone by, both the staff form and the portal tell you so and ask for a later date.

The two states where a patient is physically in the building and waiting on you β€” Checked In and In Progress β€” are the only ones drawn as solid-filled chips, so they're the loudest thing on the Calendar, the Dashboard, the Day Sheet and the Appointments list. Everything still to come is a light outline and everything finished is grey. All four screens use the same mapping, so one appointment never looks like one status in one place and a different one elsewhere.

A Scheduled or Confirmed appointment whose time has already passed shows Β· Past due next to its status β€” a visual nudge to mark it Completed or No-show before it's forgotten.

πŸ’‘
Cancelling frees the slot back up A cancelled appointment doesn't show on the schedule at all β€” the slot looks and behaves exactly like it was never booked, click it to book something new into that time. Nothing is deleted β€” it's still on the patient's own chart under Appointments (with a red Cancelled badge) if you ever need to check why it was cancelled, and still shows up in the Reports page's Appointments report the same way. A completed visit can't be cancelled β€” if it was checked out by mistake, change its status instead, so the record of what happened stays intact.
🔄
Which status changes are allowed
  • A visit still on the books or underway (Scheduled, Confirmed, Checked In, In Progress) can move to any status.
  • A Completed visit can only be re-opened β€” back to Checked In or In Progress, to fix a checkout made by mistake. It can never be cancelled, marked no-show or put back to Scheduled; the app says "This visit is already completed, so it can only be re-opened (checked in or seated again)".
  • A No-show can be undone (the patient turned up late) or cancelled.
  • A Cancelled visit can be put back (Scheduled, Confirmed or Checked In) β€” but only if its time is still free; if someone else has been booked into the slot, you'll be told about the clash.
The appointment dialog has a button for each of these corrections, open to every staff role: Re-open visit on a Completed visit (it goes back to Checked In), Undo no-show on a No-show and Reinstate appointment on a Cancelled visit (both go back to Scheduled; reinstating checks the slot is still free and tells you if it isn't). Two people can't book the same provider (or chair) into the same time any more, even by clicking at the exact same moment β€” the second one is told the slot was just taken.

A Completed appointment's chip shows a small icon, and so does a No-show, a Checked In, and an In Progress appointment β€” four small markers right on the tile (Front view only) so any of them is visible without opening anything. Which icon shows for each β€” or none at all β€” is your choice: pick from a small set of options for each of the four separately at Settings β†’ Your practice β†’ Chip status icons.

Check In, Seat patient & Check out

Two more statuses sit between Confirmed and Completed: Checked In (the patient has arrived and is waiting) and In Progress (the patient has been seated in their chair and the visit is underway). From an open appointment:

  • Check In β€” marks the patient as arrived. Works any time from Scheduled or Confirmed, regardless of whether the assigned chair is clean yet β€” arriving and waiting never requires the room to be ready.
  • Seat patient β€” moves the appointment to In Progress once the patient is actually in the chair. Check In isn't a required step first β€” Seat patient is offered from Scheduled or Confirmed too, for a walk-in or same-day visit you're seating straight away. This one can be blocked: if the assigned chair currently shows Needs Cleaning, Cleaning in Progress, Ready for Treatment (another patient is already waiting in it), or In Treatment (someone else is already being seen there), Seat patient is disabled with an explanation instead of letting you seat a patient in a room that isn't ready β€” a check the system runs for real, not just a disabled button (an appointment with no chair assigned skips this check entirely).
  • Start treatment β€” dentists and hygienists only, and only on a seated patient whose chair still reads Ready for treatment. It doesn't change the appointment's status (the visit stays In Progress); it tells the chair that a clinician has actually started, which turns the chair column from amber Ready for treatment to In treatment, takes the patient off every clinician's Ready for you card, and closes out how long they waited. You don't have to use it: opening the waiting patient's chart from the Ready for you card does the same thing automatically. Use whichever fits how you work β€” see Chair status below for the full detail.
  • Check out β€” completes the visit, exactly like the existing Mark completed button always has.

Made a mistake? A small Undo check-in or Undo seat button on the appointment steps it back exactly one stage β€” Checked In back to Confirmed, or In Progress back to Checked In. No-show stops being offered once a patient is Checked In, since they clearly did show up.

Each step is timestamped, and an open appointment shows them back as a short visit timeline right under its status β€” Checked in 9:02 Β· waited 12m, Seated 9:14 Β· in chair 48m, Checked out 10:02. Each line only appears once that step has actually happened, so a visit that was simply marked completed without going through check-in just shows its check-out time. The same timings are available in the custom report builder's Appointments source (Checked in, Seated, Checked out, Wait (min), Chair time (min)) β€” group by provider and average Wait (min) for a real "how long do our patients wait" number; visits that never used check-in are left out of that average rather than dragging it down as zeros.

From an open appointment

Opening an appointment shows everything about it β€” flags, consent, teeth of concern, planned services, procedures charted, materials given β€” read-only at first. Adding a planned service asks for the tooth as a compact row of numbered buttons rather than a second full tooth chart: the real chart is already on screen just above, and once a service is added that tooth picks up the dashed amber outline there. A View patient chart button next to the patient's name jumps straight to their full chart if you need more than the appointment itself shows, and right underneath is a small line showing the patient's Patient ID β€” a quick way to confirm you're looking at the right chart before opening it. That same line also shows this appointment's own permanent Appointment ID, e.g. "Patient ID 42 Β· Appointment ID 118" β€” a second, appointment-scoped sequential number, separate from the patient's. The Calendar page's toolbar (next to Refresh) has an Appointment ID input with a Jump button: type an appointment's ID and press Enter (or click Jump) to go straight to that appointment's date and open its detail dialog β€” or see "No appointment #N found" if no appointment has that ID. Click Edit and that same screen becomes editable in place β€” nothing swaps out or disappears, so you can still see everything else about the visit while changing it: date/time, type, notes, and planned services (add, change, or remove any of them) all become editable together, with a single Save that commits everything at once. Edit is available for any appointment except a Cancelled one β€” including a Completed one, since its notes or planned-services list can still be worth correcting even though its date/time no longer can be (that field just doesn't show up in that case). The one exception: once a visit's own time has already passed, or its status is already Checked In, In Progress, Completed or No-show, editing it needs an Admin β€” anyone can edit an upcoming visit, but changing something that's already underway or already happened is more of an exception than routine.

  • Reschedule β€” while editing, pick a new date/time; the same conflict checking applies. A summary line above the time pickers shows that day's open hours and lunch block (or that the practice is closed that day), and the Start/End time pickers themselves gray out any hour, minute, or AM/PM option that would fall outside them β€” so an out-of-hours time is never reachable in the first place, rather than only rejected after you hit Save.
  • Cancel appointment β€” asks you to confirm first, naming the patient and the date/time, with the "add to waitlist" option right there. Marks it Cancelled once you confirm; doesn't delete it from history either way.
  • Planned for this visit β€” a tooth + CDT code + an optional short note for what's expected (e.g. "tooth 14, crown, patient reports pain"), added, changed, or removed while editing, by any staff role (subject to the Admin-for-past-visits rule above), any time before or after the visit. This is a heads-up for the provider, not a chart entry on its own. Its own Recommended by provider checkbox (marking it as the clinical team's own suggestion rather than something the patient asked for) is limited to a Dentist, Hygienist, or Admin β€” front desk and office managers can add or edit the planned item itself but can't set that checkbox. Teeth of concern is a separate, always-available list on the same screen β€” it saves the moment you change it and isn't part of the Edit/Save batch above, so it can be updated any time regardless of the visit's timing or status.
  • Chart a procedure β€” record what was actually done (clinical roles only). Only appears once the visit's own time has arrived or passed, or its status is already Completed/No-show β€” a visit that hasn't happened yet can't already have something charted as done.
  • Add patient to the waitlist when cancelling β€” a tick box in the cancel confirmation. It puts this patient on the waitlist (reason = the visit's type, same provider) so they can be offered an earlier opening.
  • Print After Visit Summary β€” a patient-facing printout with the practice's letterhead, a summary of the visit, and (if the patient isn't registered yet) a QR code to set up their portal account. Only offered once the visit is marked Completed. The Email button next to it is always disabled for now β€” a heads-up that it's coming, not a working way to send the summary yet.
  • Flag this visit β€” attach a one-off alert icon to just this appointment (see "Alert types & flags" below). Removing one you didn't add yourself needs an Admin.
πŸ’‘
Narrow the procedure code search by category Wherever you pick a CDT code β€” planned services here, charting a procedure on the patient's chart, or fee schedules β€” the search box now has a Category dropdown right beside it (Preventive, Restorative, Endodontics, and so on). Pick one to only see codes from that category, on top of whatever you've typed; leave it on "All categories" and it works exactly as before.

Front view / Back view

A button at the top of the Calendar page β€” click it anytime to switch. Front view is the normal, fully detailed view: patient names, color-coded services (split into a color per planned service when more than one kind of work is planned), alert icons, and a hover card (an appointment moved over from your previous software says From: Previous software there). Back view keeps the color coding and alert icons β€” neither identifies a patient by themselves, and glancing at "this chair has a crown in progress" from across the room is still useful β€” but hides everything that does: no patient name, no text labels at all, no hover card, and clicking a slot does nothing β€” meant for a screen a patient might be able to see (e.g. near a waiting room), so nothing on it is a HIPAA problem. Back view only shows Day view β€” Week/Month aren't offered while it's on, and neither are the view buttons themselves or the Appointment ID jump box in the toolbar.

πŸ’‘
The choice is per-device, not per-login Switching to Back view remembers itself on that specific computer/browser, not your staff account β€” so a shared monitor in the back office can be set to Back view once and stay that way, while your own front-desk computer stays on Front independently.

Chairs

Most providers need nothing here β€” the Day grid just gives them one column, exactly as before. If a provider runs more than one room at once, an Admin or Office Manager adds chairs for them from Settings β†’ Your practice β†’ Chairs (e.g. "Chair 1", "Chair 2") β€” the grid then shows one column per chair, grouped under that provider's name. When booking for a provider with chairs configured, a Chair field appears (defaults to their first chair if left alone), and the Available times list is computed for exactly that chair β€” 10:00 already booked in Chair 1 still shows as open for Chair 2, because one dentist working two rooms at once is the whole point of adding chairs. An older appointment with no chair assigned (booked before that provider had chairs) still blocks every chair at that time, since there's no way to tell which room it's in. From that same Settings panel, the pencil icon on a chair renames it and the trash icon removes it (no confirmation prompt) β€” removing a chair doesn't touch any appointment already booked into it, it just takes that chair out of the list for new bookings.

Chair status

Every chair column on the Day grid shows a live, color-coded status pill right in its header, refreshing automatically every 15 seconds β€” no need to leave the calendar to check whether a room is ready. Each chair is always in exactly one of five states: Available; Ready for treatment (a patient has been seated β€” In Progress, not just scheduled for this time β€” but no clinician has started on them yet); In treatment (a clinician has started treatment and it's under way); Needs Cleaning (the last patient has checked out and nobody's marked it clean since); or Cleaning in Progress (someone has started cleaning but not finished). The first three are read straight off the schedule (and off which clinician has actually started treatment, which is a deliberate click and not merely opening a chart β€” see Dashboard β†’ Ready for you); cleaning is the one fact a human has to assert, so any active staff member can click Start cleaning on a Needs Cleaning chair, or Mark clean from either Needs Cleaning or Cleaning in Progress β€” no new role required, and whoever finishes doesn't have to be the same person who started. Both are buttons sitting right next to the status pill in the chair's column header. The whole header turns amber when a chair Needs Cleaning or is Ready for treatment (a seated, unattended patient deserves the same visibility as a dirty chair), and accent-colored while Cleaning is under way, so you can spot the chairs that need attention without reading every column; Available and In treatment stay plain, since both are normal, no-action-needed states. A chair moves from Ready for treatment to In treatment in one of two ways, and only dentists and hygienists can do either: it happens automatically the moment one of them opens the waiting patient's chart from the Ready for you dashboard card, or they can click Start treatment on the appointment itself β€” open the appointment on the Day grid and the button sits with Check In / Seat patient / Check out. That button only appears on the appointment whose patient is actually seated in that chair, and only while the chair still reads Ready for treatment; it disappears as soon as treatment has started, whichever way it was started. Front desk, office managers and admins never see it. If someone else (or your own click on the dashboard card) got there first, clicking it simply does nothing and says nothing β€” the patient is already being seen, which is the point. If the update genuinely fails β€” the connection drops, or something goes wrong while saving it β€” a short red line appears above the button telling you the chair still reads Ready for treatment and this visit's wait time wasn't recorded; the button stays where it is, and clicking it again is the retry. Works the same way in Back view β€” the pill itself doesn't identify a patient, so it stays visible and interactive there too. The 15-second refresh behind this pill carries nothing that could identify a patient β€” no name, no patient record, and no appointment either, since it's the one Calendar feed that isn't logged to the audit trail; all it returns per chair is the state itself, and nothing else. The grid gets patient names from its own already-loaded roster instead.

πŸ’‘
This used to be its own page Chair status previously lived on a standalone Room Status screen. It's now folded directly into the Calendar grid so front desk never has to leave the calendar to check a room β€” see Room Status for the redirect note.

Service types

Color-codes each appointment on the Day grid by the service type picked at booking (from a list β€” e.g. "Crown", "Cleaning" β€” not typed by hand) so a glance at the grid shows what kind of visit it is. Comes with a starter set already configured (Cleaning, Filling, Crown, Root Canal, Extraction, Whitening, Consult, Ortho, Emergency); edit or add your own from Settings β†’ Your practice β†’ Service types.

πŸ’‘
Picking a type also sets the appointment's length Each service type carries its own usual length. Pick one while booking or editing an appointment and the visit's end time β€” and the list of available times shown while booking β€” automatically matches that length instead of the plain 30 minutes used when no type is picked. You can still change the end time by hand afterward if this particular visit will run longer or shorter than usual; picking a type only sets a starting point, it never locks the length in. Set that usual length yourself from Settings β†’ Your practice β†’ Service types β€” each type's add/edit dialog has a "Default length (minutes)" field (5 to 480 minutes; new types default to 30), and the current length for every type is shown right in the list next to its name and color.
πŸ“‹
An appointment with a "needs attention" badge next to its type Older appointments booked before service types existed sometimes carry a type nobody could automatically match to one on your current list (a typo, or a type your practice has since renamed or removed). Those show a small orange warning badge with the old text instead of a normal type β€” open the appointment, pick the real type from the dropdown, and save; the badge won't come back for that visit once a real type is picked.
πŸ’‘
A split-color chip for planned work When an appointment has anything planned β€” a "Planned for this visit" note, or a real charted procedure with status Planned β€” that shows up entirely through the chip's own color, no separate badge needed. If more than one kind of service is planned β€” say a root canal and a filling β€” the chip's own background splits into one color band per kind, matched automatically from each service's dental category, so you can tell what a visit needs from across the room without opening or even hovering it. Hover the chip for the specifics (which services, and whether a clinical staff member flagged one as their own recommendation rather than something the patient asked for). Coloring isn't limited to work that's still upcoming β€” a real charted procedure counts toward the chip's color whether it's still Planned or already Completed, so a past visit that's been charted still shows what it was for at a glance.

Alert types & flags

A configurable set of icons for anything worth flagging β€” allergy, high balance, anxious patient, needs interpreter, whatever your practice needs β€” set up from Settings β†’ Your practice β†’ Alert types (pick a built-in icon or upload your own image). Attach one two ways: on the patient (their chart's "Flag patient" button) so it shows on every one of their appointments, or on a single appointment ("Flag this visit" in that appointment's own detail popup) for something specific to just that visit. Icons show in both Front view and Back view, since an icon on its own doesn't identify anyone; Back view hides only the name, text and hover card. Opening an appointment shows both kinds together β€” the patient's standing alerts alongside this visit's one-off ones β€” with the standing ones shown read-only there (edit those from the patient's own chart instead), so it always matches what the grid chip is actually showing.

πŸ’‘
"High balance" is always entered by hand The app now tracks account balances (see Patient Billing), but this flag isn't wired to them β€” like every alert type, staff decide when to add it. It's never set automatically from the ledger.

Hovering an appointment

In Front view, hover over any appointment on the Day grid for a quick-read card that flips to sit above the chip instead of below it when there's no room underneath. Which fields it shows is configurable per practice from Settings β†’ Your practice β†’ Hover card fields, chosen from a list that covers patient name, date of birth, age, service, time, provider, allergies, alerts, phone, email, gender, status, notes, teeth of concern, current medications, medical conditions, insurance, emergency contact, and guarantor. Never shown at all in Back view, and it disappears the instant you start dragging any appointment. The "Service" field leads with the real planned or charted service names (e.g. "Crown, Root Canal") β€” the same names the chip's own split colors are based on β€” and only adds the originally-booked service type as a secondary note when it's different from that.

Hours & closures

Set from Settings β†’ Your practice β†’ Hours & closures (Admin and Office Manager both β€” an Office Manager sees only this card and Chairs; the other five schedule cards β€” Service types, Alert types, Hover card fields, Chip status icons and Schedule override PIN β€” are Admin only). Weekly hours β€” collapsed behind a summary line, click a day to edit it β€” sets which days the practice is open and what time. Each open day can also carry its own lunch block, independently of every other day (there's no single practice-wide lunch window), though since lunch is usually the same time every day, a "Use this for every open day" button next to the fields fans one day's lunch time out to every other open day in a click β€” still overridable per day afterward. Narrowing a day's hours doesn't check for appointments that would fall outside the new hours, so shortening a day after booking into the old hours can leave an appointment sitting outside the hours now on file β€” check the day yourself before narrowing it. Below that, Closed days (also collapsed by default) are practice-wide closures β€” holidays, a staff retreat, any day the whole office isn't taking appointments β€” add, edit, or remove one; unlike narrowing weekly hours, adding or moving a closed day is blocked if it would strand an already-booked appointment inside the new range, until that appointment is rescheduled or cancelled. Attempting to book or reschedule outside a day's hours, during its lunch block, or on a closed day is rejected with an explanation.

Moving an appointment by drag-and-drop

Drag any appointment chip and drop it somewhere else to move it there β€” works in every view, not just Day. On the Day grid, drop onto a different slot (any provider/chair column, any time row) to move it there immediately β€” provider, chair, and time are all set by exactly where it lands, no extra step. On Week, Month, or the 3-/6-Month overview, drop onto a different day to open a "Move appointment" dialog (in Month view you drag the appointment itself; the 3-/6-Month overview shows only a summary per day, so dragging a day there moves its earliest appointment) β€” pre-filled with the appointment's current provider, chair, and time on the day you dropped onto. One click on "Move" reproduces that as-is; change the provider, chair, or time first if you want something different. While dragging, a small badge on the day under your cursor shows the time it'll land at, so you know before you drop it.

πŸ’‘
The dialog shows what's actually free The target day's hours and lunch block, plus everything the selected provider already has booked that day, update right in the dialog as you change the provider β€” no more guessing blind, and no more being stuck with whichever provider the appointment already had.

Same conflict rules as booking apply either way β€” no dropping onto an already-booked slot, outside operating hours, or during a lunch block. The dialog's own time picker grays out any hour/minute/AM-PM option outside that day's hours or lunch block as you pick, so a rejected move at Save is now the exception rather than the normal way of finding out a time doesn't work. Front view only β€” Back view has no interactivity at all.

Appointments

Staff app β†’ Appointments

A dedicated, searchable list of every appointment β€” not a calendar β€” for finding an appointment across dates instead of hunting through Day/Week/Month views one at a time.

If you're looking for the old "Upcoming Appointments" menu item, this page does that job now β€” see the date range options below, and especially "All upcoming".

How to use it

  1. Pick a date range from the dropdown, split into two groups:
    Β· Upcoming β€” Today, Next 7 days, Next 30 days (the default), Next 90 days, or All upcoming (every appointment from today onward, no end date β€” exactly what the old Upcoming Appointments page used to show).
    Β· Past β€” Last 7 days, Last 30 days, Last 90 days, Last 6 months, Last 12 months, or All time.
    Every one of these is a rolling window measured from today β€” "Last 7 days" always means the 7 days right before today, not "since Monday" β€” so the same choice never quietly changes size depending on what day you open the page.
  2. Search by patient name, status, service type, or Appointment ID β€” reaches every matching appointment within the selected date range, not just whichever page is on screen.
  3. Click any row to jump straight to the Calendar page, already open to that appointment's date with its detail dialog on screen.
πŸ’‘
Columns Appointment ID, Patient, Date/time, Type, Status β€” every one of them sortable. Results are paginated, with Prev/Next and page-number buttons at the bottom. Click any column header to sort by it β€” click again to reverse, and a third click returns to the default (Date/time, oldest first). Type sorts and displays by the real service type picked at booking, not older free text β€” a row from before service types existed that couldn't be matched to one shows its old text in an orange "needs attention" badge instead (see Calendar β†’ Service types).
πŸ’‘
Book appointment button The page header has its own Book appointment button. It takes you straight to the Calendar page with the booking dialog already open β€” this list page doesn't have its own copy of the booking form, since the Calendar's dialog already has its own "Available times" slot picker plus conflict checks, chair assignment, an override PIN and consent prompts, and a second copy here would just mean maintaining two booking surfaces. See Calendar β†’ Booking an appointment for what happens next.
πŸ’‘
Rows per page is remembered across the whole app Every paginated list page in Sodlcs Health (Appointments, Patient List, Claims, Statements, Staff, Inventory, ERA/Insurance Payments, Eligibility, and Insurance Requests) shares one Rows per page setting β€” 5, 10, 25, 50, or 100. Change it on any one of them and it applies to all the others too, and this computer remembers it next time.
πŸ“§
Appointment reminder emails Opt in from Settings β†’ Security & compliance β†’ Security & sessions β†’ Appointment reminders to have patients emailed a reminder before their visit β€” list as many "days before" values as you want in the Reminder schedule field (e.g. "7, 2" for two reminders, or "7, 3, 1" for three), and one reminder email goes out for each. Off by default; skipped silently for a patient with no email on file.

Practice time zone (same section): set where your practice is. Your whole schedule runs on it β€” weekly hours, lunch, closed days, the times offered when booking, and which day a visit shows on β€” and reminder emails show the visit's time in your time zone and go out on the right day, and appointments are only marked No-show after your own day has ended. It also decides your days everywhere else: reports and Practice Analytics, closing the day (a day can be closed once your midnight has passed), and the dates printed on receipts, statements, consent forms, treatment plans and a patient's records download. Start typing a city to find it. If it isn't set, this section shows a yellow warning: until you set it, the schedule follows the clock of the computer Sodlcs runs on, which may not be yours (opening hours could land in the middle of the night) β€” set it straight away. Tip: if booking says "That time is outside the practice's operating hours" at a time you're open, check this setting first.

Appointments moved over from your previous software get no reminder emails or automatic consent forms until an admin turns on Settings β†’ Patients & communication β†’ Switching over from your previous software β†’ We've switched over β€” so patients aren't messaged twice while you're still running both systems. Turn it on when you stop using the old system. When you do, Sodlcs tells you how many of those moved-over appointments had already passed and still show as scheduled: open each one and set what really happened (completed, no-show or cancelled). Sodlcs never marks them No-show on its own, because those visits happened in your old system. While your history is being moved over, the practice time zone can't be changed β€” wait until the move has finished.

Room Status

Now part of Calendar

The standalone Room Status page has been retired. The same live chair status (Available / Ready for treatment / In treatment / Needs Cleaning / Cleaning in Progress) and the Start / Clean actions now live directly in each chair column's header right on the Calendar grid β€” see that section's Chair status subsection for the full rundown. Nothing about how cleaning works changed, it just moved so front desk never has to leave the calendar to check a room.

Day Sheet

Staff app β†’ Day Sheet

Every provider's appointments and completed procedures for one day, in one clean read-only list β€” a quick end-of-day or morning-huddle check without the visual clutter of the full Calendar grid. Any staff member can open it, with nothing hidden by role.

Picking a day

One date field at the top controls the whole page. It opens on today; pick any other date to see that day instead.

Reading the list

One card per active provider β€” plus any inactive provider who has an appointment that day, marked Inactive so nobody's booked visits go missing β€” each split into two parts. Appointments lists everyone on that provider's book for the day, earliest first, with the time, patient name, and service type; a colored status badge sits next to each one (see the table below), and a Consent missing badge appears next to any appointment whose per-visit treatment consent hasn't been signed yet. Completed procedures lists every procedure actually charted as Completed for that provider that day, with the patient's name and the procedure code and description. Both lists show their own count in the heading, and say so plainly when there's nothing to show ("None scheduled." / "None completed."). Click any row, in either list, to jump straight to that patient's chart. If no active providers exist yet, the page says so and shows nothing further; if the day's data fails to load, an error message appears in its place.

πŸ’‘
What each status badge means
StatusWhat it means
ScheduledBooked, not yet checked in.
ConfirmedThe patient confirmed they're coming.
Checked InThe patient has arrived β€” shown as a solid-filled badge so it stands out.
In ProgressThe patient has been seated in the chair β€” also solid-filled.
CompletedThe visit is finished.
CancelledThe appointment was cancelled.
No ShowThe patient didn't come in.
A Scheduled or Confirmed appointment whose start time has already passed also picks up a "Β· Past due" note on its badge, so a visit nobody checked in doesn't just quietly disappear from the list.
πŸ’‘
Want contact info and medical history too? The Reports page has a built-in Morning Huddle report over this same day's appointments, adding each patient's phone number, date of birth, allergies, medications, conditions, and physician β€” built for handing out at an actual pre-shift huddle. See Reports.

Recall & Waitlist

Staff app β†’ Recall & Waitlist

Two lists for filling the schedule: patients due for a recall visit, and patients wanting an earlier slot.

Due or overdue recalls

Every patient with a continuing-care schedule (e.g. "6-month cleaning") whose due date has arrived β€” exactly what a front desk team works through for recall calls. Each row shows the patient's name, the care type, the due date, and their phone number; click a row to open that patient's chart. The list says "Nothing due β€” everyone's caught up" when it's empty. If more than 1,000 recalls are due, it shows the 1,000 longest-overdue first, with a note giving the full total; the rest appear as these are booked.

Click Add recall to put a patient on a new schedule: search for the patient, then enter a care type (typed freely, e.g. "6-Month Recall"), an interval in months, and either their last completed date (the due date is calculated from it automatically) or a due date directly if they've never been seen for this here.

Waitlist

Patients who'd like to come in sooner if a slot opens. Each row shows the patient's name, their reason, the earliest date they'd accept (or "anytime" if none was set), and their phone number; click a row to open that patient's chart. It reads "No one's waiting right now" when the list is empty.

Click Add to waitlist with a reason and, optionally, a preferred provider, an earliest acceptable date, and a free-text note. When a slot frees up, mark an entry Scheduled once you've booked them, or Remove if it's no longer needed β€” both just change the entry's status, so nothing is ever deleted outright.

πŸ’‘
Print button on each list Both Due or overdue recalls and Waitlist have their own Print button in their card header (grayed out when that list is empty). It opens a print-ready page in a new tab β€” practice name, address, and phone across the top, the same rows and columns as the on-screen list, and the browser's print dialog opens automatically.
πŸ“§
Cancelling an appointment nudges a matching waitlist entry automatically When you cancel an appointment, everyone still waiting whose preferred provider matches (or has none set β€” any provider works for them) and whose earliest-acceptable date is on or before that freed slot gets a heads-up email, if they have one on file β€” only when the cancelled visit was still booked (Scheduled or Confirmed) and still in the future, since a past slot opens nothing. The email just says an opening may have come up and names your practice; it doesn't repeat what the patient is waiting for. This isn't a held slot β€” there's no automatic booking, so it's still first-come-first-served: the patient calls in, and you book them the normal way from this page. At most 25 people are emailed per cancelled visit β€” those waiting for that very provider first, then longest-waiting first β€” and the emails go out in the background, so cancelling itself is instant.
πŸ’‘
Both lists count toward one badge A red count badge on the Recall & Waitlist item in the sidebar adds overdue recalls and waitlist entries together β€” either one being nonzero means something on this page needs you.

Patient Communication

one menu item, three tabs Staff app → Patient Communication

Everything the practice says to a patient and hears back, in one place. One menu item with three tabs across the top — Messages, SMS and Voice (plus From previous software if your practice brought its old communication log over). Texting and patient calls are features Sodlcs turns on for each practice: if yours doesn't have one, its tab (SMS or Voice), the chart's Calls card and My Profile's cell-for-calls card simply don't appear. It opens on Messages, which is where all patient correspondence now lives and which has its own section below: Messages.

✉️
Chat has been retired There used to be a fourth tab, Chat: a running back-and-forth with a patient, like texting, with nothing carrying a subject and nothing ever getting closed out. It was removed on 28 September 2026. Messages does everything it did and more — a subject, a topic, a status you set, attachments, and an email heads-up to the patient — and having two inboxes for the same patient meant you had to choose a screen before you could write, and patients had to check two places. There is one inbox now. Write everything, from "running late, we'll hold your chair" to "here's what your insurance paid," as a message.

The three tabs

Messages comes first: requests with a subject and a status that stay visible until somebody deals with them. It's what the page opens on, and it has its own section: Messages. SMS is a different thing, not this inbox filtered — each patient has one running text conversation with no subject, no topic and nothing to mark resolved, the way texting works on your own phone. A text never appears in Messages and a portal message never appears in SMS: see Text messaging (SMS). Voice is the practice's call log: every call a dentist or hygienist placed to a patient through Sodlcs, newest first — the patient, who called, which number, when, how long and how it ended. Tick Only my calls to see just yours. Calls are placed from the patient's chart, not from here: see Calling a patient. (Voice was labelled "Phone" before.)

Calling a patient without showing your own number

πŸ”’ Dentists & hygienists

A dentist or hygienist can call a patient from Sodlcs at any time — after hours included — and the patient sees the practice's calling number (and the practice's name, once the phone networks list it), never your own cell. It doesn't replace the office's phones. Front desk staff see the call log but can't place these calls.

On your phone: the staff app works in your phone's browser. The menu sits behind the ☰ button at the top left; tap it to open the menu and tap anywhere outside it to close it.

  1. Once: add your own cell in My Profile → Your cell for patient calls (click Add your cell, type it, Save). Only you can see it — not your Admin, not your colleagues, not patients; even you only ever see its last four digits. Then save your practice's calling number in your phone's contacts (My Profile shows it): Sodlcs calls you from it, and an iPhone set to Silence Unknown Callers would otherwise send it straight to voicemail as a "silenced call".
  2. Open the patient's chart. On the Calls card click Call mobile (or Call home / Call work — one button for each US number on the chart).
  3. A box opens showing the last four digits of the cell it will ring and the number the patient will see. Click Ring my phone. Sodlcs rings your cell.
  4. Answer. You hear "This is a Sodlcs call for <your practice>. Press 1 to connect to your patient." Press 1, and the patient's phone rings.

If you don't press 1 — say your voicemail picked up — the patient is never called, and the call shows Not connected (“1 wasn't pressed”). The chart's Calls card starts folded up — click its heading to see the 3 latest calls, and Show all for the rest — and every call is logged on Patient Communication → Voice (which lists the 50 most recent). Calls are never recorded: no audio and no transcript, only who called, when, for how long and how it ended. Only numbers already on the chart, and only US numbers, can be called; you can't type in a number. One call at a time per person.

📞
Patients calling back, and "no caller ID" A patient who calls the practice's calling number back hears "You've reached <your practice>'s after-hours line…" and is put through to your office phone (or a different number your practice chose), or, with none chosen, is told to call during office hours or dial 911 in an emergency. It never rings a dentist's cell. Sodlcs can't place a call with no caller ID — the phone companies' anti-spam rules require one. To hide your number on a one-off call from your own phone, dial *67 before the number.
🔗
Old links still work Anything you'd bookmarked — the old Messages menu link, or a link to one patient's chat — opens Messages. Nothing you saved needs redoing, and nothing lands on an empty page.

From previous software

If your practice moved to Sodlcs from other software and brought its communication log over, a fourth tab appears: From previous software. Search for a patient (or use the link Communication history from <your old software> on their chart's Messages card — the closed card says, for example, 5 from before when there is some) to see the calls, letters, emails and texts the old system logged for them, newest first — how, sent or received, when, who wrote it, and what it said. It's history: you can read it, not change it or reply to it. Press Load more to go further back. An entry badged Internal (staff only) was marked staff-only when the history was brought over; it is never shown to the patient. Practices without history from previous software don't see this tab.

Getting notified

You don't have to be on this page to know a patient has written in. A red badge on the Patient Communication item in the sidebar is visible from every page, counting message threads with something in them nobody has opened plus patients with a text nobody has opened — a thread with four unread replies counts as one, because opening it deals with all four at once, and the same goes for a conversation holding four unread texts. Which of the two it is, is shown on the tabs themselves: Messages and SMS each carry their own count, so a text coming in is never hidden inside the other tab's number. The badge updates about every ten seconds, with no refresh needed β€” and it pauses while this browser tab sits in the background, catching up the moment you come back to it. Opening a thread or a text conversation clears its part of the badge immediately, with no separate "mark as read" step.

Messages

a tab in Patient Communication Staff app β†’ Patient Communication β†’ Messages

A worklist of email-style requests from patients β€” each one with a subject, a status you set, and a topic when the patient was the one who started it, worked until somebody marks it Resolved. Any active staff member can read and answer any message; nothing here is hidden or reserved by role.

πŸ’¬
This is the only patient inbox There used to be a Chat tab beside this one β€” a running conversation, like texting, with nothing to close out. It was retired on 28 September 2026, so everything you write to a patient comes here, from "we're running fifteen minutes behind" to "here's what your insurance paid." A message arrives with a subject line and gets worked: you read it, you answer it, and then you say where it stands, so a colleague picking up tomorrow can see what's still outstanding.

The inbox

One list covering the whole practice, most recently active first, with anything holding an unread patient reply pulled to the top. Each entry is one stacked row, the way a mail app lays it out rather than spread across columns: the patient's name and the date on the top line, the subject under that, and the topic and status on a third line below (nothing at all in the topic spot on anything the practice started). A row with an unread reply in it shows the name and subject in bold, with a red "2 new" badge beside the subject counting what the patient has written that nobody here has opened. Nothing runs off the side of the screen, so a row reads in full at any window width, even with a message open beside it.

Above the list: a search box that matches on subject or patient name, plus a Filter by topic and a Filter by status dropdown. Search and both filters work together, so "show me everything about billing that's still Open" is two clicks. Clicking anywhere on a row opens that message beside the list, with the whole back-and-forth, a reply box, and the status control. Changing a filter doesn't blank the list out while it reloads β€” the rows you were looking at stay put until the new ones arrive.

Topics β€” a label, not a hand-off, and only on what the patient sent

A message the patient started carries one of four topics, the one they picked when they chose what they wanted to do: Prescription refill, Clinical question, Billing or insurance, or Feedback. The topic is there so you can sort and filter β€” it does not send the message to anybody, assign it to a role, or take it off anyone else's list. A billing question and a clinical question land in the same inbox, and whoever picks one up answers it. That's deliberate: a message routed to a role nobody happens to be checking is a message nobody answers.

A message you start has no topic, and there's nothing to pick β€” the topic spot on that row is simply empty. The topic answers "what kind of request came in?", so it only means something on something a patient sent us. The four wordings are all shapes of a patient's request too, so labelling "Your lab results are ready" a Clinical question would put our own message into the list you use to find patients' clinical questions to answer.

ℹ️
Filtering by topic hides the messages you sent Pick a topic in Filter by topic and you'll see only patient-started messages with that topic β€” messages the practice started have no topic, so they're not in any of the four. That's what you want when you're working through what patients have asked. To see everything again, set it back to All topics, which is how the inbox opens. Nothing is lost either way: a message you sent is always in All topics, always findable by subject or patient name in the search box, and always in the Filter by status views.

Status β€” you set it, and here's how a message moves

Every message carries one of three statuses. You set it, from the Status dropdown at the top of the open message. The dropdown itself just lists the three names; directly underneath it the screen spells out what the status currently selected actually means, and under that a line repeating the rule β€” so you never have to remember any of this from here.

StatusWhat it meansWhen you'd pick it
OpenIt needs an answer from us. Where every new message starts, and where one comes back to when the patient writes again.You don't β€” usually it's already there. Set it back to Open if you reopen something that turned out not to be finished.
Waiting on patientYou've answered and the ball is with them.You asked them a question, or you need them to confirm something, before you can finish.
ResolvedDone, nothing left to do. The app records who resolved it and when, and the patient's chart shows that name.When you're finished with it. Only you can do this β€” no message ever resolves itself.

The one thing that moves on its own: when a patient replies to a message you'd marked Waiting on patient, it goes back to Open by itself. It has to β€” we're plainly not waiting on them any more, and if the label stayed put, your Filter by status β†’ Waiting on patient list (the one you'd use to chase people up) would be full of patients who already wrote back.

Nothing else moves. Sending a reply does not mark a message Waiting on patient β€” that's still your call. A message nobody has touched in three weeks does not quietly go Resolved β€” that's precisely the one that gets dropped. And a patient replying to something you already closed out does not reopen it: it stays Resolved, and their reply shows up as a red unread badge instead, so you can decide whether it needs anything. Reopening a Resolved message yourself (setting it back to Open or Waiting on patient) clears the "resolved by" name, so the chart never shows a stale one.

πŸ’‘
"Unread" and "Resolved" are answering different questions They're shown separately on purpose, and they really can disagree. A message can be Resolved and still have an unread reply sitting in it (the patient wrote "thanks!" after you closed it out) β€” and it can be fully read and still Open, because reading something isn't answering it. So don't treat a cleared red badge as a cleared worklist: filter by Status: Open to see what actually still needs doing.

Starting a message yourself

New message, top right. Start typing a patient's name in the patient box and pick them from the results, write a subject and the message, and send β€” optionally attaching one picture or PDF up to 15MB. There's no topic to choose (see above): patient, subject, message. It lands in the same inbox as a patient-started one, and the patient sees it in their portal.

From a patient's chart

Every chart has its own Messages section, listing just that patient's messages with a count of how many aren't Resolved yet β€” handy right before a visit. The card starts folded up showing just the counts; click its header to open the list. It's a list, not a second reply box: click a subject and it opens on the Messages page with that message already selected, so replies and status changes only ever happen in one place. For a patient with a very long history it shows the most recent 200 and says so on the card β€” older ones aren't gone, they're findable by subject or patient name in the search box on the Messages tab.

Getting notified

The Messages tab carries its own red badge, counting messages holding a patient reply nobody has opened β€” one message with four unread replies in it counts as 1, because opening it deals with all four at once. The badge on Patient Communication in the sidebar, visible from every page, is that number plus β€” when your practice has texting β€” the number of text conversations with an unopened text (the SMS tab's own count). Opening a message clears its badge straight away, with no separate "mark as read" step. You don't need to refresh the page: when anything happens on a message β€” a patient writes in, or a colleague answers one β€” the list and any message you have open update on their own, usually within about ten seconds. That checking pauses while this tab is in the background, so a badge doesn't creep up behind a tab nobody is looking at; everything catches up the instant you click back onto this tab. That matters most when two of you are working the inbox at once: when someone else answers a message, it stops looking like it still needs you, without either of you reloading anything.

What the patient sees

In the portal, Messages is laid out like a mailbox: an Inbox of everything you've sent them and a Sent box of everything they've sent you, which they switch between at the top of the page. Tapping New message doesn't drop them into a blank box β€” it asks "What would you like to do?" and offers seven choices. Four open a message; the other three take them to the part of the portal that already handles that job, and no message is created:

What the patient picksWhere it goes
Refill a prescriptionA message, topic Prescription refill
A question for my care teamA message, topic Clinical question (the option itself tells them to call if it's urgent)
Billing or insurance questionA message, topic Billing or insurance
Share feedbackA message, topic Feedback
Request a copy of my recordsTheir own Health Record page, where they download it themselves on the spot
Correct something in my recordTheir Account page's correction request, which gets a written answer on the record
Book or change an appointmentTheir Appointments page

That last group matters to you as much as to them: a records request or a record correction sent as a free-text message would sit outside the request tracking you actually work from β€” records requests are on a legal clock (see Producing a patient's records) and corrections have their own accept/deny trail. Each of those three options says on screen where it's about to take them, so it reads as a shortcut rather than a brush-off. If a patient does write in asking for records or a correction anyway, don't answer it in the message β€” log the request properly on the chart and reply pointing at that, so it lands on the right worklist.

A message both of you have written in shows up in both their boxes, on purpose β€” it's one conversation, and an email program does the same thing with a thread you replied to. Anything they haven't read yet shows with its subject in bold, and the bold comes off once they open it. That's the only "new" marker on the page now; the old "2 new" count next to a subject is gone. They can read and reply and attach a picture or PDF. On a message you started they see no topic, the same as you do β€” just the subject and the conversation. They never see which of you answered by name: every reply from this side is signed Care team when a Dentist or Hygienist wrote it and Front desk when anyone else did, and their own replies say "You". You still see exactly which colleague wrote what on your side of the same conversation β€” so if it matters that the patient knows who they're dealing with, say so in the message itself rather than assuming your name is on it. Their own nav badge counts messages with something from you they haven't opened, and clears when they open it. Their page refreshes itself about every ten seconds, so anything you send lands in front of them without their having to reload β€” including a second or third message into a conversation they haven't opened yet. As on your side, that checking pauses while their browser tab is in the background and catches up as soon as they come back to it, so a patient who left the portal open in another tab sees your message when they return to it, not before.

Their mailbox lists their 200 most recent messages. A patient with more than that sees a quiet line under the list β€” "Showing your 200 most recent messages. Older ones aren't listed here β€” call the office if you need one." Nothing is deleted: the older ones are still on file and you can still see all of them from your side. If someone rings asking why they can't find an old message, that's why β€” look it up for them. A patient with fewer than 200 never sees that line.

⚠️
Patients can't see the status β€” so never refer to it when you write to them Open, Waiting on patient and Resolved are yours and yours alone. The patient's side of the page shows no status at all: it was taken off their view on 2026-09-28 because it confused more than it helped. Nothing changed for you β€” you still set it, still filter by it, and still work the list by it. What changed is the assumption behind a reply like "I've put this as waiting on you": they have no idea what that means, and nothing on their screen says it. If you need something from a patient, ask for it in the message, in plain words.
πŸ“§
Your message also sends an email heads-up β€” and never the content Whenever you start a message or reply to one, the patient gets a short "New message from [practice name]" email with a link into their portal, if they have an email address on file. It never contains the subject, the message, the topic, or anything clinical β€” email isn't a channel the practice controls once it's sent, and even a subject line can give away more than it should. They sign in to read it. Nothing for you to click; it's automatic. A reply from the patient emails nobody β€” you'll see it as a red badge instead.

One caveat on that heads-up: if email sending hasn't been set up for your practice yet (the Sodlcs team does this), or your practice has turned Outbound email off in Settings, no heads-up email goes out. The message itself still reaches the patient's portal perfectly well and their badge still appears, so nothing is lost β€” they just aren't nudged by email.

Team Chat

Staff app β†’ Team Chat, near the bottom of the left menu (just under Pearl AI)

Internal messaging between staff β€” not patient-facing, and a separate conversation system from Patient Communication above. No patient is ever part of a Team Chat conversation. Any active member of staff can use it, with nothing hidden by role.

πŸ’‘
You don't have to leave what you're doing Click Team Chat near the bottom of the left menu to open a small conversation panel without navigating away. It opens in the bottom-right corner and floats over the page with no backdrop behind it, so the rest of the page stays fully usable while it's open. Drag the panel by its header to move it anywhere on screen; click Minimize to put it away (reopen it from Team Chat in the sidebar) β€” next time it opens back in the corner, still on the conversation you had open, even if you've moved to a different page. Click the pop-out icon in its header for the full Team Chat page (below) when you want the complete roster/group-management experience β€” doing so also closes the panel. If Team Chat isn't in your menu at all, your practice has it switched off.

Starting a conversation

Type a name into the search box at the top of the list. Any existing conversation matching it filters the list as usual β€” and anyone you don't already have a conversation with shows up right below, under Start a conversation. Click their name to open a private 1:1 with them; picking someone you already talk to just opens that existing conversation, never a duplicate. Don't know the name, or how it's spelled? Click Message instead to browse the full staff list β€” check a name and click Start conversation. Anyone you already have a conversation with still shows up there too, just grayed out and marked "already in chat," so you're always looking at the complete roster. Click New group to create a named channel (e.g. "Front Desk," "Clinical Team") with several people at once β€” you're added automatically, so just pick everyone else.

In the small panel, the search box only filters the conversations you already have. Use its + button to pick someone from the full staff list for a 1:1, or the people icon to make a group. Searching a name to start a brand-new conversation works on the full Team Chat page.

Managing a group

Open a group and click Manage to rename it or change who's in it β€” this button only appears on a group, never on a 1:1 conversation. Any member can rename the group or check a box to add more people to it. Removing someone else from a group is limited to whoever created it β€” if you didn't create it, everyone else's checkbox is grayed out and can't be unchecked, though you can still add new people. You can always remove yourself: uncheck your own name and save to leave the group, which closes the conversation and returns you to your list. There's no way to delete a group outright, or to leave or hide a 1:1 conversation β€” a direct message, once started, stays in your list for good.

Finding a conversation & getting notified

The conversation list on the left β€” in both the small panel and the full page β€” sorts anything with an unread message to the top, with a preview of the last message. Your total unread count across every conversation shows as a red number on the Team Chat item in the left menu, visible from any page even while the panel is closed; opening a conversation clears its share of that count immediately.

Sending a message

Type in the box and press Enter to send β€” use Shift+Enter if you want a new line without sending yet. Every message shows who sent it, right below it next to the time, in every conversation β€” not just group ones. A message you sent shows Seen once the other person (or everyone else, in a group) has actually opened the conversation, not just when it arrives. Click Attach next to Send to add a picture or PDF, up to 15MB β€” the same limit and file types as a patient message attachment. A message needs text or an attachment, not necessarily both, so a bare picture with no caption is fine. An attachment shows as a small file-name pill inside the message bubble; click it to open the file in a new tab. One attachment per message β€” send another message for a second file.

PART 4 Practice management

Providers

Staff app β†’ Providers πŸ”’ Admin / Office Manager to manage

The schedulable dentists and hygienists β€” who shows up as a bookable provider on the Calendar.

Each provider's card shows their role in words β€” Dentist or Hygienist.

Anyone on staff can open this page and see the list. Only an Admin or Office Manager can add a provider, edit one, or take one off the schedule β€” everyone else sees the list read-only, and never sees an already-deactivated provider at all.

Adding a provider

Not every staff member is a "provider" β€” only a staff member whose role includes Dentist or Hygienist can be turned into one. Click Add provider and pick from the list of eligible staff; someone who's already a provider, or who doesn't hold one of those two roles, won't appear. If nobody is eligible, the dialog says so and offers a shortcut to Staff to add or re-role someone first.

Editing a provider

Click Edit on a provider's card. Three separate panels open at once, each with its own Save button:

  • Status β€” Active (schedulable) or Inactive (off the schedule). This is also how a deactivated provider is brought back: switch it to Active and save. Their name, email, and role still live on their staff record; edit those from Staff instead.
  • Billing identity β€” this dentist's individual (Type 1) NPI, sent as the rendering provider on every insurance-eligibility check run for them. A billing NPI and Tax ID can also be set here to override the practice-wide pair (Settings β†’ Insurance & Payers) β€” only needed if this dentist bills under their own identity rather than the practice's. Either NPI field must be exactly 10 digits; leaving one blank clears it.
  • E-prescribing routing ID β€” the identifier Weno (the platform's e-prescribing partner) assigns once this dentist is registered as a prescriber on Weno's own certification dashboard (Manage Account β†’ Manage Prescribers). An electronic prescription can't transmit for a dentist until this is filled in β€” see Prescriptions.

Time off

Still inside the Edit dialog, block out vacation or sick time for this provider with a start date/time, an end date/time, and an optional reason (e.g. "vacation") β€” the Calendar automatically refuses to book over it. If the provider already has appointments in that window, the time off is refused until you reschedule or cancel them β€” so move those patients first. Upcoming time off is listed right below the form; remove a block early with its trash icon. Adding or removing time off is for an Admin or Office Manager; everyone else just sees it on the Calendar.

Taking a provider off the schedule

Set Status to Inactive (above) and save β€” this takes them off the active schedule, e.g. because they've left the practice, without deleting their appointment history. Deactivated providers are hidden from the list by default; check Show inactive providers to find and reactivate one.

πŸ’‘
Good to know Deactivating a staff member who's also a provider automatically deactivates their provider record too β€” they'll disappear from booking pickers and the schedule in one action, not two.

Staff

Staff app β†’ Staff πŸ”’ Admin / Office Manager to manage

Every team member with access to Sodlcs Health, their role(s), and their login setup.

🦷
Providers brought over from your old software If your patients were moved over from previous practice software, the dentists and hygienists in it come with them. Anyone not already in Sodlcs is listed at the top of Staff under From your previous software β€” not active (Admins and Office Managers see it): they can't sign in or be booked, and their past work stays in their name. If one of them still works with you, click Still works here? Activate, enter their real email address, then send them a registration link from the staff list like anyone new.

The list is paginated, with First/Prev/Next/Last and page-number buttons at the bottom and a dropdown to change how many rows show per page. Click the Name column header to sort by it β€” or the Email header, if your role shows you that column; click again to reverse, and a third click returns to the default order (Name, A–Z).

Every staff member has a permanent Staff ID β€” a plain sequential number assigned once when their record is created, shown as its own column here and on their own My Profile page, separate from any internal record id β€” the same idea as Patient ID and Appointment ID. A provider's Staff ID is simply their linked staff record's number; there's no separate provider number.

Anyone on staff can open this page. If your own role is Dentist, Hygienist, or Front Desk, you see everyone's name, Staff ID, and role badges β€” and that's the whole table. There's no Email column at all for you, and no Registration link or Actions columns either: contact details, registration links, and the Edit/Deactivate controls are Admin/Office Manager business and simply aren't sent to anyone else, so you see a shorter table rather than empty columns.

Each role badge is color-coded for quick scanning: Admin in red, Office Manager in teal, Dentist/Hygienist in green, and Front Desk neutral gray β€” the same colors show up everywhere a role badge appears, including on My Profile.

How to use it

  1. Click Add staff member and fill in their name, email, and role(s) β€” check every box that applies (see the callout on Roles & permissions about holding more than one).
  2. Get them a one-time passkey setup link one of two ways: the clipboard icon to issue a link and copy it so you can send it yourself (text, printed, however you'd like), or the envelope icon to have Sodlcs Health issue one and email it to them directly β€” grayed out until the practice's email sending is configured. Every setup link is personal, works once, and expires after 7 days; issuing a new one replaces the previous link. Both actions are recorded in the Audit Log. Once someone has actually set up their passkey, these two icons gray out β€” there's nothing left to invite them to. If they've lost access at that point, use Reset access below instead. See Logging in for what happens on their end.
  3. Edit updates their name, email, roles, photo, or license number.
  4. Reset access (the key icon) is for a staff member who has lost their device and their backup recovery codes, leaving them with no way to sign in at all. It only appears for people who have already set up a passkey, and never on your own row β€” you can't reset yourself, so ask another admin or office manager if it's you who's locked out. An Office Manager can't reset an Admin β€” only another Admin can.
  5. Deactivate revokes their access immediately β€” see the note below.
🔒
Who can change whom (since October 2026)
  • Only an Admin can give or take away the Admin role. An Office Manager sees the Admin box greyed out, with "Only an Admin can give or remove Admin." underneath.
  • Nobody can change their own roles. On your own record every role box is greyed out ("You can't change your own roles.") β€” ask another Admin.
  • An Office Manager can't touch an Admin's account β€” no editing it, no Reset access, no new setup link and no deactivating. The app answers "Only an Admin can change, reset or offboard another Admin's account."
  • Nobody can deactivate themselves, and the practice's last active Admin can't be deactivated or lose the Admin role β€” give someone else the Admin role first. This keeps a practice from locking itself out by accident.

Resetting someone's access (lost device)

When a staff member loses their phone or laptop and can't find the backup recovery codes they saved at setup, an admin or office manager can start them over. Click the key icon in their row and you'll be asked to type a reason β€” at least a few words, like "lost her phone, confirmed by video call." That reason goes into the Audit Log permanently, and the practice's security official gets an email about it, so make it something you'd be comfortable explaining later.

Make sure you're really talking to them first. Resetting access is exactly what someone impersonating a coworker would ask you to do. Confirm by voice or video, or in person β€” not by replying to the email or text asking for it. A reset wipes their passkey, their recovery codes, and their password all at once, and signs them out of every device.

Once you confirm, Sodlcs Health emails them a fresh setup link and also shows it to you on screen with a Copy button. If your practice hasn't got email sending configured, that on-screen link is the only copy β€” hand it to them directly before you close the dialog. Like any setup link it works once and expires after 7 days, and opening it walks them through registering a new passkey and saving a new set of recovery codes.

If the person locked out is the practice's only admin, nobody inside the practice can reset them β€” that one needs Sodlcs Health support, who have a separate emergency procedure.

Staff photos

Upload or take a photo for any staff member from the edit dialog β€” shown next to their name throughout the app for quick visual ID.

License number (Dentist role)

When a staff member's roles include Dentist, a License number field appears on the add/edit form. It's attached to any Practice Library material they publish β€” set it before they start writing.

πŸ’‘
My Profile Any staff member can update their own photo, name, or email themselves β€” click your own name/avatar in the top-right corner of any page to open the account menu, then My Profile. Roles and license number stay admin-managed here on the Staff page, so nobody can grant themselves extra access.
🧭
Customize navigation (on My Profile) My Profile also has a "Customize navigation" section where you can reorder your own left sidebar or hide items you never use β€” drag a row by its handle to move it, or click its eye icon to hide it. The list here is grouped exactly like the sidebar itself (see The left menu, grouped), and dragging is confined to within one group β€” you can reorder the items inside, say, Billing & insurance among themselves, but you can't drag one of them out into Office. Hidden items don't disappear for good β€” they drop down into a separate Hidden list at the bottom with a one-click Restore, so nothing is ever lost. Click Save and your sidebar updates right away, no need to refresh or sign in again. This is entirely personal β€” it changes only what you see and in what order, never anyone else's sidebar, and it doesn't take away access to a page you hide (an admin/office-manager role still isn't needed to use it). If you've never opened this section, your sidebar just shows the normal default order with nothing hidden. And if a brand-new item is added to the app after you last saved your arrangement, it won't quietly go missing on you β€” it turns up at the bottom of its own group, below everything you'd already arranged inside that group, ready to be dragged wherever you want it.
⚠️
Deactivation is immediate Unlike a patient (which goes through a brief queued process), deactivating a staff member takes effect instantly β€” their next request is rejected right away. Clicking Deactivate asks you to confirm first, and the confirmation names the person, warns that they'll be signed out everywhere and won't be able to sign back in, and says their record and history are kept β€” read that name before you confirm. Records are never actually deleted, just marked inactive.

Bringing someone back (Deactivated staff)

If a deactivated staff member comes back β€” say a hygienist rehired after a year away β€” don't add them as someone new. At the bottom of the Staff page, click Deactivated staff to open the list (Admin and Office Manager only), find them, click Reactivate and confirm. They come back with the same Staff ID and history. Their old passkey doesn't come back with them: they now appear in the team list like anyone who hasn't signed in yet, so send them a new registration link from there. If they were a provider, their provider record is switched back to Active (bookable) too.

Only an Admin can reactivate an Admin β€” an Office Manager sees "Only an Admin can reactivate" on that row instead of the button.

Staff Time Clock

formerly "Time Clock" Staff app β†’ Staff Time Clock

Clock in, take a break, clock out, and request time off β€” every staff member's own hours and absences, in one place.

The page has two tabs: Time Clock (your clock and your shifts) and Time Off (requesting PTO, vacation, sick or unpaid days, and β€” if you're an admin or office manager β€” approving everyone else's).

Your clock

Open Staff Time Clock from the sidebar any time. The top card always shows your current status β€” clocked out, clocked in, or on break β€” with one button for whatever comes next. Clocking out while on break automatically ends the break too, so you don't have to remember to end it first. Your ten most recent shifts, with hours worked, are listed right below.

⏰
If you forget to clock out A shift that's still open keeps counting β€” the hours go up for as long as it stays open, and they feed the payroll summary while they do. Once one has been open longer than 16 hours, its hours turn amber and read "still clocked in", which almost always means somebody forgot rather than that they're still at the chair. The app won't close it for you on purpose: it has no way of knowing what time you actually left, and guessing would put an invented figure on a payroll record. Tell an Admin and have them correct it β€” only an Admin can change a shift's times.

Requesting time off

Switch to the Time Off tab. Pick a type β€” PTO, Vacation, Sick, Unpaid or Other β€” a first day and a last day, and optionally a short note for your manager ("family wedding"). Both days are included, so a single day off means picking the same date twice. Submit it and it goes straight to the admins and office managers, who see a count badge on the Staff Time Clock sidebar item until they've dealt with it.

Your own requests are listed below the form with their status β€” Pending, Approved, Denied or Cancelled β€” each with its own request number ("request #14") so you and your manager can talk about a specific one. While a request is still pending you can Cancel it; it stays on record as cancelled rather than disappearing, so it's clear it was withdrawn and not missed. Once it's been approved or denied it can't be changed or cancelled by anyone β€” if plans change, talk to your manager and file a new request for the dates you actually need. (If it was decided while you had the page open and you click Cancel anyway, the app says it can no longer be cancelled and to tell your admin or office manager.)

⚠️
Every day in the range counts The hours an approved request turns into on the payroll report cover every calendar day between your first and last day β€” weekends and days the practice is closed included. The app doesn't know which days you normally work, so it can't skip them for you. Ask for the days you'd otherwise have worked: if you're off Friday and back on Monday, request Friday, not Friday-to-Monday.
⚠️
You can't book the same day off twice If a day is already covered by one of your requests β€” whether it's approved or still waiting β€” asking for it again is refused, and the message tells you which request is in the way. Cancel that one first, or pick dates that don't overlap it. Days from a request you cancelled, or that was denied, are free to ask for again. This isn't red tape: the payroll report adds up hours by type, so a day covered twice would be paid twice, once as each type.

Finding out you've been approved or denied

You don't have to keep checking. As soon as a manager approves or denies one of your requests, the Staff Time Clock item in the left-hand navigation shows a count badge β€” that badge is yours, and it appears for every role, whether or not you can approve anyone else's time off. Open the Time Off tab and it clears itself; the request will be showing its new status, along with any note the manager left explaining the decision.

Your own list of requests collapses β€” click Your requests to fold it away, and the count beside it tells you how many are in there. It stays open by default, and a long history scrolls inside its own box rather than pushing everything else down the page.

The badge only counts decisions you haven't looked at yet, so it never shows a number you can't clear, and it won't reappear for the same decision later. A request you cancelled yourself never shows up there β€” you already know, you're the one who withdrew it. If you're an admin or office manager, this count is added to the number of requests waiting for you to review, so one badge covers both.

Approving time off (Admin / Office Manager)

On the Time Off tab, admins and office managers see a Pending requests section above their own β€” who asked, what type, the dates and how many days that is, and their note. Approve or Deny each one; the Review notes field is optional for both, but it's worth filling in on a denial β€” "denied" with no explanation is what generates the follow-up conversation. The section disappears entirely when there's nothing pending, which is the normal state. Whoever approved or denied what is recorded in the Audit Log. If two managers decide the same request at once, only the first counts β€” the second is told the request was already decided and to refresh the list. Likewise, clocking in twice (a double tap, or two tabs) gives you one shift, never two, and editing a shift someone else just changed asks you to refresh and try again.

You can approve your own request. In a small practice the office manager is often the only person who can, and a block there would make the feature unusable for them β€” the audit trail is what keeps it honest. Approving does not touch appointments already booked for that person on those days; check the schedule yourself before you approve.

All staff (Admin / Office Manager)

Admins and office managers additionally see every staff member's shifts (up to the 100 most recently started) on the same page, with no page-number controls here β€” for a longer look-back, use the Time Clock report in Reports instead. An Admin can also correct a shift using the edit icon β€” fix a forgotten clock-out, adjust a break window, or clear a field back to blank. Corrected entries are marked edited so it's clear the times were changed after the fact; there's no separate status field to set β€” clocked in/on break/clocked out is worked out automatically from which timestamps end up filled in. Deleting a shift entirely is Admin-only too, and permanent.

πŸ’‘
Good to know Hours worked automatically excludes break time β€” a shift's total is clock-out minus clock-in, minus whatever the break window was. Neither the your-shifts view nor the All Staff view on this page has a date-range control β€” both simply show the most recent shifts, going back up to 90 days. To look further back, or to see hours totaled by staff member, use the Time Clock report in Reports, which opens with a payroll summary: one row per staff member for whatever date range you choose there, with regular hours worked alongside approved PTO, vacation, sick, unpaid and other hours, and a total. Only approved time off counts toward it, and a request is trimmed to the range you asked for β€” a Monday-to-Friday request in a report ending Wednesday contributes three days, not five. How many hours one day off is worth is set once for the whole practice in Settings β†’ Performance & operations β†’ Time off & payroll (Admin only, 8 hours by default; set it to 10 if you run four-by-ten shifts). The shift-by-shift detail is still there, below the summary.

Moving from your old software β€” done for you

Handled by the Sodlcs team when your practice is set up

If your practice is moving to Sodlcs from other practice software, the Sodlcs onboarding team brings your patient list over for you. There is no import screen in your Sodlcs app β€” not in Settings, not for Admins β€” because an import adds your whole patient list at once, and we'd rather that were our job than yours. The full onboarding guide β€” every step, what to export, how long it takes β€” is at sodlcs.com/onboard-guide.

What it brings over today: patients β€” name (including middle name and the name they go by), date of birth, gender, mobile, home and work phone numbers, email, preferred language, address, Social Security number, emergency contact, guarantor, families (children and spouses on the same account as the person responsible for the bill), the medical alert, allergies, medications and medical notes, and the patient's physician. Anything else your old system kept that Sodlcs has no field for β€” a referral source, an old note β€” can come over too, read-only, on the patient's chart.

Providers and insurance can come over too. Your current dentists and hygienists are matched to the people already in Sodlcs, so their history joins them. Providers who have left arrive not active: they can't sign in or be booked, but their past work stays in their name (see Staff if one of them still works with you). Each patient's insurance arrives on their chart β€” primary, secondary and so on β€” and any insurance company you didn't already have is added to your list. Insurance a patient already had in Sodlcs is never changed. Appointments, past treatment, recall due dates, treatment plans and clinical notes can come over too (see Treatment plans for how imported plans look).

Balances, open insurance claims and payment plans can come over too. Each account starts in Sodlcs with what it owed (or was owed) on the day you switched, exactly as your old software's aging report showed it β€” the Sodlcs team checks the totals match that report to the cent before anything is brought over. On the account each balance shows as Balance from <old software> as of <date>, one line per age (current, 31–60 days and so on) and per family member, so your receivables age as they did before. The part your old software expected from insurance is marked Insurance pending. On the account ledger (and the Account section of a patient's chart) each such line carries a Brought over Β· 31–60 days tag with its age, and the account's insurance pending total is shown above the entries with what's due from the patient and a link to Insurance follow-up, where those claims are worked.

  • Until you turn on "We've switched over" (Settings β†’ Switching over from your previous software), these balances are for staff only: patients don't see them in the Patient Portal, can't pay them online, and no statement includes them β€” so nobody is billed by both systems. A statement you generate before then says so. The same goes, after you've switched over, for balances a later move brings over: they stay staff-only until your Admin confirms them, while the ones already confirmed stay visible to patients.
  • Turning "We've switched over" off again hides imported balances from patients again β€” except any a statement you've already sent listed: a patient is never told they owe less than the bill you sent them. And hiding never shows a patient a credit they don't have (if they've paid part of a balance that's hidden again, the Portal shows $0, not a credit β€” and their statement shows the payment with a line Payment applied to a balance brought over from your previous software, so it still adds up; the Patient Portal's account history shows the same line).
  • Voiding a balance brought over. On the account ledger, the Void button beside a balance brought over is greyed out, with the reason underneath, while: your Admin hasn't confirmed those balances yet; a statement listed it β€” sent, or waiting to be sent (correct it with an adjustment instead, so the next statement shows the change, or reject the waiting statement first); or it's the part expected from insurance and its claim is still open on Insurance follow-up (resolve the claim there instead).
  • After you switch over, the next statement lists each balance once, with a For column naming the family member, an Insurance pending line and Amount due from you. Patients never pay the insurance-pending part: Pay now in the Portal pays the amount due, and Take a payment starts from it too (you can still type more if the patient wants). If a patient starts Pay now twice at once (two tabs, or two family members), only one can pay what's due; if an online payment ever arrives for more than was due, it's still recorded, the extra is a credit on the account, and a warning alert on the patient's chart tells you to keep it or refund it.
  • A credit owed back to an insurer (your old software's aging report shows a negative insurance estimate on a credit balance) comes over as a credit on the account, marked Insurance pending. Staff see it; the patient sees only their own part of the credit.
  • Insurance follow-up (sidebar, under Billing & insurance β€” it appears while there's something in it) lists the claims that were still open in your old software, oldest first. They're never resubmitted. When the insurer pays, denies or you decide to write one off, an Admin or Office Manager opens it and clicks Resolve: enter what was paid and the check or EFT number; if it's less than expected, choose whether the rest goes to the patient or is written off (a write-off needs a reason). If an electronic remittance (ERA) arrives for one of these old claims, the ERA page offers it β€” Old claim from your previous software β€” and you post it from there; it's never posted automatically (and not at all once that ERA has been matched to a claim in Sodlcs). These payments and write-offs show in the Insurance Payments report (the claim reads Old claim C-…), and an ERA posted this way counts as posted in Payment Reconciliation.
  • Payment plans from your old software arrive as an alert β€” Payment plan from <old software>: $50.00 monthly, next due … β€” on the chart of everyone on the account, and above Check out on the schedule, so you keep collecting on it. Sodlcs doesn't run the plan itself; resolve the alert when it's paid off.
  • History from <old software> at the bottom of an account's page lists the old charges, payments and adjustments, for reference only β€” they aren't part of the balance.
  • Refunding a payment taken in your old software: refund it through the old card processor, then record it here with Refund on the account β€” the dialog asks for the old payment's reference when the account has a credit brought over.

Documents, x-rays and photos can come over too β€” scanned paperwork, signed consent forms, referral letters, insurance cards, x-rays and intraoral photos. Every file is checked by a virus scanner on the way in, and every file is kept: nothing is dropped for being an unfamiliar type.

  • Where they land. X-rays and photos go to the patient's Imaging, grouped as your old software grouped them; everything else goes to the chart's Documents, filed under a type (X-ray, Photo, Referral, Insurance card, Correspondence, Consent form and so on), named by its type and date, with your old software's description as its label. Both carry an Imported from <old software> tag. Files Sodlcs can't display (old Word files, for example) can still be downloaded.
  • Signed consent scans that say which treatment plan they belong to become signed consents on that plan and take it off Plans needing consent (see Consent & education).
  • Files Sodlcs couldn't place with certainty β€” no matching patient, an x-ray whose own details name someone else β€” are never attached by guesswork. They wait on Imported files to match for your team to file (see Imaging β†’ Imported files to match). The same file found under two different patients is kept for both and listed there for you to check.
  • The same file twice for one patient is kept once.
  • Files the virus scanner blocks, damaged files and files nobody can read are kept aside by the Sodlcs team and never put on a chart.
  • Patients don't see brought-over documents in the Portal until you've switched over and chosen which kinds to show (Settings β†’ Switching over). Your staff see them all in the chart straight away.

What we'll ask you for

  • A patient-list export from your old system, as a CSV (spreadsheet) file. Most systems call this a "patient report" or "patient export". Include each patient's ID from the old system β€” it's how Sodlcs recognises a patient it has already brought over, so nobody is ever added twice. If your system can include each patient's guarantor ID (the ID of the family member responsible for the bill), include it too β€” that's how families arrive on one account.
  • For documents and x-rays: your old software's image and document folders as ZIP files, up to 2 GB each β€” send as many as you need β€” and, if your software can produce one, its list of documents (which file belongs to which patient). Without that list, the Sodlcs team matches files by your old software's folder names and checks the matches before anything is filed.
  • Your old software's audit trail (the record of who looked at what), before you switch that software off β€” see Settings β†’ Switching over.
  • Occasionally, a quick answer about a patient who looks like someone already in Sodlcs β€” we'll ask rather than guess. A matching name alone is never treated as the same person.

How to get the file, and how to send it

  1. Get the export. Many practice systems can export a patient list from their reports area to CSV or Excel. If you're not sure how, call your software's support line and ask for "a patient demographics export as a CSV file, including each patient's ID" β€” the data is yours, and they may ask you to confirm the request in writing.
  2. Send it with the secure link we give you β€” never by email. The Sodlcs onboarding team sends you a private upload link. It opens a page (no login needed) that lists exactly what we need; drag your file in, then click I've sent everything. The file goes straight into encrypted storage. The link works for 7 days β€” if it expires, just ask us for a new one.
πŸ’‘
See the checklist any time We can also send you the "What we need from you" checklist on its own, before your upload link, so you can start gathering the export early.

What you'll see afterwards

  • Your patients appear in Patients like any other patient, each with a Sodlcs Patient ID.
  • Patients your old system marked inactive arrive archived, with the reason "Inactive in" and your old system's name β€” kept and searchable, just not in the everyday list. See archived patients.
  • If a row matched a patient you had already added, it was linked to that patient, and your patient's record was not changed.
  • Families share one billing account, in the name of the person responsible for the bill, so they get one balance and one statement. If a family member's responsible person couldn't be found in your export, that patient arrives on their own account β€” open their chart and use Account β†’ Move to another account to put them on the family's account any time.
  • Allergies, medications and medical notes are in each patient's Medical history (the allergy line also shows on the schedule's hover card), and your old system's medical alert appears as a chart alert at the top of the chart.
  • Anything else the team carried over appears on the chart in a "From <your old system>" card β€” read-only, labelled the way your old system labelled it. Values your old system had in a form Sodlcs couldn't use β€” a 7-digit phone number with no area code, a misspelled email β€” are kept there too, marked (as written), so nothing is lost; copy the right value into the patient's details when you next speak to them.
  • Admins and Office Managers can see every step in the Audit Log, listed under Sodlcs team with the name of the team member who took it.
ℹ️
Your data is safe while this happens Before anything is added, Sodlcs backs up your practice's data and checks that the backup restores; if it doesn't, nothing is imported. If an import ever has to be undone, the patients it added are taken out of use (never permanently deleted) β€” except any patient your office has already booked, billed, charted or edited, who is left exactly as they are. Brought-over documents and x-rays are taken off the charts the same way, never deleted β€” except any your office has opened, emailed, released to the patient, hidden, restored or filed since, which stay where they are.

Fee Schedules & Payers

Staff app β†’ Settings β†’ "Money & insurance" πŸ”’ Fee Schedules: Admin only πŸ”’ Payers: Admin / Office Manager

Insurers the practice is contracted with, and the rates they pay for each procedure code β€” this is what powers the live fee estimates shown while charting a procedure.

Both live inside Settings β†’ Money & insurance, but at two different permission levels. Fee Schedules moved out of its own sidebar entry in favor of a summary card here, showing a quick count of schedules on file with a Manage fee schedules button that opens the full, separate Fee Schedules pages β€” importing, reviewing, and editing rates all work as described below.

Who can do what

Action Front Desk / Dentist / Hygienist Office Manager Admin
Manage the payer list (add, Accepted, link, delete) No β€” can't open Settings' Money & insurance group Yes Yes
Edit the practice's own billing identity or its claims clearinghouse, on the same screen No No Yes
View, import, or edit Fee Schedules No No Yes

Payers

The insurers this practice is contracted with, managed on Settings β†’ Money & insurance β†’ Insurance & Payers.

  • Add payer β€” name only; its rates are added separately by importing a fee schedule, below.
  • Accepted checkbox β€” turning this off hides the payer from the picker shown when a patient's chart adds, edits, or links an insurance policy. A policy already on that payer keeps working normally, and if you're editing that specific policy its own payer stays selectable regardless.
  • Link / Change link β€” connects this payer to the shared insurance-clearinghouse directory. Type at least two letters of the insurer's name to search it, then pick a match. Only a linked payer can be verified automatically from a patient's chart (see Eligibility); an unlinked payer still works everywhere else, just without automatic verification. A linked payer that doesn't support real-time checks is shown as "(manual only)." Remove a link any time with the icon beside it.
  • Delete β€” removes a payer entirely. Blocked while a fee schedule or an active patient policy still references it: have an administrator remove the fee schedule(s) first (Fee Schedules is Admin-only) and/or mark those policies inactive first. A deactivated or historical policy doesn't block deletion, and keeps that payer's name on its own record either way. To stop offering a payer going forward without deleting it, turn its Accepted toggle off instead.

Importing a fee schedule

  1. From Settings β†’ Money & insurance, click Manage fee schedules on the Fee Schedules card, then Import fee schedule.
  2. Choose an existing payer, or add a new one on the spot by name.
  3. Optionally set a Plan type (HMO, PPO, or Other) β€” only needed when a payer publishes separate rate sheets per plan, so the right one can later be matched to a patient's plan.
  4. Optionally set a Provider (default "All providers"). Use this only when the practice is contracted with that payer at a different rate for one specific provider β€” that provider's own schedule is then used ahead of the practice-wide one when estimating for them.
  5. Name the schedule (e.g. "2026 PPO Schedule") and choose a file β€” a CSV, or a PDF, including a scanned one. The system reads the document and matches procedure codes to rates automatically, and for a PDF double-checks the count it extracted with a second pass, warning you if it looks short.
  6. The new schedule saves as a Draft β€” nothing in it drives a real estimate until it's reviewed and activated, below.

Reviewing a draft

A freshly imported schedule opens as a Draft with a banner reminding you to check it before activating.

  • Unknown codes β€” any code the system doesn't recognize is flagged "Unknown code." Click Add as code on that row to add it to the shared procedure-code list, using the description pulled from the document (edit it first if you need to, or type one if the document didn't include one) β€” this resolves the code everywhere it's used, not only on this schedule. When several unknown codes on the same schedule already have a usable description, an Add all N unknown codes button appears above the table to resolve every one of them in a single step; a code with no description anywhere in the document still needs adding one at a time so you can type a description for it, and a code that doesn't look like a real procedure code is skipped either way β€” both kinds are named for you so you know what still needs attention.
  • Rows without a usable price β€” a banner above the table says how many rows came in as something other than a number, broken down by kind (a range, "By report," an exclusion, and so on). Those rows are correct exactly as the payer printed them, but they can't drive a fee estimate: a patient estimate for one of those codes falls back to your practice's own standard fee instead, until you edit the row and type a real price.

Editing rates by hand

On the schedule's own page, once it's open:

  • Edit a row to correct a code, tier, or amount the import got wrong.
  • Delete a row (the trash icon) to remove one that shouldn't be there. It asks first ("Delete the D1110 rate?" β€” procedures already charted are unaffected), and click Delete rate to confirm. If the delete doesn't go through, the reason is shown in the same box.
  • Add code by hand, below the table, adds a brand-new row β€” for a code the import missed, or for a payer whose document didn't parse at all and is being entered entirely from scratch.

Activating, deactivating, and deleting a schedule

  • Activate schedule β€” switches a Draft to Active so it starts driving fee estimates. Only available once the schedule has at least one rate.
  • Deactivate β€” switches an Active schedule back to Draft, so it stops being used for estimates while you fix something, without deleting it.
  • Delete β€” removes the schedule and every one of its rates entirely, from either the schedule's own page or its row in the Fee Schedules list. This doesn't affect procedures already charted against it, only future estimates.
⚠️
If a document can't be read, the import is refused. Some payer PDFs use a layout the system can't interpret. Before anything is saved, the result is checked against the document itself: if most of the codes it contains didn't come through, or most rows produced something that isn't a price, the upload is rejected with a message saying what was seen, and nothing is saved. If you hit this, enter the schedule by hand instead, or ask the payer to re-export it as a CSV β€” the format least likely to be misread.
πŸ’‘
Good to know A payer can have more than one tier of rates from the same import (e.g. "Level 1"–"Level 4"). If a procedure has multiple matching rates, the fee estimate shown while charting displays the full range across every matching tier.

Practice Library

Staff app β†’ Practice Library πŸ”’ Writing: Dentist only

This practice's own education material, written and owned entirely by its own dentists β€” separate from the shared MedlinePlus-backed library (see Consent & education). Never shared with any other practice on the platform.

Who can do what

Only the Dentist role can publish new material here. Writing one requires checking an explicit attestation ("I am a licensed dentist and I am solely responsible for the accuracy of this content") β€” that confirmation, along with the dentist's name and license number (set on their staff profile β€” see Staff), is permanently attached to what they publish and shown on the card alongside the date.

Any staff role can browse what's published. Retiring and reactivating are both author-only, with one exception: an Admin can also retire another dentist's material (for example, after a compliance issue), but can't reactivate it or rewrite it β€” only the original author can bring it back. There's currently no way to edit a material's wording once it's published; to fix a mistake, retire it and publish a corrected replacement.

How to use it

  1. As a Dentist, click Write material, and type a title, a category (free text β€” there's no fixed list, so match the wording you already use), and instructions in English. Spanish instructions are optional.
  2. Check the attestation box and click Publish.
  3. It's now offered alongside the shared library anywhere staff share a material with a patient.
  4. Retire a material to stop offering it for new shares β€” existing patients it was already shared with keep seeing it. This takes effect immediately, with no confirmation prompt.
  5. Check Show retired materials to see retired items in the list (marked with a "Retired" badge) and, if you're the original author, to find one to Reactivate.

Training

Staff app β†’ Training

Build your own staff trainings β€” slides plus a quiz β€” assign them to staff, and see who's taken what.

Building a training

πŸ”’ Admin only
Click New training. A title is required before you can save; description and pass score are optional (pass score defaults to 80% β€” the minimum quiz percentage staff need to move on). Add as many slides as you need β€” each freely combines text, an image, and a video, not just one at a time (text plus a photo plus a video walkthrough can all live on the same slide), but every slide needs at least one of the three. For the image and for the video, independently, toggle Upload or Link: an upload is capped at 15MB (the same limit as every other file upload in this app β€” that includes an uploaded video, so a full-length one is better as a link, no size limit there) and only accepts JPEG/PNG/WebP for an image or MP4/WebM/QuickTime for a video; a link is a YouTube, Vimeo, Loom, or similar URL, with no file-size limit. Then build the quiz: add questions, give each at least two answer choices, and mark which one is correct β€” every question needs its own text, every choice needs its own text, and every question needs a marked correct answer before you can save. You can delete a slide down to a minimum of one, and a choice down to a minimum of two.

Editing a training later

πŸ”’ Admin only
Click Edit on any training in the library to change its title, description, pass score, slides, or quiz β€” everything is prefilled from what's already saved. For each slide's image and video independently, you'll see Keep / Upload / Link / Remove: Keep is the default whenever that slide already has an image or video and leaves it exactly as-is, Upload/Link replaces it with something new, and Remove clears it with nothing put in its place. You don't need to re-upload a file just to leave it alone β€” Keep does that for you. You can't choose Upload and Remove for the same slot at once, or set both an upload and a link at the same time.

The training library

The Training page's main list shows every active training you've built, each row naming its author, its slide count, its question count, its pass score, and how many people it's currently assigned to (for example, "By Dr. Patel Β· 9 slides Β· 8 questions Β· pass at 80% Β· 12 assigned"). A training marked Required shows a small "Required" badge right next to its title, with how often it repeats if you set one (for example "Required Β· every 12mo"). Retire (Admin only) takes a training out of circulation β€” the same button becomes Reactivate once it's retired, so there's one toggle rather than two separate buttons. The library list shows active trainings by default. To bring a retired one back, an Admin ticks Show retired trainings above the list β€” retired trainings then appear with a "Retired" badge β€” and clicks Reactivate on it. Its past completions are kept either way (see below).

Assigning it

πŸ”’ Admin only
Click Manage on any training in the library. The dialog lists your whole staff roster in a scrollable checklist β€” check off who should take it, and click Assign (disabled until at least one person is checked). Each name shows a Passed or Pending badge if they've already been assigned this training. Someone already Pending can't be selected again β€” they already have it to do, so there's nothing to re-send. Someone already Passed can still be reassigned (say, for an annual refresher β€” it adds a fresh attempt without erasing their earlier history), but a popup shows their prior score and pass date first and asks you to confirm β€” with an optional note field if you want to record why (e.g. "Annual refresher requested by office manager"). That note shows up later next to their entry in the same dialog, so anyone else checking on it can see the reason. The dialog also lists who's completed it, with the date they were assigned and, once they've attempted it, their most recent attempt's date and score.

Taking a training

Anything assigned to you shows up under My training on the Training page ("Nothing assigned to you yet" if there's nothing waiting), with a red count badge on the sidebar so you notice it as soon as you sign in. A row you haven't started shows Not started; one you've already attempted and not yet passed shows your last score with "try again" instead, and the button reads Retry rather than Start. A passed one shows a green Passed badge with your score and when you passed it.

Step through the slides β€” a "Slide N of M" counter tracks your progress, and the Back button is hidden entirely on a training with only one slide. Then take the quiz; you have to answer every question before you can submit it. If you don't meet the pass score, the result screen marks each question Correct or Incorrect β€” it does not show the right answers until you've passed (otherwise anyone could pass by copying them back in). Once you pass, the correct answer is shown next to anything you missed. From there, Retry quiz takes you straight back to the quiz itself, or use Review slides again if you want to go through the material once more first β€” no need to wait for anyone to reassign it either way. A passing result just shows a Done button back to the Training page. If your practice has set a name, logo, or phone number in Settings, you'll see it in a small strip above the slide β€” the same branding used on printed documents.

πŸ’‘
Good to know Training completions also show up as their own report type in Reports ("Training completions") so you can pull a list of who's taken what and print, download, or email it β€” it covers a date range (the trailing 12 months if you don't set one) rather than all-time by default. If a training is retired, it drops off everyone's "My training" list entirely β€” whether they'd already passed it or hadn't started yet β€” so nobody's nagged to complete something that's no longer offered. The completion record itself isn't deleted: it stays visible in that training's own "Manage" dialog and in the Training completions report.

Required trainings & the built-in HIPAA training

πŸ”’ Admin only
Open Edit on any training in the library and you'll see a Required checkbox (the New Training page doesn't have this β€” mark a brand-new training Required from Edit right after creating it). Checking it reveals a "reassign automatically every ___ months" field; a recurrence can only be set while Required is checked, and unchecking Required clears it again. A training marked Required shows a small "Required" badge right in the library list, next to its title, so you don't have to open each one to see which are mandatory.

Every assignment of a training β€” required or not β€” gets a due date exactly 30 days out. For a Required one specifically, once that due date passes with the assignment still unpassed, two things happen: the ordinary sidebar Training count badge (which just tracks anything pending) is joined by a separate overdue count, and that overdue count drives a red banner reading "You have N overdue required training(s)" that appears above every page in the staff app β€” not just Training β€” with a Complete it now link straight to the Training page. An optional (not Required) training past its due date stays in your Training count but never raises this banner.

Separately, a nightly job (around 4 AM) keeps required trainings current on its own, based purely on elapsed time rather than whether anything is marked overdue: it assigns any required training to a staff member who's never had it at all (this is exactly what makes a brand-new hire pick up every required training automatically, with no admin action needed), and it reassigns it once the recurrence window you set has passed since that person's last pass β€” so nobody has to remember to send an annual refresher by hand. Either way, the new assignment's note in the Manage dialog says why it appeared β€” "Required training (auto-assigned)" for a first-time assignment, or "Annual refresher (auto-assigned; last passed <date>)" for a recurrence.

One training, whose exact name is "HIPAA Privacy & Security Basics (required annually)," ships fully written inside the app but doesn't create itself for your practice β€” click Add required HIPAA training in the Training library header, next to "New training" (this button checks whether it already exists and disappears the moment it does, so it's a true one-time click). It builds, in one step: a 9-slide deck (why this matters, what counts as PHI, minimum necessary β€” including a direct mention of this practice's own Emergency access feature, keeping your sign-in to yourself, locking your workstation, careful talking/printing/emailing, handling setup links and outside callers safely, why the audit log protects you too, and what to do if something goes wrong) and an 8-question quiz, a required 80% pass score, marked Required with a 12-month recurrence already set, and assigned immediately to every currently-active staff member with the standard 30-day due date. After that it's an ordinary training in every respect β€” fully editable, reassignable, retireable β€” nothing about it is locked or protected from being changed to fit your practice.

Inventory

Staff app β†’ Inventory

Track supplies and stock levels, know who to reorder from, and get flagged automatically before something runs out or expires.

The list is paginated, with a Search box (name or SKU) plus the category, vendor, low-stock, and expiring filters, all combined with pagination. Click the Item, Quantity, Category, or Expiration column header to sort by it; click again to reverse, and a third click returns to the default order (Item, A–Z) β€” sorting works the same whether or not a search term or a low-stock/expiring filter is also active. Viewing the list, opening an item, and using the quick +/βˆ’ adjust buttons are open to any active staff member; Add item, Import CSV, and the Vendors button only appear for an Admin or Office Manager.

Adding an item

πŸ”’ Admin/Office Manager
Click Add item. Give it a name and a category β€” pick one from the dropdown of categories already in use, or click + New to type a new one (PPE, Restorative, Sterilization, whatever organizes your own stockroom) β€” and however much detail you want beyond that: a barcode, SKU, unit (box/case/each), starting quantity, a par level (the amount you want on hand when fully stocked), an alert threshold percentage if this item needs its own (see "Low-stock and expiration alerts" below), unit cost, an expiration date if it has one, and free-text notes. Pick an existing vendor from the dropdown or click New vendor to add one on the spot without leaving the form β€” a deactivated vendor can't be picked for a new item this way, though an item already pointing at one keeps it.

Vendors β€” contact and ordering info in one place

πŸ”’ Admin/Office Manager
Click Vendors at the top of the Inventory page to see every supplier on file β€” the same shared vendor list the Expenses page's own Vendors tab uses (see Expenses). Each one holds a contact person, phone, email, website, account number, a free-text field for however you actually place an order with them β€” "log into the vendor portal," "call the rep, Tue/Thu only," whatever's true for that vendor β€” and an optional default expense category, the exact same field and form the Expenses page's Vendors tab uses. It's never required from here β€” a vendor that only ever supplies inventory can go without one β€” but setting it here means every bill you log against that vendor (not just the first) has its category pre-filled automatically when you pick that vendor. Fill in the rest once per vendor; an item's own detail view shows that vendor's contact name, phone, email, and ordering notes (not website or account number β€” look those up on the Vendors screen itself).

To retire a vendor you no longer use, click Deactivate rather than delete it β€” a deactivated vendor shows a "Deactivated" badge next to its name, drops out of the vendor picker for new items and bills, but stays fully attached to whatever already references it, and can be Reactivated any time. Delete is for a vendor that was never actually used β€” it asks you to confirm, then permanently removes it, but is refused (with a message telling you to reassign or remove the reference first, or to deactivate instead) if any inventory item or any bill still points to it.

The quick "New vendor" link inside the Add item form itself is still just a name β€” click it, type the new vendor's name, and it's created on the spot without losing the item you were partway through entering. Go to the Vendors screen afterward to fill in that vendor's contact info and category.

Low-stock and expiration alerts

Every item shows a status badge: In stock, Low, Out of stock, or Not tracked if the item has no par level set at all (in which case quantity isn't compared to anything, no matter how low it is). For an item that does have a par level, status is based on how current quantity compares to it. By default an item alerts once it drops below 20% of par; an Admin can change that practice-wide default in Settings, and any individual item can be given its own stricter or looser alert percentage right on its Add/Edit form if it's more or less critical than the average supply. The same idea applies to expiration dates β€” items expiring within the practice's warning window (30 days by default, also editable in Settings) get flagged too. Both feed into a single combined count badge on the Inventory sidebar link β€” there's no separate Dashboard card for either β€” so an upcoming shortage or expiration is visible the moment you log in, not something you find out about by running out.

Logging usage and receiving stock

Anyone on staff can adjust quantity β€” using supplies is normal clinical work, not something that needs an Admin. Use the βˆ’/+ buttons right in the list for a quick one-at-a-time change, or open an item and use Adjust quantity for a bigger change with an optional note (negative to log usage, positive to log stock received). Every change is recorded β€” who did it, when, and why β€” visible under Recent activity on the item (the most recent 20 changes), so there's always a real trail behind the number. Once at least two usage entries land in a trailing 30-day window, the item detail also shows an estimated number of days remaining at the current pace of use, and a dollar figure for what's currently on hand (unit cost Γ— quantity) next to the unit cost itself.

Reordering

A low-stock item shows a Mark reorder placed button, pre-filled with a suggested quantity (enough to get back to par). Click it once you've actually placed the order β€” the item then shows "on order" instead of getting flagged again, so nobody double-orders the same thing before the first order arrives. When it shows up, open the item and click Mark received with the quantity that came in β€” this adds it to stock and clears the on-order flag in one step.

πŸ’‘
Good to know Already have a spreadsheet? Click Import CSV and upload it (under 5MB) β€” the importer recognizes common column names (name, category, quantity, par level, vendor, unit cost, SKU, unit) so it doesn't need to match exactly, as long as at least a name column is present. It skips anything already on file by name so re-running an import never duplicates items, and creates a bare vendor record automatically for any vendor name it doesn't recognize yet (fill in that vendor's contact info afterward from the Vendors screen) β€” including quietly attaching a row to a vendor you've since deactivated, which the import summary calls out separately so you know those items won't be offered again when adding something new by hand. "Low stock," "Inventory value," and "Full inventory" (every active item with its category, vendor, quantity, par level, status, and expiration) are all their own report types in Reports, with the same print/download/email options as every other report.

Eligibility

Staff app β†’ Eligibility, or any patient's chart β†’ Insurance

Verify a patient's dental insurance coverage without leaving the app. Each check is saved to the patient's chart with a date and a structured result.

The Eligibility page's patient list is paginated, with First/Prev/Next/Last and page-number buttons at the bottom (plus the usual page-size choice), and a search box (name, Patient ID, phone, DOB, or email) that reaches every matching patient across every page β€” the same search Patient List itself uses. Click the Patient column header to sort by it (the only sortable column here β€” the others are all derived from the latest check, not a stored value); click again to reverse, and a third click returns to the default order (A–Z).

Running a check

  1. On the Eligibility page, each patient row has a Verify button (and there's a Verify all shown button up top). Verify is grayed out, with an explanatory tooltip, when the patient's primary policy has no payer chosen. If the payer isn't linked for verification, or is marked "(manual only)", clicking Verify shows a short message under the button telling you to link the payer in Settings or record a manual verification instead. In a patient's chart, the Insurance section has a Verify coverage button on each policy.
  2. The result shows a coverage status β€” Active, Inactive, Not found, or Error β€” plus, when the payer returns them, how much of the annual maximum and deductible are left, and coverage percentages by category (preventive / basic / major / ortho). (The payer's full annual maximum and full deductible are saved to the check too, but today only the remaining amounts and the category percentages actually appear on screen.) On the Eligibility page the row briefly flashes green with a Verified just now note so you can tell a repeat check ran even when the status and date don't change. If the patient no longer has any active policy, the row shows No active policy instead of their last result.
  3. Every check stays on the chart. Open History on a policy to see past checks, who ran them, and when.
πŸ“§
The patient gets an email too Any automatic check β€” whether it ran against a real clearinghouse or, in a training environment, the built-in synthetic provider β€” also emails the patient a plain-language coverage status ("active and in force," "not currently active," "not found with this payer") if they have one on file β€” never the deductible/maximum/percentage details, and never sent at all for a check that errored out reaching the payer. A manual verification never sends this email.

When a payer can't be checked automatically

A payer can only be verified automatically once it's linked to the shared payer directory in Settings β†’ Insurance & Payers, and only if that directory entry itself supports real-time verification β€” some directory entries are marked "(manual only)" and linking to one of those doesn't turn on automatic checking. For an unlinked payer, one marked manual-only, or one that's paper-only, use Record manual verification instead: coverage status (Active, Inactive, or Not found β€” there's no Error option here, since you're the one reading the result off the payer's portal), annual maximum and how much is left, deductible and how much is left, and a required notes field explaining what you found. It's saved to the same history, marked as a manual entry.

Settings β†’ Insurance & Payers

πŸ”’ Admin only
The practice's group billing NPI and Tax ID β€” the identity sent on every automatic check β€” is Admin-only to view or change; an Office Manager doesn't see this part of the screen at all.

πŸ”’ Admin/Office Manager
Managing the payer list itself is open to an Office Manager too: add an insurer the practice works with, toggle whether it's accepted, link it to a directory entry, or unlink it. Un-toggling "accepted" is the ordinary way to drop a payer β€” a separate Delete permanently removes the payer record itself, and is refused if a fee schedule or a patient's policy still references it.

The Providers screen (Edit β†’ "Billing identity") also lets you set an individual dentist's own billing NPI and Tax ID, and that override is genuinely used on a check. There's still no "run this as Dr. X" picker anywhere β€” instead the app works the treating dentist out for itself, from the patient's soonest still-upcoming scheduled or confirmed appointment, and sends that dentist's own billing identity if they have one on file. If they don't, or the patient has nothing booked, the check falls back to the practice's billing identity above. So setting a dentist's billing identity does change what goes out β€” worth knowing if a payer starts rejecting checks for one dentist and not another.

ℹ️
In a training environment, verification runs against a built-in provider that returns realistic synthetic results, so the feature can be tried out with no clearinghouse account. Connecting to a real insurance clearinghouse for a live practice isn't available yet β€” automatic verification returns an error in a live practice until that connection is built; Record manual verification works either way. Verifying coverage never changes anything in the clinical record β€” it only records what the insurance covers.

Patient Billing β€” the account ledger

formerly "Billing" Staff app β†’ Billing & insurance group β†’ Patient Billing, and any patient's chart β†’ Account

Every patient is billed under an account β€” a guarantor (the person responsible for the bill) plus everyone billed under them. The account carries one running balance and a complete, add-only ledger of charges, payments, adjustments and refunds β€” patient-side money; insurer-side money lives in Claims. (The Patient Portal's own "Billing" page, where a patient views their own balance, is unrelated and keeps its name.)

Accounts & families

A new patient automatically gets their own account, with themselves as the guarantor. To put family members on one shared account, open a patient's chart, go to the Account section, and use Move to another account (the Accounts tab on the Patient Billing screen is for finding an account and opening its ledger). Charges and payments already posted stay on whichever account they were posted to; only new entries follow the patient. An account left with no patients and a zero balance closes itself, and an Admin or Office Manager can also close or reopen an account by hand at any time (closing by hand still requires it to be empty and at zero balance). The Account section's Edit action on the guarantor lets you point the account at a different family member as guarantor (their contact info takes over the account), or set an outside guarantor's own name, email, and phone if the responsible party isn't a patient at this practice.

The ledger

Each line is one of: charge (what's owed goes up), payment, adjustment (a credit or debit β€” a courtesy discount, a write-off, a correction), or void (reverses an earlier entry), or refund (money handed back to the patient). There are two ways to give money back, and which one you use depends on how the money came in. A card payment the app itself took is reversed with the Refund action on that row of the ledger page (see "Refunding an online payment" below), which sends the money back through Stripe and voids the original payment rather than posting a refund line. Cash or a cheque handed back at the desk is posted with the Refund button in the chart's Account section instead, which does write a refund line of its own. Every line shows the account balance as it stood right after it. Nothing in the ledger is ever edited or deleted β€” to fix a mistake you void the wrong entry (which reverses it) and post a fresh correct one, so the history always stays intact. The ledger shows the most recent 500 entries; there's no way to page further back yet on an account with more history than that.

A patient chart's Account section holds all of an account's everyday actions in one expandable card: Record payment (cash, check, or a card run on the practice's own terminal), Take a payment (a real card charge processed online through the app itself β€” see "Taking and refunding an online payment" below), Misc charge, Move to another account, and β€” for an Admin or Office Manager only β€” Adjustment and Refund. Refund here is for money that did not come in by card: choose cash, check or other, the amount, and a note. It stays greyed out unless the account is actually in credit β€” you can never hand back more than the practice is holding β€” and hovering it says so, and points you at the ledger page's own Refund for a card payment. The card also shows this patient's five most recent ledger lines with a link to the full account ledger. The full chronological ledger for an account β€” with a per-row Void (and, on an eligible payment, a per-row Refund) β€” is on its own page, reached from the Account section or the Patient Billing screen's Accounts tab; an Admin or Office Manager also finds a Generate Statement button in that page's header.

Billing a completed procedure, step by step

  1. A clinician charts the procedure on the patient's chart with a CDT code β€” first as Planned, then Completed once the visit has actually happened (it can't be marked Completed before its appointment's time). Charting a procedure, and presenting or accepting a treatment plan, never bill anything on their own.
  2. The moment the procedure is Completed and has no live charge against it, it shows up on the Ready to bill tab. A red badge on the Patient Billing nav item counts how many are waiting.
  3. Each row shows the charge amount and where it came from β€” the payer's fee schedule for an insured patient, or the practice's standard fee otherwise (see below).
  4. Post the row (change the amount first if you need to), or use Post all. Posting writes one charge to that patient's account ledger.
  5. Later, record the patient's payment against the account from the chart's Account section β€” or take one online yourself, or let the patient pay it themselves from the Portal (see below).

Ready to bill

The Ready to bill tab on the Patient Billing screen lists every completed procedure, charged within the last 12 months, that hasn't been charged yet β€” a completed procedure older than that no longer appears here. A row for an insured patient carries a small "has insurance" label next to their name. How the charge amount is priced: if the patient has active primary insurance whose payer has a fee schedule rate for that code, the procedure posts at their plan's allowed amount (matched to the treating provider and plan type, the same way a treatment-plan estimate is worked out) and the row names the payer. A patient with no insurance β€” or a code no fee schedule covers, or one whose standard fee has been deactivated β€” posts at the practice's standard fee (the cash price), shown as “Practice fee”. If neither is on file the row has no amount and you type one when posting. Post all clears the list in one go; any row with no fee from either source is skipped (reason “no-fee”) and stays on the list. There's no separate write-off line β€” the charge is already the allowed amount (insurance payments are posted in a later billing phase). Posting a charge for an insured patient reminds you it only affects their account balance β€” filing the insurance claim itself is a separate step (see Claims). Voiding a charge puts its procedure back here. A practice can also turn on auto-posting so a charge posts by itself the instant a procedure is marked Completed β€” that's an off-by-default setting with no on-screen toggle yet, and it's a different setting from the one that controls auto-posting an insurance payment from a remittance (see Insurance Remittance). Why is there no charge for a procedure? It isn't Completed yet, a charge was already posted for it, or there's no fee from either source and it's waiting for a typed amount. The red badge on the Patient Billing nav item that counts what's waiting refreshes on its own every few seconds, as well as instantly after you post anything.

Standard fees vs. fee schedules

A fee schedule (Fee Schedules screen) belongs to a payer β€” it's that insurer's contracted / allowed rates, and it's used both for coverage estimates and as the actual charge amount for a patient insured by that payer. A standard fee (Settings β†’ Money & insurance β†’ Standard fees, Admin only for reading, adding, importing, changing, or removing one) is the practice's own cash price for a code β€” the charge for a patient with no insurance, or a code no payer fee schedule covers. It is not the default price for everyone; an insured patient is charged their payer's allowed rate. Keeping both means you always bill the amount that's actually collectible, so there's never a phantom “full fee minus write-off” pair of lines. You can change the amount on any individual charge, and editing a standard fee never changes a charge that's already posted. Instead of typing every code, use Import from a fee schedule to seed this cash-price list from an uploaded fee schedule's amounts (descriptions come from the CDT catalog; a code with no flat dollar amount on that fee schedule β€” a percentage-based or not-covered row β€” is skipped rather than imported as zero; codes that already have a fee are skipped unless you tick “overwrite”; and for a code with more than one rate on the uploaded schedule, the flat rate wins if there is one, otherwise the highest tiered rate is used), then edit any of them. You can also ask Pearl — “add a standard fee for D2750 at 300” — and it opens this screen with the code and amount filled in for you to review and save.

Taking an online payment

A patient can pay what they owe from the Portal's Account Balance page β€” a Pay now button appears whenever there's an amount due, opening a card-entry form; it charges the amount due: the balance less any part still expected from insurance (and, for a practice that moved over from other software, less balances not shown to patients yet). Staff can also take a real card payment from a patient chart's Account section: click Take a payment, right next to Record Payment and reachable by the same role tier, to open the same kind of card-entry form β€” the amount starts at what the patient owes (the balance less anything still expected from insurance) and you can change it β€” less for a partial payment taken over the phone, or more if the patient wants to pay toward the insurance portion too β€” and you can email the patient a receipt. Either way, clicking through opens Stripe's own secure card-entry form right inside the dialog β€” Sodlcs never sees or stores the card number, expiry, or CVC; that information goes directly to Stripe. Getting a practice connected to Stripe in the first place is a one-time setup step β€” see Settings β†’ Online Payments.

Nothing shows up on the account the moment a payment is started: a charge only posts to the ledger once Stripe confirms it actually went through, so a declined or abandoned card leaves no trace behind and nothing to undo. Because that confirmation arrives a little after the card is submitted, the screen says "payment submitted, updating your balance" for a few seconds while it quietly checks again in the background, then confirms once the new balance appears β€” no need to close and reopen anything. Staff can never hand-type an online-card payment into the ledger the way cash or check payments are recorded β€” that entry is only ever created automatically, by Stripe confirming a real payment.

If that automatic confirmation is ever delayed (Stripe's notification to Sodlcs occasionally arrives late), a payment Stripe actually took will still show up: the moment staff open it for a refund, or look it up from the ledger, Sodlcs double-checks directly with Stripe in the background and catches the ledger up automatically once Stripe confirms the card really was charged β€” nothing manual to do. A payment Stripe genuinely never completed (a declined or abandoned card) is unaffected by this; it simply never appears, exactly as before. Since October 2026 Sodlcs also runs this check by itself in the background every 10 minutes, so a payment whose confirmation went missing is caught up within about half an hour even if nobody opens it β€” money that was really taken is never left off the ledger. That holds even if the account was closed in the meantime: a payment Stripe actually took is always recorded.

  • The smallest card payment is $0.50 (Stripe's minimum), and amounts are whole cents β€” "12.345" is refused with a message rather than rounded. An amount under $0.50 is refused before anything is charged.
  • Taking another payment right after one. Once a payment is confirmed (or the screen has stopped waiting), closing the Take a payment dialog resets it, so the next time you open it you start fresh. While a payment is still being confirmed, closing and reopening it shows "still processing" instead β€” so nobody charges the card twice. The Portal's Pay now works the same way.
  • Closing an account or disconnecting Stripe while a card payment is in progress is refused β€” the app says a card payment is still in progress. Wait a few minutes and try again.

Refunding an online payment

To reverse an online card payment, use Refund on that row of the account's ledger (Admin or Office Manager only) β€” it's the only way to reverse one; an online card payment has no Void button. Clicking it asks for confirmation, explaining plainly what happens: a real refund is sent through Stripe, immediately, back to the exact card that was originally charged, and the account's balance updates to reflect it. This cannot be undone from inside the app β€” once confirmed, the money is already on its way back to the cardholder. Refunds are full-amount only; there's no way to refund part of a payment. The refund always goes back through the same Stripe account the payment was taken on.

Refunding a payment from a closed period. If the original payment falls inside a day or month that's already been closed in Day Close, the payment line can't be voided (that would change the closed period's numbers). Instead, the ledger gets a new Refund line dated today, reading "Refund β€” online card payment", linked to the original. The balance comes out the same; the closed period stays exactly as it was closed. Once a payment has been reversed this way, its row no longer offers Refund or Void β€” there's nothing left to undo.

Receipts

Every time an online card payment succeeds β€” whether a patient paid it themselves from the Portal, or staff took it in a patient's chart β€” a receipt happens automatically, with nothing for anyone to click. If the payer has an email on file (the patient's own email for a Portal payment, or whatever staff optionally typed into the Email receipt to field when taking the payment), Stripe emails that person its own receipt directly. Separately, a PDF copy β€” with the practice's own name and branding, the amount, who paid, and the date β€” is saved into a patient's chart, under that patient's Documents, so front desk staff can find and print one even if no email was ever sent. For a Portal payment this always happens, since the patient who paid is unambiguous; for a staff-initiated payment, the receipt goes to the account's guarantor patient if one is on file β€” if the guarantor isn't a patient here (a valid setup, e.g. a parent paying for a child), a copy is saved on every patient on the account, showing the guarantor's name as the payer. A refund gets the exact same automatic treatment as its own, separate document, clearly labeled "Refund receipt" (not a payment receipt) and saved alongside the original β€” the original is never touched, deleted, or altered.

ℹ️
Testing with a Stripe test-mode/sandbox account? Stripe does not send its automatic receipt email for test-mode payments at all β€” that's Stripe's own behavior for every business using Stripe, not something specific to this app, and not a bug. Everything else (the balance updating, the PDF landing in Documents) still works normally in test mode; only Stripe's own automatic email is skipped until the practice is taking real, live payments.

A payment or refund receipt doesn't have to be handled the moment it's created β€” it stays in the patient's Documents for later. Open the Documents section on the patient's chart, click the receipt's row, and the detail popup shows a View button (opens the PDF in a new browser tab β€” print it from there using the browser's own print function) and an Email button, which appears only on payment and refund receipts, released images and records exports β€” ordinary uploaded documents don't get one. Clicking Email opens a small form with one optional field: leave it blank to send to the patient's own email on file, or (Admin or Office Manager) type a different address to send it there instead β€” a separate channel from Stripe's own automatic receipt email, and it works independently of whether that Stripe email ever went out.

Who can do what

ActionWho
Post a charge, record a payment, take an online payment, view an account's ledgerAny active staff
A patient paying their own balance onlineThe patient themselves, from the Portal, for their own account only
Post an adjustment, void a ledger entry, refund a payment (an online card payment from the ledger page, or cash/check from the chart's Account section), generate a statement, close/reopen an accountAdmin or Office Manager
Look up, add, edit, delete, or bulk-import standard feesAdmin only
ℹ️
Voiding an entry needs a typed reason, and is refused if that entry falls inside an accounting period that's already been closed (see Day Close) β€” post a fresh correction dated today instead. Printed/emailed statements are covered in Patient Statements. Insurance claims and insurance payments are handled elsewhere, not on this screen: see Claims for tracking a claim through to the payer's decision, and Insurance Remittance (ERA/EOB) for receiving, matching, and posting a payer's electronic payment (an EOB) as real ledger entries here. Nothing on this screen changes a patient's clinical record. A charge's description never shows the CDT code to a patient on their own Portal account balance β€” only the plain-language description β€” but staff still see the code here in the ledger.

Claims

Staff app β†’ Claims, and any patient's chart β†’ Insurance claims

Track an insurance claim from the moment it's built out of already-charged procedures through to the payer's final decision β€” a real status history instead of a spreadsheet. A claim can go out either way: electronically, through a clearinghouse (see "Submitting a claim electronically" below), or manually for a payer that only accepts claims by mail or through its own provider portal β€” staff record what actually happened the same way they'd track it on paper. Claims is a feature Sodlcs switches on per practice (it also covers ERA / Insurance Payments and Insurance follow-up) β€” if it isn't in your menu, it's switched off for your practice.

πŸ’‘
Finding a claim "Filter by patient" searches by patient name across every matching claim, not just whichever page is on screen. The list is paginated. On the All claims tab, click the Claim ID, Patient, Payer, Rank, Date of service, Total billed, or Status column header to sort by it; click again to reverse, and a third click returns to the default (newest first). Click anywhere on a claim's row to open it β€” not just the patient's name.

Every claim carries a permanent Claim ID, assigned once when the claim is built and never reassigned no matter how its status changes afterward. It's shown as its own column on the All claims tab.

Building a claim

The Ready to claim tab on the Claims screen lists every completed, already-charged procedure whose patient has active primary insurance and isn't already on a claim β€” grouped by visit: one patient, one treating provider, one date of service (the date as your practice's calendar has it). Each group shows the date and the provider's name. A red badge on the Claims nav item counts how many are waiting. Each group has a Build claim button, which puts every procedure in that group on one claim β€” a claim covers one provider and one date of service, so if two providers saw the same patient on the same day, you'll see two groups and build two claims. If a procedure shows under the wrong provider, check which provider it was charted under and ask your Admin if it needs correcting. The claim locks in the payer, subscriber, and billing details from the policy, and the code, tooth, and fee from each procedure's own posted charge, right at that moment β€” a later edit to the policy or the fee schedule never changes a claim that's already built.

ℹ️
Editing a draft claim While a primary claim is still Draft, its detail page has an Add procedure button β€” it lists other charged procedures for the same patient, provider, and date of service that aren't already on a claim β€” plus a Remove button on each line item. Remove is hidden on a claim's last remaining line item, and there's no button to delete a draft claim outright β€” to abandon one entirely, Void it instead (see below); a Draft can be voided just like any other claim. Once a claim moves past Draft, its procedures are locked. A secondary claim's procedures are always locked, even while it's still Draft β€” they have to exactly match its primary claim's, so there's no Add/Remove on a secondary claim's detail page at all. And once you've filed a secondary claim, its primary is locked too β€” you can't add or remove its procedures until that secondary claim is voided, because the two have to cover exactly the same procedures.

You can also start a claim from the patient's own chart: the Insurance claims card there has a Start a claim button alongside their claims list, offering only that patient's claimable procedures. Because one claim covers one visit (one date, one provider), if they have claimable procedures from more than one visit it asks Which visit? first, listing each as date Β· provider with how many procedures it holds. The Ready to claim tab only ever proposes primary claims β€” a secondary claim is always filed from its primary claim's own page (see "Secondary claims" below).

Ready to claim (and the Start a claim button, which reads the same list) looks back 12 months, so a completed, charged procedure older than that no longer appears as claimable β€” well past any payer's filing deadline.

Status, step by step

StatusWhat it means
DraftStill being built or edited. Can be reopened from Ready, or voided outright.
ReadyFinalized and waiting to go out. Can still drop back to Draft for a correction before anything is sent.
SubmittedSent to the payer or clearinghouse.
AcceptedThe clearinghouse or payer has acknowledged receipt and the claim has entered processing β€” this confirms it was received, not that a payment decision has been made.
RejectedSent back before any payment decision, usually for a fixable problem like a bad member ID. Fix it, mark Corrected, then Resubmitted β€” it goes through the same statuses again from there.
AdjudicatedThe payer made a payment decision β€” paid in full or in part.
Paid / Partially paidNormally set automatically once a matched electronic remittance is reviewed and posted through Insurance Remittance. Staff can also set either one by hand, for a payment that arrived outside the app.
DeniedThe payer refused payment outright. Mark Appealed, then Resubmitted, to contest it.
AppealedBeing contested. Reachable from Denied, but also directly from Adjudicated, Paid, or Partially paid β€” for example to dispute an underpayment on a claim the payer already paid.
VoidAbandoned for good β€” see below.

A claim's own detail page only ever shows the status buttons that are actually legal from wherever it is right now, so you can't accidentally skip a step. Because a remittance can sometimes reach the practice before an explicit acceptance notice does, a few extra direct jumps exist behind the scenes β€” for example a claim can occasionally go straight from Submitted (or Resubmitted) to Paid, Partially paid, or Denied without passing through Accepted or Adjudicated first. You don't need to memorize these; the buttons on screen always tell you what's actually available.

In the ordinary case, that's Draft β†’ Ready β†’ Submitted β†’ Accepted β†’ Adjudicated β†’ Paid or Partially paid, with Rejected and Denied as the two side branches that lead back in through Corrected/Appealed and Resubmitted. Void abandons a claim for good, from any status β€” no coming back from it β€” and releases its procedures back onto Ready to claim. Voiding always needs a typed reason, and only an Admin or Office Manager can do it.

Submitting a claim electronically

Once a claim is Ready (or Corrected / Appealed, ready to go out again), its detail page shows a Submit electronically button. Clicking it sends a real electronic claim through whichever clearinghouse this practice has set up, and the claim's status moves forward on its own based on what comes back β€” accepted moves it to Accepted, rejected moves it to Rejected (same fix-it-and-resubmit flow as before, it's just the vendor telling you instead of a payer letter). If the vendor hasn't answered yet, a Check status button appears so you can check back later instead of waiting for it to happen automatically.

This doesn't replace the manual status buttons β€” if a payer only accepts claims by mail or through their own provider portal, keep using those the same way as before. Which clearinghouse this practice submits through (and its sign-in credentials) is set up once by an Admin, in Settings β†’ Insurance & payers β†’ Electronic claims submission. Every attempt to submit or check on a claim is logged in that claim's own Submission history list, which names the clearinghouse used for each attempt β€” so you can see which one handled a particular claim without needing to hit Check status first.

ℹ️
If "Submit electronically" gives you an error instead of sending the claim, it's a setup problem, not something wrong with the claim itself β€” nothing was sent, and the claim's status hasn't changed. Two messages you might see: "This practice has no real clearinghouse configured" or "...is missing its API key" both mean an Admin needs to finish setting up the clearinghouse in Settings before this claim (or any claim) can go out electronically β€” use the manual status buttons in the meantime. "This claim's status just changed β€” refresh and try again" means someone (possibly you, in another tab) already submitted it a moment ago β€” refresh the page to see the current status. If clicking Check status tells you the claim "was submitted through" one clearinghouse but the practice is "now configured as" a different one, it means the clearinghouse was switched in Settings after this particular claim went out β€” an Admin needs to switch it back before this older claim's status can be checked.

Printing a claim

The Print button on a claim's detail page opens a formatted, practice-branded summary of everything a claim form would need β€” payer, subscriber, provider, and each service line β€” in a new window you can print or save. It isn't the official ADA claim form itself, but it's a complete record of the same fields, useful for mailing a paper claim or attaching to correspondence with a payer.

Attachments

Upload supporting documents β€” an x-ray, a narrative β€” right from the claim's detail page. Any active staff member can upload or hide one, as long as the claim isn't voided. The upload dialog accepts PDF, JPEG, PNG, or WebP files up to 15MB; the attached list shows each file's name, with a View button that opens the file in a new tab (each opening is recorded in the audit log).

An attachment is never deleted β€” it's the record of what the insurer was sent. Hide asks you to confirm ("leaves this claim but stays on file; an admin can restore it") and lets you note why. An Admin sees Show hidden attachments under the list, with when each was hidden and the reason, and can View one before deciding to Restore it to put it back on the claim.

Secondary claims

Once a primary claim reaches Adjudicated or Denied, if the patient also has an active secondary policy, its detail page shows a File secondary claim button. It builds a new claim for the exact same procedures against the secondary policy β€” you can't pick a different set. If the patient has only one active secondary policy it's selected for you automatically; with more than one, a dropdown lets you choose. A required field records what the primary payer already paid, straight from their EOB (0 is a valid answer if they paid nothing), for reference alongside the new claim. The button stays visible even after a secondary claim has already been filed for that primary β€” clicking it again just tells you one already exists, since a primary claim can only ever have one secondary claim against it.

Who can do what

Any active staff member can build a claim, edit a draft's procedures, change a claim's status by hand (other than voiding it), submit electronically, check on a submission, upload or hide an attachment, and file a secondary claim. Voiding a claim needs an Admin or Office Manager. Setting up the clearinghouse connection itself, in Settings, needs an Admin.

ℹ️
A claim itself never touches a patient's account balance directly β€” that stays exactly as Patient Billing posted it from clinical charges. Posting the insurance company's own payment is a separate capability β€” see Insurance Remittance (ERA/EOB) below.

Insurance Remittance (ERA/EOB)

Staff app β†’ ERA / Insurance Payments

When an insurance company sends its electronic payment notice (an ERA, sometimes called an 835) for a claim you already submitted, the system reads it, figures out which claim it belongs to, and lets staff post the actual payment to that patient's account β€” without anyone re-typing numbers off an EOB. A red count badge on the ERA / Insurance Payments sidebar item shows how many remittances currently need attention (the Dashboard itself carries no separate stat card for this β€” see Dashboard). Still missing: a Settings control to let a certain match post completely by itself β€” until that's built, even a certain match still waits in the worklist for a staff member's one-click Post.

A worked example

Sarah comes in for a cleaning and a filling β€” $300 billed total, and she pays nothing at checkout since it's going to insurance. The front desk submits the claim electronically. The insurance company decides: pay $80 in full for the cleaning, and for the filling pay $120 while writing off $60 as a negotiated discount, leaving Sarah owing $40 ($80 + $120 + $60 + $40 = $300, the original billed amount). Instead of a paper EOB, the insurance company makes this remittance available electronically. Every 15 minutes, the system checks for new remittances automatically β€” no one has to open anything β€” finds this one, and recognizes it as Sarah's claim with total certainty, since it was submitted electronically. Because it's a certain match, it shows up in ERA / Insurance Payments under "Needs attention" as ready to post. An office manager opens the batch, sees the $200 payment and $60 write-off lined up against Sarah's claim, and clicks Post (confirming once) β€” that posts a $200 insurance Payment line and a $60 Adjustment line, and Sarah's account correctly shows $40 owed, without anyone re-typing a number. The one thing that doesn't happen yet is that step happening with no click at all β€” the Settings control to let a certain match like this post fully unattended doesn't exist yet.

Reviewing and acting on a remittance

Opening ERA / Insurance Payments shows a worklist of remittance batches, split into two tabs: Needs attention (anything not yet posted β€” a certain match waiting on a Post click, or a less-certain one waiting on a manual match) and All batches (the full history, including everything already posted or reversed). Opening a batch lists every claim remittance inside it with its match confidence and current status. An Admin or Office Manager can match an unmatched or uncertain remittance to the right claim by hand β€” and can also re-match one the system matched itself, right up until it's posted, since a certain match is never separately confirmed by a person. (Since October 2026 matching is limited to the same two roles as posting; other staff can open and read a batch, but the match controls aren't shown to them.) Once a remittance is posted it can't be re-matched β€” if two people act at once, the second gets "This remittance has already been posted and can no longer be re-matched."

When the insurance company takes a payment back. A reversal in a later ERA undoes the earlier posted payment and write-off, and the claim goes back to Adjudicated, so the corrected payment (usually in the same ERA) can post normally. If the original payment sits inside a closed period (see Day Close), it isn't voided β€” a new Refund (for the payment) and an opposite Adjustment (for the write-off) are posted dated today instead, so the closed period never changes.

Each tab's worklist is paginated, with First/Prev/Next/Last and page-number buttons at the bottom. On the All batches tab, click the ERA Batch ID, Payer, Trace number, Payment date, Amount, or Status column header to sort by it; click again to reverse, and a third click returns to the default (newest first). Needs attention stays a plain worklist with no sort controls. On either tab, click anywhere on a batch's row to open it β€” not just the payer's name.

Every batch carries a permanent ERA Batch ID, shown as its own column on both the Needs attention and All batches tabs β€” but sortable only on All batches, since Needs attention has no sort controls at all.

Each remittance that's ready offers one money-moving action (a payment for a claim from your previous software can instead be posted to its insurance follow-up item β€” see the table below), restricted to Admin/Office Manager and confirmed before it touches the ledger. Usually that's Post. But when the payer has sent a takeback β€” they're reclaiming money they already paid β€” that arrives as its own separate line, badged Payer takeback, and the button reads Process reversal instead. Processing it voids the original payment and adjustment entries for that claim (the originals stay visible with a matching void line beside them β€” nothing is deleted). If no posted payment can be found for the claim, nothing is voided and the takeback goes back to Needs attention so someone can work out where it belongs, rather than quietly reporting success. Once a remittance has been posted, it's finished β€” there's no further action on it.

Batch and remittance statuses

Every batch carries its own status, independent of the status of the individual claim remittances inside it:

Batch statusWhat it means
Received / ParsedThe remittance just arrived and is being read β€” passes through in moments, so you're unlikely to ever see a batch sitting in either of these.
Ready for reviewNothing in the batch has been posted yet.
Partially postedSome of the batch's remittances are posted; at least one still isn't.
ReconciledEvery remittance in the batch is posted, and the total posted (plus any provider-level adjustments) matches the check/EFT amount the payer sent exactly. This is the finished state.
ErrorThe payer's own numbers don't add up β€” the payments listed for each claim plus any provider-level adjustments don't equal the check/EFT amount the payer says it sent (it's also shown if reading the remittance stopped partway). It appears as soon as the batch arrives and stays Error however much of it you post. There's currently no on-screen explanation of the gap beyond this badge; compare the batch's remittances and provider-level adjustments by hand against the payer's own documentation before posting.

Each individual claim remittance inside a batch has its own, simpler status:

Remittance statusWhat it means
Needs reviewNot yet matched confidently enough to post β€” waits for a staff member to match it.
Ready to postMatched to a claim (automatically or by hand) and waiting for the one-click Post (or, for a payer takeback, Process reversal).
PostedDone. No further action is possible on it.

A remittance sitting in Needs review shows the specific reason why, right on its row:

Review reasonWhat it means
No matching claim was foundThe patient or claim couldn't be identified at all.
Matched claim, but only with medium confidenceA likely claim was found, but not confidently enough to post untouched.
Matched claim, but only with low confidenceA possible claim was found, but the match is weak.
More than one claim could plausibly matchTwo or more claims tied for the best score β€” never treated as confident, however high that tied score is.
Payer sent a reversal, but the original posted payment couldn't be foundA payer takeback arrived for a claim with no matching posted payment to void β€” match it to the right claim, or check whether the original payment was ever posted here.
A claim from your previous software β€” matched to its insurance follow-up itemA payment for a claim brought over from your old software. Open Match claim and use Post to this follow-up item (Admin/Office Manager) β€” see Insurance follow-up.
Posting hit an unexpected errorSomething about the claim's own status blocked posting; the rest of that batch still processes normally.

Per-line detail, provider-level adjustments, and insurance reports

Each remittance row in the batch detail screen has a Show detail toggle that expands it in place to show every service line the payer sent back β€” procedure code, billed/allowed/paid amounts, a Denied badge with the payer's reason for any line that was denied, and every contractual adjustment the payer applied to that line (its code and amount) β€” all without leaving the worklist.

Below the claim remittances, a batch can also carry provider-level adjustments β€” amounts the payer netted against the whole check rather than against any one patient's claim, such as a takeback for a prior overpayment, interest, or a capitation deduction. These are listed separately, by reason code and amount, and never appear on any individual patient's balance.

For reporting across remittances rather than one at a time, four sources are now available from Reports β†’ Build a custom report's source dropdown: Insurance β€” payments (each posted insurance payment/adjustment ledger entry), Insurance β€” ERA report (each remittance's outcome and amount by payer), Insurance β€” payment reconciliation (what a payer allowed vs. what was actually received and posted, with any difference called out), and Insurance β€” denials (every denied service line with its reason and billed amount).

What determines whether something's a certain match

  • Certain match β€” any claim submitted electronically through the app, or a claim where the payer, service date, and billed amount all line up exactly. This is the only case that's ever eligible to post with a single click and no manual matching.
  • Anything less than certain β€” always waits in "Needs attention" for a staff member to review and match it by hand before it can be posted.
ℹ️
What this does and doesn't do Real and working: receiving remittances, reading them, matching them to the right claim, the ERA / Insurance Payments worklist and detail screen, manual matching, and β€” for Admin/Office Manager β€” posting a ready remittance, or processing an incoming payer reversal/takeback the same way, each behind a confirmation step. There is no way to have a match post completely unattended β€” every remittance, however confident the match, waits for a staff member's click before it posts.

Patient Statements

Staff app β†’ Statements, and any account's ledger page

A statement is a snapshot of one account's ledger activity since its last statement β€” the previous balance, everything that's happened since, and the new balance β€” rendered as a real PDF. Every statement is generated as a draft, reviewed by staff, and only then printed and/or emailed to the guarantor. Nothing reaches a patient without a human looking at it first. Statements is a feature Sodlcs switches on per practice β€” if it isn't in your menu, it's switched off for your practice.

Generating a statement

From an account's ledger page (open it from a patient chart's Account section, or the Patient Billing screen's Accounts tab), an Admin/Office Manager clicks Generate Statement. The new statement covers everything posted since the account's last sent statement (or since the account was opened, for a first statement) and starts out as a Draft β€” generating one never changes anything on the ledger itself, it only reads what's already posted there.

A patient chart also carries its own collapsible Statements section, separate from the ledger β€” a plain list of every statement ever generated for that patient's account, each one a link straight to its review page, with its new balance and status shown beside it. This is a quick read-only list rather than the place statements are generated or acted on.

Reviewing, approving & rejecting

Every draft statement waits in the Statements worklist's Needs Review tab for an Admin/Office Manager to open it and read the actual rendered PDF before deciding. From there:

  • Approve β€” optionally add a short note first (e.g. "Thank you for your prompt payment"); if you do, it's printed right on the statement. Moves the statement to Approved, ready to send.
  • Reject β€” for a statement that shouldn't go out as-is. This is final: a rejected statement is never sent, and the next one generated for that account still picks up from the same point as if the rejected one had never existed, so nothing gets silently skipped.

An Approved statement that hasn't been sent yet isn't locked in β€” its review page offers a Cancel Approval button alongside Print and Email, which rejects it the same final way as rejecting straight from Draft. Use it for an approved statement staff decide, before printing or emailing it, shouldn't go out after all.

Printing & emailing

Once a statement is Approved, an Admin or Office Manager can Print it (the PDF opens in a new browser tab, ready to print or save), Email it to the guarantor's address on file, or do both β€” they're not exclusive. Either one marks the statement Sent. Emailing needs the practice's mailer configured; printing always works regardless. Other staff can open the Statements list and read a statement, but can't approve, reject, print or email it.

What the email contains: only that a new statement from the practice is ready (subject: "A new statement from <practice> is ready") and a link to the Patient Portal. Since October 2026 it no longer shows the balance or the statement number β€” anyone glancing at the patient's inbox learns nothing about their account β€” the statement itself (a full billing history) is only ever viewed over a signed-in portal session, never carried inside an email. An Admin can switch on Attach the statement PDF in Settings β†’ Security & compliance β†’ Security & sessions if the practice would rather send the document itself.

A guarantor can opt out of statement emails entirely from their own Patient Portal account page. Clicking Email on an opted-out account sends nothing, but still marks the statement Sent β€” the statement itself is still generated and visible once the patient signs in, it simply never goes out by email. If a guarantor has no email address on file at all, Email is refused with an error instead; Print is unaffected either way.

Every statement's letterhead carries the practice's logo and name, with the practice's address and phone (from Settings β†’ Practice branding) on the line beneath β€” that's the remit-to address and the number a patient calls with a billing question, so it's worth making sure both are filled in. Leave either blank and it's simply left off the statement.

The Statements worklist

The list is newest first, and the search box above it filters β€” across every matching statement, not just whichever page is on screen β€” by guarantor name or Statement ID (type it bare or as #47, the way it's printed on the statement itself), handy when a patient calls quoting the number on their bill. It no longer matches a formatted date string β€” that only ever matched whatever page happened to be loaded, and the Period column is still shown on every row for browsing by eye. The list is paginated. Click the Statement ID or New Balance column header to sort by it; click again to reverse, and a third click returns to the default order (newest first).

Staff app β†’ Statements defaults to the Needs Review tab (every Draft statement waiting on a decision); switch to All Statements for the complete history of every statement ever generated, whatever its status. There's no separate history page β€” this is both. Each row's first column is that statement's own Statement ID (a link to the review page), followed by the guarantor name, period, new balance, and status.

An account can only have one statement in progress at a time. While an earlier one is still Draft, or Approved but not yet sent, Generate Statement is refused with a message naming that statement β€” send it, or reject it (or use Cancel Approval), then generate again. This also means double-clicking Generate Statement can't produce two bills for the same window.

Automatic monthly statements

A practice can turn on Settings β†’ Security & compliance β†’ Security & sessions β†’ Automatic monthly statements to have drafts generated for every eligible account on the 1st of each month, without anyone clicking Generate Statement by hand β€” every draft it creates still lands in Needs Review like any other, waiting on the same Approve/Reject decision. Off by default.

Whenever that automatic run has happened, the Statements worklist shows a summary bar above the tabs: when the last run started, how many statements it generated, how many it skipped, and how many failed, plus the run's overall outcome. View details opens a list of every account the run touched with its own outcome (generated, skipped, or failed) and the reason, so a skipped or failed account can be tracked down without hunting through the worklist.

ℹ️
What this covers Generating a statement from an account's ledger, the Draft β†’ review β†’ Approved/ Rejected β†’ Sent flow, printing, and emailing; patients can see their own sent statements (and view/download the PDF) from the Patient Portal's Billing page; and the automatic monthly statements job above runs on its own once a practice turns it on.

Charting

Staff app β†’ Charting πŸ”’ Dentist / Hygienist / Admin

Every past visit with nothing charted for it yet, across the whole practice, in one place β€” the other half of "things still owed on the record," alongside the practice-wide Clinical Notes worklist below. Front desk and other non-clinical roles don't see this item in the sidebar at all, not just a locked page.

A visit lands here once its own scheduled time has passed, as long as it wasn't Cancelled or a No-show β€” a cancelled or no-show visit never happened, so there's nothing to chart β€” and stays there until at least one procedure is charted against it. Shows the trailing 12 months by default β€” a visit needing to be charted further back than that isn't a realistic worklist item; widening that window isn't something this page itself offers a control for. Click any entry to jump straight to that appointment on the Calendar page, already open, where "Chart a procedure" is available. A red count badge on the Charting item in the sidebar shows how many are waiting.

The list itself shows, for each waiting visit:

ColumnShows
PatientWho the visit was for.
ProviderWhich dentist or hygienist the visit was booked under.
Visit dateThe appointment's own date and time.
TypeThe appointment type it was booked as (blank if none was set).

When there's nothing waiting, the list reads "Nothing waiting to be charted β€” everything's caught up."

The list holds the 500 most recent visits. Only when there really are more does a note at the top read "Showing the 500 most recent visits that still need charting β€” older ones appear as these are charted."

Clinical Notes

formerly "Unsigned Notes" πŸ”’ Dentist / Hygienist / Admin Staff app β†’ Clinical Notes

Every clinical note still sitting in Draft status across the whole practice, in one place β€” so nothing slips through without being signed off. Front desk and other non-clinical roles don't see this item in the sidebar at all, not just a locked page.

Click any entry to open that patient's chart, where you can find the note under Clinical notes and sign it β€” it doesn't jump to the note itself or scroll to it.

The list shows, for each draft note:

ColumnShows
PatientWhose chart the note is in.
Note typeWhat kind of clinical note it is.
CreatedWhen the draft was started.
PreviewA truncated snippet of the note's own text, so you can often tell what it's about without opening it.

When nothing's waiting, the list reads "No unsigned notes β€” everything's caught up."

The list is oldest first and shows up to 500 drafts at a time; the preview is the first part of the note only β€” the full text is one click away in the chart. Signing a note in the chart takes it off this list (and lowers the sidebar count) straight away, without a reload.

If your practice moved over from other software, a box at the top of this page may also say how many imported accepted plans still have no signed consent form β€” click it for the list (see Getting a signed consent for an imported accepted plan under Treatment plans). It's gone once every one is signed.

πŸ’‘
You'll know without opening it A red count badge on the Clinical Notes item in the sidebar shows how many are waiting, the same way Patient Communication, Training, Team Chat, and Inventory flag what needs you. This is specifically about Clinical notes (the ones with a real Draft β†’ Signed workflow, from a patient chart's own "Clinical notes" section) β€” Doctor's Notes are a separate, simpler feature with no signing step at all, so adding one never shows up here.
ℹ️
Two things share a name β€” don't mix them up This page (sidebar: Clinical Notes) is the practice-wide worklist of every patient's unsigned drafts. A patient chart's own Clinical notes section (see Procedures, tooth chart & clinical notes) is just that one patient's notes, signed and unsigned alike β€” the two aren't the same view of the same data.

Audit Log

Staff app β†’ Audit Log πŸ”’ Admin / Office Manager

A complete trail of every access to patient information and every clinical or administrative action, browsable by category instead of dumped all at once.

Why it exists

Every time anyone β€” staff, a patient through the portal, an AI feature, the Sodlcs team (for example while setting up your practice, bringing your patients over from your old software, or resetting a locked-out admin's passkey β€” shown as Sodlcs team with the team member's name), or the system itself running an automated job β€” views or changes PHI (protected health information), it's logged here automatically: who (or what), what, when, and on which record. This isn't optional or something staff turn on; it happens for every single access, with no exceptions.

πŸ›‘οΈ
Refused access is logged too, not just successful access. If a patient signed in to the portal tries to open a record that belongs to a different patient β€” by following an old link, a forwarded one, or an address they shouldn't have β€” they are turned away, and the attempt is written here as a denied cross-patient access, naming the record they reached for and whose it actually was. The patient is told only that the record wasn't found; they are never told it exists or whose it is, so nothing is given away to whoever tried.

One of these on its own usually means nothing β€” a stale bookmark, a link someone forwarded in a family email. Several of them from the same patient account, aimed at different records, is worth looking into: that is the pattern you would expect if someone other than the patient had got into their portal account. If you see that, treat it the way you would any other suspected account compromise and involve whoever handles security for the practice.

Landing on the page

The page opens on a landing view β€” the tools below (Verify chain and export, Security review, Amendment requests, and Records requests), and below all of them, the category tiles. Nothing from the log itself is loaded until you pick your way down into a category, at which point the landing-view tools step aside and only the entries table shows β€” go back to Categories in the breadcrumb to bring them back.

  1. Pick a category (e.g. Patients, Scheduling, Insurance β€” 30-plus exist; see the full list below) β€” each tile shows how many entries it holds and how many distinct action types are inside.
  2. Pick a subcategory (e.g. Viewed, Added, Edited, Removed) to see just that slice.
  3. The entries table shows every column described below.

Use the breadcrumb at the top (Categories β†’ category β†’ subcategory) to step back up a level.

πŸ’‘
Good to know The "staff user" column can show blank on older entries recorded before the system logged who made every request β€” there's no data to recover for those. Every entry from here on records who did it.

What gets an entry β€” and what doesn't

An entry records someone actually being shown a patient's information. It does not record a screen checking whether anything has changed. Several screens refresh themselves every few seconds β€” the chair status board, the badge numbers in the sidebar, the "is the X-ray finished yet" check that runs while an image is being captured β€” and those carry no patient information at all, so they are deliberately not logged. A screen refreshing itself is not somebody looking at a record, and logging every refresh would bury the entries that matter under thousands that don't.

Where a screen that does show patient information refreshes on a timer β€” a patient's imaging history while an X-ray is being taken, the prescriptions list in a chart, or the patient portal's own Insurance, Notes, Consent Forms and Statements pages β€” the first view is logged, and so is any later view once what's on screen has actually changed. The identical refreshes in between are not. So if you ever need to answer "who looked at this patient's x-rays", you get one entry per viewing rather than hundreds of identical rows describing a single person sitting at a single screen. Two different people viewing the same record are always two separate entries, however close together.

What the entries table shows

ColumnShows
IDThe entry's own permanent, sequential number (see below).
WhenThe exact date and time it was recorded.
ActorA badge for who did it: staff, patient (through the portal), system (an automated job β€” a nightly sweep, a scheduled batch run, and the like), ai_system, Sodlcs team (a named member of the Sodlcs team, e.g. while bringing your data over), or Practice upload link (a file sent through the upload link Sodlcs gave your practice).
ActionThe specific action recorded, e.g. patient.viewed.
PatientThe patient (or patients) the entry involves, by name with the id beneath it. An action that named several patients at once β€” a practice-wide sweep, or an AI briefing β€” shows as "N patients," with the full list on hover.
Staff userThe staff member who did it, by name with the id beneath it (for a Sodlcs team entry, the team member's name with "Sodlcs team" beneath) β€” blank for an entry with no staff actor (a patient's own action, or an automated job).
TargetThe type and id of the record the action was about.
DetailsWhatever extra detail the specific action recorded β€” for example, which fields changed.

Sort, search, and pagination

Click the ID, When, Actor, Action, or Target column header to sort by it; click again to reverse, and a third click returns to the default (newest first). The list is paginated with First/Prev/Next/Last and page-number buttons, and a Rows per page selector (5/10/25/50/100), same as every other list page in the app. The Search box above the table matches three things: type a number to find that exact entry by its ID; type text and it matches the action, a staff member's name or email, a Sodlcs team member's name, or β€” for an entry that directly names a patient β€” that patient's name (patient names are matched from the second letter typed, and a very common name matches the first 50 such patients β€” type more of it to narrow it down). Looking through the Audit Log is itself recorded in the Audit Log. Search stays scoped to whichever category/ subcategory you're currently browsing, so searching inside "Patients β†’ Viewed" only searches that slice, not the whole log.

πŸ’‘
The ID is permanent Every entry's ID is assigned once, in the order it was written, and never changes or gets reused β€” the same permanent-sequential-ID idea Patient ID, Claim ID, and the others use, except here it's also the number the tamper-evidence chain (below) is built on, so it already existed before it became something you could search or sort by.

Sign-ins are in here too

The Sign-in & Sessions category records every successful sign-in (passkey or password), every sign-out, every failed attempt (with the username tried and the IP), every account lockout, every verification code sent, and every passkey enrolled or reset. Five failures on one username in a minute is exactly the pattern this exists to surface.

Every category

Every action anywhere in the app falls into one of these categories (a category only appears once something in it has actually happened):

Sign-in & SessionsPatientsInsurance
Medical History & AlertsConsent FormsDocuments
Clinical RecordTreatment PlansBilling
Insurance ClaimsInsurance Remittances (ERA)Education Materials
Team ChatReportsTraining
SchedulingEligibilityAI Search
Fee Schedules & PayersInventoryBusiness Ledger
StaffProvidersPharmacies
Patient medicationsPatient allergiesPrescribing
ImagingAudit LogPatient Rights (Privacy Rule)
Practice SettingsPatient Portal ActivityPractice Analytics
MessagesText messages (SMS)Patient calls
Data Migration

An action the category list doesn't yet recognize still shows up rather than disappearing β€” it lands in a catch-all Uncategorized category so nothing is ever silently hidden. Entries belonging to a feature the practice no longer has get their own Retired features category instead, so a large number there is history rather than something to chase.

ℹ️
Two similar categories β€” pick by the screen you used Each category is named after the screen it records, so Messages is the patient inbox (threads started, opened, replied to and resolved) and Team Chat is staff-to-staff messaging. The retired patient Chat feature no longer has a category of its own: entries recorded before it was removed still appear, now under Retired features. They used to sit under Uncategorized, where on a practice with any Chat history they were the single largest number on the page β€” which read as thousands of unclassified record accesses when it was simply a feature that had been removed.

Tamper-evidence: "Verify chain" and the checkpoint

Every entry is chained to the one before it with a cryptographic hash, and the database itself refuses to change or delete an entry β€” the log is append-only. At the top of the Audit Log page, Verify chain re-checks the whole chain and reports "Chain intact" (or the first broken entry, if anything was ever rewritten), the number of entries verified, and a checkpoint: the number and hash of the latest entry. Some very old entries predate the chain itself; the check counts those separately rather than treating them as broken links. You may also see a grey note such as "1,418 entries from before October 4, 2026 were linked out of order by a since-fixed timing issue β€” this is not tampering." Before that date, two entries saved at the same moment could be linked in the wrong order. Each of those entries is still checked and still matches its own hash, and everything from before that date was sealed (counted and fingerprinted) when the fix was applied and is compared with that seal on every check β€” so the note is for your information only and does not mean anything was changed. If a note instead says the entries from before that date "no longer match the seal", the result reads "Chain BROKEN": an older entry was removed, added or changed outside the app. Copy the checkpoint somewhere outside the app now and then (a ticket, a notebook, a locked file) β€” if history is ever rewritten behind the scenes, every hash after the altered entry changes, and a saved checkpoint proves it.

Exporting a date range

For a records request, an audit, or the practice's own retention archive: pick a From and To date (up to one year at a time), CSV or JSON, and Export range. The file lists every entry in that window, oldest first, including each entry's chain hashes. The export itself is recorded in the log. The practice's stated retention commitment is at least six years, configured in Settings β†’ Security & compliance β†’ Security & sessions; audit entries are never deleted by the application.

Security review panel

On the landing view, a Security review panel does the "is anything unusual going on" reading of the log for you. Toggle between Last 24h, Last 7 days, or Last 30 days (24h is what it opens on) and it re-checks ten specific things every time you switch the toggle β€” nothing is cached:

What it checksSeverityFlags when
Unusually many charts openedWarningOne staff member reads more than 40 different patients' records in the window (opening the same chart twice only counts once)
Access outside normal hoursInfoRecords read more than an hour outside the practice's configured Hours & closures β€” or, if no hours are set, between 9 PM and 6 AM
Full SSN revealsInfoEvery one, always β€” each shown with who and how many times
Repeated failed sign-insWarning5 or more failed attempts on one username in the window
Account lockoutsWarningAny username actually locked (15 minutes) in the window
Emergency access usedCriticalEvery single break-glass grant, every time β€” always flagged, on purpose, so it always gets a second look
Bulk exportsInfoEvery audit-log export, every full record a patient downloaded themselves from the portal, and every records export a staff member produced from a chart
Emergency passkey reset by a platform operatorCriticalA staff member's sign-in was reset from outside the practice β€” confirm the practice actually asked for it
Staff sign-in reset by an administratorWarningAn Admin/Office Manager wiped a colleague's passkey, recovery codes, and password and issued a new setup link (the ordinary lost-device path) β€” confirm it was genuinely requested by that staff member
Withheld notes overdue for re-reviewWarningA withheld note's 90-day review date passed without anyone revisiting it (see Withhold from patient)

Anything that doesn't apply for that window simply doesn't show up β€” a quiet week shows an empty list, not ten rows all reading "0." Each finding that does appear shows a severity, a plain-language explanation, a total count, and who's involved, so you can judge it without leaving the page. Any emergency-access grant that's still active right now also shows here (regardless of which of the three toggles is selected), with its own "End" button, working exactly like the one on the patient chart's own banner.

Mark reviewed (with an optional note, e.g. "Lockout was the office manager mistyping; confirmed in person") permanently records that someone looked at this exact window and when β€” it shows up afterward as "Last reviewed by [name] on [date]." Only the single most recent review for the current window shows on the page itself; there's no screen listing every past review. Marking a review does not clear the findings β€” they'll show the same the next time you open this panel; recording one just adds a timestamped, attributable sign-off, which is what a real activity review actually needs to prove. Separately, the exact same ten checks run automatically every night for every practice regardless of whether anyone ever opens this page, and email the security official whenever at least one of them finds something that night β€” so the underlying safety net doesn't depend on a person remembering to look. This panel is how you look closer and put a documented sign-off on top of that.

Amendment requests panel

Below Security review, every pending request a patient has submitted asking the practice to correct something in their record (from their own portal Account page β€” see Patient Portal). Each shows who it's from, what it concerns, and their description. Accept works differently depending on the target: for a signed clinical note, it asks for the corrected text and creates a brand-new addendum note β€” the original itself is never edited, since a signed note can't be changed once signed. In the patient's own Notes list, that addendum carries an "Addendum" badge naming which original note and date it corrects (unless the original is itself withheld, in which case it still shows but without naming what it corrects); for anything else, it asks you to describe what you actually changed and where, since you make that correction yourself through the normal edit screens first and this just records that it happened. Deny requires typing a reason of at least 10 characters, shown to the patient as the basis for the denial β€” they can respond with a statement of disagreement, which becomes a permanent part of their record. Either way, if the patient has an email on file they're sent a heads-up automatically (accepted or denied, with the reason on a denial) β€” nothing extra to do on your end.

Records requests panel

Right below Amendment requests: every records request logged from a patient's chart (see "Log records request" under The patient chart) that arrived by phone, mail, email, or in person β€” the portal's own instant export needs no tracking here since nothing has to be manually fulfilled. Each row shows a live days-remaining count against a 30-day tracking window (HIPAA's right of access generally requires a response within 30 calendar days, with one possible 30-day extension if proper written notice is given β€” the app tracks the standard 30-day period as its default policy clock, not a claim that no extension is ever legally available), turning red as it gets close and reading "N days overdue" if it's been missed. Mark fulfilled once it's been handled.

Most of the time you won't need that button: using Produce records on the patient's chart (see Producing a patient's records) marks that patient's oldest open request fulfilled by itself, so the row leaves this panel on its own. Mark fulfilled is for the leftovers β€” a second request the same produced copy already answered, or one you handled entirely outside the app.

Every logged request gets a permanent Records Request ID, shown as Request # right on its row in this open-requests panel.

Reports

Staff app β†’ Reports πŸ”’ Admin / Office Manager

Run a report across the whole practice, then print it or download it as a spreadsheet.

Report types

πŸ“… Appointments

Every appointment in a date range, with patient, provider, and status.

πŸ—“οΈ Day Sheet

Every appointment for one day, grouped by provider β€” same data as the Day Sheet page.

πŸŒ… Morning Huddle

Every appointment for one day, with the patient's name, contact info, and medical history β€” allergies, medications, conditions β€” for the pre-shift huddle.

🦷 Procedures

Every procedure charted in a date range, with patient, code, and status.

πŸ¦·πŸ‘€ Procedures by provider

Completed procedures in a date range, one row per dentist/hygienist and procedure type β€” how many cleanings, fillings, root canals, and so on, each provider did. Sorted so each provider's most-performed procedure is at the top of their own block β€” no adding up needed to see who does the most of any given procedure.

πŸ† Most common procedures

Completed procedures in a date range, counted by type across the whole practice and sorted most-common-first β€” the answer to "what do we do the most of, and how many of each" is the top of the list, no sorting or math required.

πŸ§‘β€πŸ€β€πŸ§‘ Patient roster

Every active patient on file, with contact info.

πŸ“ Unsigned clinical notes

Draft notes across every patient still waiting on a provider's signature. (Admin only on this page β€” an Office Manager running it gets an error.)

πŸ“ž Recall due

Patients due or overdue for continuing care, as of today.

⏳ Waitlist

Patients currently waiting for an earlier appointment slot.

πŸ‘₯ Staff roster

Every staff member, with roles and status.

⏱️ Time clock

A payroll summary per staff member for a date range β€” regular hours worked plus approved PTO, vacation, sick, unpaid and other hours, and a total β€” followed by the shift-by-shift clock in/out and break detail behind it.

πŸŽ“ Training completions

Every training assignment practice-wide, with pass/fail status and when it was taken. (Admin only β€” an Office Manager running it gets an error.)

πŸ”’ Day closes

Every day or month closed in a date range: what it produced and collected, any difference in the count ("Not counted" when nobody counted), and who closed it. A close counts in the period it covers, so September closed on 2 October is a September close.

πŸ’Έ Expenses by category

Bills in a date range, grouped by category, with each category's total and its share of everything spent.

🏬 Expenses by vendor

Same idea, grouped by vendor instead β€” who the practice is spending the most with.

πŸ“‹ Unpaid bills

Every bill not yet marked paid β€” what the practice currently owes β€” with how many days overdue if it's past due (blank if it isn't due yet).

⚠️ Overdue bills

Unpaid bills already past their due date only, with the longest-overdue bill listed first.

πŸ” Recurring commitments

Every vendor currently billed on a recurring schedule β€” rent, software subscriptions, and the like β€” with the amount and how often it repeats, so you can see fixed monthly outgoings at a glance.

πŸ“¦ Full inventory

Every inventory item on file right now, as it currently stands.

πŸ“‰ Low stock

Only the items currently at or below their low-stock threshold.

πŸ’΅ Inventory value

What's currently on the shelf, valued out β€” how much the practice has tied up in stock right now.

πŸ“Š Practice Analytics

The same numbers as the Practice Analytics dashboard, flattened into one report β€” with a provider filter and Production & Collections / Clinical / Receivables & Overhead checkboxes to include or leave out, so you can email or file a snapshot without opening that page.

The report picker only lists reports you can actually run: Unsigned clinical notes needs a Dentist, Hygienist or Admin role (so an Office Manager doesn't see it), Training completions is Admin-only, and the time clock, training, inventory, expense and Practice Analytics reports disappear when your practice has that feature switched off.

How to use it

  1. Pick a report type. Most (Appointments, Procedures, Procedures by provider, Most common procedures, Time clock, Training completions, Day closes, Expenses by category, Expenses by vendor, Practice Analytics) ask for a date range; Day Sheet, Morning Huddle, and a saved custom report built on the Morning huddle source ask for a single date; every other saved custom report runs with the filters it was saved with; and the rest (Patient roster, Unsigned clinical notes, Recall due, Waitlist, Staff roster, Unpaid bills, Overdue bills, Recurring commitments, Full inventory, Low stock, Inventory value) ask for nothing at all β€” they always answer "as of right now."
  2. Click Run report β€” the results table appears below, sortable by clicking any column heading.
  3. Click Print for a printable copy with your practice's logo, Download CSV to save it as a spreadsheet, or Email to send it to someone.

Under the report picker, a Worklists card links straight to Unsigned clinical notes (Admins) and to Imported accepted plans without a signed consent form.

πŸ’‘
Good to know Everything on a report is computed fresh each time you run it β€” nothing is saved or cached, so it's always current. Dates always mean whole days on your practice's own calendar: a range ending on the 14th includes everything on the 14th, a payment taken at 6 pm counts on that day, and "on the 14th" in a custom report's filter is the whole day.

Emailing a report

Next to Print and Download CSV you'll find Email, on Reports, the Custom Report Builder, Practice Analytics, Day Close, and both Expenses tabs (Bills and Vendors). It sends the same table you'd have printed β€” as a PDF attached to an email. The message itself only says which report is attached; the numbers are in the PDF, not in the email body.

Who it can go to (since October 2026): a report can only be emailed to an active staff member's own email address or to the practice's contact email set in Settings. Any other address is refused with "Reports can only be emailed to a staff member's own email address or the practice's contact email (Settings)." β€” reports can carry patient names and the practice's books. To get numbers to an outside bookkeeper, email the report to yourself (or the practice's contact email) and forward it from there. Type the address and click Send. The last few addresses you used are remembered on that computer and offered as one-click chips, so the monthly send isn't retyped. A report longer than 5,000 rows can't be emailed β€” narrow it with a filter, or use Download CSV instead.

⚠️
An email can't be taken back Check the address before you send. Only Admins and Office Managers can send a report by email (a Dentist or Hygienist sees the button on Practice Analytics, but the send is refused), and every send is written to the Audit Log with the recipient's address β€” so "who did we send September's numbers to?" is a question that has an answer. On Reports and the Report Builder you'll also see a reminder in the dialog, because those can be pointed at patient lists, not just money.
πŸ’‘
Button greyed out? Hover it and it'll say "Email isn't configured for this practice yet." Sending needs your practice's outgoing email set up first β€” ask whoever administers your system. Print and Download CSV work regardless.

Custom Report Builder

Need a report that isn't one of the built-in types above? Click Build a custom report β†’ at the top of this page to open the report builder β€” it's not limited to appointments and the huddle dataset anymore, it can build from any of the practice's data.

The Appointments and Procedures sources have a Source field β€” Imported for records moved over from your previous software, Sodlcs for everything entered here β€” so you can filter or group by it (for example, to see only this year's work done in Sodlcs). A report returns at most 20,000 rows; if yours would have more, a warning at the top says so (and that any group totals then cover only those rows) β€” narrow the date range or add a filter to see everything.

πŸ—‚οΈ Data sources

Morning huddle, Patients, Appointments, Procedures, Billing β€” accounts, Billing β€” ledger, Billing β€” standard fees, Inventory, Staff, Training, Audit log, Insurance β€” payments, Insurance β€” ERA report, Insurance β€” payment reconciliation, Insurance β€” denials, Day closes, and Expenses β€” 17 sources in all β€” pick one, then check off the fields you want. Each source offers a few related fields too, pulled from a directly-connected record (say, an appointment's patient or provider name). The Appointments source also carries the check-in flow's timings β€” Checked in, Seated, Checked out, and the derived Wait (min) and Chair time (min) β€” shown as "β€”" for any visit that didn't go through check-in; an average skips those blank rows rather than counting them as zero. The Expenses source covers your bills and vendors β€” vendor, category, amount, bill date, due date, a Paid/Unpaid/Overdue status, paid date, paid method, recurring, and notes β€” and always sorts/filters/groups by the date a bill was DATED, never the date it was paid, so it never disagrees with the Expenses page or the Overhead card on Practice Analytics about which month an expense belongs to. The Day closes source mirrors the Day Close page's own closed-periods history, including a variance figure that stays blank (not zero) for a period that was never counted. On the Procedures source, grouping by CDT code and adding a Count total works, and the code column reads as a combined "D1110 (Prophylaxis, adult)" label instead of the bare code β€” searching/filtering by the bare code still works exactly the same.

πŸ”Ž Filters

Narrow the results with one or more conditions on a field β€” equals, contains, in a range, and so on, depending on the field's type. Optional for most fields β€” but for a source with a date field (Appointments, Procedures, Billing ledger, Insurance payments, ERA report, payment reconciliation, denials, Day closes, Expenses), skipping the date filter shows a trailing 12-month window, not the practice's entire history β€” set an explicit date range to see further back. Audit log is the one exception: it has no trailing-window default and instead simply stops at the 500 most recent entries when you don't filter by date.

βž— Group + totals

Group results by one field and add totals β€” sum, count, or average, each with its own label β€” to see subtotals per group instead of one long list. Optional.

πŸ–¨οΈ CSV / print

Same as every other report: click Run to see results on screen (sortable by column), then Print or Download CSV.

  1. From the builder, pick a data source, then check off the fields you want.
  2. Optionally add filters and/or a group-by with totals.
  3. Click Run to see it right away, or Save to name it and keep it for later.
πŸ’‘
Saved reports live in Settings Every report you save shows up under Settings β†’ Performance & operations β†’ Custom reports β€” a simple list you can re-run, edit (by reopening it in the builder), or delete. The Reports page also has a "Manage saved reports" link that takes you straight there. This is one of the four Settings cards an Office Manager can open, so that link works for both roles that can reach Reports at all.
πŸ”’
Four sources are role-gated Training and Billing standard fees are Admin only, and Audit log and Day closes are Admin/Office Manager β€” same as their own pages. If you can't see a saved report someone else built, it's probably sourced from one of those four.

Practice Analytics

Staff app β†’ Practice Analytics πŸ”’ Everyone sees something different β€” see below

One page that answers "how is this practice doing" without building a report first. It shows the numbers a practice owner cares about β€” production, collections, how well appointments are kept, how many treatment plans get accepted, how quickly patients pay, and more β€” for whatever day, week, month, or custom date range you pick, with a comparison against the same-length period right before it. The page is organized into three groups: Production & Collections (money in), Clinical (appointments, case acceptance, recall, retention), and β€” Admin/Office Manager only β€” Receivables & Overhead (what's owed, insurance mix, and what the practice spent; always whole-practice numbers, even when you narrow the page to one provider).

Who sees what

An Admin or Office Manager sees the whole practice: every dollar, every provider's production side by side, the whole accounts-receivable picture, and overhead/profit. They can also narrow the page to one provider at a time using the provider dropdown at the top, without losing the practice-wide cards β€” accounts receivable, insurance mix, and overhead/profit always stay whole-practice numbers no matter which provider is selected, because those are numbers the practice as a whole owns.

πŸ“Œ
Collections can't be shown for one provider β€” by anyone When the page is narrowed to a single provider, four cards disappear: Collections, Collection rate, Net production and Adjustments. That isn't a permission, and it isn't a gap waiting to be filled in. A payment is recorded against a patient's account β€” it pays down whatever that family owes, which may cover work from several visits and several providers β€” so there is no honest way to say how much of it belongs to any one of them. The same is true of a write-off. Production can be split by provider, because every charge is tied to the procedure that created it, so that's what a per-provider view shows. The page says this in plain words where the cards would have been, rather than showing a confident "$0".

A Dentist or Hygienist sees only their own numbers β€” their own production, their own case acceptance, their own no-show rate β€” never the practice's accounts receivable, never overhead or profit, and never another provider's figures. They don't see a personal collections or collection-rate figure either, for the reason in the callout above: those aren't numbers that exist per provider, so the page leaves them out and explains why rather than showing a clinician "Collections $0" every day. There is no dropdown for them; the page simply shows a banner explaining that the practice-wide cards require Admin or Office Manager. This isn't just the page hiding a button β€” even trying to ask for the whole-practice view directly is refused automatically, so there's no way for a clinical staff member to see numbers they aren't supposed to. If a dentist or hygienist hasn't been linked to a provider record yet (see Providers), the page says so plainly instead of showing a wall of confusing zeros.

Front Desk cannot open this page at all β€” these are the practice's business numbers, kept to the same two roles that already see Expenses and the Custom Report Builder's sensitive data.

Production & Collections

  • Gross production β€” the total value of everything billed in the period, before any discounts or write-offs.
  • Net production β€” gross production after subtracting write-offs and contractual discounts. This is closer to what the practice actually expects to collect.
  • Collections β€” the actual cash received from patients and insurance in the period, less any money refunded back out in the same period.
  • Collection rate β€” collections as a percentage of net production. A healthy practice is usually collecting 98% or more of what it billed; under 90% is generally considered a sign of a collections problem worth investigating.
  • Adjustments by type β€” the total written off in the period, broken down by category where a category exists. Categories (contractual, deductible, non-covered, denied, and so on) come from insurance remittances, which state their own reason for each adjustment. A write-off someone types in by hand has no category, so those are grouped together under "Entered by staff (uncategorised)". A practice that doesn't post electronic remittances will see one row here β€” that's an accurate picture of its own data, not a missing feature.
  • Production per provider β€” how much each dentist and hygienist produced. A row labeled Unattributed covers any charge that wasn't tied to a specific procedure and therefore can't be credited to any one provider β€” it's shown on purpose, not hidden, so the per-provider numbers plus Unattributed always add up to the practice total.
  • Hygiene vs. doctor production β€” the same total production, split by whether it came from a hygienist or a dentist, with a third Unattributed figure for charges that aren't tied to a procedure and therefore have no provider behind them. Those sit in neither half on purpose: a charge with no provider has no role either, and counting it as doctor production would state something about it nobody ever recorded. The three together add up to total production. A typical split is roughly a quarter hygiene, three quarters doctor, though this varies by practice.

Clinical

  • Case acceptance (by count and by dollar value) β€” of the treatment plans a dentist presented to patients in the period and that have since been either accepted or declined, what share were accepted β€” counted both as a plain count of cases and as a share of the dollar value presented. A plan a patient hasn't decided on yet doesn't count against this rate either way, and a plan that was accepted and has since been finished counts as accepted. Plans brought over from your previous software count in the month they were really presented there. Typical acceptance runs 50–80%. A Case acceptance detail card alongside it breaks the same period down into three plain counts β€” Presented, Accepted, Declined β€” so you can see the raw numbers the rate is built from, not just the percentage.
  • No-show rate and cancellation rate β€” shown separately, because a patient who cancels with notice and one who simply doesn't show up are different problems needing different fixes. Both are calculated only over appointments that have already happened, been cancelled, or been marked no-show β€” an appointment still upcoming isn't counted either way, and the card says how many appointments that was, since 5% of four visits and 5% of four hundred are very different facts. Under 5% no-shows is generally considered good.
  • Recall compliance β€” of patients whose recall visit (a cleaning or checkup) was due in the period and whose due date has already arrived, the share who actually came in on or after that date. A recall that isn't due yet counts as neither kept nor missed, and isn't included in the Recall overdue card next to it either β€” a plain count of patients past their recall date who haven't come back yet β€” so paging forward to next month doesn't report everything scheduled there as overdue. 70% or better is generally considered good for the compliance rate.
  • New patients β€” how many new patients joined the practice in the period. (For a dentist or hygienist viewing their own numbers, this counts only the new patients that provider has actually seen, not the practice's whole new-patient count.)
  • Patient retention β€” see the callout below; this one always needs its definition spelled out next to it, because there's no single agreed meaning across the industry.

A Receivables & Overhead group of its own holds four more cards β€” visible only to an Admin or Office Manager. It stays on screen, with whole-practice numbers, when the page is narrowed to one provider (see "Who sees what" above). Besides the cards below, it also shows AR over 90 days (the benchmark is under 3% of total AR).

  • Total AR β€” the total amount every active patient account currently owes, as of right now rather than for the period you've selected β€” this one card doesn't change when you pick a different date range, since a balance owed isn't something that happened "during" a period the way a charge or a payment is.
  • AR aging β€” that same total broken into how long it's been outstanding (current, 31–60 days, 61–90 days, 91–120 days, and 120+ days). Healthy practices generally keep less than 3% of total AR older than 90 days. See "How receivables are aged" just below.
  • Insurance payer mix β€” how many of your patients have each insurance company as their primary insurance, and each company's share. It counts patients, not dollars owed.
  • Overhead % and profit β€” what the practice spent (rent, payroll, supplies, lab fees, and everything else logged in Expenses) as a percentage of what it collected, collections minus expenses as a rough profit figure, and a breakdown of those expenses by category so you can see what the overhead is actually made of. A bill counts in the month it is dated, not the month it was paid. Both figures are always whole-practice, even while the provider dropdown is set to one person β€” the practice's rent isn't one clinician's rent. The American Dental Association generally considers 63% or lower overhead reasonable. Both show "No data" β€” never a misleading "0%" β€” for any period where no expenses have been entered at all, since a true zero would suggest the practice spent nothing that period, which almost never happens.

How receivables are aged

A payment always pays off the oldest money owed first, the way a patient would expect. So what an account still owes is its newest charges, and each one is aged by its own date. A family that paid off last year's bill and owes $50 from yesterday shows $50 under Current β€” not under 120+ because of a bill that's long settled. Anything an account owes counts, not just charges for procedures: an adjustment that added to the balance, a refund, or a balance brought over from your previous software (that one keeps the age it had on your old system's aging report).

Three figures sit under the buckets:

  • Of which insurance pending β€” the part of what's owed that you're expecting from insurance, for claims that were still open in your previous software when you switched. It's already inside the buckets above; it's shown on its own because patients aren't billed for it.
  • Credit balances (owed to patients) β€” money the practice owes back. It's never subtracted from what other families owe.
  • Not dated β€” only appears if part of a balance can't be matched to any dated charge. It's still counted in Total AR. It should normally be absent; if you see it, let the Sodlcs team know.
πŸ“–
What "retention" means here Retention is defined as: of the patients who had a completed visit 12 to 24 months before the period you're looking at, the share who came back for at least one more completed visit in the last 12 months. There's no single industry-standard way to define patient retention, so this exact definition is what the number on screen always means β€” it's written next to the number itself for that reason, not just here.

Where the benchmark figures come from

Small grey text under some of the cards (for example, "Industry benchmark: 98%+ of net production") is a reference point pulled from general dental practice-management guidance, shown so a number is easier to read on its own β€” it is not a target this app sets for your practice, and it's never compared against another practice's actual numbers. Nothing about your practice's performance is ever sent anywhere or compared to anyone else's data. If you want an actual target to be measured against β€” one your practice sets for itself β€” that's what Practice Targets (below), Admin only, is for.

Comparing against the period before, and against a target

Every number on the page shows how it compares to the same length of time right before it β€” this month vs. last month, this week vs. last week β€” with a small arrow indicating whether that change is good or bad news (a rising no-show rate is shown as worse, not better, even though the number itself went up). Where a target has been set for that exact metric, scope, and length of time, a small progress bar shows how close the period is to hitting it. A metric with no target set simply shows the number on its own, with no bar β€” that's different from a target of exactly zero, which would show an (unlikely) full bar.

πŸ“–
A daily target only applies to a daily view A target is a number per length of time, so the page only holds a period against a target set for that same length: a daily target appears when you're looking at a single day, a weekly target on the Week view, a monthly target on the Month view. If you've set a $3,000-a-day production target and you switch to Month, the month shows no target rather than being measured against $3,000 β€” which would have read as "100% of target" on a month that produced twenty times that. A custom date range that isn't exactly one day, one week, or one whole calendar month shows no target at all, since no target was ever set for a span of that shape and inventing a pro-rated one would be making up a number the practice never agreed to.

Setting a target (Practice Targets)

Setting a target is Admin only. From Settings, under "Performance & operations" β†’ "Practice targets," pick a metric (production, collections, new patients, case acceptance rate, or collection rate), how often it's measured (daily, weekly, or monthly), whether it applies to the whole practice or to one named provider, a number, and a date the target starts applying from, then save. An Office Manager sees how the practice is tracking against every target right here on the dashboard, but creating, changing, or closing a target itself requires an Admin.

πŸ“Œ
The one thing to know about changing a target Saving a new target for a metric/period/scope that already has one doesn't overwrite the old number β€” it closes the old target and starts a fresh one from the date you picked. Anything already measured against the old target stays measured against it forever; only this period and future ones use the new number. That's deliberate: raising next quarter's production goal should never quietly rewrite how last quarter's number was judged. The Practice Targets screen keeps a full history of every target that's ever been in force, current and past, so you can always see what number a given period was actually held to.

To retire a target without replacing it, click Close next to it. That leaves the dashboard showing the actual number with no target for that metric until a new one is set β€” it does not put the target back to zero.

"View report" β€” jumping from a number to the rows behind it

The Gross production card has a small View report link that opens the Custom Report Builder already filtered to exactly the charges that make up that number, so you can see the individual entries behind the total rather than taking the dashboard's word for it. The Expenses by category card has the same link, opening the builder filtered to that period's bills β€” the list adds up to exactly the "Total expenses" figure, and grouping it by Category (one click in the builder) reproduces the card's own breakdown. Both links appear for Admins and Office Managers only β€” they're the only roles that can open the Report Builder at all, so offering it to a dentist would be a dead end β€” and both are hidden while the page is narrowed to one provider, because neither the ledger report nor the expenses report can be filtered by provider, and either would quietly show the whole practice's numbers instead of that one person's.

No other card has a link, and that's deliberate rather than unfinished. A card only links somewhere when the report it opens adds up to exactly the number on the card. That rules out every rate or percentage (collection rate, both case-acceptance rates, no-show rate, cancellation rate, recall compliance, retention, overhead rate, AR over 90 days) β€” overhead rate stays ruled out even now that an Expenses report exists, because expenses Γ· collections is still a division no list of rows can answer. It rules out the insurance-mix and new-patient cards, because no report covers quite the same set of records. It rules out Collections and Adjustments, because of how those entries are stored β€” a report of them would total to a number that looks different from the card even though both are right. It rules out Total AR: that card counts only active accounts that actually owe money, each unpaid part aged by its own date (payments settle the oldest charges first), and no report can be narrowed to exactly that set β€” one would also pull in closed accounts and accounts in credit. And it rules out Profit: that card is Collections minus Expenses, and even though both halves can now be reported on individually, one report still only covers one of them β€” there's no single report that subtracts one from the other, and pointing the link at just one side would look like an answer while being the wrong number. Linking somewhere that shows a different number would teach you the two screens disagree, when really the link was just wrong, so the card offers nothing instead. A missing link costs you one report you build yourself; a link that disagrees with the number above it costs you confidence in every number on the page.

πŸ“–
A fix that reaches beyond this page: reversed charges in ledger reports When a charge is voided, the entry isn't deleted β€” the original stays and a reversing entry is written beside it, so the history of what happened is never lost. That meant any ledger report you built by hand counted the reversed charge as though it still stood, quietly totalling more than was really billed. The ledger report now has a Voided column you can filter on, so you can exclude reversed entries (or list only them, if that's what you're after). Leave it alone and reports behave exactly as they always did.

Print, Export CSV, and Email

Three buttons in the toolbar, next to the period controls β€” Print gives you a letterhead-branded printable copy of the whole page, Export CSV saves it as one spreadsheet file, and Email sends the same thing to an address you type in. All three are disabled until the numbers on screen have finished loading. Unlike Expenses' Print/Export (a single table), this page is a whole dashboard β€” KPI tiles plus several breakdown tables β€” so all three outputs cover every section you can currently see, in the same order: Production & Collections, Production by provider, Hygiene vs. doctor production, Adjustments, Clinical, Case acceptance detail, and β€” for an Admin or Office Manager viewing the whole practice or one provider β€” Receivables & Overhead, AR aging, Insurance payer mix, and Expenses by category.

πŸ“§
Email shows up for a Dentist or Hygienist too Unlike on Reports, where the whole page is Admin/Office Manager only, this Email button shows for every role that can open Practice Analytics β€” including a Dentist or Hygienist, who only ever see their own numbers here anyway. If you're on one of those two roles and click Send, the system currently refuses the send, since emailing a report is itself limited to Admins and Office Managers regardless of which page it's sent from. If that happens, use Print or Export CSV instead, or ask an Admin or Office Manager to send it for you.
πŸ“Œ
Print and Export CSV always match exactly what you're looking at Whatever the page is showing you right now β€” your own numbers only if you're a Dentist or Hygienist, the whole practice or one filtered provider if you're an Admin or Office Manager, the exact day/week/month/ custom range selected β€” is exactly what gets printed or exported. A card that's missing from your screen (Collections/Collection rate/Net production/Adjustments while narrowed to one provider, or the whole Receivables & Overhead group if you're a clinician) is missing from the printout or spreadsheet too, never shown as a zero. A number that reads "No data" on screen β€” because there's nothing yet to have a rate about, or no bills logged this period β€” reads "No data" in the export too, never "0" or "$0". Neither button asks for anything new or counts as a second look at the practice's numbers for the audit trail; both just format what already loaded onto the page.

The exported spreadsheet is one file, PracticeAnalytics.csv, with every row tagged by a Section column so you can tell which part of the report it came from once it's open in Excel or Google Sheets β€” a KPI number's row also carries its previous-period comparison and target progress where those exist; a table row (like one line of Production by provider) carries its own value and, where the on-screen card shows one, a percentage share.

Day Close

Staff app β†’ Day Close πŸ”’ Admin / Office Manager

Count the money at the end of the day, check it against what the system says it should be, and then close the books so that day can't change afterwards.

Why close at all

Until a period is closed, its numbers can still move. Reversing a charge from three weeks ago quietly changes what that week produced, and editing or deleting an old bill changes what that month cost β€” so the figures you gave your accountant last month aren't necessarily the figures on screen today. Closing fixes a period in place: after that, the only way to correct something is a new entry dated today, which shows up in today's numbers where it belongs, instead of silently rewriting a month you've already reported.

Closing a day

Pick Day and the date β€” it starts on yesterday, by your own clock (it used to jump to today in the evening, a day that can't be closed yet). You'll see what the day produced and collected, and underneath, a Deposit table splitting collections by how the money arrived β€” cash, cheque, card on the terminal, card online, other, and insurance. The Expected column is worked out from what was posted that day; nobody types it. The Counted column is yours: count the drawer, total the cheques, take the card terminal's batch total, and type them in.

The difference appears as you type. If it doesn't balance, you'll be asked to explain before you can close β€” that sentence is the whole point of the exercise. A difference is usually something ordinary (a float left in the drawer, a payment entered to the wrong patient), but it can be the first sign of a payment that reached a patient's account and never reached the bank, and writing it down is what makes the pattern visible later.

You don't have to count everything. Leave a method blank and it's skipped β€” only what you actually counted is compared, so counting the cash but not the terminal won't report the whole card total as missing.

⚠️
Closing a day also closes everything still open before it There's one "closed through" date for the whole practice, and it can't have gaps. If Monday and Tuesday are still open and you close Thursday, Monday through Thursday all close together. The confirmation names the exact range before you commit, so read that line.

Closing a month

Choose Month and any date inside it. The same Deposit table still appears, with the whole month's Expected figures broken out by method β€” you're not required to count anything for a month close, so it's fine to leave every Counted box blank and simply record the month's totals. If you do type in counted amounts and they don't match, though, the same "explain the difference" rule applies exactly as it does for a day, so leave Counted blank for a month unless you actually mean to reconcile it.

What you can't do in a closed period

You can't void a payment or charge dated inside it, and on a bill dated inside it you can't add, edit, mark paid, mark unpaid, or delete it β€” including moving a bill's date into or out of a closed period, which would change that period's total just as much as adding or removing one outright. In each case you'll get a message naming the date and the closed-through date, and telling you what to do instead. You can still see everything; it just can't be altered.

To correct something in a closed period, post the correction dated today. An overcharge from last month becomes a credit today β€” last month stays as it was reported, and the correction lands in the month it was actually made, which is what your accountant expects to see.

Two corrections come from outside the practice and can't simply be refused: a card refund (the money has already gone back through Stripe) and an insurance company taking a payment back on an ERA. When the original payment is inside a closed period, Sodlcs posts these automatically as a new entry dated today β€” a Refund line for the payment (and an opposite Adjustment for a write-off; a card refund reads "Refund β€” online card payment", others "Reversal: …") β€” rather than voiding the old line. The closed period stays exactly as it was closed.

If two people click Close at the same moment, only one close is recorded; the other gets a message saying why that period can no longer be closed (usually: it just was).

If you closed something by mistake

An Admin can reopen the most recent close, with a written reason β€” reopening isn't available to an Office Manager. The closed-through date moves back to where it was, and that period can be edited again. Only the newest close can be reopened β€” to get back further, reopen the newest, then the one before it, one at a time. Nothing is deleted: the close stays on record showing who reopened it and why, which is exactly what an auditor will want to see.

Printing, exporting, or emailing the history

The Closed periods list shows the newest 50 closes; click Show more at the bottom to load the next 50. It has its own Print, Export CSV, and Email buttons, covering every close on record β€” not just the ones loaded on screen. All three are disabled until there's at least one close to show.

Reports

On Reports, the Day closes report lists every close in a date range with its production, collections, variance and who closed it; a period that was never counted shows Not counted rather than a zero, so you can tell "balanced" apart from "nobody checked." In the Custom Report Builder, the Day closes data source has the same figures to filter or group however you like (every close with a variance this quarter, say); there an uncounted period's variance is left blank (β€”), never zero.

Expenses

Staff app β†’ Expenses πŸ”’ Admin / Office Manager

What the practice pays out β€” rent, payroll, lab fees, supplies, equipment, marketing, insurance, utilities, software, professional fees, and anything else. This is the other half of the ledger from Patient Billing, which tracks what patients pay in; Expenses tracks what the practice pays out. The bill figures are Admin/Office Manager only β€” no other role can see what the practice spends, and Expenses only appears in the sidebar for those two roles. The vendor list itself is not restricted: anyone on the team can look up a supplier's phone number or ordering notes, the same way they already can from Inventory. Same as every other role-restricted page in this app, typing or bookmarking the Expenses address directly now sends anyone outside those two roles straight back to their own dashboard, so there's no way for the wrong role to land on this page at all any more.

Vendors β€” one shared list with Inventory

Click the Vendors tab to see every business the practice deals with: dental labs, landlords, utility companies, software providers, and the same ordering suppliers you already know from Inventory. That's not a coincidence β€” it's the same list. A vendor is one real-world business whether the practice orders supplies from it, gets billed by it, or both, so there's one place to keep its name, contact info, and account number, not two. Click Add vendor to add a new one, and give it a default expense category (Rent, Supplies, Lab Fees, and so on) β€” that category is just a head start that gets copied onto a new bill for that vendor, and can always be changed on the bill itself. Adding a vendor from here always asks for a category, since a vendor you're setting up from the Expenses page is being set up to be billed; editing an existing vendor never forces you to pick one, from either this tab or Inventory's own Vendors screen, since a vendor that's never been billed can go without one indefinitely.

This tab and Inventory's own Vendors screen use the exact same Add/Edit vendor form, with a real on-screen label above every field. Delete is available on both screens too, and on both it asks you to confirm first β€” deleting a vendor still referenced by any bill is refused with a message telling you how many bills reference it and to deactivate it instead, and deleting one still used by an inventory item is refused with how many items use it, asking you to move those items to another vendor or remove them first β€” so Delete is safe to reach for and simply won't go through if the vendor is still in use. Unlike most records in this app, a vendor that isn't in use really is removed for good when you delete it β€” there's no undo.

Deactivating a vendor doesn't remove it. Click Deactivate on a vendor you no longer use, and it stops showing up as an option when adding a new bill or a new inventory order β€” but every bill and every inventory item that already points to it keeps working exactly as before, still showing that vendor's name wherever it appears. Nothing is ever deleted out from under old records this way, and clicking Reactivate brings it back as an option at any time. This applies everywhere a vendor gets picked, not just here: the Add bill form, Inventory's Add item form, and Pearl's own suggestions all stop offering a deactivated vendor. Two sensible exceptions, both spelled out on screen: if you edit an inventory item whose vendor was deactivated after the item was created, that vendor is still listed (marked "deactivated") so saving your edit doesn't quietly wipe the item's ordering information β€” and New bill like this one does the same for a repeating bill's original vendor (marked "inactive" there). You can also Deactivate and Reactivate from Inventory's own Vendors screen, which now shows a Deactivated badge and the vendor's expense category alongside its contact details β€” so when Delete tells you to deactivate a vendor instead, you can do it right there. The rule holds even if a retired vendor somehow gets picked anyway: saving an inventory item against one is refused, with a message naming the vendor and telling you to reactivate it or choose another. That only applies to newly choosing a retired vendor, though β€” an item that already had that vendor before it was retired keeps it and stays completely editable, so deactivating a supplier never locks up the items you already had on file. One deliberate exception: Import CSV will still attach a deactivated vendor, because a spreadsheet of what you already own is a record of history β€” that item really did come from them β€” and refusing those rows would stall an import for something you can't fix mid-upload. The imported items come in with the vendor attached, the vendor stays deactivated, and the import result tells you how many rows it applied to.

The Vendors tab has its own Print, Export CSV, and Email buttons too, next to Add vendor β€” every vendor on file, active and inactive together, since this tab has no filters to narrow it. The printed/exported sheet says how many are active and how many are inactive right at the top (e.g. "All vendors β€” 14 active, 3 inactive"), and every vendor's status is spelled out in its own column rather than only shown by a greyed-out row β€” a printed page or a spreadsheet can't show grey text the way the screen does. Contact details and ordering info (phone, email, website, account number, notes) are each their own column in the file too, rather than run together into one line, so the spreadsheet is actually usable β€” you can sort it by phone number, for instance.

Logging a bill

Click the Bills tab, then Add bill. Pick the vendor, a category, the amount, and the bill date β€” this is the date the expense actually happened (the date on the invoice), not the date you happen to be entering it or the date it gets paid. That distinction matters: every total and every category breakdown on this page is calculated from the bill date, so a bill dated in August always counts as an August expense, even if it doesn't get paid until September. An optional due date, and a notes field for anything else worth remembering, round out the entry. Two things get checked as you save: an amount has to be a real amount greater than zero and no more than $99,999,999.99 (which catches the classic slip of pasting an amount without its decimal point), and a due date has to be a real date β€” an unreadable one is refused outright rather than quietly saved as "no due date".

Haven't set up any vendors yet? Add bill won't leave you stuck. If your practice has no vendors on file at all, the vendor field opens straight into a plain text box instead of an empty dropdown, with a note under it pointing you at the Vendors tab if you'd rather set vendors up ahead of time. Type the vendor's name right there and it's created the moment you save the bill β€” no need to leave the dialog, visit the Vendors tab, create the vendor, and come back to start the bill over. Once you already have vendors on file, the same shortcut is still one click away any time β€” a New vendor button sits right next to the dropdown, the same shortcut Inventory's own Add item form already has. Typing a name that's already in use tells you so right on the field (the same message you'd see adding it from the Vendors tab) rather than losing what you've typed elsewhere in the bill β€” fix the name and save again.

If the vendor you pick β€” or the brand-new vendor you're naming right now β€” has never had a default category set, and you choose one for this bill anyway, a checkbox appears right under the category dropdown: "Also make this [Vendor]'s default category." Check it, and saving the bill also saves that category as the vendor's own default β€” so every future bill against that vendor comes up with the category already filled in, without a separate trip to the Vendors tab. A vendor you type in fresh right here counts too: it has no default yet either, so the same checkbox offers to give it one in the very same save. The bill itself always saves whether or not that backfill succeeds; if setting the vendor's default hits a snag, a message says so above the Bills table, but the bill you just entered is unaffected either way.

Mark paid β€” what it does, and what it doesn't

Once a bill has actually been paid β€” a check mailed, an online bill-pay sent, cash handed over β€” click Mark paid and optionally note how (for example, "check #1234"). The paid date is today's date on your practice's calendar. That's it: it's a record that the practice already paid this vendor by whatever means it normally uses. This app never pays anyone. There's no way to send money, print a check, or store a vendor's bank details here β€” Mark paid is purely a note for your own records, so the Bills list can show you what's still outstanding versus what's already settled. A bill that isn't paid by its due date shows up flagged as Overdue so it doesn't get missed β€” worked out against today's date as your own computer sees it, so a bill due today is never flagged red just because it's late in the afternoon. Clicked it by mistake? Mark unpaid undoes it instantly β€” there's no approval step to work around. If either one can't go through, it tells you why on the spot instead of looking like it worked, so a bill can never quietly stay unpaid because a click didn't take. Both are blocked on a bill dated inside a closed period, the same as adding, editing, or deleting one β€” see Day Close.

Fixing a bill you've already entered

Typed the wrong amount, picked the wrong category, or chose the vendor from the row above? Click Edit on that bill and the same form opens with everything as you entered it. Change what's wrong and save. Correcting a bill this way is always better than deleting it and starting again: the original record stays, and the change is logged so it's clear what happened and when.

Recurring bills

If a bill repeats on a schedule β€” monthly rent, a quarterly software subscription β€” check This repeats when you log it and say how often (every 1 month, every 3 months, and so on). That does not create anything automatically going forward. What it does is add a New bill like this one button next to that bill in the list. Next time rent is due, click that button and a new bill opens up already filled in with the same vendor, category, amount, and notes, and still marked as repeating on the same schedule β€” so next month it has the button too, and the chain keeps going without you having to re-tick the box every single time. The date is advanced to the next period, and bills dated at the end of a month land on the end of the next one rather than sliding past it: rent dated the 31st becomes the 30th in April, the 28th in February. You check it over, adjust the amount if it changed, and save it yourself. Nothing ever posts to your expenses on its own; every recurring bill still gets a deliberate click before it becomes real.

Totals and filtering

The Bills tab shows a running total for whatever date range and filters you've set, broken down by category, so you can see at a glance how much went to Lab Fees this month versus Supplies. Filter by date range, category, vendor, or paid/unpaid status β€” the total and category breakdown update to match whatever you've filtered to, every filter included. Filter to Lab Fees for March and the total above the table is March's lab fees, not March's entire spend. The total is always the total of exactly the rows you can see.

Print, Export CSV, and Email

Three buttons on the "Total for this range" card β€” Print gives you a letterhead-branded printable copy, Export CSV saves a spreadsheet file, and Email sends the same table to an address you type in β€” and all three cover every bill matching your current filters, not just the page you happen to be looking at (the Bills list shows one page at a time, 10 by default; none of these three stop at the page). The printed/exported/emailed sheet says right at the top what it's filtered to β€” for example "Lab fees Β· 1 Mar–31 Mar 2026 Β· Unpaid", or "All bills" if you haven't filtered anything β€” and ends with a TOTAL line matching the summary card above the table.

πŸ’‘
Entered a bill by mistake? Click Delete on that row and confirm. Unlike most records in this app, a bill really is removed β€” it carries no patient information and nothing else depends on it β€” so double-check before confirming; there's no undo for a deleted bill the way there is for Mark paid/Mark unpaid. Delete is blocked, the same as Mark paid and Mark unpaid, on a bill dated inside a closed period.

Settings

Staff app β†’ Settings πŸ”’ Admin β€” full page πŸ”’ Office Manager β€” five cards, three groups

Practice-wide configuration β€” branding for printed documents, which e-prescribing network to transmit through, the Calendar page's configurable pieces, Inventory's alert defaults, and the practice's security & session policy. The page is laid out in six groups, in the order a brand-new office would actually work through them.

πŸ—ΊοΈ
How the page is laid out Settings is grouped into six panels, each with its own cards inside it, in setup order. Each group opens and closes β€” click a group's title row to expand it, click again to close it, the same way the sections of a patient's chart do. Groups work independently: opening one never closes another, and you can have as many open at once as you like. When you arrive, every group you can see starts closed β€” click whichever one you actually need. Your open and closed panels aren't remembered between visits either: come back tomorrow and everything is closed again, exactly like every other collapsible section in the app. The groups, in order: Your practice (the read-only Features list, practice branding and the Calendar page's settings) β€” who your office is and when it's open. Bringing your patients over from your previous software isn't a setting β€” the Sodlcs team does it for you (see Moving from your old software). Money & insurance (standard fees, fee schedules, insurance & payers, online payments) β€” what you charge, the payer-specific rates that override it, who pays, and taking card payments. Patients & communication (communication, Notice of Privacy Practices, switching over from your previous software) β€” how you talk to patients, and what you tell them before you do. Performance & operations (inventory alerts, time off & payroll, custom reports, practice targets) β€” how the place is run and how it's measured. Practice targets sits next to custom reports, which is where you'd go to check the numbers behind a target you missed (it isn't shown when your practice has Practice Analytics switched off). Clinical systems (prescribing, imaging devices, imaging agent) β€” the equipment and networks you wire up once and rarely touch again; Admin only throughout, so an Office Manager doesn't see this heading at all. Security & compliance (idle timeouts, the security official, audit retention, and notification policy) β€” the most consequential settings here, and the ones you change least often. Its own summary line also points to the Notice of Privacy Practices card, which lives under Patients & communication rather than here since it's patient-facing β€” the pointer is there so it's easy to find during a compliance review. Inside Your practice, the Schedule settings are seven panels: hours and closures, chairs, service types and alert types, what the schedule shows on hover and on each appointment chip, and the schedule override PIN. Hours & closures and Chairs are available to an office manager as well as an admin β€” this is the only place in the app that can add an operatory, change your opening hours, or mark a holiday. The other five panels are admin only.
πŸ”
Who sees what on this page An Admin sees all six groups and every card. An Office Manager sees five cards, spread across three of the six groups: the read-only Features list, Hours & closures and Chairs in Your practice, Insurance & payers in Money & insurance, and Custom reports in Performance & operations β€” plus, when your practice has texting or patient calls switched on, a Texting & calling numbers card under Patients & communication, holding just the texting-number and calling-number cards (the rest of that group stays Admin-only). The other groups β€” Clinical systems and Security & compliance, and Patients & communication when neither texting nor calls is on β€” aren't shown to them at all, empty or otherwise, and the Admin-only cards don't appear greyed out or read-only β€” they simply aren't on the page. The guiding rule is Admin only for anything that affects the business: pricing, branding, targets, payment processing, prescribing, imaging equipment, and the practice's security policy are decisions for an owner or Admin to make. Running the schedule is not β€” adding an operatory, changing your opening hours, and marking a holiday are an office manager's daily job, and this page is the only place in the app where any of those three can be done at all, so they stay with them. Inside the Insurance & payers card, an Office Manager sees the payer list only; the practice billing identity and the clearinghouse credentials above it stay Admin-only. Everyone else β€” Dentist, Hygienist, Front Desk β€” has no Settings link at all, and sees a short "only an Admin or Office Manager can view or change clinic settings" message if they reach the page some other way.
πŸ’‘
Edit, not always-open Every section on this page shows its current values first, collapsed behind an Edit button β€” click it to make changes, then Save (or Cancel to discard). Nothing here sits open as an editable form you have to scroll past.

Practice branding

πŸ”’ Admin only

Set your practice's name, phone number, and address β€” these appear on every printed patient document (the After Visit Summary, Doctor's Notes, and printed Prescriptions). Click Edit to also upload/replace/remove your practice logo, shown alongside the name. If you haven't set a name or logo yet, printed documents fall back to a default "Sodlcs Health" mark rather than leaving a blank space. City and state are a separate, optional pair here too β€” they don't appear on printed documents; they're used only so a dentist can search for a pharmacy by name alone (e.g. "cvs"), without typing a city, when writing a prescription.

πŸ“§
Reply-to email Set this and every email this app itself sends on your behalf β€” patient portal invites, staff invites, password resets, sign-in codes, statements, and a payment or refund receipt resent later from a patient's chart β€” shows your practice's name as the sender instead of "Sodlcs Health," and a patient or staff member who hits Reply reaches this address. Leave it blank and those emails keep showing "Sodlcs Health" as the sender with no reply address. Either way, the email still physically sends through this platform's own mail system, not your own mailbox β€” there's no separate account or credentials to set up for this. The one exception is Stripe's own automatic receipt email, sent the moment a card payment succeeds β€” that one comes directly from Stripe, not through this app, so it never carries your practice's name or this reply-to address.

Prescribing

πŸ”’ Admin only

Which e-prescribing network this practice transmits electronic prescriptions through (Weno Exchange, DoseSpot, or DrFirst (Rcopia)), plus its credentials. Each practice can use a different vendor. A live practice can't sign an electronic prescription until a real network is configured here β€” but paper prescriptions (printed, hand-signed) work regardless, so this never blocks prescribing altogether. See Prescriptions above for how the two delivery methods differ. "Mock / testing" is what every practice uses until a real network is set up here β€” it simulates outcomes with nothing actually sent anywhere, and can't be selected in a live practice.

πŸ’‘
Getting a real account and a key, so there's something to enter here This is a real-world signup with the vendor, done outside this app β€” nobody can create an account or issue a key from inside Settings. DoseSpot is this practice's chosen vendor going forward β€” it isn't self-serve, so the next step is requesting a demo at dosespot.com/request-a-demo; their team only shares technical setup docs and assigns a contact after that conversation. Weno Exchange is the only one of the three that's actually self-serve (register at wenoexchange.com/get-started, choose "EHR WENO Switch or WENO Online Integration" β†’ the Switch API option specifically). DrFirst isn't self-serve either β€” apply to their partner program first; their team only shares docs and credentials after that. Saving credentials here takes effect immediately for that practice. One important catch regardless of which real vendor is configured: signing a prescription electronically currently still fails with a "not implemented yet" message rather than actually transmitting it β€” see Prescriptions above. Paper prescribing is unaffected and works today regardless of which vendor is chosen here.

Inventory alerts

πŸ”’ Admin only

The practice-wide default low-stock threshold (as a % of an item's par level) and expiration warning window (in days) that Inventory uses β€” a specific item can still override the low-stock percentage for itself.

Security & sessions

πŸ”’ Admin only

This is the one card inside the Security & compliance group.

  • Staff idle timeout (5–120 minutes, default 15) and Patient portal idle timeout (5–240, default 30) β€” how long a session can sit untouched before it locks (see Logging in β†’ Automatic lock after inactivity). Shorter is safer on a shared front-desk workstation. A change applies to everyone's next request.
  • Practice time zone β€” where your practice is; start typing a city to find it. Your whole schedule, reminder emails and No-show marking run on it (see Calendar). Until it's set, the card shows a yellow warning that the schedule follows the server's clock.
  • Security official β€” every HIPAA-covered practice has to name one, and this is where you do it: a dropdown listing every active staff member (deactivated staff never appear as a choice; pick "Not designated" to clear it). Once set, three things get emailed to this person: an emergency-access grant starting, the nightly security review finding anything at all in its checks that night, and an emergency sign-in reset performed by a platform operator. All three are always written to the Audit Log regardless of whether anyone is designated here or whether email is even set up β€” the email is a courtesy heads-up on top of the permanent record, never a replacement for it. The settings page shows the resolved name (or "Not designated") once you're not actively editing the form.
  • Audit log retention (years, minimum 6, maximum 30 β€” Sodlcs retains required compliance documentation and audit records for at least six years as a product policy) β€” the practice's stated commitment, shown here so it's written down somewhere. The app never deletes audit entries regardless.
  • Statement emails: attach the PDF β€” off by default (the email links to the portal); on sends the statement PDF itself. See Patient Statements.
  • Automatic monthly statements β€” off by default. On: drafts a statement for every eligible account on the 1st of each month, with nobody having to click Generate by hand. See Patient Statements β†’ Automatic monthly statements for how a draft made this way gets reviewed and sent.
  • Appointment reminders β€” off by default. On: patients get one reminder email per lead time listed in "Reminder schedule" (a comma-separated list of days-before, defaulting to "7, 2" β€” list as many as you want, e.g. "7, 3, 1" for three reminders). Sent once a day by a background job, never twice for the same lead time on the same appointment, and skipped silently for a patient with no email on file or a cancelled appointment.
  • Outbound email β€” on by default. Off: this practice sends no notification email at all β€” no reminders, portal invites, statements, receipts, or messages β€” anywhere in the app. Doesn't affect step-up sign-in codes or password-reset links, which always send so staff can never be locked out of their own account. Separately, and not a setting: if a patient's email address permanently bounces or reports the practice's email as spam, the platform automatically stops emailing that one address going forward.
  • Sign drafts within (days) β€” leave blank to disable (the default). Set a number and a DRAFT clinical note left unsigned past that many days gets flagged overdue by a nightly job β€” an indefinite draft is a real delay of the patient's access to it, since a draft never appears in the portal.

Features

Settings → Your practice → Features lists the features your practice has — Text messages, Patient calls, Team Chat, Time clock, Trainings, Inventory, Expenses & bills, Imaging, E-prescribing, Online payments, Insurance claims & ERA, Eligibility checks, Patient statements, Pearl AI and Practice analytics — each On or Off. Sodlcs turns them on or off for your practice; contact Sodlcs to change one. A feature that's off is simply hidden: its menu item, chart section, Settings card and Portal page don't appear, and an old link to it shows "This feature isn't turned on for your practice." Nothing in it is deleted — when it's turned back on, everything is there as it was.

Communication

πŸ”’ Admin only

One card, under Patients & communication, with two things you set and one you read, plus the cards for your practice's texting number and calling number. "Enable SMS text messaging with patients" is the practice-wide on/off for texts the practice sends; with it off, the compose box is greyed out on every text conversation. Texts patients send in are received either way, and appear on the SMS tab of Patient Communication. It never overrides a patient's own consent: a patient who hasn't agreed to be texted is never texted, whatever this is set to.

Getting a texting number. Sodlcs gets your practice a new number to text patients from. You don't need a texting number already, and your office's existing phone number isn't used for texting β€” what you fill in is about your business, not a phone line (the Contact phone box is your office phone for patients to call; texts never come from it). US phone carriers require every business that texts to be registered first. Your Admin or Office Manager does this once, here in Settings β†’ Communication under Get a texting number (an Office Manager finds it at Settings β†’ Patients & communication β†’ Texting & calling numbers) (like setting up Online payments): click Register your business, enter your business exactly as the IRS has it β€” legal business name, EIN, legal form, address, and the contact email and phone patients should use β€” click Save details, then Submit for registration. Sodlcs takes it through the carriers from there. It usually takes 5–8 weeks; the card shows each stage (your business, then how you text, then your number) with its date, and appointment reminders keep going by email meanwhile. If the carriers ask for changes, the card shows their reason β€” fix what it names and click Resubmit (a name or EIN that doesn't match the IRS record is the usual cause). Once it's active, the card is titled Your texting number and shows your number, and Connection status reads "Connected" (before that it reads "Not connected"). Only then can you switch texting on: click Edit, tick Enable SMS text messaging with patients and save β€” until the number is active the section says "You can switch texting on once your texting number is active." Patients will see this new number, so it's worth telling them your practice now texts from it. Other staff don't have Settings, so they don't see this card.

Older shared-number setup only β€” "Texts are sent from this number": leave this blank and your texts go out from the shared Sodlcs number, which is the normal setup for most practices. Blank means "sharing the platform number," not "something's missing." Fill it in only once this practice has its own texting number set up: patients then see your own number, and their replies come straight back to you. The read-only Connection status line underneath says whether this practice has real texting credentials at all ("Connected" or "Not configured yet").

Getting a calling number. So dentists and hygienists can call patients without showing their own cell, your Admin or Office Manager sets up a calling number once, here under Get a calling number (an Office Manager: Settings β†’ Patients & communication β†’ Texting & calling numbers): click Set up calling, check the Name patients see (up to 15 letters, numbers and spaces) and click Get a calling number. Patients who call that number back are put through to your office phone (Settings β†’ Your practice β†’ Practice branding); to send them somewhere else, tick Put them through to a different number instead and type the number. It's ready within seconds — no weeks of review like texting — and Sodlcs picks a local area code when it can: your office phone's first, then nearby ones in your state. The card is then titled Your calling number and shows the number patients see and where callbacks go; if your office phone changes, callbacks follow it unless you chose a different number. The name takes the phone networks usually 1–2 weeks to list (Sodlcs files it); until then patients see the number only, and some phones only ever show the number. Edit changes the name or where callbacks go; Turn calling off stops all patient calls without giving up the number. Other staff don't have Settings, so they don't see this card.

Notice of Privacy Practices

πŸ”’ Admin only

Its own card, under Patients & communication rather than under Security & compliance: a text box for the notice's full wording and a separate Version field (a date like "2026-09-10" works fine). Nothing shows to any patient until both are filled in. Editing just the wording, without changing the version, leaves every patient's existing acknowledgment in place β€” for a typo fix, that's what you want. Changing the version is how you tell the system "this is a real update" β€” it immediately un-acknowledges every patient, so they see the full-screen notice again the next time they sign into the portal. See Patient Portal β†’ Notice of Privacy Practices for what that looks like on their side.

Text message consent

There is no Settings card for this. The wording a patient reads before agreeing to be texted isn't something you write. Since 2026-09-29 that wording is part of the Text Message Consent form itself — the same as the Consent for Treatment and Financial Responsibility forms, which have never had a settings card either. Nobody has to write it, and nothing has to be filled in before your front desk can start asking patients to sign.

See Patient Communication → text messages for how a patient actually signs it, and the patient chart for where it shows up.

Switching over from your previous software

πŸ”’ Admin only

Its own card, under Patients & communication, with one switch: We've switched over. Turn it on the day you stop using your old software. Until then, appointments and treatment plans brought over from it stay quiet: no reminder emails, no automatic consent forms, and no requests for patients to accept imported plans in the Portal. Notes and history brought over aren't held back: they're in the chart, and signed notes in the patient's Portal, straight away. Patients also can't cancel a moved-over appointment in the Portal until it's on β€” they see "Call us to change". Your staff see everything that was brought over straight away, whichever way it's set. Until it's on, a moved-over appointment with planned work doesn't count toward the consent missing badge or the Day Sheet's chip either (nothing will prepare its form yet).

When you turn it on, the card tells you how many moved-over appointments had already passed and still show as scheduled: open each one on the Calendar and set what really happened (completed, no-show or cancelled). Sodlcs never marks those No-show on its own, because those visits happened in your old system. From the moment you switch over, a moved-over appointment that takes place in your office is treated like any other: it marks its chair as needing cleaning once the patient is checked out, it shows on the Charting worklist if nothing was charted for it, and it gets its reminders and consent forms. That includes appointments brought over by a later migration, after you switched over β€” "switched over" means you're live. The card shows the date you switched over. (Before this card existed, the same switch was a tick box under Appointment reminders called "Also send reminders for appointments brought over from your previous software"; if you had ticked it, this card is already on.)

Confirming the balances brought over. If your move brought over what each account owed, the card shows, for each move, the totals from your old software's aging report beside the totals now in Sodlcs β€” per age (current, 31–60, 61–90, over 90 days) and for the parts expected from insurance and from patients β€” with the difference on each line. Compare them with your old aging report; if they match, type CONFIRM and click Confirm the balances. Only an Admin can, and only once. You can't turn on We've switched over until you have (until then balances brought over are staff-only and on no statement), and Sodlcs keeps the files you sent until you have. If a line is red, the totals don't match: nothing can be confirmed and nothing was changed β€” contact Sodlcs. If you had already switched over when a later move brings balances over, those balances stay staff-only until you confirm them (the balances you'd already confirmed stay as they are). If Sodlcs undid a move but some balances stayed β€” because your staff had already used those accounts β€” the card lists them under Balances kept after undoing the move: type CONFIRM to keep them. Until you do, patients don't see them and you can't switch over.

Rows held back when the balances came over. Sometimes a balance on your old report can't come over when Sodlcs brings the balances in β€” the account had been closed in Sodlcs, the patient was no longer active, or the patient already had a balance from an earlier move. Those rows are listed on the card, each with its row number, the patient's ID in your old software, the amount and why, and the comparison leaves them out (an extra Held at import column shows how much). Sodlcs reviews each one first; then tick every row once you've looked it up in your old software β€” those balances need to be entered or settled separately β€” and confirm. If the card says you can't confirm yet, it says why (for example, Sodlcs is still reviewing the held rows); there's nothing for you to do until then.

Documents from your switch-over, listed on the same card: the signed balance reconciliation (a PDF with both sets of totals and who confirmed them, when β€” totals only, no patient names) and the history of old transactions as a spreadsheet. Click the download button beside one to save it. Sodlcs keeps them; releasing the files you sent never removes them. If a move is undone (reverted), its history spreadsheet β€” it names patients β€” is taken off this list, but kept, never deleted.

Your old system's audit trail. Your old software kept a record of who looked at or changed each patient's information, and HIPAA asks you to keep that record for at least 6 years β€” even after you stop using the software. Before you switch it off, export its audit trail or access log (any file type) and send it to Sodlcs through your secure upload link (Your old system's audit trail β†’ Send the audit trail), or give it to the Sodlcs team. It isn't mixed into Sodlcs's own audit log: it's kept as one read-only file, Audit trail from <your old software>, protected so nobody can delete or change it, and listed here with the date it's kept until (6 years from when it arrived). Only an Admin can see and download it (this card is Admin-only), and every download is recorded. To keep it longer (some states require it), an Admin clicks Keep longer, enters the number of years (counted from when it arrived) and clicks Save; it can be lengthened, never shortened. Nothing removes it automatically, and undoing a move never touches it; only Sodlcs can release it, and only after that date.

Show imported documents in the Patient Portal. Files brought over from your old software β€” scanned forms, letters, x-ray and photo documents, insurance cards, consent scans β€” are not shown in your patients' Portal at first: old systems often have documents filed under the wrong patient, and showing one to the wrong person would be a privacy breach. Your staff see every one of them in the chart straight away. Once you've switched over, tick the kinds of document you're confident in (Consent form, Treatment plan, X-ray, Photo, Referral, Insurance card, Correspondence, ID, Other) and click Save Portal documents; patients then see brought-over documents of those kinds, each with its own date from your old software (not the day it was moved over). The boxes are greyed out until We've switched over is on, and turning that off hides them from patients again (your ticks are remembered). Documents you upload in Sodlcs always show in the Portal, as before.

Show past communications in the Patient Portal. If your old software's communication log was brought over (calls, letters, emails and texts — see Patient Communication → From previous software), patients don't see it at first either: these logs often mention other people, such as family members or other patients. Once you've switched over, tick the kinds you're happy for patients to see (Phone calls, Letters, Emails, Text messages, Other) and click Save Portal communications. Patients then find them on their Messages page under Earlier messages with the office, read-only. Entries marked Internal (staff only) are never shown, whatever you tick. The boxes are greyed out until We've switched over is on, and turning that off hides them again (your ticks are remembered). A patient's records download (and a copy staff produce) includes this history too — never internal entries; the patient's own download follows the same ticks.

Schedule settings β€” Hours & closures, Chairs, Service types, Alert types, Hover card fields, Chip status icons, Schedule override PIN

πŸ”’ Hours & closures, Chairs: Admin / Office Manager πŸ”’ The other five: Admin only

Seven panels, sitting together under Your practice, that configure the Calendar page: when you're open, your chairs, color-coding, flag icons, hover-card content, which built-in status markers (Completed, No-show, Checked In, In Progress) show right on the chip, and the PIN that lets someone book into a closed day β€” see the Calendar section above for what each one does. They're ordered the way you'd fill them in setting up a new office: hours and closures first, then chairs, then how appointments get labelled and flagged, then what the schedule chooses to display, and the override PIN last.

Time off & payroll

πŸ”’ Admin only

One field: Standard workday (hours) β€” how many hours one full day off counts as on the Time Clock report's payroll summary (8 by default; set it to 10 if the practice runs four-by-ten shifts). See Staff Time Clock for where that number is used.

Custom reports

πŸ”’ Admin / Office Manager

One of only five cards on this page an Office Manager can open β€” the others are the read-only Features list, Insurance & payers and the schedule's Hours & closures and Chairs panels.

A list of the custom reports your practice has saved β€” name and how many columns it has, with edit and delete via the pencil/trash icons on each row. This list doesn't build reports itself: click New custom report and it takes you to the report builder on the Reports page (also reachable directly from there via "Build a custom report β†’"), where a source, its fields, filters, and totals are all picked. See Reports β†’ Custom Report Builder for the full how-to.

Online Payments

πŸ”’ Admin only

Admin only β€” starting a Stripe connection is Admin-only, enforced automatically, so this card is one of the sections an Office Manager does not see even though they can open Settings for their own four. This is a deliberate policy, not a placeholder.

Connects your practice to Stripe so it's ready to take patient payments online β€” this card is about getting connected, nothing more yet (see the callout below). Click Connect Stripe and you're taken to Stripe's own secure, hosted onboarding form to enter the practice's bank account and tax details directly with Stripe β€” Sodlcs never sees or stores that information. Every practice has its own separate Stripe connection: money from a payment goes straight to that practice's own bank account, never pooled through a shared Sodlcs account, since each practice is its own independent business. After you start the connection it can take a little while for Stripe to finish confirming everything (identity verification); the status shown on this card updates on its own once that's done β€” no need to refresh the page or click anything further. (While it's waiting, the card quietly re-checks every 10 seconds and flips itself to Connected the moment Stripe confirms; it stops re-checking once connected.) If the connection was left unfinished, the same button reappears as Finish connecting Stripe so you can pick up where you left off. If the status check itself can't get a response, the card says so instead of wrongly showing the practice as not connected.

πŸ“‹
The card now tells you exactly what Stripe is waiting on "Started but not finished yet" can show up even after you've filled in every field of Stripe's own form β€” Stripe sometimes still wants to see something specific, like a photo ID, before it will let a practice actually take payments. Whenever that's the case, the card now lists it in plain English right underneath β€” a "Stripe still needs:" list for whatever is actually holding things up, and a "You'll also be asked for:" list for anything Stripe will want later but isn't blocking yet, so you know everything you'll eventually need up front rather than discovering it one item at a time. A fully connected practice sees neither list. Click Finish connecting Stripe to go back and provide whatever's listed β€” you'll land right back on this page afterward.

Once you've started connecting, a Disconnect button appears. Clicking it asks you to confirm first, explaining exactly what happens: this practice loses the ability to accept online payments until reconnected; the Stripe account itself is not deleted or deauthorized β€” it still exists on Stripe's own platform, just no longer linked here; and connecting again afterward creates a brand-new connection rather than relinking the same one, so there's no way to undo a disconnect except starting over.

⚠️
Getting connected isn't the same as taking a payment This card only gets a practice connected to Stripe and ready. Actually charging a patient's card, issuing a refund, and the receipts that come out of both live on the patient's chart and in the Patient Portal, not on this Settings page β€” see Patient Billing β†’ Taking an online payment for where to find them day to day.
PART 5 Patient portal

What patients see β€” the Patient Portal

A completely separate, patient-facing app β€” its own passkey login, its own URL, and access strictly limited to that one patient's own information. Useful to know well, since you'll be the one explaining it to patients when you invite them.

How a patient gets in

  • Registering. The patient opens the invite you issued (emailed link, the QR code on a printed Doctor's Note or After Visit Summary, or a copied link), picks a username, and confirms with Face ID / Touch ID / fingerprint / PIN. The invite is personal, works once, and expires after 7 days; issuing a new one replaces the old β€” so "my link doesn't work" is always solved by issuing a fresh invite from the Portal access card.
  • Password sign-in works the same two-step way as for staff: correct password, then a 6-digit code emailed to the address on file. A patient with no email on file can only sign in with a passkey until the office adds one. Five wrong passwords lock the username for 15 minutes.
  • Inactivity lock. The portal locks after 30 minutes without activity (an Admin can change this in Settings β†’ Security & compliance β†’ Security & sessions), with the same "Still there?" countdown and sign-in-in-place lock screen as the staff app.

🏠 Home

A welcome screen showing their next appointment, quick links into the rest of the portal, and β€” only while a treatment plan is waiting for their decision β€” a card reading "You have a treatment plan to review" that jumps straight to Treatment Plans.

πŸ“… Appointments

Upcoming and past visits. Patients can book a new appointment themselves β€” it goes straight onto the provider's schedule and is confirmed on the spot, with no request or approval step in between, which is what the portal now tells them in so many words. They pick a provider, a date, and an open time slot pulled live from that provider's real availability (lunch breaks, closed days, and practice closures are correctly excluded, not just already-booked times) β€” plus an optional "What do you need?" note in their own words (e.g. "a cleaning" or "tooth pain on the upper left"). That note is just a note for the front desk to read β€” booking from the portal never sets a clinical service type or its duration; staff assign the real one from the chart once they've seen the request, the same as they always have. And cancel an upcoming one β€” cancelling asks the patient to confirm first, so a stray tap in a list of several visits can't cancel the wrong one by accident. And Reschedule an upcoming one (next to Cancel): the patient picks a new date and one of the same provider's open times long enough for that visit, then clicks Move appointment. The visit moves there with everything else unchanged β€” same provider, same length, same kind of visit β€” and its old time opens up. If the time was taken a moment before, the patient is told and can pick another. Appointment reminders are sent again for the new date. Past visits can't be cancelled or changed from the portal, and neither can visits moved over from your previous software until you turn on We've switched over in Settings (you're still running the old system until then) β€” the patient sees Call us to change instead. Past visits show their full date, year included. The open time slots shown while booking update in the background every 30 seconds, so a slot someone else just took won't be offered β€” but the patient's own list of upcoming/past visits only updates when they book, reschedule or cancel something themselves, or when they leave the page and come back, so if staff reschedule or cancel a visit for them on your end, it won't change on their screen until they reload it.

Those rules are enforced, not just displayed: a patient cannot end up with a visit outside your practice hours, on a closed day, during a closure, or in your lunch block, even if their browser or an old saved link tried to send one. There is no patient equivalent of the override PIN β€” staff can deliberately book outside hours when they need to, patients never can. Patients can move a visit to another time with the same provider from the portal (Reschedule), under the same rules. To change a visit's provider or its length, they call the front desk and you change it from the chart.

Online booking limits (since October 2026). A visit booked online can be at most 120 minutes long ("An online booking can be at most 120 minutes β€” call us for a longer visit"), a patient can hold at most 3 upcoming visits they booked online at once (visits the office booked for them don't count), and the "What do you need?" note is limited to 1,000 characters. Two people can't grab the same slot: if someone else books it a moment first, the patient is told and picks another time.

Times are always the practice's. Appointment times, and the first day the booking calendar offers, are shown in the practice's own time zone β€” so a patient whose phone is set to a different zone (or who is travelling) still sees 9:00 AM for a 9:00 AM visit. If a cancel doesn't go through, the dialog stays open and says why.

πŸ›‘οΈ Insurance

See what's on file, and request adding a new policy, editing an existing one, or removing one β€” see Insurance above for how staff handle these requests. A rejected request shows staff's own note if they left one; if not, the card just says the front desk didn't accept it and to contact the practice for details.

🩺 Health Record

Covers everything the practice holds about a patient, not just procedures and notes β€” formerly called "History." Four tabs (three if your practice doesn't have e-prescribing turned on β€” then there's no Prescriptions tab), each loaded only when clicked:

Procedures & Notes β€” a read-only list of completed procedures and services, plus work that was already there or done by another office (marked Existing) and findings noted on a tooth (marked Condition), most recent first (anything still planned or cancelled never shows up here β€” that's what Treatment Plans is for; never a CDT code, only the plain description), plus every clinical note your provider has signed, shown automatically with no extra step on the practice's end. A note withheld for a documented reason still appears with a "Withheld" badge and no content β€” "This note is currently withheld. Contact the practice for details." Notes keep their line breaks as written. The notes half of this list refreshes itself once a minute, and immediately when the patient switches back to the tab, so a staff member withholding/restoring a note β€” or an accepted amendment appearing as a new addendum β€” shows up without the patient needing to reload the page. The procedures half doesn't refresh itself the same way, so a procedure charted while the patient has this tab open appears the next time they visit or reload it.

Medical Info β€” your medical history (conditions, medications and allergies as recorded, physician contact), your current medications and allergy list exactly as the practice's e-prescribing system tracks them, and your full tooth chart β€” the same graphical, per-surface chart your provider sees (read-only here; see Procedures, tooth chart & clinical notes above for how to read it).

Prescriptions β€” every prescription once it's been signed (a still-in-progress draft never appears), with the medication, directions, quantity/refills, status, and which pharmacy it was sent to.

Documents β€” every document on file, open any of them right from the page. Renamed from "Documents & Imaging" now that imaging has left the portal β€” a patient's own X-rays/photos no longer show up here on their own; if staff release one to a patient (see Imaging above), it appears in this same list as a regular document they can open, with no special treatment distinguishing it from any other file. Documents from the practice’s old software β€” files brought over when the practice moved to Sodlcs β€” appear here only once the practice has switched over and chosen to show that kind of document (Settings β†’ Switching over); until then they're in the chart for staff only.

At the top of the page, two buttons β€” Download (PDF) and Download (JSON) β€” each generate the complete record fresh on demand, covering every tab above plus the full account ledger; nothing about it is ever saved anywhere else. The PDF is the practice-branded document patients already knew; the JSON download gives the same information in a plain structured file for a patient who wants their record in a machine-readable form instead. A patient who can't or won't use the portal isn't stuck β€” staff produce the identical record from the chart instead; see Producing a patient's records.

πŸ“‹ Treatment Plans

Any plan the office has presented (see Treatment plans above), with its itemized fees and the estimated insurance/patient split. The patient can Accept a plan β€” typing their full name and checking a box acknowledging that these are estimates and they're responsible for any balance insurance doesn't cover β€” or Decline it with an optional reason, and a red count badge appears on this nav item while a plan is waiting for their decision. Draft plans are never shown here. Plans from your previous office's software show too, but until the practice turns on We've switched over, one that was only proposed there has no Accept or Decline button β€” it reads "Your dental office will go over this plan with you.", and it doesn't count toward the badge. Staff can still record the patient's acceptance in the office.

πŸ“š Care Materials

Education content shared with them by staff (see Consent & education), available in English and Spanish. A red count badge appears on this nav item whenever something new has been shared and not yet opened; it clears the moment they visit the page.

βœ‰οΈ Messages

The email-style side, laid out as a mailbox: an Inbox of what the practice has sent them and a Sent box of what they've sent the practice, Inbox first. Anything unread has its subject in bold, and that's the only "new" marker on the page. Tapping New message asks "What would you like to do?" β€” four of the seven choices open a message (refill, a question for the care team, billing or insurance, feedback) and three take the patient to the page that already handles that job instead (records download, record correction, appointments). They see no status β€” "Waiting on patient" and the rest are staff-only, so don't refer to them when writing to a patient. No Drafts box. Own red count badge, cleared by opening the message. See Messages for how staff work these.

🧾 Billing

The patient's family account balance (with any part still expected from insurance shown as Insurance pending), a Pay now button whenever there's an amount due, online payments are switched on for the practice and it has finished connecting Stripe β€” until then the button simply isn't there, so a patient is never offered a payment that can't go through (see Settings β†’ Online Payments), a list of statements sent to this account with View and Download for each one's PDF, and a read-only ledger of charges and payments (see Patient Billing above) β€” the same running history staff see, minus anything they can act on, and never a CDT code. Pay now opens Stripe's own secure card-entry form right in the page; the practice never sees or stores the card details.

πŸ“ Forms

Renamed from "Documents" (see the note under Health Record's Documents tab above β€” once imaging left that tab, two nav destinations one level apart would otherwise have shared the identical label for genuinely different things). Forms the office has prepared show here, waiting for a signature β€” a red count badge appears on this nav item while any are pending. Review the form (procedures show as description and fee only, never a code), type your full legal name, and sign with a finger or mouse. You may see more than one treatment consent waiting at the same time: these are per-visit, so if you have two appointments booked with planned work, each gets its own form and each is labelled with the visit it belongs to β€” sign them both, and check the date on each so you know which visit you're agreeing to. (The financial responsibility form is the exception; there's only ever one of those, not one per visit.) No paper, no front-desk visit required β€” though the office may also hand you a paper copy to sign instead, in which case it shows up here as already signed once they've scanned it in. Anything already signed shows a View button to look back at what was agreed to β€” the content, the itemized treatment, and the actual signature, not just a signed date. Anything you've signed stays on this list for good β€” the office also files a copy into your chart's own Documents overnight, but that's a records copy, not a move, and it never removes the form from this page. Consents signed before the practice moved to Sodlcs β€” when it moved and brought its signed consent scans over β€” appear here as already signed, together with the signed scan in Documents, once the practice has switched over and chosen to show consent forms (Settings β†’ Switching over). Until then patients don't see them; staff always do.

πŸ‘€ Account β€” My information

First card on the Account page: what the practice has on file for them. Their name and date of birth are shown but can't be edited β€” the card says so, and links them down to Request a correction β€” because insurance and claims are matched on those. Everything else on the card is theirs to change: phone, email, address, city, state and ZIP. Saving sends it to you rather than changing their chart, and the card then says "You asked us to update these on ⟨date⟩ β€” we'll apply it shortly", still showing the current details until someone at the desk accepts it. Saving again replaces what they sent before, so there's only ever one thing waiting per patient. Their side also warns them that changing their email moves where their sign-in codes are sent. On your side it shows up on their chart above Contact info β€” see Contact info, emergency contact & guarantor.

πŸ‘€ Account β€” Communication preferences

Only visible to the account's actual guarantor (whoever's financially responsible β€” a family member on the same account who isn't the guarantor doesn't see this). One checkbox: "Don't email me when a new statement is ready β€” I'll check the portal myself." Checking it doesn't stop statements from being created or from showing up once you sign in β€” it only turns off the email notification about a new one.

πŸ‘€ Account β€” Request a correction

Ask the practice to fix something in your record β€” pick what it concerns (personal information, medical history, insurance, or something else) and describe what's wrong and what it should say instead. Every request you've sent lists below with its status β€” Pending, Accepted, or Denied β€” and the practice's own note once they've acted on it. If a request is denied and you disagree, a File a statement of disagreement button lets you say so in your own words, which becomes a permanent part of that request's record. If your request was about a specific signed clinical note and gets accepted, look for it under Health Record β†’ Procedures & Notes as a new entry with an "Addendum" badge naming which original note it corrects β€” the original note itself is never rewritten.

πŸ”
Strictly self-scoped There is no way for a patient to see or reach anyone else's data through the portal β€” every screen only ever shows their own record. The one deliberate exception is the guardian switcher described below, which still only ever works because a staff member explicitly granted it.
📋
Long lists show the most recent 200 Notes, documents, forms, statements, prescriptions, care materials and insurance requests each show the patient's most recent 200. When there are older ones, the page says "Showing your most recent 200. For older ones, please contact our office." β€” the full record is always in the Health Record download, or staff can produce it from the chart.
🔒
Signing out really clears the screen Signing out, the inactivity lock, or a different patient signing in on the same device clears everything the portal had loaded β€” so the next person never sees the previous patient's information. Downloads and document views that fail now say so (instead of leaving a blank tab), and a guardian whose access to a child was withdrawn simply returns to their own record rather than getting errors. While a guardian is acting for a child, the header shows Viewing: <name>.

Notice of Privacy Practices

Once a practice has published one (Settings β†’ Notice of Privacy Practices), a patient who hasn't acknowledged the current version sees it the moment they sign in β€” a full-screen notice they have to read and click "I acknowledge this notice" on before doing anything else in the portal. It isn't dismissable by clicking outside it or pressing Escape, the same way the inactivity lock screen isn't. If the practice later revises the notice in a way that bumps its version number, every patient sees the gate again, even if they'd already acknowledged an earlier version.

Text messages

On the Account page, whenever your practice has text messages turned on, a Text messages card says whether the patient has agreed. A patient who hasn't sees Turn on text messages, which opens the consent form to sign (one already waiting reads Sign the consent form); once signed, the button reads Stop texting me and withdraws it in one tap. The practice cannot text a patient who has not signed, or who has withdrawn it, and that is enforced on the server, not by the button.

This is the best possible record for the practice, because the patient signed it themselves with the wording on the screen in front of them: their chart's consent history shows it as "Recorded by the patient themselves," with no staff member named. Nothing about it needs the front desk at all.

If the patient previously replied STOP to a text, the card says so and explains that their phone company is holding that block — using this card does not lift it, and they need to reply START to the same number. Replying START only lifts the phone company's block; it doesn't turn texting back on by itself β€” a patient who withdrew also needs to sign the form again.

Guardian switcher

If a staff member has granted you access to a minor's chart (see "Guardian access" under The patient chart above), a small dropdown appears in the portal's header, next to your name, listing your own name and every minor you can currently act for. Picking a different name switches every page you're on to show that person's information instead of yours, until you switch back β€” nothing needs a page reload. This dropdown only ever appears once you actually have access to someone besides yourself.

PART 6 Reference

Glossary

CDT codeA standardized dental procedure code (e.g. D1110 = adult cleaning) β€” the industry-standard way procedures are named and billed.
PasskeyA secure, device-based login (Face ID / fingerprint / PIN) β€” the recommended way to sign in, with a username/password fallback also available β€” see Logging in.
PayerAn insurance company the practice bills.
Fee scheduleA payer's rate sheet β€” what they pay for each procedure code, possibly at more than one tier.
GuarantorThe person financially responsible for an account β€” usually a patient, sometimes an outside party who isn't a patient at all. See Patient Billing.
AccountThe billing unit a guarantor and everyone billed under them share β€” one running balance and one ledger, even when several family members are on it. See Patient Billing.
LedgerThe complete, add-only running list of charges, payments, adjustments, and refunds posted to an account β€” never edited or removed after the fact, only ever added to or reversed with a new entry. See Patient Billing.
AR (Accounts receivable)The total amount patients currently owe the practice across every account, and how long it's been outstanding. See Practice Analytics.
ProviderA schedulable dentist or hygienist β€” see Providers.
PHIProtected Health Information β€” any patient data covered by privacy law, and the reason every access is logged (see Audit Log).
Diagnostic / Preventive / Restorative / Endodontics / Oral & Maxillofacial SurgeryThe standard procedure categories used throughout the app β€” respectively: exams & X-rays; cleanings & fluoride; fillings, crowns & repairs; root canals; and extractions/surgery.
Continuing careA recurring recall schedule for a patient (e.g. a 6-month cleaning cadence) β€” see Recall & Waitlist.
Soft deleteHow Sodlcs Health "deletes" a patient or staff record β€” it's marked inactive and hidden from normal use, never actually erased, so history is never lost.
Par levelThe target stock level for an inventory item β€” how much you want on hand when fully stocked. Falling too far below it is what triggers a low-stock alert β€” see Inventory.
VendorA business the practice deals with β€” a supplier it orders inventory items from, a business that bills it (rent, lab fees, utilities...), or both. One shared list; contact info and ordering instructions are recorded once per vendor. See Inventory and Expenses.
BillA record of money the practice owes or has paid to a vendor β€” the amount, what it's for, and whether it's been paid yet. See Expenses.
↑