# Balancd Platform – Requirements Catalog

Generated 2026-09-28 23:58 from the catalog app. Do not edit this file; edit in the app.

Status: Draft · Clarify (do not implement yet) · Open (ready to build) · In progress · Done · Accepted · Deferred · Rejected

Process: for every change, first submit a proposal/design for approval, then implement (PL-16).

The requirements are the reference. Where the demo differs, the deviation is listed under the requirement and must be fixed.

## Booking

### FR-01 Real-time availability per psychologist

**Priority:** Must · **Phase:** 1 · **Status:** Open

The booking page shows each psychologist's available slots in real time. A slot that is booked or held disappears for all other visitors immediately.

**Acceptance criteria**

- Two browsers open the same calendar; when one holds a slot, the other no longer sees it after a refresh (max. 5 s).
- Slots outside the psychologist's availability, during absences, blockers or existing appointments are never shown.

### FR-02 Individual calendar per psychologist

**Priority:** Must · **Phase:** 1 · **Status:** Open

Each psychologist has an individual, independently configurable calendar.

**Acceptance criteria**

- Changing the availability of psychologist A does not change the calendar of psychologist B.

### FR-03 Recurring availability, separate for online and in-person

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-42

In-person availability is derived from the room assignment (FR-07): the admin assigns rooms to psychologists per weekday and half-day, and each assigned half-day is automatically bookable in person. The psychologist can reduce this availability (e.g. mark a half-day or single hours as not available because of other commitments) and enters her online availability herself (per weekday, from–to). Admins can view and override any psychologist's availability.

**Acceptance criteria**

- Assigning room 1 to a psychologist on Tuesday morning makes Tuesday morning bookable in person for her without further input.
- The psychologist can switch off an assigned half-day or block single hours; those times are no longer offered to clients.
- Online availability is entered per weekday with start and end time; clients choosing 'online' only see those times.
- An admin can edit this availability; the psychologist sees the change.
- Client booking pages only offer slots that result from this availability, minus existing appointments, blockers, absences, the daily limit (FR-13) and the booking window (FR-14).
- In the calendar of a single psychologist, available in-person time is shown white, time available online only has a fine dotted pattern, and unavailable time is grey.
- The psychologist adjusts her availability under 'My profile → Availability', reachable directly from the calendar via an 'Availability' button.

*Note:* Psychologists can manage their own recurring availability (Availability page: add, edit, pause). Still no online / in-person marking per block, and all 7 days incl. weekend are active in the demo data. This should be managed directly in the calendar view. Availability should be connected to the room assignment. 

**Deviations in the demo – to fix**

- [ ] Availability cannot be marked as online / in-person / both. Required per block.
- [ ] In-person availability is not tied to the room assignment (FR-07).

### FR-04 Client cancels or reschedules via personal link

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-15

Clients can cancel or reschedule an appointment via the personal link in their confirmation until 48 hours before the appointment. Within 48 hours this is only possible by phone, and the appointment is charged (FR-55). The notice period is an admin setting.

**Acceptance criteria**

- Cancelling 3 days before via link works and frees the slot.
- Within 48 hours the link shows a message with the practice phone number instead of a cancel button.
- The personal link opens a page 'My appointments' listing upcoming appointments with 'Cancel' and 'Reschedule' (more than 48 hours before); rescheduling offers the free slots of the same psychologist. The psychologist is notified in the inbox (NEW-18).

**Deviations in the demo – to fix**

- [ ] Cancellation text says 24 hours. Required: 48 hours.

### FR-05 Admin, psychologist and phone bookings at any time

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-33, FR-34

Admins can view, create, edit and cancel appointments on behalf of any psychologist. They can create bookings at any time (e.g. 15:30), not limited to the slot grid, for any psychologist. Admins may book outside availability or above the daily limit after confirming a warning; booking into an absence is not possible. Psychologists can likewise create appointments in their own calendar at any time (e.g. 15:30), not limited to the slot grid or to the times offered to clients. The client receives the confirmation email automatically, including payment information where applicable.

**Acceptance criteria**

- Admin books 15:30 although the grid is hourly; appointment is saved.
- Booking above the daily limit shows a warning and requires confirmation.
- Booking into an approved absence is refused.
- A psychologist books a client for 15:30 in their own calendar although the client booking grid is hourly; the appointment is saved.

### FR-06 Team overview of open slots

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-25

Admins see all open slots across the team at a glance (day/week) to book appointments by phone, also directly from within a request (CR-22).

**Acceptance criteria**

- From one screen, an admin sees free slots of all psychologists for the current week.

### FR-07 Rooms: fixed assignment per psychologist and weekday

**Priority:** Should · **Phase:** 1 · **Status:** Open · **Also:** CR-46, CR-69

Balancd has 1 location with 4 rooms. Admins record the rooms and assign rooms to psychologists per weekday/time block. In-person availability exists only where a room is assigned; a room cannot be assigned twice at the same time.

**Acceptance criteria**

- Assigning room 2 on Tuesday morning to two psychologists is refused.
- In-person slots of a psychologist without a room on that day are not offered.
- Rooms are assigned per weekday and half-day: morning and afternoon (the time the morning ends is an admin setting, e.g. 12:30). Example: room 1 on Thursday morning to Laura, Thursday afternoon free.
- A psychologist can only be assigned to one room per half-day; a second assignment is refused with a message. New in-person appointments get the room of that half-day automatically.
- The room assignment is the basis of the psychologists' in-person availability (FR-03); changing it changes the bookable in-person slots immediately.

### FR-08 Session types configured by admin

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-39, CR-70, F-06

Admins define session types (e.g. intake session, individual session 50 min, 90 min, couples session, ADHD assessment, internal appointment). Per type: name DE/EN, duration, buffer time, price, product/tariff code (e.g. PSYBERATUNG50), allowed modality (online / in-person), fixed price yes/no, bookable online by clients yes/no, suitable for minors yes/no, calendar colour. Only admins can create or change session types; psychologists select them when booking.

**Acceptance criteria**

- Admin creates 'Couples session 90 min, CHF X, in-person only'; it appears in the booking form of all psychologists.
- A psychologist cannot create or edit session types.
- The product code on the invoice comes from the session type; no separate Group/Type field is needed at invoicing.
- Only admins edit session types; the settings page shows all fields per session type (name DE/EN, duration, buffer, price per minute or fixed, tariff code, allowed modality, suitable for minors, bookable online, colour).

*Note:* Initial list of session types with durations and prices: to be provided by Balancd.

### FR-09 Booking history per client and psychologist

**Priority:** Must · **Phase:** 1 · **Status:** Open

The system keeps a booking history per client and per psychologist, including cancellations and no-shows.

**Acceptance criteria**

- The client view lists all past and future appointments with status.

### FR-10 Standard appointment: 50 minutes plus 10 minutes buffer

**Priority:** Must · **Phase:** 1 · **Status:** Reopen

The standard appointment (intake session and follow-up session) lasts 50 minutes; an additional 10 minutes of preparation/follow-up are blocked in the psychologist's calendar. The buffer is not bookable and not shown to clients. Clicking into the calendar always creates a standard appointment (50 + 10 minutes). The actual duration can be adjusted to the minute afterwards (e.g. by dragging the lower edge, FR-35, or when completing the session, CR-39). Other session types (e.g. couples session, ADHD assessment) are only chosen when agreed as an exception with the client; they have no buffer unless configured.

**Acceptance criteria**

- Intake booked at 09:00 blocks the psychologist's calendar 09:00–10:00; the client sees 09:00–09:50.
- The next bookable slot starts at 10:00 at the earliest.
- Clicking into a free spot of the calendar proposes 'individual session 50 minutes' (or 'intake session' for a new client) with 10 minutes buffer.
- Only the standard 50-minute session types have a buffer; couples session and ADHD assessment have none by default (admin setting per session type, FR-08).

*Current state:* Availability is expanded into 60-minute blocks with a 10-minute buffer.

### FR-11 Intake session bookable online or in person

**Priority:** Must · **Phase:** 1 · **Status:** Done

The intake session can be booked as in-person or online appointment. 'In-person' is preselected; the client can switch to 'online'. Direct-booked intake sessions are paid upfront (see FR-49).

**Acceptance criteria**

- Modality selector shows 'In person' preselected and 'Online' as alternative.
- Choosing 'Online' shows only online availability (FR-03).

*Current state:* Modality (online / in person) is chosen before the slots are shown.

### FR-12 Follow-up sessions bookable online or in person

**Priority:** Must · **Phase:** 1 · **Status:** Open

Follow-up sessions can be booked in person or online.

**Acceptance criteria**

- Both modalities can be selected for a follow-up session.

### FR-13 Daily appointment limit per psychologist

**Priority:** Should · **Phase:** 1 · **Status:** Done

Each psychologist has a configurable maximum number of appointments per day (default 10). When reached, no further slots are offered to clients that day. Admins may override with a warning (FR-05).

**Acceptance criteria**

- Limit set to 8: after 8 bookings on a day, no slots of that day are shown to clients.

*Current state:* Practice daily session limit plus per-psychologist override.

### FR-14 Booking window for client self-booking

**Priority:** Must · **Phase:** 1 · **Status:** In progress

Clients can book slots at the earliest 4 days and at most 3 months in advance. Both values are admin settings. Admin and psychologist bookings are not restricted by this window.

**Acceptance criteria**

- On 1 March a client sees slots from 5 March to 1 June at the latest.
- An admin can book a slot for tomorrow.

**Deviations in the demo – to fix**

- [ ] Earliest bookable date for clients is today. Required: 4 days ahead (admin setting).

*Current state:* Past dates and dates beyond three months are not bookable.

### FR-15 Next available appointment with any psychologist

**Priority:** Must · **Phase:** 1 · **Status:** In progress

The booking page offers 'next available appointment, with any psychologist', considering the chosen modality and whether the client is a minor.

**Acceptance criteria**

- The option lists the earliest free slots across all psychologists who match modality and age group.

**Deviations in the demo – to fix**

- [ ] No visible option 'next available appointment, with any psychologist' on the booking page.

*Current state:* The booking URL supports 'next_available' as psychologist.

### FR-19 No availability: suggest sending a request

**Priority:** Should · **Phase:** 1 · **Status:** Open

If the preferred psychologist has no availability within the booking window, the client is invited to send a request instead, with the message that the practice will help find a suitable psychologist.

**Acceptance criteria**

- Psychologist without free slots shows a request button instead of an empty calendar.
- The system has no waiting list. If no slot fits, the client is always offered the request form instead.

**Deviations in the demo – to fix**

- [ ] When no slots exist the page only says 'No matching open times were found'. Required: invite the client to send a request.

### FR-24 Follow-up appointment from the current session

**Priority:** Must · **Phase:** 1 · **Status:** In progress

From the open appointment, the psychologist can create a follow-up with one action. Client details are prefilled and the next free slot is suggested.

**Acceptance criteria**

- 'Create follow-up' in the appointment opens the quick-entry form with client and suggested slot filled in.

*Current state:* Each appointment has 'Open Follow-up Booking form': client and psychologist are taken over, the psychologist's free times are offered.

### FR-25 Recurring appointment series

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-38

