From empty system to a working knee clinic – in six steps.
One admin, two staff, three medical staff, one knee-treatment catalog.
This guide walks you through the exact order of operations: what to create first, what depends on what, and which CSV file belongs in which step. Follow it top to bottom and you will have a fully working office at the end.
The steps below describe both paths. The CSV examples serve as templates – replace the sample values with your own.
| Item | Details |
|---|---|
| Office | One new office, isolated from all other offices (multi-tenant safe) |
| Users | 1 Admin, 2 Staff |
| Medical staff | 1 female doctor, 1 male doctor, 1 MRT technician |
| Procedures | Knee-treatment catalog (consultation, MRT, arthroscopy, meniscus surgery, follow-up) |
| Qualifications | Each procedure mapped to who is allowed to perform it |
| Sample appointments | A small week of knee patients to verify everything works |
RevenueForecast enforces dependencies: an appointment needs a procedure, a procedure needs a qualification, a qualification needs medical staff, and everything needs an office. If you try to import appointments first, the import will reject rows with unknown references. So we go bottom-up.
An office is the top-level container. Everything you create afterwards belongs to exactly one office. Users, medical staff, procedures and appointments are all scoped to it.
Where: Register → Create a new office (or Admin → Offices → New, if you already have an admin account).
What you enter: office name, address, time zone, default currency. Nothing else is required at this point.
offices.csvoffice_id,name,address,city,country,timezone,currency
OFF-001,Sunrise Knee Clinic,12 Bahnhofstrasse,Berlin,DE,Europe/Berlin,EUR
OFF-001. You will use this ID in every following file.
Users are the people who log in. They are not the same as medical staff (step 3) – a user is an account, a medical staff member is a resource that can be booked into appointments. In small clinics the same person is often both; in this example they are kept separate.
Roles used here:
users.csvuser_id,office_id,email,first_name,last_name,role,password_temp
U-001,OFF-001,admin@sunrise-knee.example,Anna,Weber,Admin,ChangeMe!2026
U-002,OFF-001,frontdesk1@sunrise-knee.example,Lena,Hoffmann,Staff,ChangeMe!2026
U-003,OFF-001,frontdesk2@sunrise-knee.example,Jonas,Richter,Staff,ChangeMe!2026
password_temp column is only for the initial import. Users are forced to change it on first login. Never keep this file after import.
Medical staff are the resources that appear in the calendar and in the coverage view. They have a role that determines which qualifications they can hold.
Gender is a plain field (f/m/x) so the calendar can show the correct salutation and, if you later add it, gender-specific scheduling rules.
medical_staff.csvstaff_id,office_id,first_name,last_name,role,gender,email,weekly_hours
MS-001,OFF-001,Sofia,Lindqvist,Doctor,f,s.lindqvist@sunrise-knee.example,40
MS-002,OFF-001,Marcus,Brandt,Doctor,m,m.brandt@sunrise-knee.example,40
MS-003,OFF-001,Tobias,Neumann,MRT Technician,m,t.neumann@sunrise-knee.example,38
A qualification is a capability. Procedures require qualifications; staff hold qualifications. RevenueForecast checks at booking time whether at least one person on shift holds every required qualification.
| Qualification ID | Name | Held by |
|---|---|---|
Q-ORTHO | Orthopedic consultation | Dr. Lindqvist, Dr. Brandt |
Q-SURG | Orthopedic surgery | Dr. Lindqvist, Dr. Brandt |
Q-MRT | MRT operation | Tobias Neumann |
Q-FOLLOW | Post-op follow-up | Dr. Lindqvist, Dr. Brandt |
qualifications.csvqualification_id,office_id,name,description
Q-ORTHO,OFF-001,Orthopedic consultation,Initial assessment and diagnosis
Q-SURG,OFF-001,Orthopedic surgery,Surgical procedures on the knee
Q-MRT,OFF-001,MRT operation,Operating the MRT scanner
Q-FOLLOW,OFF-001,Post-op follow-up,Post-operative check-ups
staff_qualifications.csvstaff_id,qualification_id
MS-001,Q-ORTHO
MS-001,Q-SURG
MS-001,Q-FOLLOW
MS-002,Q-ORTHO
MS-002,Q-SURG
MS-002,Q-FOLLOW
MS-003,Q-MRT
Each procedure has a duration, a price, a color (for the calendar) and a list of required qualifications. The example below is a realistic knee pathway from first consultation to follow-up.
| Procedure ID | Name | Duration | Price (EUR) | Required qualification |
|---|---|---|---|---|
P-KNEE-CONS | Knee consultation | 20 min | 60 | Q-ORTHO |
P-KNEE-MRT | Knee MRT | 30 min | 220 | Q-MRT |
P-KNEE-ARTH | Knee arthroscopy | 60 min | 850 | Q-SURG |
P-KNEE-MEN | Meniscus surgery | 75 min | 1100 | Q-SURG |
P-KNEE-FU | Post-op follow-up | 15 min | 45 | Q-FOLLOW |
procedures.csvprocedure_id,office_id,name,duration_min,price,points,color,required_qualification
P-KNEE-CONS,OFF-001,Knee consultation,20,60,2,#4a90d9,Q-ORTHO
P-KNEE-MRT,OFF-001,Knee MRT,30,220,44,#8e6ec8,Q-MRT
P-KNEE-ARTH,OFF-001,Knee arthroscopy,60,850,33,#d96a6a,Q-SURG
P-KNEE-MEN,OFF-001,Meniscus surgery,75,1100,99,#c94f4f,Q-SURG
P-KNEE-FU,OFF-001,Post-op follow-up,15,45,2,#4caf80,Q-FOLLOW
required_qualification must exist in qualifications.csv (step 4). A typo here will cause the row to be rejected.
points column is only used when the practice is set to points in practice settings. In euro mode, the import ignores points and uses price instead. Both columns can be maintained independently.
Now everything exists, so appointments can finally be imported. A realistic week for this office: consultations on Monday, MRT and surgery mid-week, follow-ups on Friday.
appointments.csvappointment_id,office_id,patient_ref,procedure_id,staff_id,start,end,room
A-1001,OFF-001,PAT-0001,P-KNEE-CONS,MS-001,2026-10-19T09:00,2026-10-19T09:20,R1
A-1002,OFF-001,PAT-0002,P-KNEE-CONS,MS-002,2026-10-19T09:30,2026-10-19T09:50,R1
A-1003,OFF-001,PAT-0003,P-KNEE-MRT,MS-003,2026-10-20T10:00,2026-10-20T10:30,MRT1
A-1004,OFF-001,PAT-0001,P-KNEE-ARTH,MS-001,2026-10-21T08:00,2026-10-21T09:00,OP1
A-1005,OFF-001,PAT-0004,P-KNEE-MEN,MS-002,2026-10-21T10:00,2026-10-21T11:15,OP1
A-1006,OFF-001,PAT-0001,P-KNEE-FU,MS-001,2026-10-23T09:00,2026-10-23T09:15,R1
A-1007,OFF-001,PAT-0003,P-KNEE-FU,MS-002,2026-10-23T09:30,2026-10-23T09:45,R1
PAT-0001 appears three times – consultation, arthroscopy, follow-up. That is a full knee pathway.2026-10-21 both doctors are booked in OP1 – check the coverage view; it should show the room as fully occupied.| # | File | Depends on |
|---|---|---|
| 1 | offices.csv | – |
| 2 | users.csv | offices |
| 3 | medical_staff.csv | offices |
| 4 | qualifications.csv | offices |
| 5 | staff_qualifications.csv | medical_staff, qualifications |
| 6 | procedures.csv | offices, qualifications |
| 7 | appointments.csv | offices, procedures, medical_staff |
All eight example files are available for download: csv-examples/
procedure_id.MS-001 in OFF-001 and MS-001 in OFF-002 are two different people. Always prefix or namespace IDs.staff_qualifications.csv. Staff without qualifications will be invisible to the coverage check, and every appointment will look understaffed.users.csv row and a medical_staff.csv row for him.password_temp files around. Delete the CSV after import.RevenueForecast speichert nur, was für die Auslastungs- und Umsatzprognose nötig ist. Patientinnen und Patienten können über pseudonyme Kennungen (z. B. Patientennummern, Fallzeichen oder Initialen) referenziert werden – Klarnamen sind nicht erforderlich.
Datenschutz für Praxen · Technische Details
We can walk through this setup with you in a 30-minute online session – your office name, your staff, your procedures. You leave with a working environment.
[Get in touch] [Book a demo]