Update spring 202
Over the past months we have shipped a lot of work across Flux. Some of it is immediately visible in daily workflows: better planning, clearer invoicing, more filters, extra questionnaires and more useful overviews. Other improvements sit behind the scenes: more stable integrations, better exports, newer technical foundations and stronger error handling.
This update brings together the largest improvements from the spring.
More insight into your practice
We expanded several overviews so you can find the right information faster. In the data explorer you can now filter more precisely by start date, diagnosis code and patient information. We also added filters for invoices, subscriptions, questionnaires and patients who require postal invoices.
Reporting received a lot of attention, especially the Nivel export. We reviewed and improved the export, including new indicators, more referral coverage and better handling of questionnaire data. The LDF export was improved as well by using precomputed aanspraak codes.
Several overviews are now sorted more logically, including insurer contracts, appointments that still need to be invoiced and lists of letters and documents.
Planning and waiting lists
The planner received several day-to-day improvements. We added hotkeys, better warnings for unavailable locations, a removable side panel and horizontal calendar scrolling. When copying and pasting appointments, Flux can now suggest a better location based on availability.
Waiting lists were improved as well. Existing waiting list descriptions are easier to update, waiting lists can be removed and duplicate appointments on the same day are handled more clearly through worklist items.
Appointments without consults now create worklist items, and those items were refined further. This makes missing consults easier to catch without manually checking lists.
Finance and accounting
Many small and large finance improvements landed in this update. Invoice, payment and declaration statuses are clearer. We added extra filters, made POS payments easier to reach and improved visibility for patients without an email address or without a sent invoice email.
The accounting integrations received a lot of maintenance. We worked on Twinfield, Exact Online, Moneybird, Yuki, Payt, Mollie and GGN. Synchronisation is more stable, errors are stored more clearly and webhook handling has improved.
We also worked on automatic Twinfield syncing, better Exact Online master data, Moneybird webhooks and pruning failed accounting sync attempts. For users, that means less manual recovery work and more predictable accounting flows.
Care content and documents
The medical feed and letters received multiple improvements. Treatment trajectory names or conclusions can now be included more consistently in letters, evaluations and final evaluations. Document names can be edited, and Google Drive documents are easier to attach to a patient.
For ZorgDomein, we improved patient creation, phone number handling, GP information and duplicate prevention. We also updated flows around AGB Raadpleegdienst v3, CZN, Zorgtopics and Qualiview.
We also worked on templates, document rendering and PDF regression testing. This helps catch differences between editor content, templates and generated PDFs earlier.
Questionnaires
We added many questionnaires and improved existing questionnaire flows, so questionnaires now have their own section.
Searching for questionnaires is also easier thanks to aliases. Questionnaires can now be found through short names, common variants and abbreviations, such as SHIM, IIEF-5 and short, mini or quick naming variants.
We also fixed bugs in scoring, exports, completed questionnaire handling, intake questionnaires and medical feed filters. This included work around STarT MSK, ACL-RSI, Constant Score, PSK, NPRS and Nivel exports.
Technical stability and security
A large part of this release happened under the hood. We updated dependencies, improved pipelines, cleaned up tooling and added more regression testing. The frontend foundation was strengthened with new primitives for popovers, menus, listboxes, tooltips, presence and interactive component variants. This makes the interface more consistent and easier to extend.
Error handling and logging also improved. More handled exceptions now create worklist items, webhook failures are easier to inspect and domain messages have better storage and ordering.
Questionnaires
- WRITIC questionnaire.
- WHO-5 questionnaire.
- IPSS as a sendable questionnaire.
- SF-MPQ questionnaire.
- EFA questionnaire, Elbow Functional Assessment scale.
- Osteoporosis questionnaires: PROMIS-10, osteoporosis baseline questionnaire, osteoporosis questionnaire and FES-I short version.
- CBBDQ5-12 and CBBDQ12-18 questionnaires.
- Rivermead Post Concussion Questionnaire.
- VISA-P and VISA-A questionnaires.
- FES-I questionnaire.
- NESA Clinics questionnaires: FSDSR, DSQ-PEM, FunCap27, DN4, PSS and PDI.
- DASH questionnaire.
- RA questionnaires: HAQ-DI, RA-QoL, WPAI, IPAQ-SF, PSG and NRS fatigue.
- Questionnaire aliases, including SHIM/IIEF-5 and short/mini/quick variants.
- Nivel export indicators for questionnaires.
- STarT MSK response mapping.
- ACL-RSI scoring.
- Constant Score calculation.
- Nivel export handling for questionnaire
kinderprom. - PSK patient questionnaires require all three questions.
- QuestionnaireIsAlreadyCompletedException.
- QuestionnaireIsAlreadyCompletedException.
- Referral ID mismatch with questionnaire response request.
- Filter for specific questionnaires on the medical feed.
- User manual improvements for Intake Questionnaires.
- Gracefully handle questionnaires in schemas the user can no longer access.
- NPRS questionnaire version 1.1 missing Nivel codelist mapping.
- Questionnaire response request disappears after selecting it in an appointment.
Improvements
Planning, calendar and waiting lists
- Worklist item for appointments without consults.
- Improve AppointmentWithoutConsult worklist item.
- Change description of existing waitlist entry.
- Remove waiting lists.
- User setting for drag-and-drop timestep.
- Removable side panel and horizontal calendar scrolling.
- Suggest a new location based on availability when copy-pasting appointments.
- Show unavailable location warning when manually editing appointment time.
- Drag and drop appointments across practitioner calendars.
- Show more relevant therapist results when booking an appointment.
- Add expiry date for worklist item double appointments on the same day.
- Start from the last entered time when setting availability.
- Rename availability page from settings to availability.
- Use a more neutral color for notes without appointment type.
- Custom patient label planner warning.
- Add practitioner to iCal link.
Finance, invoicing and accounting
- Undelete referrals from the patient finance tab.
- Filter separate invoices by practitioner.
- Filter by "is not" practitioner X.
- Add appointment type column to the packages overview.
- Automate Twinfield syncing.
- Sort insurer contracts more logically.
- Show partially approved rate for partially approved lines.
- Fix Payt webhook and add webhook test trigger.
- Clarify sending invoices to multiple email addresses.
- Customize recall email subject.
- Add filters for patients without email and without sent invoice email.
- Add POS payment option to the invoice page "More" menu.
- Also change start date when aanspraak start date changes.
- Subscribe to Moneybird webhooks.
- Add bank account name to default invoice email.
- Process more Exact transaction lines.
- Improve more Exact Online master data.
- Add WERO to button text.
- Add missing AGB error details.
- Add option to always enable VAT on company invoices.
- Prune failed accounting system sync attempts.
- Add filter for subscription table on patient page.
Data, reporting and exports
- Nivel v12.
- Export treatment trajectory.
- Rework Nivel export.
- Include more relevant referrals in Nivel export.
- Use precomputed aanspraak codes in LDF export.
- Add diagnosis code filter in referral data explorer.
- Filter referrals by start date in data explorer.
- Add created_at DataView filter for patients.
- Filter patients requiring postal invoices.
- Allow listing patients for company.
- Make patient UUID non-nullable.
- Create new tenant template with additional base templates.
Care content, documents and communication
- Allow editing healthcare type for imported referrals.
- Investigate whether the email template editor can better reflect example emails.
- Add table support to PortableText.
- Add treatment trajectory name or conclusion to medical feed item letter.
- Add treatment trajectory name or conclusion to evaluation letter.
- Add treatment trajectory name or conclusion to final evaluation letter.
- Add GPE to evaluation.
- Add creation time to letter overview.
- Make consult creation from feed item consistent with page flow.
- Make document names editable.
- Make it easier to add Google Drive documents to a patient.
- Remove CZN actions if the user does not have CZN.
- Do not show missing referral warning in calendar for future intake.
- Upgrade AGB Raadpleegdienst to v3 API.
- Clarify documentation for when an integration party must be contacted.
- Include phone number and GP information when creating patients from ZorgDomein messages.
- Show deleted letters.
- Redo SOAs.
- Stop using Fysiotherapeutische nazorg.
Website, UI and platform
- New app logos.
- Usable Devcontainer workflow.
- Export NEN logs to a shared place.
- Upgrade Postgres to 18 in pipelines and dev environment.
- Add locale switch to command menu.
- Improve modal icon alignment for long text.
- Add back button when creating a new invoice.
- Pin Node/npm versions everywhere.
- Update ADRs.
- Small FRM scraper fixes.
- Prestatiecode fuzzy search on tariffs.
- Setup for Claude Code web.
- Sanity.io content graph for blog.
- Improve Claude Code context.
- Reduce website spam with a honeypot.
- PDF rendering regression testing.
- Handling for URLs without
#. - PHPStan rule for command identifier format.
- Extend explanation for auto_accept_proposal setting.
- Improve recurring appointment performance.
- Harmonize domain message storage.
- Resolve service worker issues.
- Add ordered event_id to domainmessage tables.
- Upgrade Vue Router to v5.
- Replace wkhtmltopdf.
- Upgrade to Zod v4.
- Small oxlint cleanup.
- Tooltip wrapper around Tooltip primitive.
- Native Popover-backed Menu primitive.
- Rename SortedRegistry.refresh() to revalidate().
- Menu / Dropdown wrapper around Menu primitive.
- Update backend JS build tools.
- Enable TypeScript noUncheckedIndexedAccess.
- Storybook dark-mode toolbar theming.
- Listbox primitive.
- Typed variant recipes for styled interactive components.
- Required flag for date of birth field.
- Add storybook-static to .gitignore.
- Tooltip primitive.
- Platform-gap helpers for interactive primitives.
- Presence primitive for overlay exit animations.
- Native Popover / Overlay bridge primitives.
- Stabilize website CI E2E and Lighthouse gates.
- Fix MetaLink typing.
- Sort frontend imports.
- Storybook interactive playground for UI primitives.
Fixed bugs
Questionnaires, medical data and exports
- Referral ID mismatch with questionnaire response request.
- STarT MSK answer score mapping.
- Constant Score calculation bug.
- Long PSK text breaks intake.
- Response is not a valueCoding array.
- ACL-RSI scoring.
- PSK should be empty for a new referral.
- Diagnosis snippet not working in intake.
- Placeholders [GP name] and [reason for visit] often do not work.
- Zorgtopics data exchange fix.
- Zorgvergoeding support for unlimited amount.
- Referral zorgtopics_code is required.
- Qualiview mobile number required.
- PSK patient questionnaires require all three questions.
- Nivel export could not process questionnaire
kinderprom. - Bechterew diagnosis code is broken.
- Questionnaire response request disappears after selecting it in appointment.
- Questionnaire already completed exception.
- Questionnaire already completed exception.
- Nivel export missing data in streaming mode.
- Nivel export broken.
- LDF issues.
Finance, declarations and payments
- Could not declare invoice.
- Race condition with GDS collection invoice.
- Send email for invoice type not implemented / uncollectible.
- InvoiceUpdatedEvent max attempts exceeded.
- NoPrestatiecodeServiceForCareType: podiatrist.
- Company division does not appear correctly on invoice.
- Mollie no terminal ID specified.
- Mollie payment token not found.
- Prestatie codelijst not found.
- No VAT code found for healthcare provider.
- Refunds are not implemented.
- Mollie no terminal ID specified.
- Driver [mollie] not supported.
- Previous declaration return message shows first instead of last.
- Mollie payments do not work for uncollectible invoices.
- Reminder email should only contain outstanding amount.
- Invoice entry created for wrong referral not changed after refresh.
- InvoiceHasIncorrectStatusException.
- Mollie application fee amount too high.
- Mollie application fee amount too high.
- Product description not filled after code selection.
- InvoicePDFGenerated unreliable finalize/event.
- Missing
invoice_total_unpaid. - ReconcileInvoicePaymentsForInvoiceCommand invoiceNumber int/string.
- SyncInvoiceJob max attempts exceeded.
- ProductNotFoundException.
- DSW contract tariff fix.
- Exact server error 500.
- Missing
healthcare_provider_bank_account_name. - ImportJournalEntriesFromAccountingSystemJob max attempts exceeded.
- Merge collection draft invoices same contract exception.
- InvoiceNotFoundException.
- No VAT code found for healthcare provider 148.
- Collection draft invoices should not merge invoices with different contracts.
- Exact Online payment syncing is not properly disabled for collection invoices.
- Moneybird external sales invoice not found.
- Twinfield date outside period.
- MoneybirdNotAuthenticatedException.
- Chargeback received for unknown invoicePayment / Mollie transaction.
Integrations, messages and external services
- COV check unknown error / could not connect to host.
- SoapFault: Could not connect to host.
- COV check does not show error message.
- SoapFault: Error Fetching http headers.
- COV Check does not display error message.
- Mediquest SOAP error value must be greater than zero.
- Twinfield undefined array key
twf.clusterUrl. - Add logging to GGN services.
- Moneybird contacts 422.
- Yuki sales taxcode cannot be found.
- Mollie payment method not available.
- Exact message expired.
- Yuki daily limit exceeded.
- Exact unexpected response exception.
- Undefined column context of referrals.
- Qualiview respondent must have insurance.
- install-webhook too many arguments.
- ZorgDomein create flow double creation / autofill.
- FileNotReadyForDownloadException.
- ALB routing fix.
- Archived patient causes generatebatch crash.
- PerformGeneralAppointmentImportJob max attempts exceeded.
- ExecuteOutgoingWebhookJob max attempts exceeded.
- AxiosError request failed 403.
Planning, patients and workflow
- Deceased filter in patient list broken.
- Some patients are not deduplicated.
- Appointment notifications refinement.
- Tried to remove unpersisted appointment.
- Deceased icon disappeared.
- PatientNotFoundException.
- Deceased icon not yet visible for old cases.
- Appointment type not filled in appointment tab.
- Planner role has no permission to check duplicate patients.
- Worklist permissions incorrect for Flux basic.
- Zorgmail radio button disabled for invalid address.
- Cannot remove date of death.
- Show appointment for planner.
- Copy/paste availability awkward flow.
- Edit description waitlist entry broken.
- Patient create button stays loading.
- Month sometimes not visible on appointment with invoices filter bar.
- Many availability slots cause scrollbars / disappearing name.
- Archived patients appear in duplicate worklist item.
- Adding twin patients impossible due to duplicate check.
- NoReferralForTenantAndIdException.
- Cannot edit recall.
- Import examples dialog stuck on patients.
- ZodError.
- NoReferralForTenantAndIdException.
- Referral already attached.
- Form needs idle/view state to start editing appointment.
Interface, content and technical errors
- Tab titles visible through snippet list.
- NotFoundError: The object can not be found here.
- "Appointment" does not fit in English new invoice flow.
- Locale switcher bug.
- Expected coding, got number.
- Visual bugs in website header.
- RangeError: position out of range.
- Object Not Found Matching Id update.
- UUID validation bug.
- Range is empty.
- ZodError.
- Missing translations.
- DecryptException: invalid payload.
- Multi-select incorrect border color.
- Invalid time zone ETC/UNKNOWN.
- PDO::ATTR_PREFETCH error for NEN logs in data explorer.
- Merge simple duplicates incorrect command identifier.
- Value is not an integer.
- Failed to serialize SendQueuedNotifications / Closure not allowed.
- Race condition with tenant migrations.
- Request failed with status 403.
- Whitespace in tiptap template differs from PDF.
- Sent mail icon is clock instead of paper plane.
- Rare login problem.
- Missing translation admin.apps.data_exchange.
- "arts" should be "behandelaar".
- Email must have To/Cc/Bcc header.
- Manuele behandelingen shows NaN in Zorgvergoeding modal.
- ZodError.
- Autosave interaction with appointment/referral selection for medical update.
- Replace Laravel Excel as import engine.
- NULL non-null expected.
- Cannot cancel form in idle state.
- GenderEnum backing value bug.
- PHP incomplete class.
- Error payload in accounting system failures.
- Recall email template is empty.
- Disable batch download button for collection invoice in invoice table.
- NULL expected string.
- FileNotFoundException invoices zip.
- Better status when access rights are missing.
- Cached plan must not change result type.
- ARRAY not integer/castable.
- ZodError.
- Newlines in letter differ from template/PDF.
- NULL expected string.
- Typo in PSK activity.
- Untranslated placeholder.
- Appointment export does not correctly display times.
- Fix synchronous calls that are too slow.
- Console RuntimeException missing id.
- Improve logging for Exact error messages.
e.showModalis not a function.- Zorgvergoedingen shows AV instead of BV for exception-only coverage.
- Text can be pasted in onlyIntegerInput.
- NoPrestatiecodeServiceForCareType: acupuncturist.
- External start date is not edited correctly.
- ViewException syntax error unexpected identifier "planner".
- routes.admin.account title fix.
- ZIS number in route contains
#referrals. - DatetimeException.
- TypstCompilationException expected comma.