Appointments can be created as a series (weekly, every two weeks, custom interval, end date or number of occurrences), from the calendar and from the session view.

**Acceptance criteria**

- A series 'every 2 weeks, 6 times' creates 6 appointments; conflicts are shown before saving.
- Recurrence options like Google Calendar: daily, every weekday (Mon–Fri), weekly on the same weekday, every 2 weeks, monthly on the same date, custom (every N days/weeks/months; ends after N occurrences, on a date, or never).
- Series are also possible for blockers and internal appointments.
- Before saving, the form shows the number of occurrences, first and last date and all conflicts.

**Deviations in the demo – to fix**

- [ ] The demo offers no visible way to create a recurring appointment (series) – neither in the calendar nor in the 'Create a Booking' dialog.

### FR-26 Delete a series

**Priority:** Must · **Phase:** 1 · **Status:** Open

Deleting a series deletes all future occurrences (like Outlook). Past occurrences are kept.

**Acceptance criteria**

- Deleting a series on 10 March removes all occurrences after 10 March and keeps earlier ones.

### FR-27 Edit single occurrence vs. entire series

**Priority:** Must · **Phase:** 1 · **Status:** Open

When editing an occurrence, the user chooses 'this appointment only' or 'entire series'.

**Acceptance criteria**

- Moving one occurrence with 'this appointment only' leaves all others unchanged.
- Moving, resizing, editing, cancelling or deleting an occurrence always asks: 'this appointment only', 'this and all following', or 'all appointments of the series'. Completed occurrences are never changed.

**Deviations in the demo – to fix**

- [ ] Because series cannot be created, there is no choice 'this appointment / this and following / all' when editing or deleting.

### FR-35 Calendar view like Google Calendar

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-36, CR-31, F-04, F-05

Appointments are shown in a calendar (not a list), modelled on Google Calendar: day, week, working-week and month view, narrow time grid, easy switching of weeks and scrolling through days/weeks. The calendar shows all appointments (not only confirmed ones) with the client's first and last name and the session type colour. On mobile an agenda/list view is available.

**Acceptance criteria**

- Switching day/week/month takes one click; 'next week' takes one click.
- Each appointment shows first and last name of the client.
- Pending, confirmed and completed appointments are all visible, distinguishable by status.
- The calendar is operated like Google Calendar (click or drag to create, 15-minute grid).
- Views: day, working week (Mon–Fri), week and month, plus a small month overview for jumping to a date. 'Today', previous and next are one click each. The visible time range can be scrolled (at least 06:00–22:00).
- In the admin's team view, the day view shows one column per psychologist side by side (resource view).
- When creating by click or drag, the new entry stays visible as a placeholder at its position until it is saved or cancelled; changing time or duration in the form moves the placeholder.
- Existing appointments, blockers and internal appointments can be moved by dragging (also to another day, and in the team day view to another psychologist) in 15-minute steps; their length is changed by dragging the lower edge in 5-minute steps, and to the minute with a modifier key (FR-10). In the month view entries can be dragged to another day.
- Completed appointments (status other than planned) and colleagues' entries (for psychologists) cannot be moved or resized.
- After moving or resizing an appointment with a client, the user chooses whether the client receives an updated confirmation. Every change can be undone right after ('Undo').
- Overlapping entries are shown side by side; an overlap is pointed out when saving.
- Absences are shown in an all-day row above the time grid; clicking into the all-day row starts a new absence for that day.
- Keyboard shortcuts like Google Calendar: T today, J/K next/previous, D day, X working week, W week, M month, C new appointment, Esc closes the form.

**Deviations in the demo – to fix**

- [ ] No working-week and no month view.
- [ ] The Appointments list shows only confirmed appointments; the calendar must show all (pending, confirmed, completed).
- [ ] The time grid is far too large: on a full screen only 08:00–16:00 is visible and a working day needs scrolling. The day headers are cut off ('Mon 2…') and show counters ('0 📅') that are not needed. Required: narrow grid like Google Calendar, a full working day (e.g. 07:00–19:00) visible without scrolling on a laptop screen (1440×900).
- [ ] The 'Calendar controls' panel permanently takes about a quarter of the width. Required: Today, previous/next and the view switch in a compact bar above the calendar (see click prototype); the month overview small and optional.
- [ ] Dragging across a time range snaps to whole hours (10:00–10:45 becomes 10:00–11:00), the selection is not shown in the calendar, and a large modal covers the calendar. Required: 15-minute steps, the new entry stays visible as a placeholder, a small form opens next to it (see click prototype).
- [ ] Existing appointments cannot be moved by dragging (also not to another day) and their length cannot be changed by dragging the lower edge; calendar entries have no drag or resize function at all.
- [ ] Clicking an appointment opens an overview without actions (no edit, move, cancel); only a link to a separate details page. The entry in the calendar shows the psychologist's own name instead of the time. Required: from the appointment, time and duration can be changed and it can be cancelled with a reason (CR-72); details and documentation side by side (FR-85).
- [ ] The calendar does not show availability: hours outside the recurring availability (e.g. 08:00–10:00 when availability is 10:00–18:00) look the same as available hours.

*Current state:* Calendar with week and day view (admin: psychologist filter, client appointments, internal schedules, unavailable blocks).

### FR-45 Only psychologists who accept minors for minors

**Priority:** Must · **Phase:** 1 · **Status:** Done

If the client states at the start that the appointment is for a child or adolescent, only psychologists who accept minors are shown (including 'next available').

**Acceptance criteria**

- Choosing 'child or adolescent' hides all psychologists without the 'accepts minors' flag.

*Current state:* Booking starts with the client's age (18 or older / under 18); for under 18 only matching psychologists are offered.

### NFR-05 Client booking flow in max. 5 steps

**Priority:** Must · **Phase:** 1 · **Status:** In progress

Direct booking for new clients has at most 5 steps:
1. For whom (adult / child or adolescent) and modality (in person / online)
2. Psychologist or 'next available' → calendar of that psychologist, no intermediate step, no login
3. Slot selection (30-minute hold starts, see NEW-01)
4. Personal details (name, date of birth, address, email, phone, reason for consultation) + 3 consent checkboxes (FR-40)
5. Payment (FR-47) → confirmation page
The detailed registration form is completed after booking via link (FR-37).

**Acceptance criteria**

- A new adult client can complete a booking in 5 screens or fewer.
- No login or password is requested at any point.

*Note:* Direct booking should show the full registration form. Step 4 therefore already collects address and date of birth; only the remaining questionnaire comes after booking.

**Deviations in the demo – to fix**

- [ ] 5 consent checkboxes instead of the 3 approved ones (FR-40).
- [ ] 'Reason for consultation' is not asked.
- [ ] The registration page repeats the slot picker and the booking summary; keep max. 5 short steps.

*Current state:* Age + modality + date → psychologist and time → one registration page with details and consents → payment.

### CR-09 Returning clients: recognition via one-time link

**Priority:** Must · **Phase:** 1 · **Status:** Open

Returning clients enter their email address. The screen always shows the same neutral message ('If we know this address, you will receive a link by email'). The system sends a one-time link/code to the address if a client record exists. After verification, the previous psychologist's calendar is shown by default; the client can switch psychologist. Every confirmation email also contains a personal booking link.

**Acceptance criteria**

- Entering an unknown or someone else's email address reveals nothing on screen.
- Opening the link shows the previous psychologist preselected and prefilled contact details.
- Links expire (e.g. after 24 hours) and work only once.

**Deviations in the demo – to fix**

- [ ] Returning-client flow (email → neutral message → one-time link → previous psychologist preselected) not implemented.

### CR-13 Switch between 'Send request' and 'Book directly'

**Priority:** Should · **Phase:** 1 · **Status:** Open

On the website page, a switch (similar to the language switch) toggles between the request form and direct booking, so users are not lost through a redirect button. Wording must make clear that direct booking includes immediate payment.

**Acceptance criteria**

- The user can switch back and forth without losing entered data within the same view.
- Above the booking, a short explanation describes the process and costs (how booking works, payment, supplementary insurance), similar to established booking platforms.
- The website offers two ways, 'Send request' and 'Book directly', plus a small link for existing clients ('Already a client?'). There they enter their email address; if they are a client, they receive a login link by email to book again (CR-09). There are no separate entries such as 'Booking history'.

### CR-31 View colleagues' calendars

**Priority:** Must · **Phase:** 1 · **Status:** In progress

Psychologists can switch to the calendars of other team members, including client names. Admins can book into all calendars.

**Acceptance criteria**

- A psychologist can open a colleague's week view and sees appointments with client names.
- Only admins can create appointments in other psychologists' calendars.

**Deviations in the demo – to fix**

- [ ] Psychologists cannot switch to their colleagues' calendars.

*Current state:* Admin calendar has a psychologist filter.

### CR-32 Create appointments directly in the calendar

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-33, CR-34, F-04

Free slots are visible first. Clicking (or double-clicking) into the calendar opens a quick-entry form: search or create client, choose session type, modality, recurrence, save. A prominent 'New appointment' button is also on the dashboard.

**Acceptance criteria**

- Creating an appointment for an existing client takes no more than 4 clicks from the calendar.
- The client search suggests matches while typing (name and date of birth shown).
- Psychologists can create client appointments and internal appointments from their own calendar.
- Like Google Calendar: click into a free spot to create an appointment starting there; drag to set start and length in 15-minute steps.
- Start time and length can be any 15-minute step (e.g. 10:15–11:05), not only full hours.
- The quick-entry form is compact (like Apple Calendar): client as title line, then short rows for date, time from–to, session type and modality, payment and recurrence; Save and Cancel are always visible at the bottom.
- The quick-entry form can be moved on the screen by dragging its title bar so the calendar underneath stays visible; it never extends beyond the visible screen (its content scrolls inside).

**Deviations in the demo – to fix**

- [ ] Psychologists can only create internal schedules from their calendar. Required: psychologists can also create client appointments there (search/create client, session type, modality, recurrence).
- [ ] The demo only allows selecting whole hours ('Client Appointments require a one-hour selection'). Required: drag to set the length in 15-minute steps.
- [ ] Creating an entry needs a double-click and then a separate dialog to choose 'Client Appointment' or 'Internal Schedule'. Required: one small form opens directly (see click prototype); an appointment without a client is simply an internal entry, no extra choice step.
- [ ] The 'Create a Booking' dialog is a long form in three steps (session details, available psychologist, client) with a lot of scrolling; the client search is far down. Required: client search is the first field, the whole entry fits in one compact form, an appointment for an existing client takes no more than 4 clicks. Date, start time and duration must be editable in the form (today 'the calendar-selected booking time is fixed').

*Current state:* Admin calendar: drag across an empty time range to schedule.

### CR-37 Automatic recognition of follow-up appointments

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-09

When an appointment is booked for a client with previous appointments, the system automatically treats it as a follow-up appointment. There is no separate 'follow-up booking' menu.

**Acceptance criteria**

- Booking a second appointment for the same client sets type 'follow-up' without manual selection.

**Deviations in the demo – to fix**

- [ ] When creating an appointment in the calendar, the user must choose 'Initial Session' or 'Follow-up Session'. Required: the system recognises follow-ups automatically from the client's previous appointments; no manual choice.

