The basic solver
What the basic solver does, and where Custom starts.
The free plan includes the basic solver. It drafts one month of call at a time. You set up your practice, press Generate, and get a draft. You review it, change what you want, and publish it. This page lists every rule it keeps, every setting you control, and what it leaves to Custom.
How it works
First you set up the practice: your sites, your shift types, who can work what, and approved time off. Then you press Generate. The basic solver fills every empty cell of the month and shows you a draft. Nothing goes live until you publish it. The solver never publishes on its own.
It fills empty cells only. Every entry you already put on the calendar stays exactly as you entered it. That is also your escape hatch. If your group handles a day in its own way, such as a holiday or a special weekend, paint that day first. The solver fills the rest of the month around it.
A draft takes seconds. It fills call shifts.
Rules it always keeps
These are hard rules. The draft never breaks one of them.
- It fills only empty cells. Entries already on the calendar stay.
- Each person gets one assignment per day.
- Each person works only the shifts they are set up for.
- Nobody works on approved vacation, an approved day off, or a must-off day.
- Nobody works before their start date or after their end date.
- A PRN clinician works only their contract weekdays.
- A shift set to “gives the next day off” gives the next day off, post-call, except inside a weekend block.
- A shift closed to post-call never goes to someone who is post-call.
- Nobody goes over their monthly call cap.
- A person with a yearly call target of zero takes no call.
Coverage comes first, but never at the cost of a hard rule. If the solver cannot fill a slot, it leaves the slot open. It names the day, the shift, and who was unavailable and why. Then you decide what to do with it.
Rules it follows when it can
These are soft rules. The solver keeps them when the month allows. When it cannot, the draft tells you which one it broke.
- If you turn on Same person Sat and Sun for a call shift, it tries to give both days to one doctor. If that shift gives the next day off, the day off falls on Monday.
- It spreads calls fairly. With no yearly target, it splits calls by FTE and by the days each person can work that month. A half-time doctor gets half the share. A doctor on vacation for part of the month gets a smaller share.
- It spreads weekend calls the same way: by FTE and by the days each person can work, or toward each person’s yearly weekend-call number.
- It follows yearly targets. A doctor with a yearly call number is paced toward it across the year, with year-to-date counted.
- It avoids giving one person two calls one or two days apart. It checks the days just before and after the month too.
- It avoids back-to-back weekends. Your practice can turn this off, and a doctor who agrees to them can be exempt.
- It avoids call the day before or after a vacation.
- It honors Prefer off and Prefer on requests.
Settings you control
Every rule above reads from settings you can see and change.
- Per shift type
- Whether it gives the next day off, whether it is a weekend block, whether it is closed to post-call, and its headcount by default, by weekday, or by date.
- Per person
- Which shifts they work, FTE, yearly calls, yearly weekend calls, a yearly offset for admin duties, a monthly call cap (Max calls per month), consent to back-to-back weekends, PRN contract days, and start and end dates.
- Per practice
- The switch for back-to-back weekends.
What the draft tells you
The solver reports twice: once before the draft and once after it.
- Before you press Generate
- Days that cannot be fully staffed, and why. Setup gaps, such as a shift with no headcount, a shift nobody is set up for, or a PRN clinician with no days.
- After you press Generate
- Open slots and the reason for each. Soft rules the draft broke. Each person’s calls and weekend calls this month, beside their expected count.
Where Custom starts
The basic solver does not do these things:
- Holidays. The solver treats a holiday as a normal day. If your group handles holiday call differently, paint it first.
- Partner tiers, fixed pairings, rolling caps such as two calls in any seven days, Friday-to-Sunday linked weekends, and day-of-week balance.
- Running alone. A person reviews and publishes every draft.
On Custom, we write your group’s rules down in a rule book and build a solver from it. It is code written for your group alone, so it handles the rules the basic solver leaves out. The app generates the draft from that solver, and your group still edits and publishes. A person tunes the solver for your group every month. Custom is a setup fee plus a monthly fee, quoted after one conversation, and your group approves the first live schedule before you pay. Talk about Custom, or read the pricing page.
How to run it
In the app, do these steps. Each one is a screen you already use.
- Set up your practice: sites, shift types, who works which shifts, and approved time off.
- Open the month you want to schedule.
- Correct each setup gap the app shows.
- Press Generate.
- Review the draft.
- Change the assignments you do not want.
- Press Publish.
You can also use an AI agent. Your practice can connect its own agent, such as Claude Code, Codex, or another MCP client, to PostCallMD. The agent sets up the practice from a photo or spreadsheet of an old schedule. It records your written rules. Then it runs the same basic solver when you say “make my first schedule”. The agent never assigns call by hand, and it never publishes. Read the walkthrough for each step.
Limits
A practice can have up to 200 clinicians and 60 shift types. Each draft covers one month.