{"pullRequests":[{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10388","title":"Last-minute waitlists per practitioner and option to request an earlier appointment","state":"closed","number":10388,"created_at":"2026-10-07T09:33:16Z","repo_name":"Kaddio Application","merged_at":"2026-11-06T12:25:29Z","body":"## Summary\n- Last minute waiting lists can be scoped per booking type, place and/or host (unset = any). New modal on the waiting list index page creates them; details page shows the settings.\n- Waiting list rows get an optional `bookingId`, shown with a calendar icon (\"Kopplad till bokning\").\n- Confirm step: checkbox \"Jag är intresserad av en tidigare tid\" puts the client on the list. Client booking shows \"Sätt upp mig på väntelista\" even when free times exist.\n- Last minute SMS: rows with a booking use the rescheduling link (`unbookToken`) and are skipped if the free time is not earlier; rows without a booking get a link built from ids (booking type / place / host).\n- `publicBookingTypes` accepts extra ids (max 10, org-scoped, not deleted) so non-public booking types from URLs show up as bookable.\n- Event editor \"Mer\" menu on bookings: \"Lägg till på väntlista\" with matching lists (`wl.addBookingToList`).\n\n## Known limitations\n- `free_times`, `nextFreeTime` and `emptyDates` still filter on `isClientBookable`, so a purely non-public booking type shows no free times.\n- GraphQL schema is not extended with `hostId`/`placeId`/`bookingId`.\n- Matching changed: an unset place on a list now means \"any place\".\n\n## Testing\n- Unit tests for `lastMinuteWaitingListName` and `extraBookingTypeIdsArgs`.\n- App tests: waiting list delegation (host-only lists, validation, `wl.addBookingToList`), `publicBookingTypes` extra ids; related booking/last-minute suites pass (297).\n- Full `testonce` suite not run.\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Last-minute waitlists in Booking can now be filtered by treatment type, location or practitioner — and clients can register their interest in an earlier appointment when booking.</p>\n<p dir=\"auto\">Rebooking and waitlist offers also work for treatment types that aren't publicly visible.</p>\n<p dir=\"auto\">Read more here: <a href=\"https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista</a></p>","translations":{"en":{"title":"Last-minute waitlists per practitioner and option to request an earlier appointment","body_html":"<p dir=\"auto\">Last-minute waitlists in Booking can now be filtered by treatment type, location or practitioner — and clients can register their interest in an earlier appointment when booking.</p>\n<p dir=\"auto\">Rebooking and waitlist offers also work for treatment types that aren't publicly visible.</p>\n<p dir=\"auto\">Read more here: <a href=\"https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista</a></p>"},"sv":{"title":"Sista minuten-väntelistor per behandlare och erbjudande om tidigare tid","body_html":"<p dir=\"auto\">Sista minuten-väntelistor i Bokning kan nu avgränsas per behandlingsform, plats eller behandlare — och klienter kan anmäla intresse för en tidigare tid i samband med bokning.</p>\n<p dir=\"auto\">Ombokning och erbjudanden om tider via väntlista fungerar även för behandlingsformer som inte är publikt synliga.</p>\n<p dir=\"auto\">Läs mer här: <a href=\"https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista</a></p>"},"es":{"title":"Listas de espera de última hora por profesional y opción de solicitar una cita anterior","body_html":"<p dir=\"auto\">Las listas de espera de última hora en Reservas ahora pueden filtrarse por tipo de tratamiento, ubicación o profesional, y los clientes pueden manifestar su interés por una cita anterior al reservar.</p>\n<p dir=\"auto\">Las reprogramaciones y las ofertas de citas desde la lista de espera también funcionan para tipos de tratamiento que no son visibles públicamente.</p>\n<p dir=\"auto\">Más información aquí: <a href=\"https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista</a></p>"},"no":{"title":"Sist-minuttet-ventelister per behandler og mulighet for å ønske en tidligere time","body_html":"<p dir=\"auto\">Sist-minuttet-ventelister i Booking kan nå avgrenses per behandlingsform, sted eller behandler — og klienter kan melde interesse for en tidligere time i forbindelse med bookingen.</p>\n<p dir=\"auto\">Ombooking og tilbud om timer via venteliste fungerer også for behandlingsformer som ikke er offentlig synlige.</p>\n<p dir=\"auto\">Les mer her: <a href=\"https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista</a></p>"},"dk":{"title":"Sidste-øjebliks-ventelister pr. behandler og mulighed for at ønske en tidligere tid","body_html":"<p dir=\"auto\">Sidste-øjebliks-ventelister i Booking kan nu afgrænses pr. behandlingsform, sted eller behandler — og klienter kan tilkendegive interesse for en tidligere tid i forbindelse med bookingen.</p>\n<p dir=\"auto\">Ombooking og tilbud om tider via venteliste fungerer også for behandlingsformer, der ikke er offentligt synlige.</p>\n<p dir=\"auto\">Læs mere her: <a href=\"https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/602333-sista-minuten-vantelista</a></p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10480","title":"Open the AI assistant hands-free by saying \"ok kaddio\"","state":"closed","number":10480,"created_at":"2026-10-19T12:59:56Z","repo_name":"Kaddio Application","merged_at":"2026-11-05T20:05:18Z","body":"## Summary\n- Adds an ear control at the bottom of the logged-in right rail (AI privilege only) that listens on-device for “ok kaddio” and opens the AI assistant.\n- Uses OpenWakeWord ONNX in the browser (AudioWorklet capture, silence skip, no extra AEC/AGC/NS) so idle listen stays off the main thread.\n- CSP allows `wasm-unsafe-eval` and jsdelivr for the existing onnxruntime-web WASM.\n\n## Test plan\n- [ ] Host with AI privilege sees the ear at the bottom of the right rail; it is hidden without `org.hasAI` / `ai` privilege\n- [ ] Toggle on requests the microphone; the ear turns yellow and pulses while listening\n- [ ] Saying “ok kaddio” opens the AI sidebar\n- [ ] Denying the microphone shows the Swedish error and turns listening off\n- [ ] Idle listen in a quiet room is well below the previous ~33% tab CPU\n- [ ] Reload keeps listening on if it was left on (`viewData.wakeWordListening`)\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">A new voice shortcut lets you open the AI assistant hands-free — just say \"ok kaddio\".</p>\n<p dir=\"auto\">For practitioners with access to the AI module, a small ear icon now appears at the bottom of the right sidebar. Turn it on, grant microphone access, and Kaddio will quietly listen for the wake word directly in your browser. When you say \"ok kaddio\", the AI assistant opens and is ready to help.</p>\n<p dir=\"auto\">The wake word runs entirely on your device, so audio never leaves your computer until you actually start a conversation. The listening setting is remembered between sessions, so you only need to enable it once.</p>","translations":{"en":{"title":"Open the AI assistant hands-free by saying \"ok kaddio\"","body_html":"<p dir=\"auto\">A new voice shortcut lets you open the AI assistant hands-free — just say \"ok kaddio\".</p>\n<p dir=\"auto\">For practitioners with access to the AI module, a small ear icon now appears at the bottom of the right sidebar. Turn it on, grant microphone access, and Kaddio will quietly listen for the wake word directly in your browser. When you say \"ok kaddio\", the AI assistant opens and is ready to help.</p>\n<p dir=\"auto\">The wake word runs entirely on your device, so audio never leaves your computer until you actually start a conversation. The listening setting is remembered between sessions, so you only need to enable it once.</p>"},"sv":{"title":"Öppna AI-assistenten handsfree genom att säga \"ok kaddio\"","body_html":"<p dir=\"auto\">En ny röstgenväg öppnar AI-assistenten handsfree — säg bara \"ok kaddio\".</p>\n<p dir=\"auto\">För behandlare med tillgång till AI-modulen visas nu en liten öronikon längst ner i höger sidopanel. Slå på den, godkänn mikrofonen, så lyssnar Kaddio diskret efter signalordet direkt i webbläsaren. När du säger \"ok kaddio\" öppnas AI-assistenten och är redo att hjälpa.</p>\n<p dir=\"auto\">Signalordet körs helt lokalt på din dator, så inget ljud lämnar enheten förrän du faktiskt startar en konversation. Inställningen kommer ihåg mellan sessioner — aktivera en gång och den är kvar.</p>"},"es":{"title":"Abre el asistente de IA con manos libres diciendo \"ok kaddio\"","body_html":"<p dir=\"auto\">Un nuevo atajo de voz permite abrir el asistente de IA con manos libres — basta con decir \"ok kaddio\".</p>\n<p dir=\"auto\">Para profesionales con acceso al módulo de IA, aparece un pequeño icono de oreja al final de la barra lateral derecha. Actívalo, concede acceso al micrófono y Kaddio escuchará discretamente la palabra clave directamente en el navegador. Al decir \"ok kaddio\", el asistente se abre listo para ayudar.</p>\n<p dir=\"auto\">La detección se ejecuta íntegramente en tu dispositivo, por lo que el audio nunca sale de tu ordenador hasta que inicies una conversación. La configuración se recuerda entre sesiones: actívala una vez y queda lista.</p>"},"no":{"title":"Åpne AI-assistenten håndfritt ved å si \"ok kaddio\"","body_html":"<p dir=\"auto\">En ny stemmesnarvei åpner AI-assistenten håndfritt — bare si \"ok kaddio\".</p>\n<p dir=\"auto\">For behandlere med tilgang til AI-modulen vises nå et lite øreikon nederst i høyre sidepanel. Slå det på, godkjenn mikrofonen, og Kaddio lytter diskré etter signalordet direkte i nettleseren. Når du sier \"ok kaddio\", åpnes AI-assistenten og er klar til å hjelpe.</p>\n<p dir=\"auto\">Signalordet kjøres helt lokalt på din enhet, så lyd forlater aldri datamaskinen før du faktisk starter en samtale. Innstillingen huskes mellom øktene — aktiver én gang og den blir værende.</p>"},"dk":{"title":"Åbn AI-assistenten håndfrit ved at sige \"ok kaddio\"","body_html":"<p dir=\"auto\">En ny stemmegenvej åbner AI-assistenten håndfrit — sig blot \"ok kaddio\".</p>\n<p dir=\"auto\">For behandlere med adgang til AI-modulet vises nu et lille øreikon nederst i højre sidepanel. Slå det til, giv adgang til mikrofonen, og Kaddio lytter diskret efter signalordet direkte i browseren. Når du siger \"ok kaddio\", åbner AI-assistenten og er klar til at hjælpe.</p>\n<p dir=\"auto\">Signalordet kører helt lokalt på din enhed, så lyd forlader aldrig computeren, før du faktisk starter en samtale. Indstillingen huskes mellem sessioner — aktivér én gang, og den bliver.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10589","title":"Keep dictating while you move around the journal","state":"closed","number":10589,"created_at":"2026-11-05T12:20:04Z","repo_name":"Kaddio Application","merged_at":"2026-11-05T17:08:41Z","body":"## Summary\n- Swedish (VAD) and EU (full session) transcription now append the text to the transcription or journal note on the server, so the user can navigate freely while recording. The mixed path is unchanged.\n- A recording icon under Kaddio AI in the right sidebar shows recording (pulsing), transcribing (spinner) and done (check, until clicked), followed by a divider. Clicking it returns to where the recording started.\n- The recording itself lives in a module-level singleton (`backgroundRecording`), so leaving the page doesn't stop the microphone capture. A `beforeunload` guard protects an active recording.\n- Server append goes through `Transcriptions`/`Notes` collection calls with a compare-and-set retry, so clients update reactively. Signed or auto-locked journals reject appends, and org scope is checked via the contact.\n\n## Test plan\n- [x] Unit tests: `transcript_append.unit-test.ts`\n- [x] App tests: `transcript_targets.app-test.ts` (8 passing)\n- [ ] Manual: dictate in a journal transcription and a note on the Swedish and EU paths, navigate away, click the icon, confirm the text appears without refresh\n- [ ] Manual: confirm the mixed jurisdiction and chat input behave as before\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Voice transcription in the Journal now runs in the background, so you can navigate freely while recording continues.</p>\n<p dir=\"auto\">A small indicator under Kaddio AI in the sidebar shows when a recording is active, transcribing, or finished. One click takes you straight back to where you started dictating, and the text appears in your note or transcription without a refresh.</p>\n<p dir=\"auto\">Signed and locked journals remain protected and will not accept new text. No setup needed.</p>","translations":{"en":{"title":"Keep dictating while you move around the journal","body_html":"<p dir=\"auto\">Voice transcription in the Journal now runs in the background, so you can navigate freely while recording continues.</p>\n<p dir=\"auto\">A small indicator under Kaddio AI in the sidebar shows when a recording is active, transcribing, or finished. One click takes you straight back to where you started dictating, and the text appears in your note or transcription without a refresh.</p>\n<p dir=\"auto\">Signed and locked journals remain protected and will not accept new text. No setup needed.</p>"},"sv":{"title":"Diktera vidare medan du rör dig i journalen","body_html":"<p dir=\"auto\">Röstinspelning i Journal fortsätter nu i bakgrunden, så att du kan navigera fritt medan inspelningen pågår.</p>\n<p dir=\"auto\">En liten indikator under Kaddio AI i sidopanelen visar när en inspelning är aktiv, transkriberas eller är klar. Ett klick tar dig tillbaka dit du började diktera, och texten dyker upp i anteckningen eller transkriberingen utan omladdning.</p>\n<p dir=\"auto\">Signerade och låsta journaler skyddas fortsatt och tar inte emot ny text. Ingen inställning krävs.</p>"},"es":{"title":"Sigue dictando mientras te mueves por la historia clínica","body_html":"<p dir=\"auto\">La transcripción por voz en el módulo de Historia Clínica ahora funciona en segundo plano, para que puedas navegar libremente mientras grabas.</p>\n<p dir=\"auto\">Un pequeño indicador bajo Kaddio AI en la barra lateral muestra cuándo una grabación está activa, transcribiéndose o lista. Un clic te lleva de vuelta al punto donde empezaste a dictar, y el texto aparece en la nota o transcripción sin recargar.</p>\n<p dir=\"auto\">Las historias firmadas y bloqueadas siguen protegidas y no aceptan texto nuevo. No requiere configuración.</p>"},"no":{"title":"Fortsett å diktere mens du beveger deg i journalen","body_html":"<p dir=\"auto\">Taleopptak i Journal fortsetter nå i bakgrunnen, så du kan navigere fritt mens opptaket pågår.</p>\n<p dir=\"auto\">En liten indikator under Kaddio AI i sidepanelen viser når et opptak er aktivt, transkriberes eller er ferdig. Ett klikk tar deg tilbake til der du begynte å diktere, og teksten dukker opp i notatet eller transkripsjonen uten å laste på nytt.</p>\n<p dir=\"auto\">Signerte og låste journaler er fortsatt beskyttet og tar ikke imot ny tekst. Ingen oppsett nødvendig.</p>"},"dk":{"title":"Diktér videre mens du bevæger dig i journalen","body_html":"<p dir=\"auto\">Taleoptagelse i Journal fortsætter nu i baggrunden, så du kan navigere frit, mens optagelsen kører.</p>\n<p dir=\"auto\">En lille indikator under Kaddio AI i sidepanelet viser, hvornår en optagelse er aktiv, transskriberes eller er færdig. Et klik fører dig tilbage til det sted, hvor du begyndte at diktere, og teksten dukker op i notatet eller transskriptionen uden genindlæsning.</p>\n<p dir=\"auto\">Signerede og låste journaler er fortsat beskyttet og modtager ikke ny tekst. Ingen opsætning nødvendig.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10551","title":"Hidden case link lets partners send referrals without an account","state":"closed","number":10551,"created_at":"2026-10-31T16:25:57Z","repo_name":"Kaddio Application","merged_at":"2026-11-05T13:09:01Z","body":"## Summary\n- Organisations can turn on a secret case-creation link per template and send it to partners.\n- The link is not listed on the login page. Anyone with it can submit the same contact form as a logged-out visitor.\n- Turning the link off or choosing Ny länk stops the previous address. The secret is not published to hosts, clients, or marketplace packages.\n\n## Test plan\n- [x] In case template settings, enable Dold länk för partners and confirm a copyable URL appears.\n- [x] Open the URL logged out and submit a case. Confirm it lands on the template.\n- [x] Confirm the template is not shown on the public login page.\n- [x] Open a wrong or disabled link and confirm the form is unavailable.\n- [ ] Regenerate the link and confirm the old URL stops working while the new one still creates a case.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Share a private link with trusted partners so they can open a case directly — no login needed.</p>\n<p dir=\"auto\">In the Cases module, you can now enable a hidden partner link on any case template. The link is not shown on the public login page or in the marketplace, so only those you share it with can use it. Anyone with the link can fill in the same contact form a logged-out visitor would see, and the case lands straight on the chosen template.</p>\n<p dir=\"auto\">If a link is ever misplaced, turning it off or choosing New link instantly stops the old address from working.</p>","translations":{"en":{"title":"Hidden case link lets partners send referrals without an account","body_html":"<p dir=\"auto\">Share a private link with trusted partners so they can open a case directly — no login needed.</p>\n<p dir=\"auto\">In the Cases module, you can now enable a hidden partner link on any case template. The link is not shown on the public login page or in the marketplace, so only those you share it with can use it. Anyone with the link can fill in the same contact form a logged-out visitor would see, and the case lands straight on the chosen template.</p>\n<p dir=\"auto\">If a link is ever misplaced, turning it off or choosing New link instantly stops the old address from working.</p>"},"sv":{"title":"Dold ärendelänk låter partners skicka in ärenden utan konto","body_html":"<p dir=\"auto\">Dela en privat länk med utvalda partners så kan de öppna ett ärende direkt – ingen inloggning krävs.</p>\n<p dir=\"auto\">I Ärenden kan du nu aktivera en dold partnerlänk på valfri ärendemall. Länken visas inte på inloggningssidan eller i marknadsplatsen, så bara de du delar den med kan använda den. Den som har länken fyller i samma kontaktformulär som en utloggad besökare, och ärendet hamnar direkt på rätt mall.</p>\n<p dir=\"auto\">Om en länk kommer på vift stängs den gamla adressen av direkt när du stänger av länken eller väljer Ny länk.</p>"},"es":{"title":"Un enlace oculto permite a los colaboradores enviar casos sin cuenta","body_html":"<p dir=\"auto\">Comparte un enlace privado con colaboradores de confianza para que puedan abrir un caso directamente, sin iniciar sesión.</p>\n<p dir=\"auto\">En el módulo de Casos ahora puedes activar un enlace oculto para colaboradores en cualquier plantilla. El enlace no aparece en la página pública de acceso ni en el marketplace, así que solo lo usa quien lo recibe. Quien tenga el enlace rellena el mismo formulario de contacto que vería un visitante no autenticado, y el caso se crea directamente en la plantilla elegida.</p>\n<p dir=\"auto\">Si un enlace se extravía, desactivarlo o elegir Nuevo enlace detiene al instante la dirección anterior.</p>"},"no":{"title":"Skjult sakslenke lar partnere sende inn saker uten konto","body_html":"<p dir=\"auto\">Del en privat lenke med utvalgte partnere, så kan de opprette en sak direkte – uten innlogging.</p>\n<p dir=\"auto\">I Saker kan du nå slå på en skjult partnerlenke på en hvilken som helst saksmal. Lenken vises ikke på innloggingssiden eller i markedsplassen, så bare de du deler den med kan bruke den. Den som har lenken fyller ut samme kontaktskjema som en utlogget besøkende, og saken havner rett på riktig mal.</p>\n<p dir=\"auto\">Hvis en lenke kommer på avveie, stopper den gamle adressen umiddelbart når du slår av lenken eller velger Ny lenke.</p>"},"dk":{"title":"Skjult sagslink lader partnere sende sager uden konto","body_html":"<p dir=\"auto\">Del et privat link med udvalgte partnere, så de kan oprette en sag direkte – uden at logge ind.</p>\n<p dir=\"auto\">I Sager kan du nu aktivere et skjult partnerlink på en vilkårlig sagsskabelon. Linket vises ikke på login-siden eller på marketplace, så kun dem du deler det med kan bruge det. Den, der har linket, udfylder samme kontaktformular som en besøgende uden login, og sagen lander direkte på den valgte skabelon.</p>\n<p dir=\"auto\">Hvis et link kommer på afveje, stopper den gamle adresse med det samme, når du slår linket fra eller vælger Nyt link.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9762","title":"Set a default company for your bookable times","state":"closed","number":9762,"created_at":"2026-06-24T11:54:03Z","repo_name":"Kaddio Application","merged_at":"2026-11-03T12:10:57Z","body":null,"body_html":"<p dir=\"auto\">Practitioners can now choose a default company booking that is pre-selected whenever they add a new bookable time.</p>","translations":{"en":{"title":"Set a default company for your bookable times","body_html":"<p dir=\"auto\">Practitioners can now choose a default company booking that is pre-selected whenever they add a new bookable time.</p>"},"sv":{"title":"Välj en förvald företagsbokning för dina arbetstider","body_html":"<p dir=\"auto\">Behandlare kan nu välja en förvald företagsbokning som automatiskt väljs när en ny arbetstid läggs till.</p>"},"es":{"title":"Elige una empresa predeterminada para tus horarios disponibles","body_html":"<p dir=\"auto\">Los profesionales pueden elegir una reserva de empresa predeterminada que se selecciona automáticamente al crear un nuevo horario disponible.</p>"},"no":{"title":"Velg en forhåndsvalgt bedriftsbooking for dine arbeidstider","body_html":"<p dir=\"auto\">Behandlere kan nå velge en forhåndsvalgt bedriftsbooking som fylles inn automatisk når en ny arbeidstid legges til.</p>"},"dk":{"title":"Vælg en standard virksomhedsbooking for dine arbejdstider","body_html":"<p dir=\"auto\">Behandlere kan nu vælge en standard virksomhedsbooking, der automatisk vælges, når en ny arbejdstid oprettes.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10561","title":"Embedded booking pages can now resize to fit their content","state":"closed","number":10561,"created_at":"2026-11-02T20:59:26Z","repo_name":"Kaddio Application","merged_at":"2026-11-03T12:09:57Z","body":"## Summary\n- Add an iframe height reporter and host-side resizer for Kaddio embedded pages.\n- Keep existing fixed-height and inner-scroll behavior unless the host opts in by loading iframe-resizer.js.\n- Scope public layout adjustments to auto-height embeds and cover reporter helpers with unit tests.\n\n## Verification\n- NODE_ENV=test npx mocha imports/lib/iframe-auto-height.unit-test.ts (1014 passing)\n- Browser-tested helper-enabled and legacy Nimm-style iframe dimensions on desktop and mobile.\n- node --check public/iframe-resizer.js and git diff --check","body_html":"<p dir=\"auto\">Clinics embedding Kaddio on their own website can enable a smoother layout where the booking page grows to fit its content — no more nested…</p>\n<p dir=\"auto\">To use the new behavior, add our small helper script to the page that embeds Kaddio. Existing embeds keep working exactly as before, so no action is needed unless you want to opt in.</p>\n<p dir=\"auto\">The result is a cleaner, more natural experience for visitors booking appointments directly from your website.</p>","translations":{"en":{"title":"Embedded booking pages can now resize to fit their content","body_html":"<p dir=\"auto\">Clinics embedding Kaddio on their own website can enable a smoother layout where the booking page grows to fit its content — no more nested…</p>\n<p dir=\"auto\">To use the new behavior, add our small helper script to the page that embeds Kaddio. Existing embeds keep working exactly as before, so no action is needed unless you want to opt in.</p>\n<p dir=\"auto\">The result is a cleaner, more natural experience for visitors booking appointments directly from your website.</p>"},"sv":{"title":"Inbäddade bokningssidor kan nu anpassa höjden efter innehållet","body_html":"<p dir=\"auto\">Kliniker som bäddar in Kaddio på sin egen webbplats kan aktivera en smidigare layout där bokningssidan växer efter sitt innehåll — utan dubbla…</p>\n<p dir=\"auto\">Lägg till vårt lilla hjälpskript på sidan som bäddar in Kaddio för att aktivera det nya beteendet. Befintliga inbäddningar fungerar precis som tidigare, så inget behöver göras om du inte vill använda funktionen.</p>\n<p dir=\"auto\">Resultatet blir en renare och mer naturlig upplevelse för besökare som bokar tid direkt från er webbplats.</p>"},"es":{"title":"Las páginas de reserva integradas ya pueden ajustarse a su contenido","body_html":"<p dir=\"auto\">Las clínicas que integran Kaddio en su propia web pueden activar un diseño más fluido donde la página de reservas se ajusta a su contenido, sin…</p>\n<p dir=\"auto\">Para usar la nueva funcionalidad, basta con añadir nuestro pequeño script a la página que integra Kaddio. Las integraciones existentes siguen funcionando igual, así que no hace falta hacer nada a menos que quieras activarlo.</p>\n<p dir=\"auto\">El resultado es una experiencia más limpia y natural para quienes reservan citas desde vuestra web.</p>"},"no":{"title":"Innebygde bookingsider kan nå tilpasse høyden til innholdet","body_html":"<p dir=\"auto\">Klinikker som bygger inn Kaddio på egen nettside kan aktivere en smidigere visning der bookingsiden vokser etter innholdet — uten doble rullefelt.</p>\n<p dir=\"auto\">For å ta i bruk den nye oppførselen, legg til vårt lille hjelpeskript på siden som bygger inn Kaddio. Eksisterende innbyggninger fungerer som før, så ingenting trenger å gjøres hvis du ikke ønsker å bruke funksjonen.</p>\n<p dir=\"auto\">Resultatet er en renere og mer naturlig opplevelse for besøkende som bestiller time direkte fra nettsiden deres.</p>"},"dk":{"title":"Indlejrede bookingsider kan nu tilpasse højden efter indholdet","body_html":"<p dir=\"auto\">Klinikker, der indlejrer Kaddio på deres egen hjemmeside, kan aktivere et mere flydende layout, hvor bookingsiden vokser efter indholdet — uden…</p>\n<p dir=\"auto\">For at bruge den nye funktion skal du blot tilføje vores lille hjælpescript til siden, der indlejrer Kaddio. Eksisterende indlejringer fungerer som før, så der skal ikke gøres noget, medmindre du vil tage funktionen i brug.</p>\n<p dir=\"auto\">Resultatet er en renere og mere naturlig oplevelse for besøgende, der booker tid direkte fra jeres hjemmeside.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10514","title":"Require a diagnosis to sign — now set per contact type","state":"closed","number":10514,"created_at":"2026-10-22T10:22:24Z","repo_name":"Kaddio Application","merged_at":"2026-11-02T13:21:28Z","body":"## Summary\n- Adds a migration helper that copies an organisation’s require-diagnosis-to-sign setting onto its contact types, renames the misspelled contact-type field, and clears the organisation field.\n- Includes an app test for organisations with the setting on and off, including deleted contact types and types that already had the per-type flag.\n\n## Test plan\n- [x] Run the migration app test for require diagnosis to sign\n- [x] Confirm organisations with the setting enabled get `requireDiagnosisToSign` on every contact type\n- [x] Confirm organisations with the setting disabled keep existing per-type values and lose the organisation field\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">The journal setting that requires a diagnosis before signing a contact can now be configured per contact type.</p>\n<p dir=\"auto\">Previously, this rule applied to the entire organization or had to be managed in a single place. From the Journal settings, each contact type can now carry its own rule — so visits that need a diagnosis require one, while others stay flexible.</p>\n<p dir=\"auto\">Existing settings are migrated automatically. If your organization had the rule enabled, it is now active on every contact type and can be adjusted individually. No action is needed.</p>","translations":{"en":{"title":"Require a diagnosis to sign — now set per contact type","body_html":"<p dir=\"auto\">The journal setting that requires a diagnosis before signing a contact can now be configured per contact type.</p>\n<p dir=\"auto\">Previously, this rule applied to the entire organization or had to be managed in a single place. From the Journal settings, each contact type can now carry its own rule — so visits that need a diagnosis require one, while others stay flexible.</p>\n<p dir=\"auto\">Existing settings are migrated automatically. If your organization had the rule enabled, it is now active on every contact type and can be adjusted individually. No action is needed.</p>"},"sv":{"title":"Kravet på diagnos vid signering sätts nu per kontakttyp","body_html":"<p dir=\"auto\">Inställningen som kräver en diagnos innan en kontakt kan signeras går nu att styra per kontakttyp i journalen.</p>\n<p dir=\"auto\">Tidigare gällde regeln hela organisationen. Från journalinställningarna kan varje kontakttyp nu ha sin egen regel — besök som kräver diagnos får kravet, medan andra förblir flexibla.</p>\n<p dir=\"auto\">Befintliga inställningar flyttas över automatiskt. Om organisationen hade kravet aktiverat är det nu påslaget på samtliga kontakttyper och kan justeras individuellt. Ingen åtgärd krävs.</p>"},"es":{"title":"Exigir diagnóstico para firmar ahora se configura por tipo de contacto","body_html":"<p dir=\"auto\">La regla que exige un diagnóstico antes de firmar un contacto ahora puede configurarse por tipo de contacto en el historial clínico.</p>\n<p dir=\"auto\">Antes esta regla se aplicaba a toda la organización. Desde los ajustes del Journal, cada tipo de contacto puede tener su propia regla — las visitas que requieren diagnóstico lo exigen, mientras otras siguen siendo flexibles.</p>\n<p dir=\"auto\">Los ajustes existentes se migran automáticamente. Si tu organización tenía la regla activada, ahora está activa en todos los tipos de contacto y puede ajustarse de forma individual. No se requiere ninguna acción.</p>"},"no":{"title":"Krav om diagnose ved signering kan nå settes per kontakttype","body_html":"<p dir=\"auto\">Innstillingen som krever en diagnose før en kontakt signeres kan nå styres per kontakttype i journalen.</p>\n<p dir=\"auto\">Tidligere gjaldt regelen hele organisasjonen. Fra journalinnstillingene kan hver kontakttype ha sin egen regel — besøk som trenger diagnose får kravet, mens andre forblir fleksible.</p>\n<p dir=\"auto\">Eksisterende innstillinger flyttes automatisk. Hvis organisasjonen hadde kravet aktivert, er det nå slått på for alle kontakttyper og kan justeres individuelt. Ingen handling er nødvendig.</p>"},"dk":{"title":"Krav om diagnose ved signering kan nu sættes per kontakttype","body_html":"<p dir=\"auto\">Indstillingen, der kræver en diagnose, før en kontakt kan signeres, kan nu styres per kontakttype i journalen.</p>\n<p dir=\"auto\">Tidligere gjaldt reglen hele organisationen. Fra journalindstillingerne kan hver kontakttype nu have sin egen regel — besøg der kræver diagnose får kravet, mens andre forbliver fleksible.</p>\n<p dir=\"auto\">Eksisterende indstillinger overføres automatisk. Hvis organisationen havde kravet aktiveret, er det nu slået til på alle kontakttyper og kan justeres individuelt. Ingen handling er nødvendig.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10517","title":"Waiting lists can only be deleted when empty","state":"closed","number":10517,"created_at":"2026-10-22T13:06:36Z","repo_name":"Kaddio Application","merged_at":"2026-11-02T12:08:09Z","body":"## Summary\n- Hide the waiting-list delete action unless the list has no patients and no history, on both the overview and the detail page.\n- The server rejects `waitingLists.remove` in that case, so the menu is not the only check.\n- The overview publication sends `hasClients` and `hasHistory` instead of the patient and history arrays. The detail page still receives the full document.\n\n## Test plan\n- [x] On an empty waiting list with no history, Delete is available in the overview menu and in the detail Options menu, and deletion succeeds.\n- [x] Add a patient: Delete is hidden, and `waitingLists.remove` returns \"Väntelistan kan inte raderas\".\n- [x] Remove the patient so only history remains: Delete stays hidden.\n- [ ] Confirm the overview subscription does not include `clients` or `history`, and the detail page still shows patients and history.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">The option to delete a waiting list is now only shown when it contains no patients and has no history.</p>","translations":{"en":{"title":"Waiting lists can only be deleted when empty","body_html":"<p dir=\"auto\">The option to delete a waiting list is now only shown when it contains no patients and has no history.</p>"},"sv":{"title":"Radering av väntelistor endast möjligt om listan är tom","body_html":"<p dir=\"auto\">Alternativet att radera en väntelista visas bara när den inte har några patienter och ingen historik.</p>"},"es":{"title":"Las listas de espera solo pueden eliminarse si están vacías","body_html":"<p dir=\"auto\">La opción de eliminar una lista de espera solo aparece cuando no contiene pacientes ni tiene historial.</p>"},"no":{"title":"Venteliste kan kun slettes når den er tom","body_html":"<p dir=\"auto\">Alternativet for å slette en venteliste vises kun når den ikke har noen pasienter og ingen historikk.</p>"},"dk":{"title":"Venteliste kan kun slettes, når den er tom","body_html":"<p dir=\"auto\">Muligheden for at slette en venteliste vises kun, når den ikke har nogen patienter og ingen historik.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10495","title":"Control public and logged-in client booking per treatment type","state":"closed","number":10495,"created_at":"2026-10-21T09:36:34Z","repo_name":"Kaddio Application","merged_at":"2026-11-02T10:29:14Z","body":null,"body_html":"<p dir=\"auto\">Choose which treatment types should be available for public booking and which require the client to log in before booking. The setting is configured individually for each treatment type under <em>Appointment Booking Settings &gt; Treatment Types</em>.</p>\n<p dir=\"auto\">If you'd like all treatment types to share the same settings, you can still use the general settings for public and logged-in booking under <em>Appointment Booking Settings &gt; General</em>.</p>","translations":{"en":{"title":"Control public and logged-in client booking per treatment type","body_html":"<p dir=\"auto\">Choose which treatment types should be available for public booking and which require the client to log in before booking. The setting is configured individually for each treatment type under <em>Appointment Booking Settings &gt; Treatment Types</em>.</p>\n<p dir=\"auto\">If you'd like all treatment types to share the same settings, you can still use the general settings for public and logged-in booking under <em>Appointment Booking Settings &gt; General</em>.</p>"},"sv":{"title":"Styr publik och inloggad klientbokning per behandlingsform","body_html":"<p dir=\"auto\">Välj vilka behandlingsformer som ska vara tillgängliga för publik bokning och vilka som kräver att klienten loggar in för att kunna boka. Inställningen görs individuellt för varje behandlingsform under <em>Inställningar för Tidsbokning &gt; Behandlingsformer</em>.</p>\n<p dir=\"auto\">Vill du att alla behandlingsformer ska ha samma inställningar kan du även fortsättningsvis använda de generella inställningarna för publik respektive inloggad bokning under <em>Inställningar för Tidsbokning &gt; Allmänt</em>.</p>"},"es":{"title":"Controla la reserva pública y la reserva de clientes registrados por tipo de tratamiento","body_html":"<p dir=\"auto\">Elige qué tipos de tratamiento están disponibles para la reserva pública y cuáles requieren que el cliente inicie sesión para poder reservar. La configuración se realiza de forma individual para cada tipo de tratamiento en <em>Configuración de Reserva de Citas &gt; Tipos de tratamiento</em>.</p>\n<p dir=\"auto\">Si prefieres que todos los tipos de tratamiento tengan la misma configuración, puedes seguir utilizando los ajustes generales para la reserva pública y para la reserva con inicio de sesión en <em>Configuración de Reserva de Citas &gt; General</em>.</p>"},"no":{"title":"Styr offentlig og innlogget klientbooking per behandlingsform","body_html":"<p dir=\"auto\">Velg hvilke behandlingsformer som skal være tilgjengelige for offentlig booking og hvilke som krever at klienten logger inn for å kunne booke. Innstillingen gjøres individuelt for hver behandlingsform under <em>Innstillinger for Timebooking &gt; Behandlingsformer</em>.</p>\n<p dir=\"auto\">Ønsker du at alle behandlingsformer skal ha samme innstillinger, kan du fortsatt bruke de generelle innstillingene for offentlig og innlogget booking under <em>Innstillinger for Timebooking &gt; Generelt</em>.</p>"},"dk":{"title":"Styr offentlig og indlogget klientbooking pr. behandlingsform","body_html":"<p dir=\"auto\">Vælg hvilke behandlingsformer der skal være tilgængelige for offentlig booking, og hvilke der kræver, at klienten logger ind for at kunne booke. Indstillingen foretages individuelt for hver behandlingsform under <em>Indstillinger for Tidsbooking &gt; Behandlingsformer</em>.</p>\n<p dir=\"auto\">Ønsker du, at alle behandlingsformer skal have samme indstillinger, kan du fortsat bruge de generelle indstillinger for henholdsvis offentlig og indlogget booking under <em>Indstillinger for Tidsbooking &gt; Generelt</em>.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10510","title":"View the content of all case fields in reports","state":"closed","number":10510,"created_at":"2026-10-22T08:59:43Z","repo_name":"Kaddio Application","merged_at":"2026-10-22T12:25:38Z","body":"## Summary\n- Add an Ärendemall dropdown on the Ärenden report, matching the existing Formulär dropdown.\n- When a template is selected, `reports.cases` includes Interna fält, client properties, and the same org-level client custom fields other reports already add.\n- Without a template, the report still returns all cases in the date range.\n\n## Test plan\n- [ ] Open Rapportverktyg, select Ärenden, confirm the Ärendemall dropdown appears\n- [ ] Run the report with a template that has Interna fält and client fields; confirm those columns and values\n- [ ] Run without a template (or via the method) and confirm all cases still appear without template columns\n- [ ] Confirm a template from another org is rejected\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">A new report in the reporting tool — Cases by Template — shows the content of both internal and external case fields. The fields can be used as filters in the report view and are included in the CSV export.</p>\n<p dir=\"auto\">If you'd like an overall view of all your cases, you can still run the Cases report without selecting a specific template.</p>","translations":{"en":{"title":"View the content of all case fields in reports","body_html":"<p dir=\"auto\">A new report in the reporting tool — Cases by Template — shows the content of both internal and external case fields. The fields can be used as filters in the report view and are included in the CSV export.</p>\n<p dir=\"auto\">If you'd like an overall view of all your cases, you can still run the Cases report without selecting a specific template.</p>"},"sv":{"title":"Se innehållet i alla ärendefälten i rapporter","body_html":"<p dir=\"auto\">En ny rapport i rapportverktyget - Ärenden per mall - visar innehållet i ärendens interna och externa fält. Fälten kan användas som filter i rapportvyn och syns i csv-export.</p>\n<p dir=\"auto\">Vill du få en samlad överblick över alla ärenden kan du fortfarande köra rapporten - Ärenden - utan att välja någon specifik mall.</p>"},"es":{"title":"Consulta el contenido de todos los campos de casos en los informes","body_html":"<p dir=\"auto\">Un nuevo informe en la herramienta de informes — Casos por plantilla — muestra el contenido de los campos internos y externos de los casos. Los campos pueden utilizarse como filtros en la vista del informe y aparecen en la exportación a CSV.</p>\n<p dir=\"auto\">Si deseas obtener una visión general de todos los casos, aún puedes ejecutar el informe Casos sin seleccionar una plantilla específica.</p>"},"no":{"title":"Se innholdet i alle saksfeltene i rapporter","body_html":"<p dir=\"auto\">En ny rapport i rapportverktøyet – Saker per mal – viser innholdet i sakenes interne og eksterne felt. Feltene kan brukes som filter i rapportvisningen og vises i csv-eksporten.</p>\n<p dir=\"auto\">Vil du få en samlet oversikt over alle saker, kan du fortsatt kjøre rapporten Saker uten å velge en spesifikk mal.</p>"},"dk":{"title":"Se indholdet i alle sagsfelter i rapporter","body_html":"<p dir=\"auto\">En ny rapport i rapportværktøjet – Sager pr. skabelon – viser indholdet i sagernes interne og eksterne felter. Felterne kan bruges som filtre i rapportvisningen og vises i csv-eksporten.</p>\n<p dir=\"auto\">Vil du have et samlet overblik over alle sager, kan du stadig køre rapporten Sager uden at vælge en specifik skabelon.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10360","title":"Send a case to another clinic straight from the journal","state":"closed","number":10360,"created_at":"2026-10-05T11:55:15Z","repo_name":"Kaddio Application","merged_at":"2026-10-16T08:37:52Z","body":"## Summary\n- An admin allows other organisations to create a case from a template by adding their Kaddio URL. Those organisations see the same fields a client sees on a public template.\n- From Nytt in the journal, the sending organisation fills the form and can attach journal notes and letters as PDFs, plus uploaded files.\n- The receiving organisation owns the real case. The client there is created or updated from the sending contact, filling only empty profile fields.\n- The sending organisation gets a journal card with the same case number. That card is not openable, is excluded from the cases list and counts, and cannot be closed or otherwise changed.\n\n## Test plan\n- [ ] On Demo underavdelning, open the Konsultation template and confirm Demo is listed under Andra organisationer.\n- [ ] On Demo, open a client journal, choose Nytt → Konsultation, select notes and a letter, upload a file, and send.\n- [ ] Confirm the sending journal shows “Skickat till …” and the case cannot be opened, closed, or reopened.\n- [ ] On Demo underavdelning, confirm the case exists for the created client with the same number, answers, and files.\n- [ ] Confirm a host who is not allowed cannot create the case, and the sending stub is absent from the cases list and open-case counts.","body_html":"<p dir=\"auto\">Clinics can now send a case to another Kaddio organisation directly from the journal, using a shared template.</p>\n<p dir=\"auto\">An administrator opens a case template to other organisations by adding their Kaddio address. From Nytt in the journal, the sending clinic fills in the template, attaches journal notes and letters as PDFs, and uploads any additional files. The receiving clinic gets the real case with the client created or updated automatically, while the sending clinic keeps a journal record with the same case number for traceability.</p>\n<p dir=\"auto\">Available in the Cases module. No action needed — administrators can start sharing templates whenever they are ready.</p>","translations":{"en":{"title":"Send a case to another clinic straight from the journal","body_html":"<p dir=\"auto\">Clinics can now send a case to another Kaddio organisation directly from the journal, using a shared template.</p>\n<p dir=\"auto\">An administrator opens a case template to other organisations by adding their Kaddio address. From Nytt in the journal, the sending clinic fills in the template, attaches journal notes and letters as PDFs, and uploads any additional files. The receiving clinic gets the real case with the client created or updated automatically, while the sending clinic keeps a journal record with the same case number for traceability.</p>\n<p dir=\"auto\">Available in the Cases module. No action needed — administrators can start sharing templates whenever they are ready.</p>"},"sv":{"title":"Skicka ärenden till en annan klinik direkt från journalen","body_html":"<p dir=\"auto\">Effektivt för att skicka och ta emot remissvar eller dela patientinformation mellan enheter.</p>\n<p dir=\"auto\">Gör såhär: En administratör öppnar en ärendemall för andra organisationer genom att lägga till deras Kaddio-adress. Från <em>Nytt</em> i journalen fyller den avsändande kliniken i mallen, bifogar journalanteckningar och brev som PDF och laddar upp eventuella filer. Den mottagande kliniken får ärendet och klienten skapas eller uppdateras automatiskt, medan avsändaren behåller ett journalkort med samma ärendenummer för spårbarhet.</p>"},"es":{"title":"Envía un caso a otra clínica directamente desde el historial","body_html":"<p dir=\"auto\">Las clínicas pueden enviar un caso a otra organización en Kaddio directamente desde el historial, usando una plantilla compartida.</p>\n<p dir=\"auto\">Un administrador habilita una plantilla de caso para otras organizaciones añadiendo su dirección de Kaddio. Desde Nuevo en el historial, la clínica emisora completa la plantilla, adjunta notas y cartas en PDF y sube archivos adicionales. La clínica receptora obtiene el caso real con el cliente creado o actualizado automáticamente, mientras que la emisora conserva un registro en el historial con el mismo número de caso.</p>\n<p dir=\"auto\">Disponible en el módulo de Casos. No se requiere ninguna acción — los administradores pueden empezar a compartir plantillas cuando quieran.</p>"},"no":{"title":"Send en sak til en annen klinikk rett fra journalen","body_html":"<p dir=\"auto\">Klinikker kan sende en sak til en annen Kaddio-organisasjon rett fra journalen, via en delt mal.</p>\n<p dir=\"auto\">En administrator åpner en saksmal for andre organisasjoner ved å legge til deres Kaddio-adresse. Fra Nytt i journalen fyller avsenderklinikken ut malen, legger ved journalnotater og brev som PDF, og laster opp ekstra filer. Mottakerklinikken får den reelle saken med klienten opprettet eller oppdatert automatisk, mens avsender beholder et journalkort med samme saksnummer for sporbarhet.</p>\n<p dir=\"auto\">Tilgjengelig i Saker-modulen. Ingen handling kreves — administratorer kan dele maler når de er klare.</p>"},"dk":{"title":"Send en sag til en anden klinik direkte fra journalen","body_html":"<p dir=\"auto\">Klinikker kan sende en sag til en anden Kaddio-organisation direkte fra journalen via en delt skabelon.</p>\n<p dir=\"auto\">En administrator åbner en sagsskabelon for andre organisationer ved at tilføje deres Kaddio-adresse. Fra Nyt i journalen udfylder den afsendende klinik skabelonen, vedhæfter journalnotater og breve som PDF og uploader eventuelle filer. Den modtagende klinik får den rigtige sag, og klienten oprettes eller opdateres automatisk, mens afsenderen beholder et journalkort med samme sagsnummer for sporbarhed.</p>\n<p dir=\"auto\">Findes i Sager-modulet. Ingen handling nødvendig — administratorer kan dele skabeloner, når de er klar.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10437","title":"Add your signature to official forms with a single click","state":"closed","number":10437,"created_at":"2026-10-12T13:13:44Z","repo_name":"Kaddio Application","merged_at":"2026-10-16T06:40:55Z","body":"## Summary\n- Adds a button on blankett underskrift sections that have a namnteckning field, so the selected host's profile signature can be included.\n- The PDF stamps that image at 10 mm, slightly above the line, using multiply so a white background drops out.\n\n## Test plan\n- [x] Open a blankett that has a namnteckning field and confirm **Lägg till signatur** appears in the underskrift section.\n- [x] With no signature on the host profile, the button stays disabled and explains that.\n- [x] Upload a signature (including one with a white background), add it, export the PDF, and confirm the ink is about 10 mm tall and the white background does not cover the form.\n- [ ] Remove the signature and confirm a new export leaves the namnteckning line blank.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Add your profile signature directly to official forms, such as those from the Swedish Social Insurance Agency, before printing or sending. The saved signature from your practitioner profile is neatly placed on the signature line, and the white background is removed so it blends seamlessly into the form. Adding the signature is always optional.</p>","translations":{"en":{"title":"Add your signature to official forms with a single click","body_html":"<p dir=\"auto\">Add your profile signature directly to official forms, such as those from the Swedish Social Insurance Agency, before printing or sending. The saved signature from your practitioner profile is neatly placed on the signature line, and the white background is removed so it blends seamlessly into the form. Adding the signature is always optional.</p>"},"sv":{"title":"Lägg till din signatur på officiella blanketter med ett klick","body_html":"<p dir=\"auto\">Lägg till din profilsignatur direkt på blanketter till ex. Försäkringskassan innan du skriver ut eller skickar. Den sparade signaturen från behandlarprofilen placeras snyggt på namnteckningsraden, och vit bakgrund tas bort så att den smälter in i blanketten. Signaturen är alltid frivillig.</p>"},"es":{"title":"Añade tu firma a los formularios oficiales con un solo clic","body_html":"<p dir=\"auto\">Incluye la firma de tu perfil directamente en formularios oficiales, como los de la Seguridad Social sueca, antes de imprimirlos o enviarlos. La firma guardada en tu perfil de profesional se coloca con precisión en la línea de firma, y el fondo blanco se elimina para que se integre perfectamente en el documento. Añadir la firma es siempre opcional.</p>"},"no":{"title":"Legg til signaturen din på offisielle skjemaer med ett klikk","body_html":"<p dir=\"auto\">Legg til profilsignaturen din direkte på offisielle skjemaer, for eksempel fra NAV, før du skriver ut eller sender. Den lagrede signaturen fra behandlerprofilen plasseres pent på signaturlinjen, og den hvite bakgrunnen fjernes slik at signaturen smelter inn i skjemaet. Signaturen er alltid valgfri.</p>"},"dk":{"title":"Tilføj din underskrift på officielle blanketter med ét klik","body_html":"<p dir=\"auto\">Tilføj din profilunderskrift direkte på officielle blanketter, f.eks. fra Udbetaling Danmark, inden du printer eller sender. Den gemte underskrift fra behandlerprofilen placeres pænt på underskriftslinjen, og den hvide baggrund fjernes, så den glider ind i blanketten. Underskriften er altid valgfri.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10393","title":"Client profiles now show the preferred first name from SPAR and Navet","state":"closed","number":10393,"created_at":"2026-10-07T13:56:34Z","repo_name":"Kaddio Application","merged_at":"2026-10-09T07:56:18Z","body":"## Summary\n- Maps SPAR/NAVET tilltalsnamn to `firstname` and stores the full Förnamn in `officialGivenNames` when they differ ([#9273](https://github.com/kaddio/kaddio/issues/9273)).\n- Shows official given names in grey under Förnamn on the client profile and in the new-patient modal after a lookup.\n- Leaves a manually chosen firstname intact on later SPAR/NAVET fetches; hosts can set `officialGivenNames` (including GraphQL).\n\nInternal how-to: [Personregister ‐ SPAR och Navet](https://github.com/kaddio/kaddio/wiki/Personregister-%E2%80%90-SPAR-och-Navet).\n\n## Test plan\n\n**If both are connected, \"Hämta uppgifter\" uses Navet.** Disconnect Navet when testing SPAR.\n\n### Navet\n\nOrg setting: **Anslut till Navet**. Use a test beställnings-id (this switches the motor to Skatteverket’s test environment and org `162021004748`):\n\n- `00000236-FO01-0001` — without sekretess persons\n- `00000236-FO01-0002` — with sekretess persons\n\nOfficial person list: [Testdata Navet (xlsx)](https://www.skatteverket.se/download/18.16f588619a39f2c14a183f/1789561638284/navet-testdata.xlsx) (updated 2026-03-02).\n\n| Personnummer | Förnamn in Navet | Tilltal | Expected `firstname` | Grey official names |\n| --- | --- | --- | --- | --- |\n| `194107086995` | Svante Hans-Emil Grundberg | 12 | Svante Hans | Svante Hans-Emil |\n| `193104019140` | Karin Ulrika Stina Viola Albertsson | 40 | Viola | Karin Ulrika Stina Viola |\n| `198602052386` | Riitta Rantanen | 10 | Riitta | hidden (same as firstname) |\n| `195812193091` | Sture Johan … Jan-Erik Tolvling | 50 | Karl | full Förnamn — **sekretess**, needs `…-0002` |\n\n- [ ] Fetch `194107086995` on a client profile: firstname is **Svante Hans**, grey text **Svante Hans-Emil**.\n- [ ] Same lookup in **Lägg till ny patient**; official names show under Förnamn.\n- [ ] Fetch `198602052386`: firstname **Riitta**, no grey official names.\n- [ ] Change personnummer in the new-patient modal (`194107086995` → `193104019140`) and fetch again: firstname becomes **Viola**, official names **Karin Ulrika Stina Viola**.\n\n### SPAR\n\nOrg setting: **Anslut till SPAR**. Kundnummer `500243`, uppdrags-id `637`, orgnr `0000000000` (orgnr is not sent to SPAR). That combination hits SPAR kundtest (`https://test-personsok.statenspersonadressregister.se/2023.1`).\n\nFull list: [Testfall för personsökning i kundtestmiljön v9.1](https://statenspersonadressregister.se/media/zl2lun1q/testfall-foer-personsoekning-i-kundtestmiljoen_v91.pdf).\n\n| Personnummer | Förnamn in SPAR | Expected `firstname` | Grey official names |\n| --- | --- | --- | --- |\n| `195704133106` | Christina Birgitta Ulrika Efternamn3542 | Birgitta | Christina Birgitta Ulrika |\n| `198007199295` | Kuno Efternamn2993 | Kuno | hidden (same as firstname) |\n| `200809152382` | Förnamn saknas | empty | hidden |\n\n- [ ] Fetch `195704133106` on a client profile: firstname is **Birgitta**, grey text **Christina Birgitta Ulrika**.\n- [ ] Same lookup in **Lägg till ny patient**.\n- [ ] Fetch `198007199295`: firstname **Kuno**, no grey official names.\n\n### Both\n\n- [ ] On an existing profile, set a custom firstname, fetch SPAR or Navet, and confirm firstname is not overwritten.\n- [ ] Confirm a client cannot set `officialGivenNames`; a host can.","body_html":"<p dir=\"auto\">When fetching client details from SPAR or Navet, Kaddio now uses the person's preferred first name (tilltalsnamn) instead of the full list of given…</p>\n<p dir=\"auto\">In the Journal and when adding a new patient, the full official given names appear in grey underneath — so you always see both the name the client goes by and their legal names from the population register.</p>\n<p dir=\"auto\">If you've manually set a first name on a client, it stays untouched the next time you fetch updated details.</p>","translations":{"en":{"title":"Client profiles now show the preferred first name from SPAR and Navet","body_html":"<p dir=\"auto\">When fetching client details from SPAR or Navet, Kaddio now uses the person's preferred first name (tilltalsnamn) instead of the full list of given…</p>\n<p dir=\"auto\">In the Journal and when adding a new patient, the full official given names appear in grey underneath — so you always see both the name the client goes by and their legal names from the population register.</p>\n<p dir=\"auto\">If you've manually set a first name on a client, it stays untouched the next time you fetch updated details.</p>"},"sv":{"title":"Klientprofiler visar nu tilltalsnamnet från SPAR och Navet","body_html":"<p dir=\"auto\">När du hämtar uppgifter från SPAR eller Navet använder Kaddio nu personens tilltalsnamn som förnamn istället för hela raden med förnamn.</p>\n<p dir=\"auto\">I journalen och när du lägger till en ny patient visas de folkbokförda förnamnen i grått under förnamnsfältet — så att du alltid ser både tilltalsnamnet och de officiella namnen från folkbokföringen.</p>\n<p dir=\"auto\">Om du har satt ett eget förnamn på en klient behålls det vid framtida hämtningar från SPAR eller Navet.</p>"},"es":{"title":"Los perfiles de clientes ahora muestran el nombre habitual del registro de población","body_html":"<p dir=\"auto\">Al obtener datos desde los registros suecos SPAR y Navet, Kaddio usa ahora el nombre habitual (tilltalsnamn) de la persona en lugar de toda la…</p>\n<p dir=\"auto\">En la ficha clínica y al añadir un nuevo paciente, los nombres oficiales completos aparecen en gris bajo el campo de nombre, para que siempre veas tanto el nombre que usa el cliente como sus nombres legales.</p>\n<p dir=\"auto\">Si has escrito manualmente un nombre en una ficha, se mantiene intacto al volver a consultar los registros.</p>"},"no":{"title":"Klientprofiler viser nå tiltalenavnet fra SPAR og Navet","body_html":"<p dir=\"auto\">Når Kaddio henter opplysninger fra SPAR eller Navet, brukes nå personens tiltalenavn (tilltalsnamn) som fornavn, i stedet for hele rekken av fornavn.</p>\n<p dir=\"auto\">I journalen og når du legger til en ny pasient vises de folkeregistrerte fornavnene i grått under fornavnfeltet, slik at du alltid ser både tiltalenavnet og de offisielle navnene.</p>\n<p dir=\"auto\">Hvis du har satt et eget fornavn på en klient, blir det stående uendret ved senere oppslag.</p>"},"dk":{"title":"Klientprofiler viser nu kaldenavnet fra SPAR og Navet","body_html":"<p dir=\"auto\">Når Kaddio henter oplysninger fra SPAR eller Navet, bruges personens kaldenavn (tilltalsnamn) nu som fornavn i stedet for hele rækken af fornavne.</p>\n<p dir=\"auto\">I journalen og når du opretter en ny patient vises de folkeregistrerede fornavne i gråt under fornavnsfeltet, så du altid ser både kaldenavnet og de officielle navne.</p>\n<p dir=\"auto\">Hvis du har indtastet et fornavn manuelt på en klient, bevares det ved senere opslag.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10309","title":"Reconcile paid invoices by uploading a CAMT.054 file","state":"closed","number":10309,"created_at":"2026-09-28T11:29:09Z","repo_name":"Kaddio Application","merged_at":"2026-10-09T06:42:09Z","body":"## Summary\n- Admins can upload a CAMT.054 kreditavi from the sent invoices list to tick off matching invoices (OCR or invoice number).\n- Reuses existing avprickning matching and the auto tick-off asset account; skips debits and reversals.\n- Parses Swedbank-style camt.054.001.02 credit notifications with `xml-parser` (no extra ISO 20022 library).\n\n## Test plan\n- [ ] Confirm a tillgångskonto is set under Fakturering → Automatisk avprickning.\n- [ ] On Fakturor → Fakturor, upload `camt.054 Credit (xml).xml` (not Debit / Debit Return / paper-only unless that is the real payment).\n- [ ] Matching invoices are marked paid; summary shows ticked off / already paid / unmatched.\n- [ ] Non-admin cannot upload; invalid XML and debit-only files are rejected.\n- [ ] `npm run test:unit:once` covers `parse-camt054.unit-test.ts`; full-app `camt054.app-test.ts` covers `invoices.processCamt054`.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Go to <em>Invoices</em> &gt; <em>Invoices</em> &gt; <em>More</em> and select <em>Upload CAMT</em>. Kaddio matches each payment to an invoice using OCR or invoice number, and gives you a clear summary of how many were reconciled, already paid, or had no match.</p>\n<p dir=\"auto\">An asset account for automatic reconciliation must be set up under the invoice settings for the upload to work.</p>","translations":{"en":{"title":"Reconcile paid invoices by uploading a CAMT.054 file","body_html":"<p dir=\"auto\">Go to <em>Invoices</em> &gt; <em>Invoices</em> &gt; <em>More</em> and select <em>Upload CAMT</em>. Kaddio matches each payment to an invoice using OCR or invoice number, and gives you a clear summary of how many were reconciled, already paid, or had no match.</p>\n<p dir=\"auto\">An asset account for automatic reconciliation must be set up under the invoice settings for the upload to work.</p>"},"sv":{"title":"Pricka av betalda fakturor genom att ladda upp en CAMT.054-fil","body_html":"<p dir=\"auto\">Gå till <em>Fakturor</em> &gt; <em>Fakturor</em> &gt; <em>Mer</em> och välj <em>Ladda upp CAMT</em>. Kaddio matchar varje betalning mot en faktura via OCR eller fakturanummer och visar en sammanställning över hur många som prickats av, redan var betalda eller saknade matchning.</p>\n<p dir=\"auto\">Ett tillgångskonto för automatisk avprickning behöver vara inställt under fakturainställningarna för att uppladdningen ska fungera.</p>"},"es":{"title":"Concilia facturas pagadas subiendo un archivo CAMT.054","body_html":"<p dir=\"auto\">Ve a <em>Facturas</em> &gt; <em>Facturas</em> &gt; <em>Más</em> y selecciona <em>Subir CAMT</em>. Kaddio empareja cada pago con una factura mediante OCR o número de factura y te muestra un resumen claro de cuántas se han conciliado, cuáles ya estaban pagadas y cuáles no tenían coincidencia.</p>\n<p dir=\"auto\">Para que la carga funcione, es necesario configurar una cuenta de activo para la conciliación automática en los ajustes de facturación.</p>"},"no":{"title":"Avstem betalte fakturaer ved å laste opp en CAMT.054-fil","body_html":"<p dir=\"auto\">Gå til <em>Fakturaer</em> &gt; <em>Fakturaer</em> &gt; <em>Mer</em> og velg <em>Last opp CAMT</em>. Kaddio matcher hver betaling mot en faktura via KID eller fakturanummer, og viser en oversikt over hvor mange som ble avstemt, allerede var betalt eller manglet treff.</p>\n<p dir=\"auto\">En eiendelskonto for automatisk avstemming må være satt opp under fakturainnstillingene for at opplastingen skal fungere.</p>"},"dk":{"title":"Afstem betalte fakturaer ved at uploade en CAMT.054-fil","body_html":"<p dir=\"auto\">Gå til <em>Fakturaer</em> &gt; <em>Fakturaer</em> &gt; <em>Mere</em> og vælg <em>Upload CAMT</em>. Kaddio matcher hver betaling med en faktura via OCR eller fakturanummer og viser et overblik over, hvor mange der blev afstemt, allerede var betalt eller manglede et match.</p>\n<p dir=\"auto\">En aktivkonto til automatisk afstemning skal være opsat under fakturaindstillingerne, for at uploaden virker.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10363","title":"Auto-save for letter templates","state":"closed","number":10363,"created_at":"2026-10-05T13:26:35Z","repo_name":"Kaddio Application","merged_at":"2026-10-09T06:40:49Z","body":"## Summary\n- The letter template editor saves about a second after you stop editing, and shows Sparar... / Sparad in the breadcrumb.\n- Template fields are saved on their own, so an autosave cannot overwrite attachments.\n- The Spara button still saves immediately.\n\n## Test plan\n- [ ] Open a letter template, change the name and body, and wait until Sparad appears without clicking Spara.\n- [ ] Reload the page and confirm the edits are still there.\n- [ ] Click Spara and confirm the saved toast still appears.\n- [ ] Add and remove a PDF attachment and confirm it is not lost after further text edits.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Letter templates in the journal module are now saved automatically as you work, so your changes are never lost.</p>","translations":{"en":{"title":"Auto-save for letter templates","body_html":"<p dir=\"auto\">Letter templates in the journal module are now saved automatically as you work, so your changes are never lost.</p>"},"sv":{"title":"Autospar på brevmallar","body_html":"<p dir=\"auto\">Brevmallar i journalmodulen sparas automatiskt medan du arbetar, så dina ändringar aldrig går förlorade.</p>"},"es":{"title":"Guardado automático en plantillas de cartas","body_html":"<p dir=\"auto\">Las plantillas de cartas del módulo de historia clínica se guardan automáticamente mientras trabajas, para que tus cambios nunca se pierdan.</p>"},"no":{"title":"Autolagring av brevmaler","body_html":"<p dir=\"auto\">Brevmaler i journalmodulen lagres automatisk mens du jobber, slik at endringene dine aldri går tapt.</p>"},"dk":{"title":"Autogem på brevskabeloner","body_html":"<p dir=\"auto\">Brevskabeloner i journalmodulet gemmes automatisk, mens du arbejder, så dine ændringer aldrig går tabt.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10412","title":"Phone numbers are now clickable across Kaddio","state":"closed","number":10412,"created_at":"2026-10-08T22:46:20Z","repo_name":"Kaddio Application","merged_at":"2026-10-08T22:48:17Z","body":"this means that if you use a softphone app, clicking the links will integrate to that softphone.","body_html":"<p dir=\"auto\">Phone numbers shown throughout Kaddio are now clickable links that start a call.</p>\n<p dir=\"auto\">If you use a softphone or mobile device, a single click on a client's number in the dashboard, group lists, member info or campaign previews will launch your calling app. No setup needed.</p>","translations":{"en":{"title":"Phone numbers are now clickable across Kaddio","body_html":"<p dir=\"auto\">Phone numbers shown throughout Kaddio are now clickable links that start a call.</p>\n<p dir=\"auto\">If you use a softphone or mobile device, a single click on a client's number in the dashboard, group lists, member info or campaign previews will launch your calling app. No setup needed.</p>"},"sv":{"title":"Telefonnummer går nu att klicka på i hela Kaddio","body_html":"<p dir=\"auto\">Telefonnummer som visas i Kaddio är nu klickbara länkar som startar ett samtal.</p>\n<p dir=\"auto\">Använder du en softphone eller mobil enhet räcker det med ett klick på numret i klientöversikten, grupplistor, medlemsinformation eller kampanjvyer för att starta samtalet. Ingen inställning krävs.</p>"},"es":{"title":"Los números de teléfono ahora son clicables en Kaddio","body_html":"<p dir=\"auto\">Los números de teléfono que aparecen en Kaddio ahora son enlaces clicables que inician una llamada.</p>\n<p dir=\"auto\">Si usas un softphone o un dispositivo móvil, bastará un clic en el número desde el panel del cliente, listas de grupos, información de miembros o vistas previas de campañas para iniciar la llamada. No requiere configuración.</p>"},"no":{"title":"Telefonnumre er nå klikkbare i hele Kaddio","body_html":"<p dir=\"auto\">Telefonnumre som vises i Kaddio er nå klikkbare lenker som starter en samtale.</p>\n<p dir=\"auto\">Bruker du en softphone eller mobil enhet, holder det med ett klikk på nummeret i klientoversikten, gruppelister, medlemsinformasjon eller kampanjevisninger for å starte samtalen. Ingen oppsett kreves.</p>"},"dk":{"title":"Telefonnumre kan nu klikkes i hele Kaddio","body_html":"<p dir=\"auto\">Telefonnumre, der vises i Kaddio, er nu klikbare links, der starter et opkald.</p>\n<p dir=\"auto\">Bruger du en softphone eller mobil enhed, er et enkelt klik på nummeret i klientoversigten, gruppelister, medlemsinformation eller kampagnevisninger nok til at starte opkaldet. Ingen opsætning kræves.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10357","title":"Incoming documents are now read and sorted by AI into cases","state":"closed","number":10357,"created_at":"2026-10-04T17:19:17Z","repo_name":"Kaddio Application","merged_at":"2026-10-08T10:08:50Z","body":"## Summary\nNew **Inkommande** nav section: scanned/photographed remisser and letters are read by AI, sequenced into items, matched to a case template and patient, and reviewed side-by-side with the documents before approval creates the case.\n\n- **Case templates & fields** get `aiInstructions`; templates use a FILES field for the source documents.\n- **Ingest**: `POST /api/incoming/upload` (API token for scanners, or cookie + `X-Kaddio-Incoming` header from the UI). PDFs are split into pages; processing runs 1 min after the last upload, or immediately via \"Bearbeta\".\n- **Processing**: OCR per page (lightweight model), first-page guessing + segmentation into items (continuing the previous open item when appropriate), then template choice and field extraction (full model). Document content is treated as data, never instructions.\n- **Review UI** (Svelte): overview with queue and counts, split-screen review (PDF viewer + template, patient, client match/search, typed fields with low-confidence highlight), and a *Sidordning* step to correct page grouping.\n- **Approval**: atomic draft→approving, creates the client if no pid match, merges page groups into PDFs in `caseFiles`, creates the case via `createCaseForClientAsync`, then removes the incoming pages.\n- **Access**: org flag `hasIncoming` (requires AI + cases) and a new `incoming` privilege for hosts; nav badge with live count.\n\n## Testing\n- Unit tests: segmentation, extraction mapping.\n- App tests (`MOCHA_GREP=incoming`): segmentation, continuation, split/merge, approval (case, new client, files), single approval, coercion, discard, unauthorized client, module disabled, publication.\n- Manual smoke against Requesty with a synthetic PDF page (OCR + checkbox + pid extraction).\n\n## Known caveats\n- No AI usage logging/pricing yet.\n- Created clients have no email.\n- An item could remain in \"approving\" after a server crash mid-approval.\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">A new Incoming section turns scanned referrals and letters into ready-to-review cases, with AI reading each page and matching it to the right…</p>\n<p dir=\"auto\">Staff can upload documents directly from a scanner or through Kaddio. The AI then splits multi-page files, suggests which case template fits, extracts key fields and finds the matching client. Everything is presented side by side with the original document, so you can check, correct the page order if needed, and approve with one click to create the case.</p>\n<p dir=\"auto\">Available to organizations using the AI and Cases modules. Administrators can enable Incoming in the organization settings and control access through the new Incoming permission.</p>","translations":{"en":{"title":"Incoming documents are now read and sorted by AI into cases","body_html":"<p dir=\"auto\">A new Incoming section turns scanned referrals and letters into ready-to-review cases, with AI reading each page and matching it to the right…</p>\n<p dir=\"auto\">Staff can upload documents directly from a scanner or through Kaddio. The AI then splits multi-page files, suggests which case template fits, extracts key fields and finds the matching client. Everything is presented side by side with the original document, so you can check, correct the page order if needed, and approve with one click to create the case.</p>\n<p dir=\"auto\">Available to organizations using the AI and Cases modules. Administrators can enable Incoming in the organization settings and control access through the new Incoming permission.</p>"},"sv":{"title":"Inkommande dokument läses nu av AI och blir till ärenden","body_html":"<p dir=\"auto\">En ny Inkommande-vy förvandlar inskannade remisser och brev till färdiga ärenden – AI läser varje sida och föreslår mall och patient.</p>\n<p dir=\"auto\">Ladda upp dokument direkt från skannern eller i Kaddio. AI delar upp flersidiga filer, föreslår rätt ärendemall, fyller i fält och letar fram klienten. Allt visas sida vid sida med originaldokumentet så att du enkelt kan granska, justera sidordningen och godkänna – då skapas ärendet automatiskt.</p>\n<p dir=\"auto\">Finns för organisationer med modulerna AI och Ärenden. Administratörer aktiverar Inkommande i organisationsinställningarna och styr åtkomsten via den nya behörigheten Inkommande.</p>"},"es":{"title":"Los documentos entrantes ahora los lee la IA y los convierte en casos","body_html":"<p dir=\"auto\">La nueva sección Entrantes convierte derivaciones y cartas escaneadas en casos listos para revisar, con IA que lee cada página y la asigna a la…</p>\n<p dir=\"auto\">Sube documentos directamente desde el escáner o desde Kaddio. La IA divide los archivos de varias páginas, sugiere la plantilla de caso adecuada, rellena los campos y localiza al cliente. Todo se muestra junto al documento original para que puedas revisar, ajustar el orden de las páginas y aprobar con un clic.</p>\n<p dir=\"auto\">Disponible para organizaciones con los módulos de IA y Casos. Los administradores pueden activar Entrantes en los ajustes de la organización y gestionar el acceso con el nuevo permiso Entrantes.</p>"},"no":{"title":"Innkommende dokumenter leses nå av AI og blir til saker","body_html":"<p dir=\"auto\">En ny Innkommende-visning gjør skannede henvisninger og brev om til ferdige saker, med AI som leser hver side og foreslår riktig mal og pasient.</p>\n<p dir=\"auto\">Last opp dokumenter direkte fra skanneren eller i Kaddio. AI deler opp flersidige filer, foreslår riktig saksmal, fyller inn felter og finner klienten. Alt vises side om side med originaldokumentet, slik at du enkelt kan kontrollere, justere siderekkefølgen og godkjenne – da opprettes saken automatisk.</p>\n<p dir=\"auto\">Tilgjengelig for organisasjoner med modulene AI og Saker. Administratorer aktiverer Innkommende i organisasjonsinnstillingene og styrer tilgang via den nye Innkommende-tilgangen.</p>"},"dk":{"title":"Indkommende dokumenter læses nu af AI og bliver til sager","body_html":"<p dir=\"auto\">En ny Indkommende-visning laver scannede henvisninger og breve om til klar-til-gennemgang-sager, hvor AI læser hver side og matcher den med rette…</p>\n<p dir=\"auto\">Upload dokumenter direkte fra scanneren eller i Kaddio. AI opdeler flersidede filer, foreslår den rigtige sagsskabelon, udfylder felter og finder klienten. Alt vises side om side med originaldokumentet, så du nemt kan gennemgå, justere siderækkefølgen og godkende – så oprettes sagen automatisk.</p>\n<p dir=\"auto\">Tilgængelig for organisationer med modulerne AI og Sager. Administratorer aktiverer Indkommende i organisationsindstillingerne og styrer adgangen via den nye Indkommende-rettighed.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10375","title":"Case templates can now be shared as installable packages","state":"closed","number":10375,"created_at":"2026-10-06T11:24:55Z","repo_name":"Kaddio Application","merged_at":"2026-10-08T07:44:23Z","body":"## Summary\n- Case templates can be published and installed as Kaddio packages, alongside forms, contact types, and letter templates.\n- The shared copy keeps the template settings and drops organization-specific links (forms, responsible person, groups, required client property, and the case-number counter).\n- Settings and the market overview can create and find ärendemall packages.\n\n## Test plan\n- [ ] As an admin, open a case template and choose Skapa paket. Confirm a private package is created and the original template is unchanged.\n- [ ] Install that package in another organization and confirm the new template has the shared fields, empty form links, and case numbers starting at 1.\n- [ ] Confirm a template from another organization cannot be packaged.\n- [ ] Remove the package and confirm the original organization template remains.\n- [ ] Filter the market overview on Ärendemallar.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Share your case templates with other clinics as installable Kaddio packages, just like forms and letter templates.</p>\n<p dir=\"auto\">In Cases, open any template and choose Create package to publish it. The shared copy keeps your template settings but leaves out organization-specific details like linked forms, responsible person, and case numbering. Other clinics can then find and install it from the marketplace under Case templates.</p>\n<p dir=\"auto\">A great way to spread well-crafted workflows across organizations without starting from scratch.</p>","translations":{"en":{"title":"Case templates can now be shared as installable packages","body_html":"<p dir=\"auto\">Share your case templates with other clinics as installable Kaddio packages, just like forms and letter templates.</p>\n<p dir=\"auto\">In Cases, open any template and choose Create package to publish it. The shared copy keeps your template settings but leaves out organization-specific details like linked forms, responsible person, and case numbering. Other clinics can then find and install it from the marketplace under Case templates.</p>\n<p dir=\"auto\">A great way to spread well-crafted workflows across organizations without starting from scratch.</p>"},"sv":{"title":"Ärendemallar kan nu delas som installerbara paket","body_html":"<p dir=\"auto\">Dela ärendemallar med andra kliniker som installerbara Kaddio-paket, precis som formulär och brevmallar.</p>\n<p dir=\"auto\">Öppna en ärendemall och välj Skapa paket för att publicera den. Den delade kopian behåller mallens inställningar men utelämnar organisationsspecifika uppgifter som kopplade formulär, ansvarig person och ärendenummerserie. Andra kliniker hittar och installerar mallen via marknaden under Ärendemallar.</p>\n<p dir=\"auto\">Ett enkelt sätt att sprida genomtänkta arbetssätt mellan organisationer utan att börja om från början.</p>"},"es":{"title":"Las plantillas de casos ya se pueden compartir como paquetes instalables","body_html":"<p dir=\"auto\">Comparte tus plantillas de casos con otras clínicas como paquetes de Kaddio, igual que los formularios y las plantillas de cartas.</p>\n<p dir=\"auto\">Abre una plantilla de caso y elige Crear paquete para publicarla. La copia compartida mantiene la configuración de la plantilla pero omite datos específicos de la organización, como formularios vinculados, persona responsable y numeración de casos. Otras clínicas pueden encontrarla e instalarla desde el mercado, en Plantillas de casos.</p>\n<p dir=\"auto\">Una forma sencilla de difundir flujos de trabajo bien pensados entre organizaciones.</p>"},"no":{"title":"Saksmaler kan nå deles som installerbare pakker","body_html":"<p dir=\"auto\">Del saksmaler med andre klinikker som installerbare Kaddio-pakker, på samme måte som skjema og brevmaler.</p>\n<p dir=\"auto\">Åpne en saksmal og velg Opprett pakke for å publisere den. Den delte kopien beholder malens innstillinger, men utelater organisasjonsspesifikke detaljer som koblede skjema, ansvarlig person og saksnummerering. Andre klinikker finner og installerer malen via markedet under Saksmaler.</p>\n<p dir=\"auto\">En enkel måte å spre gjennomtenkte arbeidsflyter mellom organisasjoner.</p>"},"dk":{"title":"Sagsskabeloner kan nu deles som installerbare pakker","body_html":"<p dir=\"auto\">Del sagsskabeloner med andre klinikker som installerbare Kaddio-pakker, ligesom formularer og brevskabeloner.</p>\n<p dir=\"auto\">Åbn en sagsskabelon og vælg Opret pakke for at udgive den. Den delte kopi bevarer skabelonens indstillinger, men udelader organisationsspecifikke detaljer som tilknyttede formularer, ansvarlig person og sagsnummerering. Andre klinikker kan finde og installere skabelonen via markedet under Sagsskabeloner.</p>\n<p dir=\"auto\">En enkel måde at dele gennemtænkte arbejdsgange mellem organisationer.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10267","title":"Smart scheduling can now be controlled per working hour","state":"closed","number":10267,"created_at":"2026-09-23T10:01:58Z","repo_name":"Kaddio Application","merged_at":"2026-10-07T14:07:04Z","body":"## Summary\r\n- Adds a Smart schemaläggning section under Mer in the arbetstid editor, with organisationsstandard, inaktiverad, and the existing strategies.\r\n- Stores the choice on that bookable time and applies it only when generating and showing its free times. The org start/end hour window is unchanged.\r\n\r\n## Test plan\r\n- [ ] Open an arbetstid, choose Mer, and set each smart-scheduling option. Confirm it saves and stays selected after reload.\r\n- [ ] With the org strategy on, set one arbetstid to Inaktiverad and confirm its slots stay visible inside the smart-scheduling window while other arbetstider still follow the org.\r\n- [ ] With the org strategy off, set one arbetstid to Från start and confirm only that arbetstid's slots are filtered.\r\n- [ ] Change the org strategy and confirm arbetstider left on Organisationsstandard follow it, while an explicit override does not.\r\n\r\n\r\nMade with [Cursor](https://cursor.com)\r\n\r\n\r\nÅterkoppla till \r\n[gunnar@naprapatbokneberg.se](mailto:gunnar@naprapatbokneberg.se)\r\n[t.hylmo@kbtstruktur.se](mailto:t.hylmo@kbtstruktur.se)\r\ndidrik@familjemottagningen.com","body_html":"<p dir=\"auto\">In the calendar, each working hour can now override the clinic's smart scheduling setting. Open a working hour, select <em>More</em> and set Smart scheduling to the organization default, disabled, or any of the available strategies. Other working hours will continue to follow the shared setting.</p>","translations":{"en":{"title":"Smart scheduling can now be controlled per working hour","body_html":"<p dir=\"auto\">In the calendar, each working hour can now override the clinic's smart scheduling setting. Open a working hour, select <em>More</em> and set Smart scheduling to the organization default, disabled, or any of the available strategies. Other working hours will continue to follow the shared setting.</p>"},"sv":{"title":"Smart schemaläggning kan styras per arbetstid","body_html":"<p dir=\"auto\">I kalendern kan varje arbetstid nu åsidosätta klinikens inställning för smart schemaläggning. Öppna en arbetstid, välj <em>Mer</em> och ställ in Smart schemaläggning på organisationsstandard, inaktiverad eller någon av de tillgängliga strategierna. Övriga arbetstider följer fortsatt den gemensamma inställningen.</p>"},"es":{"title":"La programación inteligente ahora se puede controlar por horario de trabajo","body_html":"<p dir=\"auto\">En el calendario, cada horario de trabajo ahora puede anular la configuración de programación inteligente de la clínica. Abre un horario de trabajo, selecciona <em>Más</em> y establece la Programación inteligente en el valor predeterminado de la organización, desactivada o cualquiera de las estrategias disponibles. El resto de los horarios de trabajo seguirán utilizando la configuración común.</p>"},"no":{"title":"Smart timeplanlegging kan styres per arbeidstid","body_html":"<p dir=\"auto\">I kalenderen kan hver arbeidstid nå overstyre klinikkens innstilling for smart timeplanlegging. Åpne en arbeidstid, velg <em>Mer</em> og sett Smart timeplanlegging til organisasjonsstandard, deaktivert eller en av de tilgjengelige strategiene. Øvrige arbeidstider følger fortsatt den felles innstillingen.</p>"},"dk":{"title":"Smart planlægning kan styres pr. arbejdstid","body_html":"<p dir=\"auto\">I kalenderen kan hver arbejdstid nu tilsidesætte klinikkens indstilling for smart planlægning. Åbn en arbejdstid, vælg <em>Mere</em> og indstil Smart planlægning til organisationens standard, deaktiveret eller en af de tilgængelige strategier. Øvrige arbejdstider følger fortsat den fælles indstilling.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10283","title":"Add a brand new client directly from the waiting list","state":"closed","number":10283,"created_at":"2026-09-23T16:06:28Z","repo_name":"Kaddio Application","merged_at":"2026-10-07T06:26:08Z","body":"## Vad\n- Möjligt att lägga till en helt ny patient direkt i en väntelista, utan att först behöva skapa patienten på klientlistan och sedan söka upp den.\n- Layouten på väntelistans detaljsida mirrorar nu exakt \"Patienter\"-sektionen på företagskunder: **Sök...**-filter till vänster, **Sök patient för att lägga till** + **Ny patient**-knapp till höger.\n\n## Implementation\n- `accounts.createClient` accepterar nu ett valfritt `waitingListId`. När det anges: verifierar `waitinglist`-behörighet + att listan tillhör orgen, skapar patienten och lägger till den i listan i samma serveranrop — samma mönster som redan finns för `customerId` (företagskund).\n- `newClient(profile, options)`-fabriken i `account.js` tar nu emot `{ waitingListId }` och skickar det vidare till `CreateClientCtrl` → `accounts.createClient`. Befintliga anrop utan `options` är opåverkade.\n- La till `private.waitinglist` i undantagslistan för automatisk navigering efter skapande (samma undantag som redan finns för `private.customer`), så man stannar kvar på väntelistan.\n- Extraherade delad hjälpfunktion `addProfileToWaitingList` i `waiting_list_methods.ts` (återanvänds nu av både `wl.addClientToList` och `accounts.createClient`) — ingen ändrad logik för befintligt flöde.\n\n## UI\n- `waiting-list.ng.html`: ny tvåkolumnslayout för sök/filtrera + lägg till-sektionen.\n\nDel 2 av serien kring väntelistor (se även #10282 för \"lägg till patient i väntelista från klientöversikten\").","body_html":"<p dir=\"auto\">You can now create a brand new client directly from within a waiting list, without having to go via the client list. You can also search for clients within a waiting list. As before, you can still search for and select an existing client.</p>","translations":{"en":{"title":"Add a brand new client directly from the waiting list","body_html":"<p dir=\"auto\">You can now create a brand new client directly from within a waiting list, without having to go via the client list. You can also search for clients within a waiting list. As before, you can still search for and select an existing client.</p>"},"sv":{"title":"Lägg till en helt ny klient direkt från väntelistan","body_html":"<p dir=\"auto\">Nu går det att skapa en helt ny klient direkt inifrån en väntelista, utan omvägen via klientlistan. Det går också att söka efter klienter i en väntlista. Sedan tidigare går det också att söka och välja en befintlig klient.</p>"},"es":{"title":"Añade un cliente nuevo directamente desde la lista de espera","body_html":"<p dir=\"auto\">Ahora puedes crear un cliente completamente nuevo directamente desde una lista de espera, sin tener que pasar por la lista de clientes. También puedes buscar clientes dentro de una lista de espera. Como ya era posible antes, también puedes buscar y seleccionar un cliente existente.</p>"},"no":{"title":"Legg til en helt ny klient direkte fra ventelisten","body_html":"<p dir=\"auto\">Nå kan du opprette en helt ny klient direkte fra en venteliste, uten omveien om klientlisten. Du kan også søke etter klienter i en venteliste. Som før kan du fortsatt søke opp og velge en eksisterende klient.</p>"},"dk":{"title":"Tilføj en helt ny klient direkte fra ventelisten","body_html":"<p dir=\"auto\">Nu kan du oprette en helt ny klient direkte fra en venteliste, uden omvejen via klientlisten. Du kan også søge efter klienter i en venteliste. Som hidtil kan du desuden søge og vælge en eksisterende klient.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10377","title":"Attach PDFs to physical letters","state":"closed","number":10377,"created_at":"2026-10-06T12:03:51Z","repo_name":"Kaddio Application","merged_at":"2026-10-06T14:38:21Z","body":"## Summary\n- Letter PDF attachments are available to every organization with physical mail, without the `letterAttachments` feature flag.\n- Migration 245 removes the flag document. Physical mail (`allowRealMail`) still gates the UI and uploads.\n\n## Test plan\n- [ ] On an organization with physical mail, open a letter and a letter template and confirm the Bilagor (PDF) panel is shown.\n- [ ] Add a PDF, save, create a letter from that template, and send it as physical mail so the attachment is included.\n- [ ] Confirm an organization without physical mail still does not see the attachments panel.\n- [ ] Confirm a locked letter keeps its existing attachments when saved.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">When sending physical mail from the journal, you can now include PDF attachments in A4 format. Attachments can also be saved in letter templates, ensuring recurring documents are always ready to go.</p>","translations":{"en":{"title":"Attach PDFs to physical letters","body_html":"<p dir=\"auto\">When sending physical mail from the journal, you can now include PDF attachments in A4 format. Attachments can also be saved in letter templates, ensuring recurring documents are always ready to go.</p>"},"sv":{"title":"Bifoga PDF till fysiska brev","body_html":"<p dir=\"auto\">I brev som skickas med fysisk post från journalen går det att lägga till PDF-bilagor i A4. Bilagor kan även sparas i brevmallar, så att återkommande dokument alltid finns på plats.</p>"},"es":{"title":"Adjuntar PDF a cartas físicas","body_html":"<p dir=\"auto\">En las cartas enviadas por correo postal desde la historia clínica, ahora puedes añadir archivos PDF adjuntos en formato A4. Los adjuntos también pueden guardarse en las plantillas de cartas, para que los documentos recurrentes estén siempre listos.</p>"},"no":{"title":"Legg ved PDF i fysiske brev","body_html":"<p dir=\"auto\">I brev som sendes med fysisk post fra journalen kan du nå legge til PDF-vedlegg i A4. Vedlegg kan også lagres i brevmaler, slik at tilbakevendende dokumenter alltid er på plass.</p>"},"dk":{"title":"Vedhæft PDF til fysiske breve","body_html":"<p dir=\"auto\">I breve, der sendes med fysisk post fra journalen, kan du nu tilføje PDF-vedhæftninger i A4. Vedhæftninger kan også gemmes i brevskabeloner, så tilbagevendende dokumenter altid er klar.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10325","title":"Manage API keys and webhooks directly from organization settings","state":"closed","number":10325,"created_at":"2026-09-29T12:33:52Z","repo_name":"Kaddio Application","merged_at":"2026-10-01T13:32:55Z","body":"## Summary\n- Adds an Inställningar → API tab for listing, creating, restricting, and revoking API keys (secrets shown once; GraphQL endpoints optional, empty = all).\n- Adds API-hooks management (create/edit/remove) on the same screen, with org-scoped methods and publications that omit webhook secrets.\n- Gates these operations with a new `ai_admin` privilege (defaults to admins, assignable under Sekretess → Behörigheter) instead of `isAdmin` only.\n\n## Test plan\n- [ ] As Amanda (admin): open Inställningar → API, create a named key, copy the secret, confirm the list shows prefix + name and not the full token.\n- [ ] Restrict a key to a GraphQL endpoint and confirm unlisted GraphQL operations are denied; empty endpoint list still allows all.\n- [ ] Create, edit, and remove an API hook; confirm webhook secret is never listed after create.\n- [ ] As Christine (host without `ai_admin`): confirm `/settings/api` is hidden/redirected and methods/publications return 401.\n- [ ] Grant Christine `ai_admin` under Sekretess → Behörigheter and confirm she can open the API tab and manage keys/hooks.\n- [ ] Confirm generating a token from a host profile no longer replaces existing org keys.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">A new API tab in your organization settings lets administrators create, name, and revoke API keys and manage webhooks in one place.</p>\n<p dir=\"auto\">Each API key can be limited to specific GraphQL endpoints, and secrets are shown once at creation for safer handling. Webhooks for collections such as contacts, bookings, invoices, and messages can be added, edited, and removed from the same screen.</p>\n<p dir=\"auto\">Access is controlled by a new API administrator permission, which can be assigned under Privacy → Permissions to let selected staff manage integrations without full admin rights.</p>","translations":{"en":{"title":"Manage API keys and webhooks directly from organization settings","body_html":"<p dir=\"auto\">A new API tab in your organization settings lets administrators create, name, and revoke API keys and manage webhooks in one place.</p>\n<p dir=\"auto\">Each API key can be limited to specific GraphQL endpoints, and secrets are shown once at creation for safer handling. Webhooks for collections such as contacts, bookings, invoices, and messages can be added, edited, and removed from the same screen.</p>\n<p dir=\"auto\">Access is controlled by a new API administrator permission, which can be assigned under Privacy → Permissions to let selected staff manage integrations without full admin rights.</p>"},"sv":{"title":"Hantera API-nycklar och webhooks direkt i organisationsinställningarna","body_html":"<p dir=\"auto\">En ny API-flik i organisationsinställningarna låter administratörer skapa, namnge och återkalla API-nycklar samt hantera webhooks på ett och samma…</p>\n<p dir=\"auto\">Varje API-nyckel kan begränsas till specifika GraphQL-endpoints, och den hemliga nyckeln visas endast en gång vid skapandet för säkrare hantering. Webhooks för exempelvis kontakter, bokningar, fakturor och meddelanden kan läggas till, redigeras och tas bort från samma vy.</p>\n<p dir=\"auto\">Åtkomsten styrs av en ny behörighet för API-administratör som kan tilldelas under Sekretess → Behörigheter, så att utvalda medarbetare kan sköta integrationer utan full administratörsroll.</p>"},"es":{"title":"Gestiona claves de API y webhooks desde los ajustes de la organización","body_html":"<p dir=\"auto\">Una nueva pestaña de API en los ajustes de la organización permite a los administradores crear, nombrar y revocar claves de API y gestionar…</p>\n<p dir=\"auto\">Cada clave puede limitarse a endpoints específicos de GraphQL, y el secreto se muestra solo una vez al crearla para un manejo más seguro. Los webhooks para contactos, reservas, facturas y mensajes pueden añadirse, editarse y eliminarse desde la misma pantalla.</p>\n<p dir=\"auto\">El acceso se controla mediante un nuevo permiso de administrador de API, asignable en Privacidad → Permisos, para que el personal elegido gestione integraciones sin necesidad de ser administrador completo.</p>"},"no":{"title":"Administrer API-nøkler og webhooks direkte i organisasjonsinnstillingene","body_html":"<p dir=\"auto\">En ny API-fane i organisasjonsinnstillingene lar administratorer opprette, navngi og tilbakekalle API-nøkler og håndtere webhooks på ett sted.</p>\n<p dir=\"auto\">Hver API-nøkkel kan begrenses til utvalgte GraphQL-endepunkter, og hemmeligheten vises bare én gang ved opprettelse for tryggere håndtering. Webhooks for blant annet kontakter, bookinger, fakturaer og meldinger kan legges til, endres og fjernes fra samme skjermbilde.</p>\n<p dir=\"auto\">Tilgangen styres av en ny API-administratorrettighet som kan tildeles under Personvern → Tillatelser, slik at utvalgte medarbeidere kan håndtere integrasjoner uten full administratortilgang.</p>"},"dk":{"title":"Administrer API-nøgler og webhooks direkte i organisationsindstillingerne","body_html":"<p dir=\"auto\">En ny API-fane i organisationsindstillingerne lader administratorer oprette, navngive og tilbagekalde API-nøgler samt håndtere webhooks ét sted.</p>\n<p dir=\"auto\">Hver API-nøgle kan begrænses til bestemte GraphQL-endpoints, og hemmeligheden vises kun én gang ved oprettelsen for mere sikker håndtering. Webhooks til kontakter, bookinger, fakturaer og beskeder kan tilføjes, redigeres og fjernes fra samme skærm.</p>\n<p dir=\"auto\">Adgangen styres af en ny API-administratorrettighed, der kan tildeles under Privatliv → Tilladelser, så udvalgte medarbejdere kan håndtere integrationer uden fuld administratoradgang.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10191","title":"Price lists in bookings for flexible pricing (e.g. discounts, promo codes and corporate agreements)","state":"closed","number":10191,"created_at":"2026-09-14T13:50:18Z","repo_name":"Kaddio Application","merged_at":"2026-10-01T06:35:56Z","body":"## Summary\n- Adds a **Prislistor** collection and settings tab under Tidsbokning so orgs can override booking-type prices by date, optional coupon, and criteria (host, customer, weekday, place, time of day).\n- Lowest matching list price wins; client booking uses public lists only, the host calendar uses all matching lists, and `bookingType.price` remains the fallback. E-frikort runs on the resulting amount.\n- Optional kampanjkod on confirm; customer-specific lists are shown on the invoice customer page.\n- Time-of-day criteria are hourly slots (`00-01` … `23-00`) matched on booking start in the org timezone; same-type slots are OR.\n\n## Test plan\n- [ ] Create a price list in Tidsbokning → Prislistor (name, dates, criteria, booking-type prices, public vs internal).\n- [ ] Host calendar: matching list overrides the booking type price; changing host/place/client/start recomputes; custom typed price is kept until those fields change.\n- [ ] Client booking: only public lists apply; overlapping lists pick the lowest price; coupon on confirm applies when the code matches.\n- [ ] Customer criterion uses invoice customer id; that customer's page lists only those lists.\n- [ ] Time-of-day: a `06-07` list applies at 06:30 and not at 07:00; several hour slots OR together.\n- [ ] Empty collection keeps existing `bookingType.price` behavior; e-frikort still applies after the list price.","body_html":"<p dir=\"auto\">Add special prices or promotions for selected clients, times, locations and practitioners — without having to create duplicate treatment types. Read more at <a href=\"https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning</a></p>","translations":{"en":{"title":"Price lists in bookings for flexible pricing (e.g. discounts, promo codes and corporate agreements)","body_html":"<p dir=\"auto\">Add special prices or promotions for selected clients, times, locations and practitioners — without having to create duplicate treatment types. Read more at <a href=\"https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning</a></p>"},"sv":{"title":"Prislistor i bokningen för flexibel prissättning (ex. rabatter, kampanjkoder och företagsavtal)","body_html":"<p dir=\"auto\">Lägg till särskilda priser eller kampanjer för utvalda kunder, tider, platser och behandlare, utan att skapa dubbla behandlingsformer. Läs mer på <a href=\"https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning</a></p>"},"es":{"title":"Listas de precios en las reservas para una tarificación flexible (p. ej. descuentos, códigos promocionales y acuerdos con empresas)","body_html":"<p dir=\"auto\">Añade precios especiales o promociones para determinados clientes, horarios, ubicaciones y profesionales, sin necesidad de crear tipos de tratamiento duplicados. Más información en <a href=\"https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning</a></p>"},"no":{"title":"Prislister i bookingen for fleksibel prissetting (f.eks. rabatter, kampanjekoder og bedriftsavtaler)","body_html":"<p dir=\"auto\">Legg til spesialpriser eller kampanjer for utvalgte kunder, tider, steder og behandlere – uten å måtte opprette doble behandlingsformer. Les mer på <a href=\"https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning</a></p>"},"dk":{"title":"Prislister i bookingen for fleksibel prissætning (f.eks. rabatter, kampagnekoder og virksomhedsaftaler)","body_html":"<p dir=\"auto\">Tilføj særlige priser eller kampagner for udvalgte kunder, tider, lokationer og behandlere – uden at skulle oprette dobbelte behandlingsformer. Læs mere på <a href=\"https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/855190-prislistor-for-tidsbokning</a></p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10255","title":"Send letters to the client's contact person","state":"closed","number":10255,"created_at":"2026-09-22T13:18:03Z","repo_name":"Kaddio Application","merged_at":"2026-09-25T07:05:42Z","body":"## Summary\n- Hosts can pick a client's contact person as letter recipient (grouped under Kontaktpersoner).\n- Email, chat, and signing links go to that person; the letter stays on the client's journal.\n- Recipient identity is stored as `recipientUserId` so the postal address stays just an address.\n\nFixes #9000\n\n## Test plan\n- [ ] Mark a relation as contact person on a client profile\n- [ ] Create a letter and confirm the contact person appears under Kontaktpersoner\n- [ ] Confirm send dialogs and the Skicka menu show the contact person's name\n- [ ] Send via Kaddio Kommunikation and verify the chat is with the contact person\n- [ ] Send via email and verify it goes to the contact person\n- [ ] Sending without a contact person still targets the journal client\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">You can now select the client's registered contact person as the recipient of letters in the journal. The letter can be sent by post, through the contact person's chat in Kaddio, or via email. The letter remains stored in the client's journal. No setup is needed beyond marking a relationship as a contact person on the client's profile.</p>","translations":{"en":{"title":"Send letters to the client's contact person","body_html":"<p dir=\"auto\">You can now select the client's registered contact person as the recipient of letters in the journal. The letter can be sent by post, through the contact person's chat in Kaddio, or via email. The letter remains stored in the client's journal. No setup is needed beyond marking a relationship as a contact person on the client's profile.</p>"},"sv":{"title":"Skicka brev till klientens kontaktperson","body_html":"<p dir=\"auto\">Välj klientens registrerade kontaktperson som mottagare av brev i journalen. Brevet kan skickas via post, via kontaktpersonens chatt i Kaddio eller via epost till personen. Brevet ligger kvar i klientens journal. Ingen inställning behövs utöver att markera en relation som kontaktperson på klientens profil.</p>"},"es":{"title":"Enviar cartas al contacto del cliente","body_html":"<p dir=\"auto\">Ahora puedes seleccionar al contacto registrado del cliente como destinatario de las cartas en el historial. La carta puede enviarse por correo postal, a través del chat del contacto en Kaddio o por correo electrónico. La carta queda guardada en el historial del cliente. No se requiere ninguna configuración adicional, basta con marcar una relación como contacto en el perfil del cliente.</p>"},"no":{"title":"Send brev til klientens kontaktperson","body_html":"<p dir=\"auto\">Velg klientens registrerte kontaktperson som mottaker av brev i journalen. Brevet kan sendes med post, via kontaktpersonens chat i Kaddio eller på e-post. Brevet blir liggende i klientens journal. Ingen innstilling trengs utover å markere en relasjon som kontaktperson på klientens profil.</p>"},"dk":{"title":"Send breve til klientens kontaktperson","body_html":"<p dir=\"auto\">Vælg klientens registrerede kontaktperson som modtager af breve i journalen. Brevet kan sendes med post, via kontaktpersonens chat i Kaddio eller på e-mail. Brevet forbliver gemt i klientens journal. Der kræves ingen opsætning ud over at markere en relation som kontaktperson på klientens profil.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10241","title":"Restrict the calendar so practitioners only see their own schedule","state":"closed","number":10241,"created_at":"2026-09-22T08:34:16Z","repo_name":"Kaddio Application","merged_at":"2026-09-23T12:28:29Z","body":"## Summary\n- Adds a third Sekretess → Kalender option (`OWN_SCHEDULE`) so hosts only see their own activities and bookings.\n- Applies the current host as an attendee filter on top of date, location, and any other attendee filter. Admins still see everything.\n- Covers the new query behavior in booking app-tests; `DEFAULT` still lets hosts see other hosts' bookings.\n\n## Test plan\n- [ ] As admin, open Sekretess and select `$HostP ser endast sitt eget schema`, then save.\n- [ ] Log in as a non-admin host: calendar shows only own activities/bookings; other hosts' bookings are hidden.\n- [ ] With that setting on, filter by a client: only events shared with that client appear.\n- [ ] As admin, confirm the calendar still shows all events.\n- [ ] Switch back to `DEFAULT` and confirm other hosts' bookings are visible again to a non-admin host.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Administrators can enable this option under <em>Settings &gt; Privacy</em>. Once activated, practitioners will only see their own events in the calendar. Administrators continue to see everyone's events. Filtering by client in the calendar works as usual and shows the events involving both the practitioner and the client.</p>","translations":{"en":{"title":"Restrict the calendar so practitioners only see their own schedule","body_html":"<p dir=\"auto\">Administrators can enable this option under <em>Settings &gt; Privacy</em>. Once activated, practitioners will only see their own events in the calendar. Administrators continue to see everyone's events. Filtering by client in the calendar works as usual and shows the events involving both the practitioner and the client.</p>"},"sv":{"title":"Begränsa kalendern så att behandlare bara ser sitt eget schema","body_html":"<p dir=\"auto\">Administratörer aktiverar valet under <em>Inställningar &gt; Sekretess</em>. När aktiverad ser behandlare bara sina egna händelser i kalendern. Administratörer ser fortsatt allas händelser.  Filtrering på klient i kalendern fungerar som vanligt och visar de händelser som rör både behandlaren och klienten.</p>"},"es":{"title":"Limita el calendario para que los profesionales solo vean su propia agenda","body_html":"<p dir=\"auto\">Los administradores pueden activar esta opción en <em>Configuración &gt; Privacidad</em>. Una vez activada, los profesionales solo verán sus propios eventos en el calendario. Los administradores seguirán viendo los eventos de todos. El filtrado por cliente en el calendario funciona con normalidad y muestra los eventos que involucran tanto al profesional como al cliente.</p>"},"no":{"title":"Begrens kalenderen slik at behandlere kun ser sin egen timeplan","body_html":"<p dir=\"auto\">Administratorer aktiverer valget under <em>Innstillinger &gt; Personvern</em>. Når det er aktivert, ser behandlere kun sine egne hendelser i kalenderen. Administratorer ser fortsatt alles hendelser. Filtrering på klient i kalenderen fungerer som vanlig og viser hendelsene som gjelder både behandleren og klienten.</p>"},"dk":{"title":"Begræns kalenderen, så behandlere kun ser deres eget skema","body_html":"<p dir=\"auto\">Administratorer aktiverer valget under <em>Indstillinger &gt; Privatliv</em>. Når det er aktiveret, ser behandlere kun deres egne begivenheder i kalenderen. Administratorer ser fortsat alles begivenheder. Filtrering på klient i kalenderen fungerer som normalt og viser de begivenheder, der vedrører både behandleren og klienten.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10087","title":"Fresh look for the login page and the option to add your own logo (from September 28)","state":"closed","number":10087,"created_at":"2026-08-31T12:55:23Z","repo_name":"Kaddio Application","merged_at":"2026-09-23T08:07:51Z","body":"## Summary\n- Public login, demo login, and password flows use a 50/50 split: booking/case promo on the left, existing form on the right.\n- Transparent public header on auth routes (language + login only); org name and left nav stay on booking and case pages.\n- Login form is a `<login-form>` element instead of the old attribute directive; demo `Receptförnyelse` is public so it shows on the logged-out promo.\n\n## Test plan\n- [ ] `/login` shows photo + promo card on the left and the usual login form on the right (stacked on mobile).\n- [ ] Next free time, **Boka**, and public case cards (including Receptförnyelse in demo) work and link to booking/cases.\n- [ ] `/login-demo` uses the same split; host and client cards stack in one column.\n- [ ] Forgot/reset/enroll/logged-out also use the split; `/booking` and public case pages still show the full public navbar.\n- [ ] Header is transparent on login with body-colored semibold 14px labels; Logga in is primary-flat.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">The public login page now welcomes visitors with a split view: the login form on one side, and an inviting image along with any shortcuts to online booking and contact forms on the other. Clinics with Branding can also choose to display their own logo on the page.</p>","translations":{"en":{"title":"Fresh look for the login page and the option to add your own logo (from September 28)","body_html":"<p dir=\"auto\">The public login page now welcomes visitors with a split view: the login form on one side, and an inviting image along with any shortcuts to online booking and contact forms on the other. Clinics with Branding can also choose to display their own logo on the page.</p>"},"sv":{"title":"Ny design på inloggningssidan och möjlighet till egen logotyp (från 28 september)","body_html":"<p dir=\"auto\">Den publika inloggningssidan möter besökaren i en delad vy: inloggningsformuläret på ena sidan, en trevlig bild och eventuella genvägar till tidsbokning och kontaktformulär på andra sidan. Kliniker med Profilering kan även välja att visa sin egen logotyp på sidan.</p>"},"es":{"title":"Nuevo diseño de la página de inicio de sesión y opción de logotipo personalizado (a partir del 28 de septiembre)","body_html":"<p dir=\"auto\">La página pública de inicio de sesión recibe a los visitantes con una vista dividida: el formulario de acceso a un lado y, al otro, una imagen atractiva junto con posibles accesos directos a la reserva de citas y al formulario de contacto. Las clínicas con Personalización de marca también pueden mostrar su propio logotipo en la página.</p>"},"no":{"title":"Ny design på innloggingssiden og mulighet for egen logo (fra 28. september)","body_html":"<p dir=\"auto\">Den offentlige innloggingssiden møter besøkende med en delt visning: innloggingsskjemaet på den ene siden, og et fint bilde sammen med eventuelle snarveier til timebestilling og kontaktskjema på den andre. Klinikker med Profilering kan også velge å vise sin egen logo på siden.</p>"},"dk":{"title":"Nyt design på login-siden og mulighed for eget logo (fra 28. september)","body_html":"<p dir=\"auto\">Den offentlige login-side møder besøgende med en delt visning: login-formularen på den ene side, og et indbydende billede samt eventuelle genveje til tidsbestilling og kontaktformular på den anden. Klinikker med Profilering kan desuden vælge at vise deres eget logo på siden.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10256","title":"Add city to SMS booking confirmations","state":"closed","number":10256,"created_at":"2026-09-22T13:23:13Z","repo_name":"Kaddio Application","merged_at":"2026-09-23T06:01:27Z","body":"## Summary\n- Adds a `$city` SMS variable that prints the booking place town (empty for video visits), without changing `$address`.\n- Lists `$city` in the SMS variable table next to `$address`.\n- Fixes #9809\n\n## Test plan\n- [ ] Open Inställningar → Tidsbokning → Bekräftelser and confirm `$city` appears for orgs with places\n- [ ] Put `$address, $city` in the confirmation SMS template and send a confirmation for a physical place — street and town both appear\n- [ ] Send a confirmation for a video booking — `$city` is empty\n- [ ] Existing templates that only use `$address` still show street only\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">A new variable, $city, lets you display the city alongside the street address in confirmation SMS messages. Simply add $city to your templates under <em>Settings for Appointment Booking &gt; Confirmations.</em> For video appointments, the variable will be left empty, and existing templates using $address will continue to work exactly as before.</p>","translations":{"en":{"title":"Add city to SMS booking confirmations","body_html":"<p dir=\"auto\">A new variable, $city, lets you display the city alongside the street address in confirmation SMS messages. Simply add $city to your templates under <em>Settings for Appointment Booking &gt; Confirmations.</em> For video appointments, the variable will be left empty, and existing templates using $address will continue to work exactly as before.</p>"},"sv":{"title":"Lägg till ort i bokningsbekräftelser via SMS","body_html":"<p dir=\"auto\">En ny variabel, $city, gör att du kan visa orten i bekräftelse-SMS vid sidan av gatuadressen. Lägg till $city i dina mallar under <em>Inställningar för Tidsbokning &gt; Bekräftelser.</em> Vid videobesök lämnas variabeln tom, och befintliga mallar med $address fungerar precis som tidigare.</p>"},"es":{"title":"Añade la ciudad a las confirmaciones de reserva por SMS","body_html":"<p dir=\"auto\">Una nueva variable, $city, te permite mostrar la ciudad junto a la dirección en los SMS de confirmación. Solo tienes que añadir $city a tus plantillas en <em>Configuración de Reserva de Citas &gt; Confirmaciones.</em> En las citas por videollamada, la variable se dejará vacía, y las plantillas existentes con $address seguirán funcionando exactamente igual que antes.</p>"},"no":{"title":"Legg til sted i bookingbekreftelser via SMS","body_html":"<p dir=\"auto\">En ny variabel, $city, lar deg vise stedet ved siden av gateadressen i bekreftelses-SMS. Legg til $city i malene dine under <em>Innstillinger for Timebooking &gt; Bekreftelser.</em> Ved videokonsultasjoner blir variabelen stående tom, og eksisterende maler med $address fungerer akkurat som før.</p>"},"dk":{"title":"Tilføj by i bookingbekræftelser via SMS","body_html":"<p dir=\"auto\">En ny variabel, $city, gør det muligt at vise byen ved siden af gadeadressen i bekræftelses-SMS. Tilføj $city i dine skabeloner under <em>Indstillinger for Tidsbestilling &gt; Bekræftelser.</em> Ved videokonsultationer efterlades variablen tom, og eksisterende skabeloner med $address fungerer præcis som før.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10243","title":"Send messages to all clients on a specific waiting list (from 28 Sept)","state":"closed","number":10243,"created_at":"2026-09-22T08:40:10Z","repo_name":"Kaddio Application","merged_at":"2026-09-22T12:04:07Z","body":"## Summary\n- Add waiting lists as a CRM campaign criterion so admins can send to clients currently on selected lists.\n- Matching ignores empty selection (same as hosts/booking types), other-org lists, and clients who only appear in waiting-list history.\n- Campaign preview, manual send, and recurring send all use the same filter.\n\n## Test plan\n- [ ] Open a CRM campaign and confirm **Väntelistor** appears under urvalskriterier.\n- [ ] Leave it empty, save, and preview: recipients are not limited to waiting lists.\n- [ ] Select one waiting list, save, and preview: only current members of that list appear.\n- [ ] Select two lists: members of either list appear; people only on a third list do not.\n- [ ] Clients removed from a list (history only) do not appear.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">In the Smart Messaging feature, you can now use a specific waiting list as a selection criterion for choosing which clients to include. Only clients currently on the selected list will be included — those who have been removed are not included.</p>","translations":{"en":{"title":"Send messages to all clients on a specific waiting list (from 28 Sept)","body_html":"<p dir=\"auto\">In the Smart Messaging feature, you can now use a specific waiting list as a selection criterion for choosing which clients to include. Only clients currently on the selected list will be included — those who have been removed are not included.</p>"},"sv":{"title":"Gör utskick till alla klienter på en viss väntelista (från 28 sept)","body_html":"<p dir=\"auto\">I funktionen Smarta utskick går det att använda en viss väntlista som urvalskriterie för vilka klienter som ska väljas. Endast klienter som just nu står på en vald lista tas med — de som tagits bort ingår inte.</p>"},"es":{"title":"Envía mensajes a todos los clientes de una lista de espera específica (desde el 28 de septiembre)","body_html":"<p dir=\"auto\">En la función de Envíos Inteligentes ahora puedes usar una lista de espera concreta como criterio de selección para elegir qué clientes incluir. Solo se incluirán los clientes que estén actualmente en la lista seleccionada — aquellos que hayan sido eliminados no se incluirán.</p>"},"no":{"title":"Send utsendelser til alle klienter på en bestemt venteliste (fra 28. sept)","body_html":"<p dir=\"auto\">I funksjonen Smarte utsendelser kan du nå bruke en bestemt venteliste som utvalgskriterium for hvilke klienter som skal velges. Kun klienter som akkurat nå står på den valgte listen tas med — de som er fjernet inkluderes ikke.</p>"},"dk":{"title":"Send udsendelser til alle klienter på en bestemt venteliste (fra 28. sept)","body_html":"<p dir=\"auto\">I funktionen Smarte udsendelser kan du nu bruge en bestemt venteliste som udvælgelseskriterium for, hvilke klienter der skal vælges. Kun klienter, der i øjeblikket står på den valgte liste, tages med — de, der er fjernet, inkluderes ikke.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10242","title":"Queue date set automatically on waiting lists","state":"closed","number":10242,"created_at":"2026-09-22T08:39:02Z","repo_name":"Kaddio Application","merged_at":"2026-09-22T11:16:32Z","body":"## Summary\n- When a client is added to a waiting list, Ködatum (`promisedDate`) now defaults to the current time, matching Tillagd.\n- Covers both manual add (`wl.addClientToList`) and last-minute signup.\n- Existing add-client app-test asserts Ködatum is set and matches the added timestamp.\n\n## Test plan\n- [ ] Open a waiting list, add a client, and confirm Ködatum is today\n- [ ] Clear or change Ködatum and save — the override should stick\n- [ ] Add the active client from the waiting-lists overview and confirm Ködatum is set\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">When you add a client to a waiting list, the Queue date is now filled in automatically with today's date.</p>","translations":{"en":{"title":"Queue date set automatically on waiting lists","body_html":"<p dir=\"auto\">When you add a client to a waiting list, the Queue date is now filled in automatically with today's date.</p>"},"sv":{"title":"Ködatum sätts automatiskt på väntelistor","body_html":"<p dir=\"auto\">När du lägger till en klient på en väntelista fylls Ködatum automatiskt i med dagens datum.</p>"},"es":{"title":"La fecha de espera se asigna automáticamente en las listas de espera","body_html":"<p dir=\"auto\">Al añadir un cliente a una lista de espera, la fecha de espera se completa automáticamente con la fecha de hoy.</p>"},"no":{"title":"Ködato settes automatisk på ventelister","body_html":"<p dir=\"auto\">Når du legger en klient til på en venteliste, fylles Ködato automatisk ut med dagens dato.</p>"},"dk":{"title":"Kødato sættes automatisk på ventelister","body_html":"<p dir=\"auto\">Når du tilføjer en klient til en venteliste, udfyldes Kødato automatisk med dagens dato.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10240","title":"Space to click next to events in the calendar to add parallel events","state":"closed","number":10240,"created_at":"2026-09-22T08:25:57Z","repo_name":"Kaddio Application","merged_at":"2026-09-22T11:03:29Z","body":"## Summary\n- Staff time-grid calendars now keep a 12% right gutter so you can click next to an existing event and start a new booking in an already-filled slot (Clinic Buddy-style).\n- The client calendar stays tight (`1px`) so public booking views do not show unused empty space.\n\nFixes #9511.\n\n## Test plan\n- [ ] Open a staff calendar day/week view with overlapping or full-width events\n- [ ] Confirm there is clickable empty space on the right of events\n- [ ] Click that gutter and confirm a new booking starts for that time\n- [ ] Confirm existing events are still clickable\n- [ ] Open the client calendar and confirm events still fill the column as before\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Events in the calendar no longer fill the full width of the column, making it easier to quickly add new events alongside existing ones.</p>","translations":{"en":{"title":"Space to click next to events in the calendar to add parallel events","body_html":"<p dir=\"auto\">Events in the calendar no longer fill the full width of the column, making it easier to quickly add new events alongside existing ones.</p>"},"sv":{"title":"Utrymme att klicka bredvid händelser i kalendern för att lägga till parallella händelser","body_html":"<p dir=\"auto\">I kalendern fyller inte händelser ut kolumnens bredd helt, vilket gör det enklare att snabbt lägga till nya händelser bredvid befintliga händelser.</p>"},"es":{"title":"Espacio para hacer clic junto a los eventos del calendario y añadir eventos paralelos","body_html":"<p dir=\"auto\">En el calendario, los eventos ya no ocupan todo el ancho de la columna, lo que facilita añadir rápidamente nuevos eventos junto a los existentes.</p>"},"no":{"title":"Plass til å klikke ved siden av hendelser i kalenderen for å legge til parallelle hendelser","body_html":"<p dir=\"auto\">I kalenderen fyller ikke hendelsene hele bredden av kolonnen, noe som gjør det enklere å raskt legge til nye hendelser ved siden av eksisterende.</p>"},"dk":{"title":"Plads til at klikke ved siden af begivenheder i kalenderen for at tilføje parallelle begivenheder","body_html":"<p dir=\"auto\">I kalenderen fylder begivenhederne ikke hele kolonnens bredde, hvilket gør det nemmere hurtigt at tilføje nye begivenheder ved siden af eksisterende.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10016","title":"Weekly view in client booking","state":"closed","number":10016,"created_at":"2026-08-24T06:19:22Z","repo_name":"Kaddio Application","merged_at":"2026-09-17T09:26:00Z","body":"## Summary\n- Add an org setting (`defaultClientCalView`: standard / week / month) so clientCal in the public time picker can show a week or month grid instead of the day list.\n- Keep the same time pills, one calendar per place when places apply, and the booking type name as a day header when no type is selected.\n- Honor hide weekends, put dates in week-view column headers, and make pills full column width.\n\n## Test plan\n- [ ] In Bokning settings, set **Kalendervy i klientbokningen** to Standard, Vecka, and Månad and confirm the public pick-time UI matches.\n- [ ] With hide weekends on, week and month grids omit Saturday and Sunday.\n- [ ] With multiple places, each place has its own calendar.\n- [ ] With no booking type selected, the type name appears in each day; with a type selected it does not.\n- [ ] Prev/next moves by week or month; empty days still offer the jump-to-next-available action.\n- [ ] Default (list) view still behaves as before.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Under Booking Settings, you can now choose between the standard daily list view and the new weekly view via Calendar view in client booking.</p>","translations":{"en":{"title":"Weekly view in client booking","body_html":"<p dir=\"auto\">Under Booking Settings, you can now choose between the standard daily list view and the new weekly view via Calendar view in client booking.</p>"},"sv":{"title":"Veckovy i klientbokningen","body_html":"<p dir=\"auto\">Under Bokningsinställningar kan du välja mellan standardvyn med daglista och den nya veckovyn via Kalendervy i klientbokningen.</p>"},"es":{"title":"Vista semanal en la reserva de clientes","body_html":"<p dir=\"auto\">En Configuración de reservas, puedes elegir entre la vista estándar con lista diaria y la nueva vista semanal a través de Vista de calendario en la reserva de clientes.</p>"},"no":{"title":"Ukesvisning i klientbookingen","body_html":"<p dir=\"auto\">Under Bookinginnstillinger kan du velge mellom standardvisningen med dagsliste og den nye ukesvisningen via Kalendervisning i klientbookingen.</p>"},"dk":{"title":"Ugevisning i klientbookingen","body_html":"<p dir=\"auto\">Under Bookingindstillinger kan du vælge mellem standardvisningen med dagsliste og den nye ugevisning via Kalendervisning i klientbookingen.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10167","title":"Calendar now highlights client time within the full booking length","state":"closed","number":10167,"created_at":"2026-09-11T08:40:39Z","repo_name":"Kaddio Application","merged_at":"2026-09-17T08:40:31Z","body":"## Summary\n- Darken the calendar booking block from `clientLength` (tid med klient) to the event end so leftover slot time is visible.\n- Applies to standalone bookings and bookings inside arbetstid in week/day/timeline views (not month/list).\n- Overlay only shows when the booking type has a shorter `clientLength` than the actual slot.\n\n## Test plan\n- [ ] Open the host calendar week or day view.\n- [ ] Find or create a booking whose type has `clientLength` shorter than `length` (e.g. 45 vs 60 min).\n- [ ] Confirm the bottom portion of the event is slightly darker gray.\n- [ ] Confirm bookings without `clientLength` look unchanged.\n- [ ] Spot-check a booking inside arbetstid (sub-event) and the timeline view.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">When a booking type has a shorter client time than the total booking length, the lower part of the event is shaded in a slightly darker tone in the week, day, and timeline views. This makes it easy to see where the time with the client ends and the buffer for documentation or preparation begins.</p>","translations":{"en":{"title":"Calendar now highlights client time within the full booking length","body_html":"<p dir=\"auto\">When a booking type has a shorter client time than the total booking length, the lower part of the event is shaded in a slightly darker tone in the week, day, and timeline views. This makes it easy to see where the time with the client ends and the buffer for documentation or preparation begins.</p>"},"sv":{"title":"I kalendern markeras tid med klient ut, i förhållande till hela bokningens längd","body_html":"<p dir=\"auto\">När en bokningstyp har en kortare tid med klient än hela bokningens längd markeras den nedre delen av händelsen i en något mörkare ton i vecko-, dag- och tidslinjevyerna. Det blir tydligt var tiden med klienten slutar och där bufferten för dokumentation eller förberedelse tar vid.</p>"},"es":{"title":"El calendario destaca el tiempo con el cliente dentro de la duración total de la reserva","body_html":"<p dir=\"auto\">Cuando un tipo de reserva tiene un tiempo con el cliente más corto que la duración total de la reserva, la parte inferior del evento se muestra en un tono ligeramente más oscuro en las vistas de semana, día y línea de tiempo. Así resulta fácil ver dónde termina el tiempo con el cliente y comienza el margen para documentación o preparación.</p>"},"no":{"title":"Kalenderen viser tid med klient i forhold til hele bookingens lengde","body_html":"<p dir=\"auto\">Når en bookingtype har kortere tid med klient enn hele bookingens lengde, markeres den nedre delen av hendelsen i en litt mørkere tone i uke-, dag- og tidslinjevisningen. Det blir tydelig hvor tiden med klienten slutter og bufferen for dokumentasjon eller forberedelse tar over.</p>"},"dk":{"title":"Kalenderen viser tid med klient i forhold til hele bookingens længde","body_html":"<p dir=\"auto\">Når en bookingtype har kortere tid med klient end hele bookingens længde, markeres den nederste del af begivenheden i en lidt mørkere tone i uge-, dag- og tidslinjevisningerne. Det bliver tydeligt, hvor tiden med klienten slutter, og bufferen til dokumentation eller forberedelse begynder.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10170","title":"Voice transcription now shows clearer error messages","state":"closed","number":10170,"created_at":"2026-09-11T10:01:10Z","repo_name":"Kaddio Application","merged_at":"2026-09-11T12:07:28Z","body":null,"body_html":"<p dir=\"auto\">When voice recording fails to start, Kaddio now displays the actual reason instead of a generic message.</p>\n<p dir=\"auto\">Inside the Journal, transcription errors are surfaced directly from your browser or microphone, so it's easier to understand what went wrong and how to fix it. Recording also checks upfront whether your browser supports a compatible audio format, preventing silent failures. No action is needed.</p>","translations":{"en":{"title":"Voice transcription now shows clearer error messages","body_html":"<p dir=\"auto\">When voice recording fails to start, Kaddio now displays the actual reason instead of a generic message.</p>\n<p dir=\"auto\">Inside the Journal, transcription errors are surfaced directly from your browser or microphone, so it's easier to understand what went wrong and how to fix it. Recording also checks upfront whether your browser supports a compatible audio format, preventing silent failures. No action is needed.</p>"},"sv":{"title":"Röstinspelning visar nu tydligare felmeddelanden","body_html":"<p dir=\"auto\">När en röstinspelning inte kan starta visar Kaddio nu den faktiska orsaken istället för ett generellt meddelande.</p>\n<p dir=\"auto\">I journalen visas felmeddelanden direkt från webbläsaren eller mikrofonen, vilket gör det enklare att förstå vad som gick fel och hur det kan åtgärdas. Inspelningen kontrollerar också i förväg att webbläsaren har stöd för ett kompatibelt ljudformat, så att fel upptäcks tidigare. Ingen åtgärd krävs.</p>"},"es":{"title":"La transcripción de voz ahora muestra errores más claros","body_html":"<p dir=\"auto\">Cuando una grabación de voz no puede iniciarse, Kaddio muestra el motivo real en lugar de un mensaje genérico.</p>\n<p dir=\"auto\">En el Diario, los errores de transcripción se muestran directamente desde el navegador o el micrófono, lo que facilita entender qué ocurrió y cómo resolverlo. Además, la grabación verifica de antemano si el navegador admite un formato de audio compatible. No se requiere ninguna acción.</p>"},"no":{"title":"Taleopptak viser nå tydeligere feilmeldinger","body_html":"<p dir=\"auto\">Når et taleopptak ikke kan starte, viser Kaddio nå den faktiske årsaken i stedet for en generell melding.</p>\n<p dir=\"auto\">I journalen vises feilmeldinger direkte fra nettleseren eller mikrofonen, slik at det blir enklere å forstå hva som gikk galt og hvordan det kan løses. Opptaket sjekker også på forhånd om nettleseren støtter et kompatibelt lydformat. Ingen handling kreves.</p>"},"dk":{"title":"Taleoptagelse viser nu tydeligere fejlmeddelelser","body_html":"<p dir=\"auto\">Når en taleoptagelse ikke kan starte, viser Kaddio nu den faktiske årsag i stedet for en generel besked.</p>\n<p dir=\"auto\">I journalen vises fejlmeddelelser direkte fra browseren eller mikrofonen, så det bliver lettere at forstå, hvad der gik galt, og hvordan det kan løses. Optagelsen tjekker også på forhånd, om browseren understøtter et kompatibelt lydformat. Ingen handling er nødvendig.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10171","title":"Voice recording in Journal is now more reliable","state":"closed","number":10171,"created_at":"2026-09-11T10:30:56Z","repo_name":"Kaddio Application","merged_at":"2026-09-11T12:06:49Z","body":"Logisk bugfix. Låg risk.","body_html":"<p dir=\"auto\">Voice recording in Journal now starts more reliably, avoiding a rare timing issue when beginning a session.</p>\n<p dir=\"auto\">This small fix ensures the recorder responds correctly the moment you press start, so you can focus on your client instead of the tool. No action needed.</p>","translations":{"en":{"title":"Voice recording in Journal is now more reliable","body_html":"<p dir=\"auto\">Voice recording in Journal now starts more reliably, avoiding a rare timing issue when beginning a session.</p>\n<p dir=\"auto\">This small fix ensures the recorder responds correctly the moment you press start, so you can focus on your client instead of the tool. No action needed.</p>"},"sv":{"title":"Röstinspelning i journalen fungerar nu mer tillförlitligt","body_html":"<p dir=\"auto\">Röstinspelningen i journalen startar nu mer tillförlitligt och undviker ett sällsynt tidsproblem när en session påbörjas.</p>\n<p dir=\"auto\">Den lilla justeringen gör att inspelaren svarar korrekt i samma stund du trycker på start, så du kan fokusera på klienten i stället för verktyget. Ingen åtgärd krävs.</p>"},"es":{"title":"La grabación de voz en el historial ahora es más fiable","body_html":"<p dir=\"auto\">La grabación de voz en el historial clínico se inicia con mayor fiabilidad, evitando un problema puntual de sincronización al comenzar una sesión.</p>\n<p dir=\"auto\">Este pequeño ajuste garantiza que la grabadora responda correctamente al pulsar iniciar, para que puedas centrarte en el paciente y no en la herramienta. No requiere ninguna acción.</p>"},"no":{"title":"Taleopptak i journalen fungerer nå mer pålitelig","body_html":"<p dir=\"auto\">Taleopptak i journalen starter nå mer pålitelig og unngår et sjeldent tidsproblem når en økt påbegynnes.</p>\n<p dir=\"auto\">Denne lille justeringen sørger for at opptakeren reagerer riktig i det øyeblikket du trykker start, slik at du kan fokusere på klienten fremfor verktøyet. Ingen handling nødvendig.</p>"},"dk":{"title":"Stemmeoptagelse i journalen er nu mere pålidelig","body_html":"<p dir=\"auto\">Stemmeoptagelse i journalen starter nu mere pålideligt og undgår et sjældent timing-problem, når en session påbegyndes.</p>\n<p dir=\"auto\">Denne lille justering sikrer, at optageren reagerer korrekt, i det øjeblik du trykker start, så du kan fokusere på klienten frem for værktøjet. Ingen handling påkrævet.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10135","title":"More Försäkringskassan forms available in the journal","state":"closed","number":10135,"created_at":"2026-09-08T12:45:28Z","repo_name":"Kaddio Application","merged_at":"2026-09-11T06:57:31Z","body":"## Summary\n- Adds the official Försäkringskassan forms requested in #10093: 7472, 7426, 7801, 7802, and **7427** (current replacement for 7447).\n- Each form has a Svelte editor, XFA/AcroForm mapping, and a fillable PDF template so orgs can activate them under Journal → Officiella blanketter.\n\n## Test plan\n- [ ] Activate the new forms in Journal settings → Officiella blanketter\n- [ ] Create each form from a client journal and confirm prefilled name/personnummer/host\n- [ ] Fill a few fields, lock, and download PDF; open in an external PDF reader\n- [ ] Confirm 7804 sjukintyg still exports as before\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">In addition to the existing medical certificate (7804), Kaddio now supports form 7472 (temporary parental benefit), 7426 (seriously ill child), 7427 (child aged 12–15), 7801 (activity compensation for reduced work capacity) and 7802 (activity compensation for extended schooling). The forms are pre-filled with the client's name, personal identity number and care provider details, and can be locked and downloaded as a ready-made PDF.</p>\n<p dir=\"auto\">Activate the forms you wish to use under Journal Settings → Official forms.</p>","translations":{"en":{"title":"More Försäkringskassan forms available in the journal","body_html":"<p dir=\"auto\">In addition to the existing medical certificate (7804), Kaddio now supports form 7472 (temporary parental benefit), 7426 (seriously ill child), 7427 (child aged 12–15), 7801 (activity compensation for reduced work capacity) and 7802 (activity compensation for extended schooling). The forms are pre-filled with the client's name, personal identity number and care provider details, and can be locked and downloaded as a ready-made PDF.</p>\n<p dir=\"auto\">Activate the forms you wish to use under Journal Settings → Official forms.</p>"},"sv":{"title":"Fler blanketter från Försäkringskassan finns i journalen","body_html":"<p dir=\"auto\">Utöver det befintliga sjukintyget (7804) stödjer Kaddio nu blankett 7472 (tillfällig föräldrapenning), 7426 (allvarligt sjukt barn), 7427 (barn 12–15 år), 7801 (aktivitetsersättning vid nedsatt arbetsförmåga) och 7802 (aktivitetsersättning vid förlängd skolgång). Blanketterna förifylls med klientens namn, personnummer och vårdgivaruppgifter, och kan låsas och laddas ner som en färdig PDF.</p>\n<p dir=\"auto\">Aktivera de blanketter ni vill använda under Inställningar för Journal → Officiella blanketter.</p>"},"es":{"title":"Más formularios de Försäkringskassan disponibles en el historial","body_html":"<p dir=\"auto\">Además del certificado médico existente (7804), Kaddio ahora admite los formularios 7472 (subsidio parental temporal), 7426 (niño gravemente enfermo), 7427 (niños de 12 a 15 años), 7801 (compensación por actividad en caso de capacidad laboral reducida) y 7802 (compensación por actividad durante escolarización prolongada). Los formularios se rellenan automáticamente con el nombre del cliente, el número de identificación personal y los datos del proveedor de atención, y pueden bloquearse y descargarse como un PDF listo para usar.</p>\n<p dir=\"auto\">Active los formularios que desee utilizar en Configuración del historial → Formularios oficiales.</p>"},"no":{"title":"Flere blanketter fra Försäkringskassan finnes i journalen","body_html":"<p dir=\"auto\">I tillegg til den eksisterende sykmeldingen (7804) støtter Kaddio nå blankett 7472 (midlertidig foreldrepenger), 7426 (alvorlig sykt barn), 7427 (barn 12–15 år), 7801 (aktivitetsstønad ved nedsatt arbeidsevne) og 7802 (aktivitetsstønad ved forlenget skolegang). Blankettene fylles ut på forhånd med klientens navn, personnummer og opplysninger om helsepersonell, og kan låses og lastes ned som en ferdig PDF.</p>\n<p dir=\"auto\">Aktiver de blankettene dere ønsker å bruke under Innstillinger for Journal → Offisielle blanketter.</p>"},"dk":{"title":"Flere blanketter fra Försäkringskassan findes i journalen","body_html":"<p dir=\"auto\">Ud over den eksisterende sygemelding (7804) understøtter Kaddio nu blanket 7472 (midlertidig forældreydelse), 7426 (alvorligt sygt barn), 7427 (barn 12–15 år), 7801 (aktivitetsydelse ved nedsat arbejdsevne) og 7802 (aktivitetsydelse ved forlænget skolegang). Blanketterne udfyldes på forhånd med klientens navn, personnummer og oplysninger om sundhedsudbyder, og kan låses og downloades som en færdig PDF.</p>\n<p dir=\"auto\">Aktivér de blanketter, I ønsker at bruge, under Indstillinger for Journal → Officielle blanketter.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10115","title":"Busy group activities now block members' available times","state":"closed","number":10115,"created_at":"2026-09-03T12:49:11Z","repo_name":"Kaddio Application","merged_at":"2026-09-10T13:55:04Z","body":"## Summary\n- Busy calendar activities with a **group** as attendee now occupy those members’ free times (same as adding them as individuals).\n- `allLinkedHostIdsOnEvent` expands calendar-group attendees to member hosts; free-time matching also treats groups the host belongs to as blocking attendee ids.\n- Fixes https://github.com/kaddio/kaddio/issues/10107\n\n## Test plan\n- [ ] Create a busy activity with a group (e.g. Kontoret) as participant and confirm members’ lediga tider are blocked\n- [ ] Confirm a non-busy group activity does not block\n- [ ] Confirm adding a host as an individual attendee still blocks\n- [ ] `MOCHA_GREP=\"booking algebra org group\" npm run testonce`\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">When you add a group to a busy calendar activity, all members' available times are automatically blocked. Activities that aren't marked as busy won't affect availability. No action required.</p>","translations":{"en":{"title":"Busy group activities now block members' available times","body_html":"<p dir=\"auto\">When you add a group to a busy calendar activity, all members' available times are automatically blocked. Activities that aren't marked as busy won't affect availability. No action required.</p>"},"sv":{"title":"Upptagna gruppaktiviteter blockerar nu medlemmarnas lediga tider","body_html":"<p dir=\"auto\">När du lägger till en grupp i en upptagen kalenderaktivitet blockeras automatiskt alla medlemmars lediga tider. Aktiviteter som inte är markerade som upptagna påverkar inte tillgängligheten. Ingen åtgärd krävs.</p>"},"es":{"title":"Las actividades grupales ocupadas ahora bloquean la disponibilidad de los miembros","body_html":"<p dir=\"auto\">Cuando añades un grupo a una actividad de calendario marcada como ocupada, se bloquean automáticamente los horarios disponibles de todos sus miembros. Las actividades que no estén marcadas como ocupadas no afectarán a la disponibilidad. No se requiere ninguna acción.</p>"},"no":{"title":"Opptatte gruppeaktiviteter blokkerer nå medlemmenes ledige tider","body_html":"<p dir=\"auto\">Når du legger til en gruppe i en opptatt kalenderaktivitet, blokkeres automatisk alle medlemmenes ledige tider. Aktiviteter som ikke er merket som opptatte, påvirker ikke tilgjengeligheten. Ingen handling kreves.</p>"},"dk":{"title":"Optagede gruppeaktiviteter blokerer nu medlemmernes ledige tider","body_html":"<p dir=\"auto\">Når du tilføjer en gruppe til en optaget kalenderaktivitet, blokeres alle medlemmernes ledige tider automatisk. Aktiviteter, der ikke er markeret som optagede, påvirker ikke tilgængeligheden. Ingen handling er nødvendig.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9775","title":"Last-minute waiting lists can now be set up per location","state":"closed","number":9775,"created_at":"2026-06-24T20:41:53Z","repo_name":"Kaddio Application","merged_at":"2026-09-04T10:21:47Z","body":null,"body_html":"<p dir=\"auto\">Clinics with multiple locations can now create separate last-minute waiting lists for each place.</p>\n<p dir=\"auto\">In Booking, when a client signs up to be notified about last-minute openings, they'll only be alerted for the location they're interested in. This means fewer irrelevant messages for clients and better matches when a slot suddenly frees up.</p>\n<p dir=\"auto\">If your clinic operates from more than one location, you can now add a last-minute waiting list per booking type and place directly from the waiting list overview.</p>","translations":{"en":{"title":"Last-minute waiting lists can now be set up per location","body_html":"<p dir=\"auto\">Clinics with multiple locations can now create separate last-minute waiting lists for each place.</p>\n<p dir=\"auto\">In Booking, when a client signs up to be notified about last-minute openings, they'll only be alerted for the location they're interested in. This means fewer irrelevant messages for clients and better matches when a slot suddenly frees up.</p>\n<p dir=\"auto\">If your clinic operates from more than one location, you can now add a last-minute waiting list per booking type and place directly from the waiting list overview.</p>"},"sv":{"title":"Sista minuten-väntelistor kan nu skapas per plats","body_html":"<p dir=\"auto\">Kliniker med flera platser kan nu skapa separata sista minuten-väntelistor för varje plats.</p>\n<p dir=\"auto\">I Bokning får klienter som anmäler sig till sista minuten-erbjudanden bara notiser för den plats de är intresserade av. Det ger färre irrelevanta meddelanden och bättre träffar när en tid plötsligt blir ledig.</p>\n<p dir=\"auto\">Om kliniken har flera platser kan en sista minuten-väntelista skapas per bokningstyp och plats direkt från väntelisteöversikten.</p>"},"es":{"title":"Las listas de espera de última hora ahora se pueden crear por ubicación","body_html":"<p dir=\"auto\">Las clínicas con varias ubicaciones ya pueden crear listas de espera de última hora separadas para cada lugar.</p>\n<p dir=\"auto\">En Reservas, los clientes que se apuntan para recibir avisos de huecos de última hora solo serán notificados sobre la ubicación que les interesa. Esto reduce los mensajes irrelevantes y mejora la coincidencia cuando queda un hueco libre.</p>\n<p dir=\"auto\">Si tu clínica opera en más de un lugar, ahora puedes añadir una lista de espera de última hora por tipo de reserva y ubicación desde la vista general de listas de espera.</p>"},"no":{"title":"Sist-minuttet-ventelister kan nå opprettes per sted","body_html":"<p dir=\"auto\">Klinikker med flere steder kan nå opprette egne sist-minuttet-ventelister for hvert sted.</p>\n<p dir=\"auto\">I Booking får klienter som melder seg på sist-minuttet-varsler bare beskjed om det stedet de er interessert i. Det gir færre irrelevante meldinger og bedre treff når en time plutselig blir ledig.</p>\n<p dir=\"auto\">Har klinikken flere steder, kan en sist-minuttet-venteliste opprettes per bookingtype og sted direkte fra ventelisteoversikten.</p>"},"dk":{"title":"Sidste-øjebliks-ventelister kan nu oprettes pr. sted","body_html":"<p dir=\"auto\">Klinikker med flere adresser kan nu oprette separate sidste-øjebliks-ventelister for hvert sted.</p>\n<p dir=\"auto\">I Booking får klienter, der tilmelder sig sidste-øjebliks-varsler, kun besked om det sted, de er interesserede i. Det giver færre irrelevante beskeder og bedre match, når en tid pludselig bliver ledig.</p>\n<p dir=\"auto\">Hvis klinikken har flere adresser, kan en sidste-øjebliks-venteliste oprettes pr. bookingtype og sted direkte fra ventelisteoversigten.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10109","title":"More filters in the Day &gt; Table calendar view","state":"closed","number":10109,"created_at":"2026-09-03T09:21:06Z","repo_name":"Kaddio Application","merged_at":"2026-09-04T07:05:17Z","body":"Adds status filters to Dag > Tabell under Visa:\r\n\r\n- Avbokade: bookings cancelled by the patient\r\n- Inställda: bookings cancelled by the practitioner, including cancelled group sessions\r\n- Uteblivna besök: no-show visits\r\n\r\nAll filters are enabled by default to preserve the existing behavior.\r\n\r\nÅterkoppla till \r\npatrik.otteberg@nimm.se\r\n","body_html":"<p dir=\"auto\">Go to Day &gt; Table and use the Show menu to toggle Cancelled, Rescheduled and No-show appointments. All filters are enabled by default, so nothing changes unless you choose to adjust them yourself.</p>","translations":{"en":{"title":"More filters in the Day &gt; Table calendar view","body_html":"<p dir=\"auto\">Go to Day &gt; Table and use the Show menu to toggle Cancelled, Rescheduled and No-show appointments. All filters are enabled by default, so nothing changes unless you choose to adjust them yourself.</p>"},"sv":{"title":"Fler filter i kalendervyn Dag &gt; Tabell","body_html":"<p dir=\"auto\">Gå till Dag &gt; Tabell och använd menyn Visa för att växla Avbokade, Inställda och Uteblivna besök. Alla filter är påslagna som standard, så inget förändras om du inte själv väljer det.</p>"},"es":{"title":"Más filtros en la vista de calendario Día &gt; Tabla","body_html":"<p dir=\"auto\">Ve a Día &gt; Tabla y utiliza el menú Mostrar para alternar las citas Canceladas, Reprogramadas y No presentadas. Todos los filtros están activados por defecto, así que nada cambiará a menos que tú decidas ajustarlos.</p>"},"no":{"title":"Flere filtre i kalendervisningen Dag &gt; Tabell","body_html":"<p dir=\"auto\">Gå til Dag &gt; Tabell og bruk Vis-menyen for å veksle mellom Avbestilte, Ombookede og Uteblitte besøk. Alle filtre er slått på som standard, så ingenting endres med mindre du selv velger det.</p>"},"dk":{"title":"Flere filtre i kalendervisningen Dag &gt; Tabel","body_html":"<p dir=\"auto\">Gå til Dag &gt; Tabel og brug Vis-menuen til at skifte mellem Afbestilte, Ombookede og Udeblevne besøg. Alle filtre er slået til som standard, så intet ændres, medmindre du selv vælger det.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10009","title":"New relation type for adult children","state":"closed","number":10009,"created_at":"2026-08-21T09:44:13Z","repo_name":"Kaddio Application","merged_at":"2026-09-03T07:40:22Z","body":"För fallet där vårdnadshavare inte fungerar utan det är förälder till vuxet barn så att säga - tänker jag rätt? Eller ska `child` återanvändas på något sätt?","body_html":"<p dir=\"auto\">You can now link a client to a parent or adult child, making family connections clearer when guardianship no longer applies.</p>\n<p dir=\"auto\">This new relation type sits alongside existing options like partner and guardian, and can be enabled per organization. It's especially helpful when documenting care that involves adult family members.</p>","translations":{"en":{"title":"New relation type for adult children","body_html":"<p dir=\"auto\">You can now link a client to a parent or adult child, making family connections clearer when guardianship no longer applies.</p>\n<p dir=\"auto\">This new relation type sits alongside existing options like partner and guardian, and can be enabled per organization. It's especially helpful when documenting care that involves adult family members.</p>"},"sv":{"title":"Ny relation för vuxna barn","body_html":"<p dir=\"auto\">Nu går det att koppla en klient till en förälder eller ett vuxet barn – perfekt när vårdnadshavare inte längre passar.</p>\n<p dir=\"auto\">Den nya relationstypen finns tillsammans med befintliga alternativ som partner och vårdnadshavare, och kan aktiveras per organisation. Särskilt användbart vid vård som involverar vuxna familjemedlemmar.</p>"},"es":{"title":"Nueva relación para hijos adultos","body_html":"<p dir=\"auto\">Ahora puedes vincular a un cliente con un padre o un hijo adulto, aclarando los lazos familiares cuando la tutela ya no aplica.</p>\n<p dir=\"auto\">Este nuevo tipo de relación se suma a opciones existentes como pareja o tutor legal, y puede activarse por organización. Muy útil al documentar atención que involucra a familiares adultos.</p>"},"no":{"title":"Ny relasjon for voksne barn","body_html":"<p dir=\"auto\">Du kan nå knytte en klient til en forelder eller et voksent barn, noe som gjør familierelasjoner tydeligere når vergemål ikke passer.</p>\n<p dir=\"auto\">Den nye relasjonstypen finnes ved siden av eksisterende valg som partner og verge, og kan aktiveres per organisasjon. Særlig nyttig når du dokumenterer omsorg som involverer voksne familiemedlemmer.</p>"},"dk":{"title":"Ny relation for voksne børn","body_html":"<p dir=\"auto\">Du kan nu forbinde en klient med en forælder eller et voksent barn – ideelt når værgemål ikke længere passer.</p>\n<p dir=\"auto\">Den nye relationstype findes sammen med eksisterende valg som partner og værge, og kan aktiveres pr. organisation. Særligt nyttigt ved dokumentation af pleje, der involverer voksne familiemedlemmer.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9996","title":"Practitioners can now be granted permission to unsign journal entries","state":"closed","number":9996,"created_at":"2026-08-20T12:44:16Z","repo_name":"Kaddio Application","merged_at":"2026-08-28T11:27:15Z","body":"Önskemål från F4L\r\n\r\nIntroduce a new option to permit hosts to unsign contacts, enhancing the existing permissions model. This change includes updates to the schema, method authorization checks, and the user interface.","body_html":"<p dir=\"auto\">Unlocking signed journal entries is no longer limited to administrators. Clinics can now delegate this permission to specific practitioners.</p>\n<p dir=\"auto\">In the Journal module, a new permission group called Unlock signing lets you decide exactly who can reopen signed and locked contacts when unsigning is enabled for your organization. By default, existing administrators keep their access, so no action is needed unless you want to extend the permission to other practitioners.</p>","translations":{"en":{"title":"Practitioners can now be granted permission to unsign journal entries","body_html":"<p dir=\"auto\">Unlocking signed journal entries is no longer limited to administrators. Clinics can now delegate this permission to specific practitioners.</p>\n<p dir=\"auto\">In the Journal module, a new permission group called Unlock signing lets you decide exactly who can reopen signed and locked contacts when unsigning is enabled for your organization. By default, existing administrators keep their access, so no action is needed unless you want to extend the permission to other practitioners.</p>"},"sv":{"title":"Behandlare kan nu få behörighet att låsa upp signerade kontakter","body_html":"<p dir=\"auto\">Att låsa upp signerade journalkontakter är inte längre begränsat till administratörer. Kliniker kan nu ge behörigheten till utvalda behandlare.</p>\n<p dir=\"auto\">I journalmodulen finns en ny behörighetsgrupp, Lås upp signering, där ni styr exakt vilka användare som får låsa upp signerade och låsta kontakter när upplåsning är tillåten i organisationen. Befintliga administratörer behåller sin åtkomst, så ingen åtgärd krävs om ni inte vill utöka behörigheten till fler.</p>"},"es":{"title":"Los profesionales ya pueden recibir permiso para desbloquear entradas firmadas","body_html":"<p dir=\"auto\">Desbloquear entradas firmadas en la historia clínica ya no está limitado a los administradores. Las clínicas pueden delegar este permiso a…</p>\n<p dir=\"auto\">En el módulo de Historia clínica, un nuevo grupo de permisos llamado Desbloquear firma permite decidir con precisión quién puede reabrir contactos firmados y bloqueados cuando esta opción está activada. Los administradores actuales conservan su acceso, por lo que no se requiere ninguna acción salvo que quieran ampliar el permiso a otros profesionales.</p>"},"no":{"title":"Behandlere kan nå få tillatelse til å låse opp signerte journalkontakter","body_html":"<p dir=\"auto\">Å låse opp signerte journalkontakter er ikke lenger forbeholdt administratorer. Klinikker kan nå gi tillatelsen til utvalgte behandlere.</p>\n<p dir=\"auto\">I journalmodulen finnes en ny tilgangsgruppe, Lås opp signering, der dere bestemmer nøyaktig hvem som kan åpne signerte og låste kontakter når opplåsing er tillatt i organisasjonen. Eksisterende administratorer beholder sin tilgang, så ingen handling er nødvendig med mindre dere ønsker å utvide tillatelsen til flere.</p>"},"dk":{"title":"Behandlere kan nu få tilladelse til at låse signerede journalkontakter op","body_html":"<p dir=\"auto\">At låse signerede journalkontakter op er ikke længere forbeholdt administratorer. Klinikker kan nu tildele rettigheden til udvalgte behandlere.</p>\n<p dir=\"auto\">I journalmodulet findes en ny rettighedsgruppe, Lås signering op, hvor I styrer præcis, hvem der må genåbne signerede og låste kontakter, når oplåsning er tilladt i organisationen. Eksisterende administratorer beholder deres adgang, så der kræves ingen handling, medmindre I ønsker at udvide rettigheden til flere.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10011","title":"Försäkringskassan forms in the journal","state":"closed","number":10011,"created_at":"2026-08-21T10:13:26Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T13:11:07Z","body":"## Summary\n- Adds blankett definitions and instances so hosts can prepare Försäkringskassan forms from a client journal.\n- Introduces `/blankett/:id` for editing, PDF preview/download, and sending the blankett as real mail.\n- Includes a sjukintyg form plus a generic fallback form, with unit and app tests for the new methods.\n\n## Test plan\n- [ ] From a client journal, create a blankett and confirm it appears as a journal item.\n- [ ] Open `/blankett/:id`, edit fields, and save.\n- [ ] Preview and download the PDF (`Visa PDF` / `Ladda ner PDF`).\n- [ ] Send the blankett as real mail and confirm it is marked as sent.\n- [ ] Confirm unauthorized users cannot open or mutate another org’s blankett.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Prepare Försäkringskassan forms directly from a client's journal, preview the PDF, and send it as physical mail — all in one place.</p>\n<p dir=\"auto\">The first form available is the medical certificate for sickness benefit (Läkarintyg för sjukpenning, FK 7804). Patient details and recent diagnoses are prefilled from the journal, so less time is spent on paperwork.</p>\n<p dir=\"auto\">Once ready, the form can be locked, downloaded as PDF, or sent as real mail straight to Försäkringskassan's inläsningscentral. Available in the Journal module once activated for your organization.</p>","translations":{"en":{"title":"Försäkringskassan forms in the journal","body_html":"<p dir=\"auto\">Prepare Försäkringskassan forms directly from a client's journal, preview the PDF, and send it as physical mail — all in one place.</p>\n<p dir=\"auto\">The first form available is the medical certificate for sickness benefit (Läkarintyg för sjukpenning, FK 7804). Patient details and recent diagnoses are prefilled from the journal, so less time is spent on paperwork.</p>\n<p dir=\"auto\">Once ready, the form can be locked, downloaded as PDF, or sent as real mail straight to Försäkringskassan's inläsningscentral. Available in the Journal module once activated for your organization.</p>"},"sv":{"title":"Försäkringskassans blanketter i journalen","body_html":"<p dir=\"auto\">Förbered Försäkringskassans blanketter direkt från klientens journal, förhandsgranska PDF:en och skicka den som brev — allt på ett ställe.</p>\n<p dir=\"auto\">Första blanketten som stöds är Läkarintyg för sjukpenning (FK 7804). Patientuppgifter och senaste diagnoser förifylls från journalen, vilket sparar tid i administrationen.</p>\n<p dir=\"auto\">Blanketten kan låsas, laddas ner som PDF eller skickas som riktigt brev direkt till Försäkringskassans inläsningscentral. Finns i journalmodulen när funktionen aktiverats för organisationen.</p>"},"es":{"title":"Formularios de Försäkringskassan en el historial","body_html":"<p dir=\"auto\">Prepara los formularios de Försäkringskassan directamente desde el historial del cliente, previsualiza el PDF y envíalo por correo postal en un…</p>\n<p dir=\"auto\">El primer formulario disponible es el certificado médico para la prestación por enfermedad (Läkarintyg för sjukpenning, FK 7804). Los datos del paciente y los diagnósticos recientes se rellenan automáticamente desde el historial.</p>\n<p dir=\"auto\">El formulario puede bloquearse, descargarse como PDF o enviarse por correo postal directamente al centro de recepción de Försäkringskassan. Disponible en el módulo de Historial una vez activado para tu organización.</p>"},"no":{"title":"Försäkringskassan-skjemaer i journalen","body_html":"<p dir=\"auto\">Forbered Försäkringskassans skjemaer direkte fra klientens journal, forhåndsvis PDF-en og send den som fysisk post — alt på ett sted.</p>\n<p dir=\"auto\">Første skjema som støttes er legeerklæringen for sykepenger (Läkarintyg för sjukpenning, FK 7804). Pasientopplysninger og nylige diagnoser fylles inn automatisk fra journalen.</p>\n<p dir=\"auto\">Skjemaet kan låses, lastes ned som PDF eller sendes som ekte brev direkte til Försäkringskassans mottakssentral. Finnes i journalmodulen når funksjonen er aktivert for organisasjonen.</p>"},"dk":{"title":"Försäkringskassan-blanketter i journalen","body_html":"<p dir=\"auto\">Forbered Försäkringskassans blanketter direkte fra klientens journal, se PDF'en og send den som fysisk brev — det hele ét sted.</p>\n<p dir=\"auto\">Den første understøttede blanket er lægeerklæringen for sygedagpenge (Läkarintyg för sjukpenning, FK 7804). Patientoplysninger og seneste diagnoser udfyldes automatisk fra journalen.</p>\n<p dir=\"auto\">Blanketten kan låses, hentes som PDF eller sendes som rigtigt brev direkte til Försäkringskassans indlæsningscentral. Findes i journalmodulet, når funktionen er aktiveret for organisationen.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10022","title":"Rooms now sorted alphabetically in the calendar and on bookings","state":"closed","number":10022,"created_at":"2026-08-24T19:08:08Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T12:20:55Z","body":"Problem\r\nKolumnerna i Rum vertikalt saknar sortering, upplevs otydligt.\r\nListan över rum på bokningar saknar sortering (förutom på plats), upplevs otydligt.\r\nVid filtrering på plats i vyn Rum vertikalt visas inga rum\r\n\r\nMeddelat av petra@pusselfamiljen.se\r\n\r\n**Löser**\r\nAtt kolumnerna sorteras på bokstavsordning\r\nAtt listan över rum på bokningar sorteras i bokstavsordning per plats.\r\nRum vertikalt kan filtreras på plats\r\n\r\n(testar flöde direkt från Intercom till PR)","body_html":"<p dir=\"auto\">In the calendar, rooms are grouped by location and listed in alphabetical order, with \"No room\" always shown last. The Rooms vertical view can also be filtered by location, making it easy to focus on a single practice.</p>","translations":{"en":{"title":"Rooms now sorted alphabetically in the calendar and on bookings","body_html":"<p dir=\"auto\">In the calendar, rooms are grouped by location and listed in alphabetical order, with \"No room\" always shown last. The Rooms vertical view can also be filtered by location, making it easy to focus on a single practice.</p>"},"sv":{"title":"Rum sorteras i bokstavsordning i kalendern och på bokningar","body_html":"<p dir=\"auto\">I kalendern grupperas rummen per plats och listas i bokstavsordning, med \"Inget rum\" alltid sist. Vyn Rum vertikalt går dessutom att filtrera på plats för att fokusera på en enskild mottagning.</p>"},"es":{"title":"Las salas se ordenan alfabéticamente en el calendario y en las reservas","body_html":"<p dir=\"auto\">En el calendario, las salas se agrupan por ubicación y se muestran en orden alfabético, con \"Sin sala\" siempre al final. La vista Salas en vertical también se puede filtrar por ubicación para centrarte en un solo centro.</p>"},"no":{"title":"Rom sorteres alfabetisk i kalenderen og på bookinger","body_html":"<p dir=\"auto\">I kalenderen grupperes rommene etter sted og listes i alfabetisk rekkefølge, med \"Ingen rom\" alltid sist. Visningen Rom vertikalt kan i tillegg filtreres på sted, slik at du enkelt kan fokusere på én enkelt mottakelse.</p>"},"dk":{"title":"Rum sorteres alfabetisk i kalenderen og på bookinger","body_html":"<p dir=\"auto\">I kalenderen grupperes rummene efter lokation og vises i alfabetisk rækkefølge, med \"Intet rum\" altid til sidst. Visningen Rum lodret kan desuden filtreres på lokation, så du let kan fokusere på én enkelt klinik.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10044","title":"Let practitioners see all groups in the organization, even ones they're not part of","state":"closed","number":10044,"created_at":"2026-08-27T07:44:09Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T11:40:23Z","body":"## Summary\n- Adds org setting `showGroupsWithoutMembershipForHosts` under Inställningar → Sekretess in a new Grupper fieldset.\n- When enabled, non-admin hosts receive all non-chat groups from the `groups` publication, not only groups they belong to. Admins and supervisors still always see all groups; clients still see none.\n- Default remains off, so existing orgs keep membership-scoped group lists.\n\n## Test plan\n- [ ] As admin, open Inställningar → Sekretess and confirm the Grupper fieldset and checkbox save.\n- [ ] As a non-admin host, with the setting off, confirm groups you are not a member of do not appear under Grupper.\n- [ ] Enable the setting, reload as the same host, and confirm those groups appear.\n- [ ] Confirm a client still cannot see org groups.\n- [ ] Confirm admins still see all groups regardless of the setting.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">You'll find the new setting under Settings → Privacy, and it's turned off by default — so nothing changes for existing organizations. Administrators and supervisors still see every group, and clients never see the organization's groups.</p>","translations":{"en":{"title":"Let practitioners see all groups in the organization, even ones they're not part of","body_html":"<p dir=\"auto\">You'll find the new setting under Settings → Privacy, and it's turned off by default — so nothing changes for existing organizations. Administrators and supervisors still see every group, and clients never see the organization's groups.</p>"},"sv":{"title":"Tillåt behandlare att se alla grupper i organisationen, även de de inte är medlemmar i.","body_html":"<p dir=\"auto\">Inställningen finns under Inställningar → Sekretess och är avstängd som standard, så inget ändras för befintliga organisationer. Administratörer och handledare ser fortsatt alla grupper, och klienter ser aldrig organisationens grupper.</p>"},"es":{"title":"Permite que los profesionales vean todos los grupos de la organización, incluso aquellos a los que no pertenecen","body_html":"<p dir=\"auto\">Encontrarás la nueva opción en Configuración → Privacidad, y está desactivada por defecto, así que nada cambia para las organizaciones existentes. Los administradores y supervisores seguirán viendo todos los grupos, y los clientes nunca ven los grupos de la organización.</p>"},"no":{"title":"La behandlere se alle grupper i organisasjonen, også de de ikke er medlem av","body_html":"<p dir=\"auto\">Innstillingen finner du under Innstillinger → Personvern, og den er avslått som standard – så ingenting endres for eksisterende organisasjoner. Administratorer og veiledere ser fortsatt alle grupper, og klienter ser aldri organisasjonens grupper.</p>"},"dk":{"title":"Lad behandlere se alle grupper i organisationen, også dem de ikke er medlem af","body_html":"<p dir=\"auto\">Indstillingen finder du under Indstillinger → Privatliv, og den er slået fra som standard – så intet ændres for eksisterende organisationer. Administratorer og supervisorer ser fortsat alle grupper, og klienter ser aldrig organisationens grupper.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10037","title":"New layout on overview pages for clearer guidance on what needs attention","state":"closed","number":10037,"created_at":"2026-08-26T08:03:25Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T11:39:45Z","body":"## Summary\n- Restyle dash-bricks as bordered white cards on a gray page, with stronger glyphs for action vs empty/info states.\n- Split the host dashboard into a two-column work area and news aside; restyle inbox, bookings, forms, and cases as kd-items.\n- Pack the client dashboard with a masonry layout, move Ny bokning into the bookings header, and tighten the changelog to five expandable titles.\n\n## Test plan\n- [ ] Host dashboard: greeting/date outside cards, work column vs news aside at `lg`, no extra gap from dash-brick margins\n- [ ] Att ta hand om: action glyphs when counts > 0; empty forms/letters still visible\n- [ ] Idag/Imorgon: times in item icons; Anslut navigates as a link (`btn-primary-flat`, not `kd-button`)\n- [ ] Client dashboard: masonry packs cards without holes from ~992px; identity/journal lock stay in the flow\n- [ ] Aktuella bokningar: Ny bokning in the header; rows use host avatar or user glyph; Avboka / Anslut\n- [ ] Formulär and Ärenden: kd-item lists; empty Ärenden state when `org.hasCases`\n- [ ] Nytt i Kaddio: five titles, expand inline, Visa changelog / Visa fler nyheter opens the full changelog\n- [ ] Isolated view shell still uses the near-white body background\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">The overview pages in Kaddio have been given a cleaner and more focused look, with clear cards that highlight what needs your attention today. None of the content has changed — only the appearance.</p>\n<p dir=\"auto\">The practitioner's overview page is now sorted so that items requiring action appear at the top. Messages from Kaddio about updates and events are clearly displayed in the right-hand column. Logged-in clients will also enjoy a more pleasant and clearer experience, with pending items shown at the top. The new layout is also visible in the patient overview and the journal overview.</p>","translations":{"en":{"title":"New layout on overview pages for clearer guidance on what needs attention","body_html":"<p dir=\"auto\">The overview pages in Kaddio have been given a cleaner and more focused look, with clear cards that highlight what needs your attention today. None of the content has changed — only the appearance.</p>\n<p dir=\"auto\">The practitioner's overview page is now sorted so that items requiring action appear at the top. Messages from Kaddio about updates and events are clearly displayed in the right-hand column. Logged-in clients will also enjoy a more pleasant and clearer experience, with pending items shown at the top. The new layout is also visible in the patient overview and the journal overview.</p>"},"sv":{"title":"Ny layout på översiktssidor för tydligare hjälp med vad som behöver hanteras","body_html":"<p dir=\"auto\">Översiktssidorna i Kaddio har fått renare och mer fokuserat utseende med tydliga kort som lyfter fram det som behöver din uppmärksamhet idag. Inget av innehållet har förändrats, bara utseendet.</p>\n<p dir=\"auto\">Behandlarens översiktssida är sorterad så att det som behöver hanteras ligger överst. Meddelanden från Kaddio om uppdateringar och händelser syns tydligt i högerspalten. Även för inloggade klienter blir upplevelsen trevligare och tydligare med det som behöver hanteras högst upp. Den nya layouten syns också i patientöversikten och journalöversikten.</p>"},"es":{"title":"Nuevo diseño en las páginas de resumen para ver con más claridad lo que requiere atención","body_html":"<p dir=\"auto\">Las páginas de resumen de Kaddio ahora tienen un aspecto más limpio y enfocado, con tarjetas claras que destacan lo que necesita tu atención hoy. El contenido no ha cambiado, solo la apariencia.</p>\n<p dir=\"auto\">La página de resumen del profesional está ordenada de manera que lo que requiere gestión aparece en la parte superior. Los mensajes de Kaddio sobre actualizaciones y eventos se muestran claramente en la columna derecha. Los clientes que inician sesión también disfrutarán de una experiencia más agradable y clara, con las tareas pendientes destacadas en la parte superior. El nuevo diseño también está presente en la vista general del paciente y en la vista general del historial clínico.</p>"},"no":{"title":"Ny layout på oversiktssider for tydeligere oversikt over hva som må håndteres","body_html":"<p dir=\"auto\">Oversiktssidene i Kaddio har fått et renere og mer fokusert utseende, med tydelige kort som løfter frem det som trenger din oppmerksomhet i dag. Innholdet er uendret – kun utseendet er nytt.</p>\n<p dir=\"auto\">Behandlerens oversiktsside er sortert slik at det som må håndteres ligger øverst. Meldinger fra Kaddio om oppdateringer og hendelser vises tydelig i høyre kolonne. Også for innloggede klienter blir opplevelsen hyggeligere og tydeligere, med det som må håndteres øverst. Den nye layouten vises også i pasientoversikten og journaloversikten.</p>"},"dk":{"title":"Nyt layout på oversigtssider for tydeligere overblik over, hvad der skal håndteres","body_html":"<p dir=\"auto\">Oversigtssiderne i Kaddio har fået et renere og mere fokuseret udseende med tydelige kort, der fremhæver det, som kræver din opmærksomhed i dag. Indholdet er uændret – kun udseendet er nyt.</p>\n<p dir=\"auto\">Behandlerens oversigtsside er sorteret, så det, der skal håndteres, ligger øverst. Beskeder fra Kaddio om opdateringer og begivenheder vises tydeligt i højre kolonne. Også for loggede klienter bliver oplevelsen rarere og mere overskuelig, med det, der skal håndteres, øverst. Det nye layout ses også i patientoversigten og journaloversigten.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10045","title":"Switch practitioner when rescheduling from the calendar","state":"closed","number":10045,"created_at":"2026-08-27T08:20:29Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T11:25:15Z","body":"## Summary\n- The calendar header filters are hidden during reschedule, so the host filter stayed locked to the original booking.\n- The reschedule bar now includes the same attendee filter (and extra-host picker) as the header, so you can change who you are looking at while ombokning.\n\n## Test plan\n- [x] Open a booking in CalCtrl and choose Omboka\n- [x] Confirm the original host is selected in the reschedule bar\n- [x] Change the attendee filter to another host and confirm that host's calendar/free times load\n- [x] Add an extra host and confirm both calendars are visible\n- [x] Complete or cancel reschedule and confirm filters restore as before\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Previously, the calendar was locked to the original practitioner during rescheduling. Now the same filters available in the calendar header are also in the rescheduling bar, so you can easily view another practitioner's available times or several calendars at once before picking a new slot.</p>","translations":{"en":{"title":"Switch practitioner when rescheduling from the calendar","body_html":"<p dir=\"auto\">Previously, the calendar was locked to the original practitioner during rescheduling. Now the same filters available in the calendar header are also in the rescheduling bar, so you can easily view another practitioner's available times or several calendars at once before picking a new slot.</p>"},"sv":{"title":"Byt behandlare vid ombokning från kalendern","body_html":"<p dir=\"auto\">Tidigare var kalendern låst till den ursprungliga behandlaren under ombokning. Nu finns samma filter i ombokningsraden som i kalenderns rubrik, så du enkelt kan se en annan behandlares lediga tider eller flera kalendrar samtidigt innan du väljer en ny tid.</p>"},"es":{"title":"Cambia de profesional al reprogramar desde el calendario","body_html":"<p dir=\"auto\">Antes, el calendario quedaba fijado al profesional original durante la reprogramación. Ahora encontrarás los mismos filtros en la barra de reprogramación que en la cabecera del calendario, para que puedas consultar fácilmente las horas libres de otro profesional o ver varios calendarios a la vez antes de elegir un nuevo horario.</p>"},"no":{"title":"Bytt behandler ved ombooking fra kalenderen","body_html":"<p dir=\"auto\">Tidligere var kalenderen låst til den opprinnelige behandleren under ombooking. Nå finner du de samme filtrene i ombookingsraden som i kalenderens topptekst, slik at du enkelt kan se en annen behandlers ledige tider eller flere kalendere samtidig før du velger en ny tid.</p>"},"dk":{"title":"Skift behandler ved ombooking fra kalenderen","body_html":"<p dir=\"auto\">Tidligere var kalenderen låst til den oprindelige behandler under ombooking. Nu finder du de samme filtre i ombookingsrækken som i kalenderens overskrift, så du nemt kan se en anden behandlers ledige tider eller flere kalendere på samme tid, inden du vælger en ny tid.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10047","title":"Hide empty activity columns in the calendar's daily views","state":"closed","number":10047,"created_at":"2026-08-27T08:32:20Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T09:26:32Z","body":"## Summary\n- In **$HostP vertikalt** (day host time grid), the shared **Aktiviteter** (`cal`) column is now hidden when it has nothing to show.\n- This follows the existing **Visa $hostP utan bokningar** setting (`calSettingsHideEmptyHosts`): empty practitioner columns and an empty cal column are treated the same.\n- Single-host aktiviteter still belong in that host’s column, so they do not keep the shared cal lane visible.\n\n## Test plan\n- [x] Open calendar → Dag → **$HostP vertikalt** on a day with bookings but no shared aktiviteter / unassigned bookings. Confirm the **Aktiviteter** column is gone (setting off, which is the default).\n- [x] Enable **Visa $hostP utan bokningar**. Confirm empty host columns and an empty **Aktiviteter** column both reappear.\n- [x] On a day with a shared aktivitet (or a booking without a host), confirm **Aktiviteter** stays visible even with the setting off.\n- [x] Confirm a single-host aktivitet still appears in that host’s column and does not force the cal column to show.\n\n\nMade with [Cursor](https://cursor.com)","body_html":"<p dir=\"auto\">Empty practitioner columns and an empty Activities column are now handled the same way, following your existing setting for showing practitioners without bookings. As soon as there's a shared activity or a booking without a practitioner, the column automatically reappears.</p>","translations":{"en":{"title":"Hide empty activity columns in the calendar's daily views","body_html":"<p dir=\"auto\">Empty practitioner columns and an empty Activities column are now handled the same way, following your existing setting for showing practitioners without bookings. As soon as there's a shared activity or a booking without a practitioner, the column automatically reappears.</p>"},"sv":{"title":"Dölj tomma kolumner för aktiviteter i dagsvyerna i kalendern","body_html":"<p dir=\"auto\">Tomma behandlarkolumner och en tom Aktiviteter-kolumn hanteras på samma sätt och följer din befintliga inställning för att visa behandlare utan bokningar. Så fort det finns en delad aktivitet eller en bokning utan behandlare visas kolumnen igen automatiskt.</p>"},"es":{"title":"Ocultar columnas de actividades vacías en las vistas diarias del calendario","body_html":"<p dir=\"auto\">Las columnas de terapeutas vacías y la columna de Actividades vacía se gestionan de la misma manera y siguen tu configuración actual para mostrar terapeutas sin reservas. En cuanto haya una actividad compartida o una reserva sin terapeuta, la columna vuelve a aparecer automáticamente.</p>"},"no":{"title":"Skjul tomme aktivitetskolonner i dagsvisningene i kalenderen","body_html":"<p dir=\"auto\">Tomme behandlerkolonner og en tom Aktiviteter-kolonne håndteres på samme måte og følger din eksisterende innstilling for å vise behandlere uten bookinger. Så snart det finnes en delt aktivitet eller en booking uten behandler, vises kolonnen igjen automatisk.</p>"},"dk":{"title":"Skjul tomme aktivitetskolonner i kalenderens dagsvisninger","body_html":"<p dir=\"auto\">Tomme behandlerkolonner og en tom Aktiviteter-kolonne håndteres på samme måde og følger din eksisterende indstilling for at vise behandlere uden bookinger. Så snart der er en delt aktivitet eller en booking uden behandler, vises kolonnen automatisk igen.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9941","title":"Reliable online booking","state":"closed","number":9941,"created_at":"2026-08-14T05:57:38Z","repo_name":"Kaddio Application","merged_at":"2026-08-27T06:36:59Z","body":"Problem\r\nTjänster visas inte i klientbokningen om vi inte får valutakursinfo. \r\n\r\nLösning\r\n- Visa tjänster oavsett kontakt\r\n- Ej kunna välja andra valutor om kurs saknas","body_html":"<p dir=\"auto\">Online booking now shows your services even when currency exchange rates are temporarily unavailable.</p>\n<p dir=\"auto\">Previously, the client booking view could appear empty if exchange rate information was missing. Services are now always visible, and clients can book in your clinic's default currency. Other currencies are shown as unavailable until exchange rates are back in place.</p>","translations":{"en":{"title":"Reliable online booking","body_html":"<p dir=\"auto\">Online booking now shows your services even when currency exchange rates are temporarily unavailable.</p>\n<p dir=\"auto\">Previously, the client booking view could appear empty if exchange rate information was missing. Services are now always visible, and clients can book in your clinic's default currency. Other currencies are shown as unavailable until exchange rates are back in place.</p>"},"sv":{"title":"Klientbokningen visar dina tjänster även när valutakurser tillfälligt saknas.","body_html":"<p dir=\"auto\">Tidigare kunde bokningsvyn se tom ut om valutakursinformation saknades. Tjänster syns nu alltid, och klienter kan boka i klinikens standardvaluta. Andra valutor visas som otillgängliga tills kurserna är på plats igen.</p>"},"es":{"title":"Reserva de clientes fiable","body_html":"<p dir=\"auto\">La reserva online muestra ahora tus servicios incluso cuando los tipos de cambio no están disponibles temporalmente.</p>\n<p dir=\"auto\">Antes, la vista de reserva podía aparecer vacía si faltaba información de tipos de cambio. Los servicios se muestran siempre, y los clientes pueden reservar en la moneda predeterminada de la clínica. Otras monedas aparecen como no disponibles hasta que los tipos de cambio vuelvan a estar activos.</p>"},"no":{"title":"Pålitelig klientbooking","body_html":"<p dir=\"auto\">Klientbookingen viser nå tjenestene dine også når valutakurser midlertidig mangler.</p>\n<p dir=\"auto\">Tidligere kunne bookingvisningen se tom ut hvis valutakursinformasjon manglet. Tjenester vises nå alltid, og klienter kan booke i klinikkens standardvaluta. Andre valutaer vises som utilgjengelige inntil kursene er på plass igjen.</p>"},"dk":{"title":"Pålidelig klientbooking","body_html":"<p dir=\"auto\">Klientbookingen viser nu dine ydelser, selv når valutakurser midlertidigt mangler.</p>\n<p dir=\"auto\">Tidligere kunne bookingvisningen se tom ud, hvis valutakursinformation manglede. Ydelser vises nu altid, og klienter kan booke i klinikkens standardvaluta. Andre valutaer vises som utilgængelige, indtil kurserne er tilbage.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/10040","title":"Smoother AI transcription","state":"closed","number":10040,"created_at":"2026-08-26T18:45:18Z","repo_name":"Kaddio Application","merged_at":"2026-08-26T19:02:32Z","body":null,"body_html":"<p dir=\"auto\">AI transcription in the Journal now handles edge cases more gracefully, so recordings flow into notes without unexpected interruptions.</p>\n<p dir=\"auto\">This fix improves stability when working with contact types that have no note types attached, ensuring the AI assistant responds reliably every time. No action needed.</p>","translations":{"en":{"title":"Smoother AI transcription","body_html":"<p dir=\"auto\">AI transcription in the Journal now handles edge cases more gracefully, so recordings flow into notes without unexpected interruptions.</p>\n<p dir=\"auto\">This fix improves stability when working with contact types that have no note types attached, ensuring the AI assistant responds reliably every time. No action needed.</p>"},"sv":{"title":"Stabilare AI-transkribering","body_html":"<p dir=\"auto\">AI-transkribering i journalen hanterar nu specialfall smidigare, så att inspelningar blir till anteckningar utan oväntade avbrott.</p>\n<p dir=\"auto\">Stabiliteten förbättras när kontakttyper saknar kopplade anteckningstyper, och AI-assistenten svarar pålitligt varje gång. Ingen åtgärd krävs.</p>"},"es":{"title":"Transcripción con IA más estable","body_html":"<p dir=\"auto\">La transcripción con IA en la historia clínica ahora gestiona mejor los casos especiales, para que las grabaciones se conviertan en notas sin…</p>\n<p dir=\"auto\">La estabilidad mejora cuando los tipos de contacto no tienen tipos de nota asociados, y el asistente de IA responde de forma fiable. No requiere ninguna acción.</p>"},"no":{"title":"Mer stabil AI-transkribering","body_html":"<p dir=\"auto\">AI-transkribering i journalen håndterer nå spesialtilfeller mer smidig, slik at opptak blir til notater uten uventede avbrudd.</p>\n<p dir=\"auto\">Stabiliteten forbedres når kontakttyper mangler tilknyttede notattyper, og AI-assistenten svarer pålitelig hver gang. Ingen handling nødvendig.</p>"},"dk":{"title":"Mere stabil AI-transskribering","body_html":"<p dir=\"auto\">AI-transskribering i journalen håndterer nu særlige tilfælde mere smidigt, så optagelser bliver til notater uden uventede afbrydelser.</p>\n<p dir=\"auto\">Stabiliteten forbedres, når kontakttyper ikke har tilknyttede notattyper, og AI-assistenten svarer pålideligt hver gang. Ingen handling nødvendig.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9948","title":"Reporting tool now shows rebooking history and original booking details","state":"closed","number":9948,"created_at":"2026-08-14T11:17:44Z","repo_name":"Kaddio Application","merged_at":"2026-08-20T11:11:26Z","body":null,"body_html":"<p dir=\"auto\">Booking reports now display the full trail whenever an appointment is rescheduled, making it easy to see where a booking originated and where it was moved.</p>","translations":{"en":{"title":"Reporting tool now shows rebooking history and original booking details","body_html":"<p dir=\"auto\">Booking reports now display the full trail whenever an appointment is rescheduled, making it easy to see where a booking originated and where it was moved.</p>"},"sv":{"title":"Rapportverktyget visar information om ombokningar och den ursprungliga bokningen","body_html":"<p dir=\"auto\">Bokningsrapporter visar nu hela spåret när en tid bokas om, så att det är enkelt att se var en bokning kommer ifrån och vart den flyttades.</p>"},"es":{"title":"La herramienta de informes muestra información sobre las reprogramaciones y la reserva original","body_html":"<p dir=\"auto\">Los informes de reservas muestran ahora el recorrido completo cuando se reprograma una cita, para que puedas ver fácilmente de dónde proviene una reserva y a dónde se movió.</p>"},"no":{"title":"Rapportverktøyet viser informasjon om ombookinger og den opprinnelige bookingen","body_html":"<p dir=\"auto\">Bookingrapporter viser nå hele sporet når en time bookes om, slik at det er enkelt å se hvor en booking kommer fra og hvor den ble flyttet.</p>"},"dk":{"title":"Rapportværktøjet viser information om ombookinger og den oprindelige booking","body_html":"<p dir=\"auto\">Bookingrapporter viser nu hele forløbet, når en tid bliver ombooket, så det er nemt at se, hvor en booking kommer fra, og hvor den blev flyttet hen.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9620","title":"Smart client mailings based on your selection criteria","state":"closed","number":9620,"created_at":"2026-06-02T09:43:27Z","repo_name":"Kaddio Application","merged_at":"2026-06-07T10:19:04Z","body":null,"body_html":"<p dir=\"auto\">Send emails to inactive clients who haven't booked a new appointment, inform all clients who have booked a specific service, or why not send birthday greetings to your clients. Mailings are sent via email and can be done manually or fully automated. Read more at <a href=\"https://help.kaddio.com/sv/articles/727407-smarta-utskick\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/727407-smarta-utskick</a></p>","translations":{"en":{"title":"Smart client mailings based on your selection criteria","body_html":"<p dir=\"auto\">Send emails to inactive clients who haven't booked a new appointment, inform all clients who have booked a specific service, or why not send birthday greetings to your clients. Mailings are sent via email and can be done manually or fully automated. Read more at <a href=\"https://help.kaddio.com/sv/articles/727407-smarta-utskick\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/727407-smarta-utskick</a></p>"},"sv":{"title":"Smarta utskick till klienterna utifrån dina urvalskriterier","body_html":"<p dir=\"auto\">Du kan skicka mail till inaktiva klienter som inte bokat någon ny tid, eller informera alla klienter som bokat en viss tjänst eller varför inte gratulera klienter på födelsedagen. Utskicken görs via epost och kan göras manuellt eller lösas helt automatiskt. Läs mer på <a href=\"https://help.kaddio.com/sv/articles/727407-smarta-utskick\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/727407-smarta-utskick</a></p>"},"es":{"title":"Envíos inteligentes a tus clientes según tus criterios de selección","body_html":"<p dir=\"auto\">Puedes enviar correos a clientes inactivos que no han reservado una nueva cita, informar a todos los clientes que han reservado un servicio determinado o, por qué no, felicitar a tus clientes en su cumpleaños. Los envíos se realizan por correo electrónico y pueden hacerse manualmente o de forma totalmente automática. Más información en <a href=\"https://help.kaddio.com/sv/articles/727407-smarta-utskick\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/727407-smarta-utskick</a></p>"},"no":{"title":"Smarte utsendelser til klientene basert på dine utvalgskriterier","body_html":"<p dir=\"auto\">Du kan sende e-post til inaktive klienter som ikke har booket ny time, informere alle klienter som har booket en bestemt tjeneste, eller hvorfor ikke gratulere klientene med bursdagen. Utsendelsene gjøres via e-post og kan gjøres manuelt eller helt automatisk. Les mer på <a href=\"https://help.kaddio.com/sv/articles/727407-smarta-utskick\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/727407-smarta-utskick</a></p>"},"dk":{"title":"Smarte udsendelser til dine klienter baseret på dine udvælgelseskriterier","body_html":"<p dir=\"auto\">Du kan sende mails til inaktive klienter, der ikke har booket en ny tid, informere alle klienter, der har booket en bestemt ydelse, eller hvorfor ikke lykønske klienterne på fødselsdagen. Udsendelserne sker via e-mail og kan foretages manuelt eller helt automatisk. Læs mere på <a href=\"https://help.kaddio.com/sv/articles/727407-smarta-utskick\" rel=\"nofollow\">https://help.kaddio.com/sv/articles/727407-smarta-utskick</a></p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/kaddio/pulls/9625","title":"Treatment outcome report compares forms over time","state":"closed","number":9625,"created_at":"2026-06-03T08:05:57Z","repo_name":"Kaddio Application","merged_at":"2026-06-05T09:38:27Z","body":null,"body_html":"<p dir=\"auto\">Compare the results of a specific form completed by patients over time, per practitioner or across the entire organisation. The results are presented in a chart and a table. A corresponding comparison view is also available per patient on each patient's overview.</p>","translations":{"en":{"title":"Treatment outcome report compares forms over time","body_html":"<p dir=\"auto\">Compare the results of a specific form completed by patients over time, per practitioner or across the entire organisation. The results are presented in a chart and a table. A corresponding comparison view is also available per patient on each patient's overview.</p>"},"sv":{"title":"Rapport för behandlingsresultat jämför formulär över tid","body_html":"<p dir=\"auto\">Jämför resultatet för ett visst formulär som patienter fyllt i över tid, per behandlare eller utifrån hela organisationen. Resultatet presenteras i ett diagram och en tabell. Motsvarande presentation av jämförelse finns även per patient på respektive patientens översikt.</p>"},"es":{"title":"Informe de resultados de tratamiento: compara formularios a lo largo del tiempo","body_html":"<p dir=\"auto\">Compara los resultados de un formulario concreto que los pacientes han rellenado a lo largo del tiempo, por profesional o para toda la organización. Los resultados se presentan en un gráfico y en una tabla. También encontrarás la correspondiente comparación por paciente en la vista general de cada uno.</p>"},"no":{"title":"Rapport for behandlingsresultat sammenligner skjemaer over tid","body_html":"<p dir=\"auto\">Sammenlign resultatet for et bestemt skjema som pasienter har fylt ut over tid, per behandler eller for hele organisasjonen. Resultatet vises i et diagram og en tabell. Tilsvarende sammenligning finnes også per pasient i den enkelte pasientens oversikt.</p>"},"dk":{"title":"Rapport for behandlingsresultat sammenligner formularer over tid","body_html":"<p dir=\"auto\">Sammenlign resultatet for en bestemt formular, som patienterne har udfyldt over tid, pr. behandler eller for hele organisationen. Resultatet vises i et diagram og en tabel. En tilsvarende sammenligning findes også pr. patient på den enkelte patients oversigt.</p>"}},"labels":[]},{"url":"https://api.github.com/repos/kaddio/platform/pulls/137","title":"Blog","state":"closed","number":137,"created_at":"2025-04-22T13:08:02Z","repo_name":"Platform","merged_at":"2025-04-23T18:40:28Z","body":"Introducing a new blog on kaddio.com","body_html":"<p dir=\"auto\">Introducing a new blog on kaddio.com</p>","translations":{},"labels":[]}]}