### CR-43 Absences, blockers and internal appointments

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-44, CR-45

Two categories plus internal appointments:
- Absence (whole days, e.g. holidays, training): entered by the psychologist; absences of 3 days or more are blocked immediately with status 'requested', admin is notified and approves or rejects.
- Blocker (single hours, also recurring): entered by the psychologist without approval.
- Internal appointment (e.g. team meeting): simple appointment without client.

**Acceptance criteria**

- A 5-day absence immediately blocks the calendar and appears as 'requested' for the admin.
- A 2-day absence and all blockers need no approval.
- A rejected absence is removed and the slots become bookable again.
- Absences, blockers and internal appointments are entered directly in the calendar view in one dialog; no separate pages.

**Deviations in the demo – to fix**

- [ ] Absences, blockers and internal appointments are on three separate pages. Required: entered directly in the calendar view with one simple dialog (see click prototype).
- [ ] No approval for absences of 3 days or more (status 'requested', admin approves or rejects).
- [ ] Recurring blockers are not possible.

*Current state:* Psychologists enter 'Vacation Blocks' (whole days), 'Individual Unavailability Blocks' (hours) and 'Internal Schedules', each on its own page.

### CR-72 Cancellation reasons

**Priority:** Must · **Phase:** 1 · **Status:** Open

When an appointment is cancelled, a reason is selected from a list (admin-configurable):
Illness · Scheduling conflict / work · Financial reasons · Therapy completed · Change of psychologist · Concern outside our offering · No-show · Other (free text).
Reasons feed the statistics (FR-78).

**Acceptance criteria**

- Cancelling an appointment without selecting a reason is not possible.
- Cancelling from the calendar asks for the reason, whether the client is informed by email, and for series the scope (FR-27). Cancellations less than 48 hours before are marked as charged (FR-55); earlier cancellations free the slot.

### NEW-01 30-minute slot hold with countdown

**Priority:** Must · **Phase:** 1 · **Status:** Done

When a client selects a slot, the system holds it for 30 minutes and shows a visible countdown. If booking and payment are not completed in time, or payment fails, the slot is released automatically.

**Acceptance criteria**

- After 30 minutes without payment the slot is bookable again for others.
- After a failed payment the slot is released and the client sees a clear message with the option to retry.

*Current state:* Bookings have states Held / Expired / Confirmed; expired holds release the slot.

## Requests

### FR-16 Request form on the website

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-17, CR-12, CR-14, CR-16

The request form stays embedded on the website like today's contact form (balancd.ch/kontakt). Fields: first and last name, email, phone, when can we reach you (free text), reason (dropdown), preferred psychologist (dropdown, optional), over/under 18. No address, no date of birth. Plus the 3 consent checkboxes (FR-40). Email and phone are validated.

**Acceptance criteria**

- The form has no address and no date-of-birth field.
- Submitting with an invalid email (e.g. '.con') shows a helpful error message.
- When the form is opened from a psychologist's profile page, that psychologist is preselected (can be changed).

**Deviations in the demo – to fix**

- [ ] Too many fields (birth date, message, preferred modality, psychologist, date, time). Required: like today's contact form plus over/under 18, no birth date, 3 checkboxes.

*Current state:* Request form on the client side with acknowledgements.

### FR-18 Requests become records in the tool (form and email)

**Priority:** Must · **Phase:** 1 · **Status:** Done · **Also:** CR-17

Requests from the website form and from direct emails automatically create a request record in the tool, sorted by date and time. Admins are notified.

**Acceptance criteria**

- A submitted form appears within 1 minute in the request list.
- An email to the request mailbox appears as a request with sender, subject and text.

*Current state:* Website requests appear in the request queue; the client gets an automatic acknowledgement email.

### FR-66 Decline and recommendation emails from the request

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-27, CR-28

From the request view, the matching email is prepared automatically depending on situation and age group (adult / adolescent):
- Request clearly unsuitable, no call needed: 'Decline without call' (adults / adolescents), each incl. list of other professionals.
- After the call, not suitable (basic insurance only, outside our competence): 'Recommendation after call' (adults / adolescents; adolescents incl. list of professionals).
The admin reviews and sends; the decline reason (FR-77) is recorded.

**Acceptance criteria**

- Declining an adolescent's request without call prepares 'Decline – adolescents (without call)' with the professionals list.
- Selecting 'Basic insurance only' after a call for an adult prepares 'Recommendation – adults (after call)' with the name filled in.

### FR-77 Decline reasons

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-26

If a request does not lead to a booking, the admin selects a reason (admin-configurable list):
1. Basic insurance only (→ recommendation email)
2. Outside our offering
3. No suitable psychologist / no appointment
4. Supplementary insurance does not cover
5. Client not reachable
6. Client decided otherwise
7. Other (free text)
Reasons feed the statistics (FR-78).

**Acceptance criteria**

- Declining without selecting a reason is not possible.

**Deviations in the demo – to fix**

- [ ] Fixed list of decline reasons (feeding the statistics) not implemented.

*Current state:* Requests can be closed and reopened.

### CR-17 Request mailbox connected to the tool

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-05

A dedicated mailbox (e.g. anfragen@balancd.ch) is connected to the tool (IMAP/SMTP). New emails create requests; replies are assigned to the existing request. Emails sent from the tool appear in the mailbox's sent folder.

**Acceptance criteria**

- A reply from the client to an email from the tool appears in the same request thread.

*Note:* Balancd is choosing a new email provider. Suggestion: Infomaniak (Swiss provider, data in Switzerland, standard IMAP/SMTP).

### CR-18 Automatic tracking of AGB acceptance

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-20

The system tracks automatically whether the client has accepted the AGB: yes for requests via the form, no for requests via email. When an appointment confirmation is sent, the acceptance link is included automatically if needed. Until accepted, the first appointment shows a warning so the psychologist can resend the link or clarify it in the session. Staff never have to decide this manually.

**Acceptance criteria**

- Confirmation for an email request contains the AGB link; for a form request it does not.
- The appointment of a client without AGB acceptance shows a warning icon.
- Confirmation emails prepared from templates (FR-67) automatically contain the AGB acceptance link when the client has not yet accepted the AGB (e.g. request by email).

**Deviations in the demo – to fix**

- [ ] Requests store 5 separate consents (incl. AI, basic insurance); must match the 3 checkboxes (FR-40).

*Current state:* Requests store which terms were accepted.

### CR-21 Automatic email asking for missing details

**Priority:** Should · **Phase:** 1 · **Status:** Open

Right after a request is submitted, the client automatically receives an email with a link to add missing details (date of birth, address). What the client enters is visible in the request before the callback.

**Acceptance criteria**

- Details entered via the link appear in the request without manual action.

### CR-22 Simplified request view

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-23, CR-24, CR-25, CR-29, F-02

The request view shows only what is needed: contact details, address and date of birth fields (filled by phone or via CR-21), a note on the client's concern, and a collapsible internal team note. The team calendar can be opened from the request to book an appointment directly. 'Inquiries' is called 'Requests' (DE: 'Anfragen').

**Acceptance criteria**

- An admin can book an appointment from the request without leaving the view.
- The internal note is collapsed by default.

**Deviations in the demo – to fix**

- [ ] The request view is much too complex; simplify to contact details, address/date of birth, note, collapsed internal note.
- [ ] The team calendar cannot be opened from the request to book directly.

*Current state:* Request detail with original submission, staff note, contact timeline, proposals, closure.

### NEW-02 Request status and conversion

**Priority:** Must · **Phase:** 1 · **Status:** In progress

Requests have a status (new, in progress, converted, declined) and an owner. When an appointment is booked from a request, the booking is linked, the status becomes 'converted' and a client record is created from the request data.

**Acceptance criteria**

- Booking from a request sets status 'converted' and creates the client with the data from the request.

**Deviations in the demo – to fix**

- [ ] Statuses are 'New / Awaiting Client / Awaiting Psychologist …'. Required: new, in progress, converted, declined.

*Current state:* Requests have a status, an owner, proposals, conversion to booking and closure.

### NEW-03 Email if client cannot be reached by phone

**Priority:** Must · **Phase:** 1 · **Status:** In progress

If the practice cannot reach a client after several attempts, the admin sends a prepared email asking for a call back, with a named contact person. Two variants:
- Requested psychologist still available: handover to that contact person.
- Requested psychologist fully booked: handover to a new contact person.
Call attempts are logged in the request.

**Acceptance criteria**

- From the request, 'Not reached' offers both variants; the chosen one is prefilled with name and contact person.
- Each call attempt can be logged with date and time.

**Deviations in the demo – to fix**

- [ ] 'Not reached' emails with the two variants (same / new contact person) missing.

*Current state:* Contact attempts can be logged in the request timeline.

### NEW-04 Acquisition channel

**Priority:** Could · **Phase:** 1 · **Status:** Open

The request and booking forms ask optionally how the client found Balancd (e.g. Google, recommendation, partner, insurer). The answer is available in the statistics.

**Acceptance criteria**

- The statistics show requests per channel.

## Clients

### FR-37 Registration form after direct booking

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-38, CR-20

After a direct booking, the client receives a link to the registration form (remaining questions and emergency contact). Answers are stored in the client file and visible to the psychologist before the first session. For bookings via request, no registration form is sent; missing details are collected by phone. The psychologist can resend the form and send a reminder if information is missing.

**Acceptance criteria**

- Answers submitted via the link appear in the client file.
- A client booked via request does not receive the form automatically.
- The psychologist sees which details are missing and can resend the link.
- The client record shows which registration details are still missing (e.g. address, date of birth, emergency contact) and offers 'Send link again' and 'Send reminder'; both are logged in the client's email history.

### FR-85 Session documentation next to the appointment

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-86, CR-36

Psychologists write session notes directly in the appointment, from the calendar. Appointment details and documentation are visible side by side without switching pages. Notes can be edited after the session.

**Acceptance criteria**

- Opening an appointment shows details and note field at the same time.
- A note saved in the appointment appears in the client's history.
- Details and documentation are in one view, side by side (no tabs).
- Earlier entries of the same client are shown next to the note, collapsible (e.g. dropdown per entry), newest expanded.

**Deviations in the demo – to fix**

- [ ] Appointment details and documentation are two tabs. Required: one view, side by side.
- [ ] Earlier entries of the same client are not shown. Required: next to the note, collapsible (e.g. dropdown per entry), newest expanded.
- [ ] From the calendar the appointment opens via 'Show Appointment overview' on a separate page. Required: opens directly from the calendar.

*Current state:* Rich-text session documentation inside the appointment ('Documentation' tab), 'assigned psychologist only'; every saved version is kept with author and time.

### FR-87 Chronological documentation history

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-40, CR-41

The client view shows the complete documentation history by date. The newest entry is expanded; several entries can be expanded at the same time.

**Acceptance criteria**

- The newest entry is open by default; opening a second entry does not close the first.

### FR-88 File uploads

**Priority:** Must · **Phase:** 1 · **Status:** Open

Psychologists can upload files (PDF, photos) to a client's file.

**Acceptance criteria**

- A PDF uploaded to a client appears in the history with date and can be downloaded.

