Calendar
Smart scheduling built for dental practices. Manage appointments across multiple chairs, sync with Google Calendar, send automated reminders, and handle recurring visits — all from a single interface.
Overview
Calendar is the scheduling backbone of Odento. It is designed for the realities of a dental practice: multiple operators and chairs, varying appointment durations, recurring treatment plans, and patients who need reminders across channels. Calendar integrates natively with Google Calendar for two-way sync and with Neurax for automated patient communication.
Every appointment in Calendar is more than a time slot — it carries the patient record, treatment context, assigned chair, attending staff, and billing status. This means your schedule is a live view of your practice's daily operations, not just a booking grid.
Quick Tip
Enable Google Calendar sync before adding your first appointment. This ensures every booking is reflected in your personal calendar from the start.
Screenshot — Overview
Smart Scheduling
Smart scheduling automatically finds the best time slot for an appointment based on chair availability, dentist working hours, treatment duration, and patient preferences. When a patient requests an appointment — through the web portal, WhatsApp via Neurax, or a phone call logged by staff — Calendar checks all constraints and proposes available slots.
Scheduling Rules
You can configure rules that govern how appointments are placed:
- Working hours: Set per-dentist and per-chair availability for each day of the week.
- Buffer time: Add padding before or after appointments for cleaning and setup.
- Slot granularity: Choose 10, 15, 20, or 30-minute slot intervals.
- Max daily appointments: Cap the number of bookings per dentist per day.
- Blackout dates: Block holidays, training days, or maintenance periods.
- Overlap prevention: A dentist cannot be double-booked across chairs.
Appointment Types
Each appointment type carries a default duration and color code. Common types include:
| Type | Default Duration | Description |
|---|---|---|
| Consultation | 30 min | First visit, examination, and treatment planning |
| Cleaning | 45 min | Scaling, polishing, and oral hygiene |
| Root Canal | 90 min | Endodontic treatment, often multi-session |
| Extraction | 45 min | Simple or surgical tooth extraction |
| Follow-up | 15 min | Post-treatment review and check |
Screenshot — Smart Scheduling
Google Calendar Sync
Calendar supports two-way synchronization with Google Calendar via OAuth 2.0. When you connect your Google account, appointments created in Odento appear in Google Calendar and vice versa. This is essential for dentists who manage personal schedules alongside clinic bookings.
For detailed setup instructions, see the Google Calendar integration guide.
Automated Reminders
Calendar sends automated reminders to patients through WhatsApp, email, and SMS. Reminders are triggered by workflow events — no manual intervention required. You configure the timing and channels per appointment type or globally.
Default Reminder Schedule
- 24 hours before: WhatsApp message with appointment details and a reschedule link.
- 2 hours before: WhatsApp message with clinic address and parking instructions.
- 1 hour before: Optional SMS for patients who have not confirmed.
- After appointment: Follow-up message with post-care instructions and a feedback request.
Reduce No-Shows
Practices that enable WhatsApp reminders see a 40-60% reduction in no-shows. Reminders include a one-tap confirm or reschedule button.
Chair Management
Chair management lets you model the physical layout of your clinic. Each chair is a schedulable resource with its own availability, assigned equipment, and default dentist. Calendar prevents double-booking a chair and shows you utilization at a glance.
Configuring Chairs
Navigate to Settings → Resources → Chairs to add or edit chairs. For each chair, you can set:
- Chair name and number (e.g., "Chair 1 — Ground Floor")
- Default assigned dentist
- Equipment attached (X-ray, intraoral camera, etc.)
- Operating hours (if different from clinic hours)
- Maintenance windows and blackout periods
Chair Utilization
The dashboard shows real-time and historical chair utilization. Utilization is calculated as the percentage of available time that is booked. Low utilization on specific chairs may indicate a need to rebalance appointments or adjust operating hours.
Recurring Appointments
Many dental treatments require multiple visits — root canals, orthodontic adjustments, implant procedures, and periodontal maintenance. Calendar supports recurring appointment series so you can schedule an entire treatment plan in one action.
Recurrence Patterns
- Daily: Every N days (e.g., daily dressing changes for 5 days).
- Weekly: On specific weekdays (e.g., every Tuesday for ortho adjustments).
- Bi-weekly: Every two weeks (e.g., periodontal maintenance).
- Monthly: On a specific day each month.
- Custom intervals: Define exact dates for multi-phase treatments like implants.
Editing Recurring Series
When you edit a recurring appointment, you can choose to update a single occurrence or the entire series. Editing one occurrence does not affect future visits.
Waitlist and Cancellations
When a patient cancels, Calendar can automatically offer the slot to patients on the waitlist. The waitlist is ordered by priority and the time the patient was added. When a matching slot opens, Neurax sends a WhatsApp message to the first eligible patient with a one-tap confirm button.
Configuration
Core Calendar settings are configured in Settings → Calendar. Here is a typical configuration for a single-chair practice:
{
"timezone": "Asia/Kolkata",
"slotGranularity": "15m",
"defaultBuffer": "10m",
"workingHours": {
"mon": ["09:00-13:00", "14:00-18:00"],
"tue": ["09:00-13:00", "14:00-18:00"],
"wed": ["09:00-13:00", "14:00-18:00"],
"thu": ["09:00-13:00", "14:00-18:00"],
"fri": ["09:00-13:00", "14:00-18:00"],
"sat": ["09:00-14:00"],
"sun": []
},
"reminders": {
"channels": ["whatsapp", "email"],
"schedule": ["24h", "2h"]
},
"googleCalendarSync": true,
"waitlistEnabled": true
}Was this page helpful?
Help us improve our documentation