Dentolize · Dynamic Clinic Seeder Walkthrough
On this pageThe dashboard — a clinic mid-flightPatients — the billing matrix at a glanceInvoices — the numbers reconcileTreasury — funded from day oneInventory — bought and consumedInsurance — region-matched insurersStaff roster — roles, permissions, and loginsThe calendar — a working schedule

Feature Tour (screenshots)

These are real screenshots captured from the live branch sandbox at feat-sandbox-seed.sandbox.anastawfik.com, logged in as the seeded owner. Everything you see was produced by the dynamic seeder in descriptive naming mode, Saudi Arabia preset, sandbox "small profile" scale (1 branch, 2 doctors, 12 patients, ~3 months of history).

Because it's descriptive mode, the record names double as labels — "Patient 011 · Insured 50%", "Dr 1 · 45% Commission · Salary 4000". For polished visuals, the seeder can instead use realistic localized names (see For Marketing).


The dashboard — a clinic mid-flight

Dashboard: the Invoices panel lists seeded invoices with descriptive patient names, payment-progress rings (0% / 30% / 70%), amounts, and history reaching back
Dashboard: the Invoices panel lists seeded invoices with descriptive patient names, payment-progress rings (0% / 30% / 70%), amounts, and history reaching back "3 months ago".

The moment you log in, the dashboard is populated: an invoice feed with real amounts, payment-progress indicators, and timestamps spread across the seeded history. This is what "rich seed" buys you over an empty preview.


Patients — the billing matrix at a glance

Patients list: 12 patients whose names encode their billing scenario —
Patients list: 12 patients whose names encode their billing scenario — "Patient 004 · Cash · VAT-Exempt", "Patient 011 · Insured 50%", "Patient 001 · Insured 60% · VAT-Exempt" — with populated Total Payments and Remaining columns and Saudi (+966) phone numbers.

Descriptive naming shines here. Each patient's name tells you whether they're cash or insured (and at what percentage) and whether they're VAT-exempt — so QA can pick exactly the test subject they need straight from the list. The Total Payments and Remaining columns are the denormalized lifetime totals the seeder accumulates across every visit. Filters for branch, doctor, insurance company, policy class and tags are all backed by seeded data.


Invoices — the numbers reconcile

Invoices list: 26 invoices for the Riyadh Clinic branch with Total, Paid, Insurance and Remaining columns; insured patients show non-zero Insurance amounts (e.g. 244.38, 5,462.50), cash patients show 0; payment-progress rings show 50% / full states.
Invoices list: 26 invoices for the Riyadh Clinic branch with Total, Paid, Insurance and Remaining columns; insured patients show non-zero Insurance amounts (e.g. 244.38, 5,462.50), cash patients show 0; payment-progress rings show 50% / full states.

Twenty-six invoices, each with a Total / Paid / Insurance / Remaining breakdown. Insured patients carry an insurance portion; cash patients don't. VAT is baked into the totals, discounts appear on a quarter of visits, and payments land in every state — full, partial, none. See The money model for the exact arithmetic behind each row.


Treasury — funded from day one

Treasury: three treasuries for the Riyadh Clinic — Bank Account (114,872), POS Terminal (4,845), Main Cash (132,744.32) — each typed Bank / Card / Cash.
Treasury: three treasuries for the Riyadh Clinic — Bank Account (114,872), POS Terminal (4,845), Main Cash (132,744.32) — each typed Bank / Card / Cash.

Every branch gets three treasuries — cash drawer, card/POS terminal, and bank — created by S-2. Owner capital is injected into the bank before any spending, so balances stay positive as equipment is bought, stock is purchased, expenses are paid, and patient payments flow in. The balances you see are the net of all that seeded activity.


Inventory — bought and consumed

Inventory Items: 15 dental consumables (Dental Cement, Cotton Rolls, X-Ray Film, Prophy Paste, Face Masks, Bonding Agent, Fluoride Gel, Disposable Bibs…) with non-trivial Amount Available and Value columns.
Inventory Items: 15 dental consumables (Dental Cement, Cotton Rolls, X-Ray Film, Prophy Paste, Face Masks, Bonding Agent, Fluoride Gel, Disposable Bibs…) with non-trivial Amount Available and Value columns.

Fifteen realistic dental consumables from the seeder's catalog, each stocked via supplier purchases and then partially consumed on visits. The Amount Available and Value columns reflect net on-hand after that activity — not flat placeholder numbers.


Insurance — region-matched insurers

Insurance Companies: three insurers — MedGulf, Tawuniya, Bupa Arabia — matching the Saudi Arabia country preset.
Insurance Companies: three insurers — MedGulf, Tawuniya, Bupa Arabia — matching the Saudi Arabia country preset.

The insurers come straight from the Saudi Arabia country preset (Bupa Arabia, Tawuniya, MedGulf). Each gets a policy and several policy-class tiers (Class A–D at 100% / 80% / 60% / 50% coverage), which is what the insured patients are attached to. Switch the country to AE and you'd get Daman, AXA Gulf, and Oman Insurance instead.


Staff roster — roles, permissions, and logins

Users list: six seeded users — Owner · All Permissions, Dr 1 · 45% Commission · Salary 4000, Dr 2 · 35% Commission · No Salary, Receptionist, Accountant, HRManager · Accountant ++ — with their permission groups (Owners, Doctors, Reception, Accountant, Accountant ++) and usernames (owner, doctor1, doctor2, receptionist1, accountant1, hrmanager1).
Users list: six seeded users — Owner · All Permissions, Dr 1 · 45% Commission · Salary 4000, Dr 2 · 35% Commission · No Salary, Receptionist, Accountant, HRManager · Accountant ++ — with their permission groups (Owners, Doctors, Reception, Accountant, Accountant ++) and usernames (owner, doctor1, doctor2, receptionist1, accountant1, hrmanager1).

This is the roster the PR comment advertises. Names encode role · permissions · salary/commission; each user is wired to the right permission group and has a predictable username. Every login shares one password, so QA can jump between roles instantly to test permission boundaries.


The calendar — a working schedule

Calendar: the day view for Sunday 19 July 2026 showing the three seeded rooms (Room 1/2/3) and 09:00–21:00 business hours.
Calendar: the day view for Sunday 19 July 2026 showing the three seeded rooms (Room 1/2/3) and 09:00–21:00 business hours.

The calendar shows the seeded three-room layout and the 09:00–21:00 business hours set on the branch. Beyond the history of completed visits, the seeder books a batch of upcoming appointments — a few today (in mixed open / confirmed / checked-in states) and the rest across the next two weeks — so the calendar and dashboard aren't empty on arrival.