### FR-89 Field for future AI-generated protocol

**Priority:** Should · **Phase:** 1 · **Status:** Open

The documentation data model contains a field/structure for a future AI-generated protocol (see FR-107). The AI feature itself is not part of phase 1.

**Acceptance criteria**

- The data model has a separate field for AI protocols, unused in phase 1.

### FR-108 Session notes never visible to clients

**Priority:** Must · **Phase:** 1 · **Status:** Open

Session notes are never visible to clients and are never sent by email. Future client access to documents happens only via the client portal (FR-109).

**Acceptance criteria**

- No email template can contain session notes.

### CR-30 Missing documentation indicator

**Priority:** Must · **Phase:** 1 · **Status:** In progress

The dashboard shows which past appointments still lack documentation. The appointment in the calendar shows an icon (e.g. exclamation mark).

**Acceptance criteria**

- A past appointment without note shows the icon and appears in the dashboard list; after saving a note both disappear.

**Deviations in the demo – to fix**

- [ ] The count is about appointments not completed, not about missing documentation. Required: past appointments without documentation.
- [ ] No '!' marker on appointments without documentation in the calendar.

*Current state:* Psychologist dashboard shows 'Pending post-session work' (appointments not yet completed).

### CR-74 Emergency contact

**Priority:** Must · **Phase:** 1 · **Status:** Open

The emergency contact is collected via the link after booking (FR-37). The psychologist can add it in the first session.

**Acceptance criteria**

- The emergency contact entered by the client appears in the client record.

### CR-75 Client record

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-10, CR-74

The client record contains:
1. General information: first and last name, language, gender, date of birth
2. Address; billing address = home address unless changed manually
3. Phone and email, each with the option to receive automated SMS/emails
4. Emergency contact
Booking details are saved in the client record.

**Acceptance criteria**

- A new client has 'billing address = home address' preselected.
- Switching off SMS for a client stops SMS reminders for that client.
- The client record has an optional field 'occupation'.
- The billing recipient can differ from the client: another person (e.g. parent) or an institution (e.g. employer, social insurance office), with its own name and address. Invoices are addressed to that recipient.
- The admin can change the treating psychologist of a client. Future appointments are only moved or cancelled after an explicit confirmation; the client is informed by email.
- All fields of the client record can be edited in the record by the treating psychologist (own clients) and by admins: name, gender, date of birth, language, occupation, address, billing recipient, phone and email with SMS/email opt-in, emergency contact. Changing the treating psychologist is admin only. Every change is logged (FR-76).
- The fiduciary (NEW-16) can also edit all master data fields of every client record; changes are logged like all others.

**Deviations in the demo – to fix**

- [ ] Missing: language, gender, emergency contact, SMS/email opt-in.

*Current state:* Client detail with contact, date of birth, address, billing address = home address.

### CR-76 Parent/guardian tab only for minors

**Priority:** Must · **Phase:** 1 · **Status:** Open

The parent/guardian tab is only shown if the client is a minor.

**Acceptance criteria**

- An adult client has no guardian tab.

### CR-77 Client view: key information left, details right

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-78

The client view shows the key information on the left and the tabs (bookings, appointments, invoices, consents) on the right, so everything is visible on one screen without scrolling. The tabs are less prominent (collapsible).

**Acceptance criteria**

- On a laptop screen (1440×900), key info and tabs are visible without scrolling.
- The client list shows first name, last name and date of birth; internal IDs are never shown.
- The Clients area opens with a large search field at the top (name, date of birth, phone, email; phone numbers are found with or without +41 / leading 0 and spaces) and the complete list of clients below, searchable while typing.
- List columns: last name, first name, date of birth, phone, psychologist (admin only), last appointment, next appointment, markers (minor, package, ended, blocked). Every column can be sorted by clicking its header.
- Filters: psychologist (admin), status active / ended / all (default: active), minors only. Psychologists only see their own clients.
- Clicking a row opens the client record (key information left, tabs right); 'All clients' returns to the list with search and filters kept. '+ New client' needs only first name, last name and optionally date of birth, phone, email.

**Deviations in the demo – to fix**

- [ ] Layout not implemented: key information left, collapsible tabs right, everything on one screen.
- [ ] The client directory shows each client as a large card (about a third of the screen per client); only a few clients fit on the screen and it is very hard to get an overview. Required: a compact table with one row per client, as in the click prototype.
- [ ] Search only runs after clicking 'Apply search'. Required: results filter while typing.
- [ ] The list shows email, number of bookings and appointments, but no date of birth, psychologist, last or next appointment; columns cannot be sorted and there are no filters (psychologist, active/ended, minors). Technical texts ('operational Client records', 'email-matched identities') and page-by-page navigation instead of one scrollable list.

*Current state:* Client detail with bookings, appointments, invoices, consent evidence.

### NEW-17 End of counselling with reason

**Priority:** Should · **Phase:** 1 · **Status:** Open

When a client stops counselling (e.g. after the intake session or after a few sessions), the psychologist can mark the client as 'ended' and select a reason from an admin-configurable list: goal reached · referred to psychotherapy / other professional · financial reasons · supplementary insurance does not pay · no longer reachable · not a good fit · other (free text). The reasons appear in the statistics per psychologist and in total (FR-78).

**Acceptance criteria**

- Marking a client as 'ended' is not possible without a reason.
- The admin statistics show ended clients by reason and by psychologist.
- An ended client can be reactivated when booking again.
- In the client record, 'End counselling' opens a small dialog with the reason list; ended clients disappear from the default list (filter 'active') and can be reactivated with one click.

## Consent

### FR-39 Consent log with version

**Priority:** Must · **Phase:** 1 · **Status:** Done · **Also:** FR-40, NFR-11

Every consent (client and guardian) is stored with timestamp, channel and the exact text version accepted.

**Acceptance criteria**

- The client record shows each consent with date, time and version number.

*Current state:* Client detail shows consent evidence with version, date and signed file.

### FR-40 Three consent checkboxes

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-39, FR-41, FR-42, CR-15

Booking and request forms show exactly three checkboxes, each with one short sentence, unobtrusive below the form (no separate container). None are pre-ticked.
1. 'Mit den AGB sowie der Datenschutzerklärung bin ich einverstanden, meine Kontaktdaten dürfen innerhalb des Teams geteilt werden.' The AGB/privacy policy include the note on AI-assisted processing.
2. 'Über die Finanzierung (Selbstzahlung/Zusatzversicherung) bin ich informiert, eine allfällige Kostenbeteiligung lasse ich mir vorab schriftlich bestätigen.'
3. 'Terminabsagen melde ich mind. 48 Stunden vorher, da diese ansonsten auch bei Krankheit in Rechnung gestellt werden.'
The German wording above is the approved text for the German UI; the English UI uses an equivalent translation:
1. 'I agree to the terms and conditions and the privacy policy; my contact details may be shared within the team.'
2. 'I have been informed about financing (self-payment/supplementary insurance) and will obtain written confirmation of any cost contribution in advance.'
3. 'I will cancel appointments at least 48 hours in advance, otherwise they will be charged even in case of illness.'

**Acceptance criteria**

- The form cannot be submitted unless all three boxes are ticked.
- No box is ticked by default.

*Note:* Decided: AGB and privacy in one checkbox, AI note integrated into AGB/privacy. Recommended: short review by legal counsel.

**Deviations in the demo – to fix**

- [ ] 5 checkboxes (terms, privacy, AI, basic insurance, cancellation) with long texts. Required: exactly the 3 approved checkboxes with the approved wording.
- [ ] Cancellation text says 24 hours. Required: 48 hours.

*Current state:* Consents are asked actively on the booking and request forms and recorded.

### FR-41 Re-consent when AI features are activated

**Priority:** Must · **Phase:** 1 · **Status:** Open

Consent is purpose-bound and versioned. When an AI feature (e.g. ISAAC/Sapient) is activated, the system can request a new consent from existing clients (email link) and records it.

**Acceptance criteria**

- Admin can trigger 'request new consent' for all active clients; responses are stored per client.

### FR-42 Financing: no basic insurance

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-22

Services are not billed via basic insurance (Grundversicherung); coverage depends on supplementary insurance only. This is part of consent 2 (FR-40) and the intake confirmation contains guidance to obtain written confirmation from the insurer beforehand.

**Acceptance criteria**

- The intake confirmation contains the insurer guidance text.

*Note:* Future option: billing of psychotherapy via basic insurance (Anordnungsmodell) may become relevant later. Keep insurance type as a configurable field (default VVG), see CR-39.

### FR-43 Detection of minors

**Priority:** Must · **Phase:** 1 · **Status:** Reopen · **Also:** CR-14

In direct booking, the system detects minors from the date of birth. In the request form, the client states over/under 18; the exact date of birth is added later.

**Acceptance criteria**

- Date of birth less than 18 years ago triggers the minors flow (FR-44).
- If 'for me' was chosen but the date of birth entered is under 18, the booking switches to the minors flow (guardian details, guardian link, 48-hour hold) with a short explanation; it cannot be completed as an adult booking.

*Current state:* Clients are flagged as Adult / Minor client.

### FR-44 Minors: guardian confirmation

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-19

If the client is a minor:
1. Additional fields: name and email of the legal guardian.
2. The appointment is held for 48 hours and is not yet confirmed.
3. The guardian receives an email with a link to the guardian page. There the guardian reads the consent form (Einverständniserklärung) online and confirms: AGB, privacy policy, costs and payment terms, 48-hour cancellation rule, personal details and billing address.
4. On the same page the guardian downloads the consent form as PDF (prefilled with the child's and guardian's data), signs it and uploads it (photo or PDF).
5. Only then is the booking confirmed. Without confirmation within 48 hours, the slot is released.
For requests by adolescents (phone booking), the confirmation 'Terminbestätigung – Jugendliche' contains this guardian link; the minor forwards it to the guardian. The signed form is required before the first session.

**Acceptance criteria**

- The guardian link from the adolescents' confirmation opens the guardian page with the consent form, download and upload.
- Without guardian confirmation the appointment stays 'pending' and is released after 48 hours (direct booking) or shows a warning on the first appointment (request path).
- Confirmation and uploaded form are stored in the client's guardian tab.

*Note:* The guardian pays online for intake. DocuSign is not used.

**Deviations in the demo – to fix**

- [ ] Guardian page (online confirmation, PDF download, upload), 48-hour hold and the new consent form not implemented.

*Current state:* Minor clients with signed legal representative consent (PDF) and consent version.

### FR-45b Psychologist profile: accepts minors

**Priority:** Must · **Phase:** 1 · **Status:** Done

Each psychologist profile indicates whether they accept minors as clients.

**Acceptance criteria**

- The flag is visible on the website profile and used in FR-45.

*Current state:* Psychologist profile has the field 'Age eligibility' (e.g. 'Adults only').

### FR-46 Guardian process in the AGB

**Priority:** Must · **Phase:** 1 · **Status:** Open

The parental authorization process is described in the AGB.

**Acceptance criteria**

- AGB text contains a section on minors (content task for Balancd).

### NEW-05 Adolescents aged 16–17 without parental consent?

**Priority:** Should · **Phase:** 1 · **Status:** Clarify

To be decided with legal counsel: adolescents capable of judgement (from 16) may be able to book without guardian consent. If yes, FR-44 applies only to clients under 16.

**Acceptance criteria**

- (after decision)

*Note:* Reference: SAMW/FMH legal guideline, treatment of minors.

## Billing

### FR-28 Extra time is billed

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-29

If the actual duration is longer, the amount is recalculated before invoicing. For prepaid sessions, only the extra time appears on the monthly invoice. Fixed-price session types (e.g. ADHD assessment) are never recalculated.

**Acceptance criteria**

- Prepaid intake extended by 10 minutes: only 10 minutes appear on the monthly invoice.
- ADHD assessment extended by 30 minutes: invoice amount unchanged.

**Deviations in the demo – to fix**

- [ ] Extra time creates separate invoices. Required: it goes onto the monthly invoice (FR-48).
- [ ] Rate in the demo is CHF 3.00 per minute. Required: CHF 3.40 per minute (NEW-07).

*Current state:* Extra time is entered in minutes when completing the appointment; it creates separate 'Extra Time' invoices.

### FR-30 Session packages

**Priority:** Should · **Phase:** 2 · **Status:** Deferred · **Also:** FR-31, FR-32

Admins configure packages (number of sessions, price). Clients buy packages via their personal link and pay online. Booked sessions draw down one credit instead of being invoiced. The remaining balance ('4/10 sessions remaining') is shown to the client (confirmations, personal page) and the team. At 1 remaining credit, admin and psychologist are notified.

**Acceptance criteria**

- After purchase of a 10-package, the client's next booking shows '9/10 remaining'.
- At 1 remaining credit a notification is sent.

*Note:* Later phase. Packages will probably be sold in the session by the psychologist, not bought online.

### FR-47 Online payment with Stripe (card, TWINT)

**Priority:** Must · **Phase:** 1 · **Status:** In progress

Direct-booked intake sessions and session packages are paid online via Stripe (credit card, TWINT).

**Acceptance criteria**

- Payment by card and TWINT works in Stripe test mode.
- After successful payment the booking is confirmed; after failure the slot is released (NEW-01).

**Deviations in the demo – to fix**

- [ ] Stripe payment with card and TWINT not shown working (test mode).

*Current state:* Bookings record payment status Paid / Pending / Failed.

### FR-48 Monthly invoice per client

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-56

At the end of each month the system creates one invoice per client for all completed sessions that are not prepaid (incl. extra time and late cancellations). The admin reviews and releases the invoices; then they are sent by email.

**Acceptance criteria**

- On the 1st of the month, draft invoices for the previous month exist for all clients with billable sessions.
- No invoice is sent before admin release.
- A session is never invoiced twice.

**Deviations in the demo – to fix**

- [ ] Invoices are created per session. Required: no invoice per session – the session length is confirmed after the session and everything is billed with one monthly invoice per client, created as draft and released by the admin.

*Current state:* Invoices are created per session ('Post-session') plus separate 'Extra Time' invoices.

### FR-49 Which payment mode applies

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-50

The first session (intake) is always paid upfront: online at direct booking, or – when booked by the team after a request or by phone – via a payment link sent by email (card or TWINT). From the second session on, sessions are billed with the monthly invoice (FR-48). There is no cash payment. Session packages are planned for a later phase (FR-30).

**Acceptance criteria**

- An intake booked by phone sends a payment link (card / TWINT) with the confirmation; the booking shows 'payment open' until paid.
- A follow-up session has no payment step and appears on the monthly invoice.
- No cash payment option exists anywhere.

### FR-51 Invoice and reimbursement receipt

**Priority:** Must · **Phase:** 1 · **Status:** Clarify · **Also:** FR-52, FR-21, CR-66

Invoices comply with Swiss requirements (QR-bill). With each invoice the client receives a reimbursement receipt (Rückforderungsbeleg) for the supplementary insurer listing each session (date, duration, product code, amount, psychologist with GLN). The design may be custom and appealing, but must contain all mandatory fields. Invoicing party: Balancd GmbH; the treating psychologist with GLN as service provider.

**Acceptance criteria**

- A test invoice can be paid with a Swiss banking app via QR code.
- The receipt lists every session individually with the psychologist's GLN.

*Note:* Pending: Balancd provides a sample invoice and receipt from MediOnline (anonymised) to derive the mandatory fields.

### FR-52 Receipts for prepaid sessions

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-66

At the end of the month, the client receives a receipt for the supplementary insurer covering all sessions carried out, both prepaid (package, intake) and invoiced. At purchase of a package only a payment confirmation is issued.

**Acceptance criteria**

- A client with only package sessions in a month still receives a receipt listing those sessions.

### FR-53 Payment status

**Priority:** Must · **Phase:** 1 · **Status:** Done · **Also:** CR-68

Each invoice has a status: open, paid, overdue (and cancelled/credited).

**Acceptance criteria**

- An invoice past its due date automatically shows 'overdue'.

*Current state:* Invoices have status Open / Paid / Overdue.

### FR-54 Refunds and credit notes

**Priority:** Must · **Phase:** 1 · **Status:** Open

Cancellations within policy (more than 48 hours before) of prepaid sessions are refunded via Stripe or credited. Credit notes are possible for invoiced sessions.

**Acceptance criteria**

- Cancelling a prepaid intake 3 days before triggers a refund in Stripe.
- Admins can issue a credit note for an invoice (full or partial amount, with reason); it is sent to the client and reduces the open amount.
- Cancelling a paid intake session more than 48 hours before triggers the refund via Stripe automatically; the admin sees the refund status.

### FR-55 Late cancellation and no-show are charged

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-15

Cancellations less than 48 hours before and no-shows are charged at 100%, also in case of illness. Notice period and fee are admin settings.

**Acceptance criteria**

- A cancellation 24 hours before appears on the monthly invoice with the full amount.

**Deviations in the demo – to fix**

- [ ] Cancellation text says 24 hours. Required: 48 hours, after that charged at 100%.

### FR-57 Payment reconciliation via Bexio

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-96, CR-67

Invoices are transferred to Bexio. Bexio matches incoming bank payments; the tool retrieves the payment status automatically via the Bexio API and updates the invoice.

**Acceptance criteria**

- An invoice marked as paid in Bexio shows 'paid' in the tool within 24 hours without manual action.

*Note:* Programmer to confirm feasibility with the Bexio API.

### FR-58 Dunning and booking block

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-59, FR-60

Automatic dunning (intervals and fees are admin settings):
- Payment term: 30 days
- 1st reminder: 30 days after due date, fee CHF 5
- 2nd reminder: 14 days after the 1st reminder, fee CHF 10
- After the 2nd reminder the client is flagged and cannot book further appointments; the flag is removed automatically upon payment.
The admin can pause or intervene manually.

**Acceptance criteria**

- An unpaid invoice triggers reminder 1 on day 60 and reminder 2 on day 74 after invoice date.
- A flagged client cannot book online; after payment booking works again.
- If SMS is enabled for the client (CR-75), payment reminders are additionally sent as a short SMS (no health information).

**Deviations in the demo – to fix**

- [ ] Two-level dunning (1st reminder CHF 5, 2nd reminder CHF 10) and booking block after the 2nd reminder not implemented.

*Current state:* Payment reminder emails are sent.

### CR-39 Complete a session in the calendar

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-28, CR-08, F-06

After the appointment, the psychologist confirms in the calendar that the session took place (or marks no-show), adjusts the actual duration if needed and checks the insurance type (preset from the psychologist profile, default VVG, editable per appointment). The product code comes from the session type (FR-08).

**Acceptance criteria**

- Confirming a session with 60 instead of 50 minutes updates the billable amount.
- The insurance type can be changed for a single appointment.
- No-show and late cancellation can be marked when completing a session.
- Completing a session creates no invoice; it only confirms the actual duration (per minute). Billing is monthly (FR-48).
- A completed session whose duration is confirmed shows a check mark in the calendar (approved for billing). Past sessions not yet completed show an 'open' marker and a hint 'completion pending'.
- A completed session can be corrected until the monthly invoice is released.

**Deviations in the demo – to fix**

- [ ] Completing a session happens on a separate appointment page. Required: directly from the calendar (open the appointment in the calendar, complete it there).
- [ ] No 'no-show' option. Required: took place / no-show / late cancellation.
- [ ] Remove 'Issue invoice too'. Completing a session only confirms the actual duration; billing is monthly (FR-48).
- [ ] Duration must be adjustable per minute (actual duration in minutes, price at CHF 3.40 per minute, see NEW-07), not only 'extra minutes'.
- [ ] Insurance type per appointment (preset from the profile, default VVG, editable) not shown.
- [ ] Known bug: selecting 'Psychologist' in invoicing causes an error.

*Current state:* 'Complete Appointment' on the appointment page opens a confirmation with 'Extra time actually delivered (minutes)' and 'Issue invoice too'.

### CR-68 Invoice overview for psychologists and admin

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-37

Psychologists see the invoices and payment status of their own clients (menu 'Invoices' replaces 'Follow-up bookings'). Admins see all invoices with status, filterable per psychologist. Reminders run automatically (FR-58).

**Acceptance criteria**

- A psychologist only sees invoices of own clients.
- The admin can filter invoices by psychologist and status.

**Deviations in the demo – to fix**

- [ ] Psychologists have no 'Invoices' menu and cannot see their own clients' invoices.
- [ ] Psychologist menu still has 'Follow-up Bookings'; required: replaced by 'Invoices'.

*Current state:* Admin invoice overview with filter by psychologist and status.

### NEW-06 Partial payment for ADHD assessment

**Priority:** Could · **Phase:** 1 · **Status:** Clarify

The fixed price of an ADHD assessment can be split into instalments.

**Acceptance criteria**

- (to be specified)

### NEW-07 Billing per minute (CHF 3.40)

**Priority:** Must · **Phase:** 1 · **Status:** Open

Sessions are billed per minute. Rate: CHF 3.40 per minute (50 minutes = CHF 170). The actual duration of an appointment can be adjusted to the minute when completing the session (CR-39); the monthly invoice (FR-48) uses the confirmed minutes. The rate is an admin setting. Fixed-price session types (e.g. ADHD assessment) are not billed per minute (FR-28).

**Acceptance criteria**

- A session confirmed with 50 minutes costs CHF 170.00; with 57 minutes CHF 193.80.
- The duration can be set to any whole minute, not only in 10-minute steps.
- Changing the rate in the admin settings applies to sessions completed afterwards.

**Deviations in the demo – to fix**

- [ ] The demo prices 50 minutes at CHF 180 and extra time at CHF 3.00 per minute. Required: CHF 3.40 per minute (50 min = CHF 170).

## Communication

### FR-20 Booking confirmation

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-21, FR-22, FR-23, FR-33, FR-64, CR-73

Immediately after every booking, the client receives a confirmation containing: date, time, modality, address or online note; 'Add to calendar' button and .ics file; psychologist name, email and GLN; Jitsi link (for in-person appointments labelled 'if you need to switch to online at short notice'); for intake sessions the insurer guidance text; payment information or receipt where applicable; personal link to manage appointments and packages (CR-09, FR-04); AGB link if not yet accepted (CR-18); for adolescents the guardian link with the consent form (FR-44). Variants: adults in person, adolescents in person, online (adults and adolescents).

**Acceptance criteria**

- A confirmation for an in-person appointment contains the Jitsi link with the short-notice label.
- The .ics file imports correctly into Google Calendar, Outlook and Apple Calendar.

*Note:* Today the GLN is only added for adults on request and the psychologist sends the Jitsi link manually. New: GLN always included, Jitsi link generated automatically.

**Deviations in the demo – to fix**

- [ ] Missing: German templates, .ics file, GLN, Jitsi link, personal link.

*Current state:* Booking confirmation emails (English) are sent and logged.

### FR-61 Reminders

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-62

Clients receive an email reminder 72 hours before the appointment (before the free cancellation period ends). Optionally an SMS reminder 24 hours before, if enabled for the client. Lead times are admin settings.

**Acceptance criteria**

- Appointment on Friday 10:00: email reminder on Tuesday 10:00.

### FR-63 Notifications to the team

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-45

Psychologists and admins are notified of new bookings, cancellations and reschedules; admins additionally of new requests and absence requests.

**Acceptance criteria**

- Cancelling an appointment notifies the psychologist by email.

**Deviations in the demo – to fix**

- [ ] Missing: notifications to psychologists for new bookings, cancellations and reschedules; to admins for absence requests.

*Current state:* Shared queue alert for new requests; notification delivery log.

### FR-65 Language per client

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-91, FR-92

Clients choose their language (German/English) independent of browser settings. All emails and documents are sent in that language.

**Acceptance criteria**

- A client with language 'English' receives the English confirmation and invoice.

### FR-67 Editable email templates

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-66, FR-68, FR-69, FR-70, FR-74

All emails are sent from the tool and use templates that admins edit without developer involvement, in German and English, with placeholders (client name, date, psychologist, amount …). Templates at least: booking confirmation, reminder, cancellation, invoice, receipt, reminder 1/2, feedback request, AGB acceptance, missing details, guardian confirmation, decline without call (adults / adolescents), recommendation after call (adults / adolescents), not reached (same / new contact person), confirmation (adults in person / adolescents in person / online), low package balance, new consent. Existing Balancd templates are the starting point.

**Acceptance criteria**

- Changing a template text in the admin area changes the next email sent, without deployment.
- Balancd's existing templates are set up with their wording: decline without call (adults / adolescents), recommendation after call (adults / adolescents), phone number missing or wrong, not reached (same / other contact person, contact person in CC), confirmation after call (adults in person / adolescents in person with guardian link / online with video link).
- Placeholders are filled automatically: greeting by time of day ({gruss}: Guten Morgen / Nachmittag / Abend), salutation, date in long form ('Montag, 5. Oktober'), time ('16.00'), psychologist and their GLN, practice address, practice phone, email and website, video link, guardian link, sender. The practice details are admin settings.
- Confirmation templates always contain the psychologist's GLN (FR-20); the online confirmation contains the generated video link (FR-94) and the adolescents' confirmation the guardian link (FR-44) instead of a form to scan.
- After booking from a request, the matching confirmation template opens prefilled; the admin checks and sends it.

### FR-71 Feedback requests

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-72, FR-73

Clients automatically receive a feedback request after the intake session and after the 10th completed session. Responses are stored with the client record.

**Acceptance criteria**

- After the 10th completed session exactly one feedback email is sent.
- Feedback requests are sent automatically by email after the intake session and after the 10th completed session; the psychologist receives a notice in the inbox (NEW-18) when a request was sent and when feedback arrives.
- Before the request is sent, the psychologist sees a reminder in the inbox and can hold it back for this client (e.g. in a crisis).

### FR-94 Jitsi video links

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-23

The system generates a unique Jitsi link per appointment. For now the public Jitsi server is used.

**Acceptance criteria**

- Each appointment has its own, non-guessable meeting link.

*Note:* Decided: public server for now. Recommendation for later: own Jitsi instance hosted in Switzerland (data protection).

### CR-05 Write emails in the tool

**Priority:** Must · **Phase:** 1 · **Status:** Open

Admins and psychologists can write and send emails directly in the tool, using templates for standard cases. No separate login in an email program is needed.

**Acceptance criteria**

- From the client view, a psychologist sends an email with a template; it appears in the client's history.

### CR-06 Template suggestions and auto-fill

**Priority:** Should · **Phase:** 1 · **Status:** Open

The system suggests a matching template for the situation and fills in name, date etc. from the appointment; the user only reviews and sends.

**Acceptance criteria**

- From an appointment, 'write email' suggests the most relevant template with fields filled.

### NEW-08 AI suggests improved email texts

**Priority:** Should · **Phase:** 1 · **Status:** Open

When writing an email in the tool (CR-05, CR-06), the user can ask the AI for an improved version of the text (clearer, friendlier, correct spelling, same content). The suggestion is shown next to the original; the user accepts, edits or discards it. Nothing is sent without the user clicking Send. Session notes are never sent to the AI.

**Acceptance criteria**

- 'Improve text' shows a suggestion within a few seconds; the original stays unchanged until the user accepts.
- No email is sent automatically.

*Note:* Data protection to confirm before implementation: AI provider with hosting in Switzerland/EU and a data processing agreement (NFR-01, NFR-03); client names only where needed.

### NEW-18 Inbox for admins and psychologists

**Priority:** Must · **Phase:** 1 · **Status:** Open

Admins and psychologists have an inbox that collects everything new in one list, colour-coded by type: direct bookings, requests (admins only), emails from clients (from the practice mailbox, CR-17, assigned to the client automatically), items to approve (e.g. absences, admins only) and notices from the system (e.g. absence approved or rejected, parental consent received, booking via personal link). Emails can be written and sent directly from the inbox (templates and AI suggestion, CR-05, CR-06, NEW-08).

**Acceptance criteria**

- The navigation shows 'Inbox' with the number of unread items.
- Each item shows type (colour label), date and time, title and a short preview; unread items are highlighted.
- Filters: all open, unread, direct bookings, requests (admin), to approve (admin), emails, notices, done.
- Opening an item shows the details and the matching actions: open request / appointment / client, reply to an email, write an email to the client, approve or reject an absence.
- Approving or rejecting an absence in the inbox sends a notice to the psychologist's inbox.
- Items can be marked as done or unread; done items are kept under 'Done'.
- '+ New email' opens the email composer for any of the user's clients; sent emails appear in the client's history.
- The admin view of the inbox shows only the practice's own items (practice mailbox, requests, approvals, direct bookings). Emails and notices addressed to individual psychologists are never shown to admins. Psychologists see only their personal items; a person with both roles sees their personal items in the psychologist view (CR-07).
- The inbox works like an email program: folders Inbox, Notifications (direct bookings, requests, approvals, system notices), Sent, Drafts, Archive and Trash, each with its unread count.
- An opened email shows sender, recipients (To/CC), date, subject, full text and attachments; earlier messages of the same conversation are shown as a thread.
- Actions per email: reply, reply all, forward (including attachments), archive, delete (to Trash, restorable), mark as unread. Drafts are saved and can be continued later.
- Attachments show name, type and size; they can be previewed in the browser without downloading, downloaded, and filed into the client record ('Documents') with one click.
- The composer has To (with suggestions from the user's clients), CC, subject, template, text, AI suggestion and attachments (upload from the computer or pick from the client's documents).
- Search across sender, recipients, subject, text and attachment names; filters 'unread' and 'with attachment'.
- Emails from known addresses are assigned to the client automatically; an email can be assigned to a client manually or unassigned. The client record lists all emails and documents of that client from the user's own mailbox.

**Deviations in the demo – to fix**

- [ ] There is no inbox: the psychologist navigation has Dashboard, Calendar, Appointments, Internal Schedules, Availability, Clients, Follow-up Bookings, Profile and Settings, but no inbox or email.

### NEW-19 Personal mailbox of each psychologist in the platform

**Priority:** Must · **Phase:** 1 · **Status:** Open

Every team member has her own email address (e.g. firstname@balancd.ch) connected to the platform (IMAP/SMTP), in addition to the practice mailbox (CR-17). Incoming emails appear in her inbox (NEW-18) and are assigned to the client automatically; she writes and answers emails in the platform with her own sender address. Nobody needs a separate email program or webmail login any more.

**Acceptance criteria**

- An email from a client to laura@… appears in Laura's inbox, assigned to the client, within a few minutes.
- Emails sent from the platform by a psychologist use her own address as sender and appear in her mailbox's sent folder.
- Admins never see a psychologist's personal emails (NEW-18).
- The practice mailbox (CR-17) stays separate and is shown in the admin inbox.
- The practice mailbox and each personal mailbox have the folders Inbox, Sent, Drafts, Archive and Trash; the email signature uses the sender's own address.

*Note:* Provider to be chosen together with CR-17 (e.g. Swiss provider with IMAP/SMTP).

## Reporting

### FR-75 Utilisation and no-show rate

**Priority:** Must · **Phase:** 1 · **Status:** Open

Utilisation per psychologist (booked vs. available hours) and no-show rate.

**Acceptance criteria**

- Utilisation is shown per psychologist and period.

### FR-78 Statistics for admins

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-84, CR-56, CR-57, CR-58, CR-59, CR-60

Admins see all psychologist statistics per person and in total, plus: number of requests; percentage of requests converted into a booking; percentage of booked appointments attended; drop-offs and cancellations by reason (FR-77, CR-72).

**Acceptance criteria**

- Selecting a psychologist shows their individual statistics.
- Drop-offs are broken down by decline reason.
- The statistics show ended counselling by reason (NEW-17), per psychologist and in total.

**Deviations in the demo – to fix**

- [ ] Missing: drop-offs by decline reason.

*Current state:* Requests received, conversion rate, attendance rate, per psychologist.

### FR-79 Statistics for psychologists

**Priority:** Must · **Phase:** 1 · **Status:** Done · **Also:** FR-80, CR-51, CR-52, CR-53, CR-54

Psychologists see: number of intake sessions; percentage of intake sessions followed by a follow-up; average number of follow-up sessions; number and share of clients with fewer than 5 and more than 10 follow-up sessions; list of clients with more than 5 / 10 sessions. Admins see these figures for every psychologist and in total, plus extended evaluations (see FR-78 and NEW-10).

**Acceptance criteria**

- Figures match a manual count on test data.

*Current state:* Statistics show intakes, % with follow-up, average follow-ups and distribution <5 / 5–10 / >10, per psychologist.

### FR-83 Anonymous feedback evaluation per team member

**Priority:** Must · **Phase:** 1 · **Status:** Open

Feedback results are shown anonymised per team member only when at least 5 responses exist. Free-text comments are visible to admins only.

**Acceptance criteria**

- A psychologist with 4 responses shows 'not enough responses'.
- Psychologists see their own anonymised feedback results under 'My figures' (from 5 responses); admins see them per team member under Statistics.

### CR-50 Freely selectable period

**Priority:** Must · **Phase:** 1 · **Status:** Done · **Also:** CR-62

All statistics can be filtered by a freely selectable period (e.g. January to July).

**Acceptance criteria**

- Selecting 1 Jan – 31 Jul recalculates all figures for that period.

*Current state:* Statistics have From/To date range and presets.

### CR-55 Export as PDF and Excel

**Priority:** Should · **Phase:** 1 · **Status:** Open

Statistics can be exported as PDF and Excel with the selected filters.

**Acceptance criteria**

- The Excel export contains the same figures as the screen.

### CR-61 Standard metrics and custom filters

**Priority:** Should · **Phase:** 1 · **Status:** Open

A set of predefined metrics plus custom filters (e.g. by session type, modality, language).

**Acceptance criteria**

- Admin can filter revenue by session type.

### CR-63 Revenue and payments

**Priority:** Must · **Phase:** 1 · **Status:** Done · **Also:** FR-75, CR-64, CR-65

Revenue by period, amount and percentage of invoices paid, amount outstanding.

**Acceptance criteria**

- Paid + outstanding = invoiced amount for the period.

*Current state:* Invoice reporting shows invoiced revenue, paid amount, outstanding, paid %, by period and by psychologist.

## Team

### FR-21 Profile with multi-select fields

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-45, CR-49, CR-08

Specialisations, languages, 'experience with' (age groups) and supplementary insurances are multi-select dropdowns based on the Balancd psychologist Google Form, with sensible preselection. The profile also contains GLN, 'accepts minors' and the default insurance type (VVG).

**Acceptance criteria**

- Several languages can be selected; supplementary insurances are preselected.
- The profile has a photo.
- Psychologists maintain their own profile under 'My profile' with the same fields and answer options as the Balancd psychologist Google Form; changes are published on the website automatically (FR-93).
- Admins have an overview of all psychologists (Settings → Team) with their profile content (title, GLN, specialisations, languages, experience, minors, insurances) and availability, and can edit (override) any profile and availability; the psychologist is notified in the inbox and the change is logged with name and time.

**Deviations in the demo – to fix**

- [ ] No profile photo.
- [ ] No list of supplementary insurers (only 'accepted financing types').
- [ ] The profile has no GLN field.

*Current state:* Profile with languages, modalities, specialisations, methods, experience with, accepted financing types, credentials, short introduction.

### FR-81 Bank details visible to admin only

**Priority:** Must · **Phase:** 1 · **Status:** Open

Bank details of team members are stored for payroll and visible to admins only.

**Acceptance criteria**

- A psychologist cannot see bank details, not even their own in another person's view.

### CR-07 One login with admin/psychologist switch

**Priority:** Must · **Phase:** 1 · **Status:** Accepted · **Also:** F-01

Each person has one login per email address. Persons with admin rights see a switch at the top right (next to the language switch) to toggle between admin view and psychologist view.

**Acceptance criteria**

- An admin who is also a psychologist logs in once and can switch views without logging out.

*Current state:* Is implemented

### CR-47 Invite new psychologists

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** CR-48

The admin only enters first name, last name and email. The person receives an invitation by email and completes the profile (photo, specialisations, languages etc.) themselves.

**Acceptance criteria**

- Creating a psychologist needs exactly 3 fields; the invitation email arrives.

**Deviations in the demo – to fix**

- [ ] The invite form must have only first name, last name and email.

*Current state:* 'Invite Psychologist' and staff invitations exist.

### CR-69 Admin settings

**Priority:** Must · **Phase:** 1 · **Status:** Open

The admin area contains only: session types and prices, packages, rooms, cancellation period, booking window, daily limit per person, dunning intervals and fees, reminder lead times, email templates, partner codes (phase 2), decline and cancellation reasons. Other settings of the prototype (e.g. 'Location Blocks') are removed unless needed for these.

**Acceptance criteria**

- Every setting in the admin area maps to this list.
- The admin edits all settings directly on the settings pages (no developer needed): rate per minute; per session type name, default duration, buffer, price per minute or fixed price, bookable online, colour; add session types; rules (cancellation period, booking window, holds, daily limit, reminders, payment term, dunning intervals and fees, absence approval threshold); rooms and their half-day assignment. Changes apply immediately to new appointments.
- Session types already used in appointments cannot be deleted (only renamed or changed). Every settings change is logged (who, when, old → new value).
- The lists of cancellation reasons (CR-72), decline reasons for requests (FR-77) and reasons for ending counselling (NEW-17) can be edited by the admin (add, rename, remove); existing entries keep their reason.

### NEW-09 Permissions of psychologists

**Priority:** Must · **Phase:** 1 · **Status:** Open

Psychologists cannot delete clients and cannot create or change session types or services. Deleting clients and managing session types are reserved for admins. When booking the first session, the psychologist chooses how the client pays: payment link by email (card / TWINT via Stripe) or TWINT directly; packages follow in a later phase. There is no cash payment. From the second session on, billing via the monthly invoice is automatic (FR-49).

**Acceptance criteria**

- The 'delete client' action is not available in the psychologist view.
- Psychologists can select session types but cannot create, edit or delete them.
- When booking a first session, the psychologist chooses 'payment link' or 'TWINT'; for later sessions the form shows 'monthly invoice'.
- There is no cash option.

### NEW-10 Psychologist and admin see different things

**Priority:** Must · **Phase:** 1 · **Status:** Open

Psychologists see only: Calendar (own calendar; colleagues' calendars read-only, CR-31; own client appointments, internal appointments, absences and blockers), Clients (own clients only), Invoices of their own clients incl. the dunning list (read-only), their own statistics (FR-79) and their own payslips (optional). They also maintain their own profile and availability. Psychologists do not see Requests, team statistics or practice settings. Admins see everything: all calendars, Requests, all clients, invoices incl. release and dunning, extended Statistics (team, per psychologist, requests, finances, working hours for payroll) and Settings. Persons with both roles switch with CR-07.

**Acceptance criteria**

- A psychologist never sees Requests, team statistics or other psychologists' clients and invoices.
- A psychologist sees the dunning list of own clients.
- A psychologist has no invoice release, practice settings or absence approval.
- Menu items without permission are not shown (not greyed out).

## Payroll

### FR-96 Export to payroll in Bexio

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-81

Payroll is done in a certified payroll software. The tool provides the monthly hours per person as export, ideally directly via interface to Bexio.

**Acceptance criteria**

- The monthly hours of all psychologists can be transferred to Bexio (or exported as a file).

*Note:* Programmer to check the Bexio payroll interface.

### CR-70 ADHD assessment as fixed-price session type

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-71

'ADHS-Abklärung' is a fixed-price session type with its own colour and label in the calendar. The minutes the psychologist spends are recorded in the calendar and count towards working hours.

**Acceptance criteria**

- An ADHD assessment appears in its own colour in the calendar.

*Note:* Open: price and number of appointments per assessment (part of the session type list, FR-08).

### CR-71 Hours report per psychologist

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-81

For a selectable period, the report sums up session hours per psychologist, including time spent on ADHD assessments (counted for working hours without being billed again) and internal appointments marked as working time.

**Acceptance criteria**

- ADHD assessment time appears in the hours report but not on any invoice.

### NEW-16 Access for fiduciary (Treuhand): billing and payroll

**Priority:** Should · **Phase:** 1 · **Status:** Open

The admin can give an external fiduciary (Treuhand) a separate role. The fiduciary does billing and payroll: it sees all clients and can edit their master data including the billing recipient (without access to session notes, documentation history and emails), carries out billing like the admin (approve and send monthly invoices, mark payments, credit notes, dunning list), sees the calendars of all team members read-only, the statistics and the hours report (CR-71) / payroll export (FR-96), with download as Excel/CSV and PDF. It has no access to session notes and documentation, requests, the inbox or settings.

**Acceptance criteria**

- The fiduciary navigation shows Calendar, Clients, Invoices, Statistics and Hours report.
- Clients: all clients of the practice with search and filters. The fiduciary can edit all master data of a client record (name, gender, date of birth, language, occupation, address, billing recipient, phone and email with SMS/email opt-in, emergency contact, insurance); changing the treating psychologist stays admin only. Every change is logged with the fiduciary's name. The record also shows appointments, invoices, consents and guardian details, but no session notes, documentation history or emails. The fiduciary cannot create clients, book appointments or send emails from the record.
- Invoices: the fiduciary can approve and send monthly invoices, mark invoices as paid, create credit notes and see the dunning list, like the admin; single invoices download as PDF, the list as Excel/CSV.
- The calendar shows all team members (team view and per person) read-only; appointments open without session notes or documentation. Nothing can be created, moved or cancelled.
- Statistics are the admin statistics without the feedback free-text comments; they can be exported.
- The hours report can be filtered by period and team member and downloaded as Excel/CSV and PDF.
- A fiduciary user cannot open session notes, documentation, requests, inbox items or settings.
- The admin creates the fiduciary user under Settings → Team with the role 'Fiduciary (billing)'.

## Integrations

### FR-82 Bexio integration

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-96

Invoices and payment status are synchronised with Bexio (FR-57); hours for payroll are exported to Bexio (FR-96).

**Acceptance criteria**

- An invoice released in the tool appears in Bexio.

*Note:* Raised from 'Could' to 'Must' because payment reconciliation and payroll run via Bexio.

### FR-93 WordPress integration

**Priority:** Must · **Phase:** 1 · **Status:** Open

Request form and booking are embedded in the WordPress website. Psychologist profiles are maintained only in the tool and published automatically on the website (own URL per team member). The programmer proposes the technical method.

**Acceptance criteria**

- A profile change in the tool appears on the website without manual steps.

### FR-95 One-time migration from MediOnline

**Priority:** Must · **Phase:** 1 · **Status:** Clarify

Existing data from MediOnline (Ärztekasse) is imported once via Excel/CSV. After go-live, the new tool replaces MediOnline for booking and invoicing.

**Acceptance criteria**

- Clients and appointment history from the sample export are imported without data loss.

*Note:* Pending: sample export from MediOnline.

### FR-95b Interface to Lyra Health (SAP)

**Priority:** Should · **Phase:** 2 · **Status:** Clarify

Interface to the SAP system of Lyra Health. Specification (data, direction, frequency, format) to be requested from Lyra Health.

**Acceptance criteria**

- (after specification)

### FR-97 Calendar export for psychologists

**Priority:** Should · **Phase:** 1 · **Status:** Open

Psychologists can subscribe to their calendar (.ics) in their own calendar app. Client names are anonymised in the export (e.g. initials or 'Appointment').

**Acceptance criteria**

- The subscribed calendar shows appointments without full client names.

### NEW-14 Conversion tracking

**Priority:** Should · **Phase:** 1 · **Status:** Open

A completed direct booking and a submitted request each trigger a conversion event for website analytics and advertising (e.g. Google Analytics / Google Ads), only if the visitor has accepted tracking cookies. No personal or health data is transmitted: only the event type (request / booking) and, if available, the acquisition channel (NEW-04).

**Acceptance criteria**

- With tracking consent, a completed booking triggers exactly one conversion event; a submitted request triggers one request event.
- Without consent, no event is sent.
- The event contains no name, email, reason for consultation or psychologist.

## Partners

### FR-98 Partner codes

**Priority:** Should · **Phase:** 2 · **Status:** Clarify

Partners (e.g. WePractice) receive unique codes. Bookings with a code are assigned to the partner. Whether a code also grants a discount is configurable per partner.

**Acceptance criteria**

- (after clarification)

*Note:* Not finally decided. Kick-backs to partners are planned for the future.

### FR-99 Partner commissions

**Priority:** Should · **Phase:** 2 · **Status:** Clarify · **Also:** FR-100, FR-101

The system calculates commissions for referred clients (e.g. 50%) once a minimum number of sessions has been completed (e.g. 2 or 3), with a monthly payout overview.

**Acceptance criteria**

- (after clarification)

## CRM

### FR-102 CRM and newsletter module

**Priority:** Should · **Phase:** 2 · **Status:** Deferred · **Also:** FR-103, FR-104, FR-105

Integrated CRM/newsletter module comparable to Mailchimp: segments, campaigns, open/click metrics. Phase 2. Until then, contacts with marketing opt-in can be exported to an existing tool.

**Acceptance criteria**

- (phase 2)

### FR-106 Marketing consent separate from operational emails

**Priority:** Must · **Phase:** 2 · **Status:** Deferred

Marketing emails are only sent to contacts with explicit opt-in, separate from operational emails.

**Acceptance criteria**

- (phase 2)

## Platform

### FR-76 Audit log

**Priority:** Must · **Phase:** 1 · **Status:** Open

All changes to bookings and all access to client files and notes are logged (who, when, what).

**Acceptance criteria**

- Opening a client file creates a log entry visible to admins.

*Current state:* Session documentation keeps every saved version (author, time, 'View previous content').

### FR-90 Languages and terminology

**Priority:** Must · **Phase:** 1 · **Status:** In progress · **Also:** FR-92, CR-01, CR-02, F-02, F-03

Client, psychologist and admin interfaces are available in German and English. Terms: 'Psychologist' / 'Psycholog:in' (not 'Therapist'), 'Requests' / 'Anfragen' (not 'Inquiries'). The language switch is at the top right.

**Acceptance criteria**

- No screen shows the word 'Therapist'.
- The DE / EN switch at the top right (team area and booking pages) changes all texts, weekday and month names and date formats immediately, without reload or losing entered data. The chosen language is kept per user.

**Deviations in the demo – to fix**

- [ ] Not all texts are available in German.
- [ ] 'Inquiries' must be called 'Requests' / 'Anfragen'.

*Current state:* Staff workspace language switch EN / DE.

### FR-111 API-first

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** FR-95, FR-113

All functions are built API-first, so further modules and interfaces (Lyra, Bexio, events, recruiting) can be added.

**Acceptance criteria**

- An API documentation exists for the main objects (clients, appointments, invoices).

### NFR-01 Data protection (revFADP, GDPR)

**Priority:** Must · **Phase:** 1 · **Status:** Open

The system complies with the Swiss Federal Act on Data Protection (revFADP) and, if applicable, GDPR.

**Acceptance criteria**

- Data processing overview and privacy policy are available before go-live.

### NFR-01b Retention and deletion concept

**Priority:** Must · **Phase:** 1 · **Status:** Clarify · **Also:** NFR-09

Retention periods: invoices and accounting records 10 years; clinical documentation according to legal requirements (to be confirmed by legal counsel); requests without booking anonymised after 12 months. Deletion runs automatically.

**Acceptance criteria**

- Requests older than 12 months without booking are anonymised automatically.

*Note:* Pending: retention period for clinical documentation (legal counsel).

### NFR-02 Encryption

**Priority:** Must · **Phase:** 1 · **Status:** Open

Health-related data is encrypted at rest and in transit.

**Acceptance criteria**

- Database and file storage are encrypted; all connections use HTTPS/TLS.

### NFR-03 Hosting in Switzerland or EU

**Priority:** Must · **Phase:** 1 · **Status:** Open

Data is hosted in Switzerland (or EU with adequate safeguards).

**Acceptance criteria**

- Hosting provider and data centre location are documented.

### NFR-04 Accessibility WCAG 2.1 AA

**Priority:** Should · **Phase:** 1 · **Status:** Open

The booking interface meets WCAG 2.1 AA.

**Acceptance criteria**

- Automated accessibility check without critical findings on booking pages.

### NFR-06 Availability 99.5%

**Priority:** Must · **Phase:** 1 · **Status:** Open

Uptime of at least 99.5%.

**Acceptance criteria**

- Uptime monitoring is set up and reported monthly.

### NFR-07 Mobile-friendly

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-03

The interface is fully functional on mobile devices. Dropdowns must not make the layout jump (reported on Android). Forms use suitable keyboards (email, numbers).

**Acceptance criteria**

- Booking flow tested on current iOS and Android without layout jumps.

### NFR-08 Scalability

**Priority:** Should · **Phase:** 1 · **Status:** Open

New psychologists and locations can be added without architectural changes.

**Acceptance criteria**

- A second location can be created via settings.

### NFR-09 Daily backups

**Priority:** Must · **Phase:** 1 · **Status:** Open

Automated daily backups, kept for 30 days. Restore is tested.

**Acceptance criteria**

- A restore test is documented before go-live.

### NFR-10 Browser support

**Priority:** Must · **Phase:** 1 · **Status:** Open

Current versions of Chrome, Safari, Firefox and Edge are supported.

**Acceptance criteria**

- Main flows tested in all four browsers.

### CR-04 Simple main navigation

**Priority:** Must · **Phase:** 1 · **Status:** Open

The main navigation contains only: Calendar, Inbox, Requests, Clients, Invoices, Reporting, Settings (admin). Psychologists see: Calendar, Inbox, Clients, Invoices, My figures, Payslips, My profile (NEW-10). Everything else (appointment lists, bookings register, internal schedules, availability, notifications, dashboard) is reached from within these areas or removed.

**Acceptance criteria**

- The admin sidebar shows exactly these seven items: Calendar, Inbox, Requests, Clients, Invoices, Reporting, Settings.
- No separate menu items for Appointments, Bookings, Internal Schedules, Psychologists, Availability, Follow-up Bookings or Notifications.
- The psychologist sidebar shows exactly: Calendar, Inbox, Clients, Invoices, My figures, Payslips, My profile; availability is maintained in the calendar and in My profile.

**Deviations in the demo – to fix**

- [ ] Admin menu has 11 items. Required: exactly Calendar, Requests, Clients, Invoices, Reporting, Settings.
- [ ] Psychologist menu has 9 items (Dashboard, Calendar, Appointments, Internal Schedules, Availability, Clients, Follow-up Bookings, Profile, Settings). Required: the same short navigation as in the click prototype.

### CR-35 Low information density

**Priority:** Must · **Phase:** 1 · **Status:** Open · **Also:** CR-04

Screens show only what is needed; rarely used information is collapsed. Unclear technical terms (e.g. 'Session Completion', 'Related Actions') are replaced by plain language.

**Acceptance criteria**

- Each screen was approved by Balancd as design proposal before implementation.

**Deviations in the demo – to fix**

- [ ] The psychologist area is far too crowded and uses technical terms: 'Session Completion', 'Availability Blocks', 'Individual Unavailability Block', 'Internal Schedule', 'Lifecycle status', 'Source Appointment'. Reduce to what is needed, in plain language (see click prototype).
- [ ] The booking dialog for the team shows fields that are not needed there, all as mandatory: contact channel, client's age, 'available psychologist' in the own calendar, contact availability, country and 'state / province / canton'. Technical texts such as 'No capacity is reserved until Booking Confirmation' or 'Resolve the Client'. Required: only the fields needed for the appointment; missing client details are completed in the client record or via the link (FR-37).

### NEW-11 Clear error messages and validation

**Priority:** Must · **Phase:** 1 · **Status:** Open

Error messages are human-readable (e.g. 'This slot has just been taken – please choose another time'). Email and phone numbers are validated; common typos (e.g. '.con') are pointed out.

**Acceptance criteria**

- Entering 'name@gmail.con' shows 'Did you mean gmail.com?'.

### NEW-12 Proposal before implementation

**Priority:** Must · **Phase:** 1 · **Status:** Open

For each change the programmer first submits a proposal/design for approval: proposal → approval by Balancd → implementation → next step.

**Acceptance criteria**

- Every requirement set to 'In progress' has an approved proposal.

### NEW-15 Address autocomplete

**Priority:** Could · **Phase:** 1 · **Status:** Open

Address fields (direct booking, link for missing details, client record) suggest Swiss addresses while typing (street, number, postcode, city). Manual entry remains possible.

**Acceptance criteria**

- Typing 'Bahnhofstr' suggests matching Swiss addresses; choosing one fills street, number, postcode and city.
- An address not found in the suggestions can still be entered manually.

## Client portal

### FR-109 Documents for clients only via portal

**Priority:** Could · **Phase:** 3 · **Status:** Deferred · **Also:** FR-108

If protocols are shared with clients in the future, only in the portal (never by email); two versions of a note (for client / internal).

**Acceptance criteria**

- (phase 3)

### FR-112 Client portal

**Priority:** Could · **Phase:** 3 · **Status:** Deferred

Client login with overview of upcoming and past appointments, invoices, packages and documents. Builds on the personal link (CR-09).

**Acceptance criteria**

- (phase 3)

## Events

### FR-110 Event management

**Priority:** Could · **Phase:** 3 · **Status:** Deferred · **Also:** FR-111

Events (workshops, seminars) that several clients book and pay directly; capacity per event for in-person, online unlimited; discount codes; Jitsi link; events shown in the calendar like a yoga studio.

**Acceptance criteria**

- (phase 3)

## Recruiting

### FR-113 Applicant management and onboarding

**Priority:** Could · **Phase:** 3 · **Status:** Deferred · **Also:** FR-114

Automated emails, interview booking, CV upload, storage in staff files, LinkedIn interface; onboarding with suggested slots and documents (today Google Drive).

**Acceptance criteria**

- (phase 3)

## Media library

### FR-115 Media library and membership

**Priority:** Could · **Phase:** 3 · **Status:** Deferred · **Also:** FR-116, FR-117, FR-118, FR-119, FR-120

Online courses and self-help resources (e.g. while waiting for a slot), access via membership, discounts on events; tiered memberships; evaluate white-label solutions first.

**Acceptance criteria**

- (phase 3)

## AI

### FR-107 AI protocols and voice control

**Priority:** Could · **Phase:** 3 · **Status:** Deferred · **Also:** FR-89

AI-assisted session protocols/transcriptions and appointment management via voice. Requires new consent (FR-41).

**Acceptance criteria**

- (phase 3)

### FR-121 Chatbot 'AI Psycholog'

**Priority:** Could · **Phase:** 3 · **Status:** Deferred · **Also:** FR-122, FR-123

Chatbot on the website, clearly labelled as AI and not a substitute for a psychologist, directing clients to requests or resources.

**Acceptance criteria**

- (phase 3)

### NEW-13 AI assistant for invoice questions

**Priority:** Could · **Phase:** 3 · **Status:** Deferred

Incoming client emails such as 'please send me the February invoice again' are answered automatically after the request is recognised.

**Acceptance criteria**

- (phase 3)
