# Release notes ## Samenvatting Deze release brengt grote workflow‑verbeteringen, waaronder integratie van een agenda‑feed, een nieuw TransPas‑reserverings‑UI, en de mogelijkheid voor stalhouders om hun eigen paarden en mede‑rijders toe te voegen. De prestaties zijn verbeterd door het laden van paard‑ en contactoverzichten, en de app‑bundlegrootte is aanzienlijk verkleind. Diverse beveiligings‑ en stabiliteitsfixes verhogen de betrouwbaarheid van facturering, opslag en edge‑functies. ## Hoogtepunten - Integratie van agenda‑feed maakt synchronisatie van activiteiten met externe agenda's mogelijk - Stalhouders kunnen nu hun eigen paarden toevoegen en mede‑rijders toewijzen - TransPas faciliteit reserverings‑UI voegt speciale bewerk‑ en verplaatsingsschermen toe - Paard‑ en contactlijsten laden nu lichtere overzichten, waardoor pagina's sneller laden - App‑bundlegrootte verkleind, waardoor downloadtijden voor native apps korter zijn - Facturen kunnen nu een persoonlijk WhatsApp‑bericht bevatten ## Nieuwe functies - **Synchroniseer je agenda met externe agenda's** Je kunt nu iCal‑feeds genereren voor je activiteiten en deze toevoegen aan agenda's zoals Google of Outlook, waardoor eenvoudige synchronisatie van je planning mogelijk is. - **Contactlijst toont nu rollen, duplicaat‑aantal en filters** Het contactoverzicht bevat roletags, een duplicaat‑telwaarde en nieuwe filteropties, waardoor je in één oogopslag meer informatie krijgt. - **Nieuwe UI voor TransPas faciliteit reserveringen** Biedt speciale formulieren voor het bewerken, verplaatsen en bekijken van TransPas‑reserveringen, met een verbeterde rasterweergave en kleurcodering per been‑nummer. - **Open‑dag acties direct vanuit de agenda‑kop** Klikken op een dag‑kop opent het actiemenu, en lege kolom‑koppen worden verborgen in de mobiele volledige‑dag weergave. - **Uitnodigingsflow vraagt nu bestaande gebruikers om in te loggen** Wanneer een uitnodiging een e‑mailadres dat al in het systeem staat betreft, toont de pagina een login‑scherm in plaats van het aanmeldingsformulier, waardoor acceptatie eenvoudiger wordt. - **Stalhouders kunnen hun eigen paarden toevoegen en mede‑rijders toewijzen** Een nieuwe ‘Eigen paard(en) toevoegen’‑knop laat gebruikers paarden die ze bezitten aanmaken, en beheer van mede‑rijders maakt het mogelijk rijders aan die paarden toe te voegen. - **Uitgavenmodule ondersteunt nu het aanmaken van factuuritems en heeft een duidelijkere UI** Nieuwe tags, een herontworpen uitgavenlijst, en de mogelijkheid om direct factuuritems vanuit uitgaven te genereren, stroomlijnen de financiële workflows. - **Tekst van terugkerende activiteit houdt nu rekening met je taal** RRule‑beschrijvingen worden getoond in de taal van de app, met vertaalde dag‑ en maandnamen. - **Uitnodigingen vragen nu om in te loggen wanneer het e‑mailadres al een account heeft** De uitnodigingspagina toont een login‑scherm en begeleidt gebruikers om de uitnodiging te accepteren na inloggen. - **WhatsApp‑factuurberichten bevatten nu de naam van de ontvanger** WhatsApp‑facturen begroeten klanten met hun voornaam, wat de personalisatie verbetert. - **Paardenbestanden hebben nu een SharePoint‑achtige browser met mappen** Je kunt mappen aanmaken, hernoemen, verplaatsen en verwijderen, voorvertoningen bekijken, en bestanden direct vanuit de paard‑bestand‑tegel delen. - **Voer‑rapport toont nu hoeveelheden, totalen en Excel‑export** Het maandelijkse voer‑rapport bevat gedetailleerde hoeveelheden per paard, totale sommen, en een downloadbaar XLSX‑bestand. - **Taken kunnen nu aan een specifieke medewerker worden toegewezen** Bij het aanmaken van een taak kun je een medewerker selecteren die verantwoordelijk is voor de taak. - **Contacten kunnen nu een apart factuur‑e‑mailadres hebben** Een optioneel factuur‑e‑mailveld is toegevoegd aan contactformulieren, zodat facturen naar een ander adres kunnen worden gestuurd. - **Werkgelegenheidsrecords bevatten nu een startdatumveld** Bij het aanmaken van een dienstverband kun je de oorspronkelijke startdatum van de medewerker bij de stal aangeven. - **Terugkerende diensten kunnen worden gefilterd op klant** Een nieuw filter maakt het mogelijk terugkerende dienstitems voor een geselecteerde contactpersoon te bekijken, waardoor het financieel overzicht verbetert. - **API retourneert nu de commit‑hash van de vorige release** Het /api/version‑endpoint bevat nu een previousCommitHash‑veld voor eenvoudigere wijzigingsvolging. - **Je kunt nu een specifiek aantal semenvoorraad verwijderen** Het ‘Voorraad vernietigen’-dialoogvenster laat nu een aangepast aantal porties invoeren in plaats van alle resterende voorraad te verwijderen. - **Release‑notes worden gegenereerd in het Engels, Duits en Nederlands** De notes‑generator maakt meertalige releases en linkt gebruikers naar notities in hun eigen taal. ## Verbeteringen - **Land‑dropdowns zijn nu doorzoekbaar met vlaggen** Alle land‑selecties zijn vervangen door een doorzoekbaar component dat vlaggen toont en undefined retourneert voor geleerde optionele velden, waardoor validatie‑issues worden verholpen. - **Paardenlijst werkt nu soepel op mobiele apparaten** Eén‑tap navigatie, verfijnde selectie‑handling, scroll‑herstel en betere spacing verbeteren de mobiele ervaring. ## Opgeloste problemen - **Dag‑deel fouten verschijnen nu naast de juiste rij** Validatiefouten van de API worden inline weergegeven op de specifieke dag‑deel regel, waardoor duidelijk is welke invoer correctie vereist. - **Contactinitialen altijd zichtbaar en gebruikt in zijbalk‑avatars** Het initialen‑veld wordt altijd getoond bij het bewerken van contactpersonen, en profiel‑avatars tonen nu de initialen van het contact voor snelle identificatie. - **Zoekresultaten tonen nu de juiste bronnaam** De multi‑resultaat‑modal geeft nu een generiek bronlabel en vermeldt correct welke bronnen elk resultaat hebben opgeleverd. - **Gefinaliseerde facturen vergrendelen nu de valuta en synchroniseren wijzigingen** Wanneer een factuur wordt gefinaliseerd, wordt het valutaveld uitgeschakeld en worden wijzigingen aan de klant doorgevoerd in de PDF, wat consistentie garandeert. - **Factuurverzending toont nu voortgang en waarschuwt bij falen** Het systeem pollt de verzendstatus en meldt je als de factuur niet bevestigd is, waardoor wachtijden worden verkort. - **Ontbrekende openbare facturen tonen een vriendelijke 404‑pagina** Wanneer een publieke factuur‑URL ongeldig is, zien gebruikers een duidelijke niet‑gevonden pagina in plaats van een generieke fout. - **Picklist toont geen sperma dat na de besteldatum is verzameld** Alleen voorraad beschikbaar tot de verzenddatum van de order wordt weergegeven, waardoor selectie van toekomstige voorraad wordt voorkomen. - **Niet‑toegestane CORS‑origins geven nu 404 in plaats van fouten** Edge‑functions weigeren onbekende origins nu netjes met een 404 en accepteren nu verzoeken van shop‑domeinen. - **Toegang tot lokale en sessie‑storage nu beschermd tegen beveiligingsfouten** De app behandelt veilig gevallen waarin browser‑storage niet beschikbaar is, waardoor crashes worden voorkomen. - **Telefoons zijn vergrendeld op portrait‑oriëntatie terwijl tablets landschapsmodus behouden** De mobiele app dwingt nu portrait‑modus op telefoons af, waardoor de lay‑out stabiliteit op handhelds verbetert. - **Opslaan van een faciliteit‑evenement zonder paard behoudt de slots** Het formulier wist de slots niet langer wanneer er geen paard geselecteerd is, waardoor evenementdetails behouden blijven. - **Netwerkfouten bij versie‑check worden gelogd als waarschuwingen** Mislukte min‑versie‑opvragingen genereren geen Sentry‑fouten meer, waardoor ruis door onschuldige netwerkissues afneemt. - **Mislukte geluids­weergave triggert geen foutmeldingen meer** Audio‑afspeelfouten worden gelogd als waarschuwingen, waardoor onnodige foutmeldingen worden voorkomen. - **Afbeeldings‑uploads vallen terug op het originele bestand wanneer EXIF mislukt** Als oriëntatiedata niet gelezen kan worden, wordt het oorspronkelijke beeld gebruikt en wordt een waarschuwing gelogd. - **Validatie van activiteitsformulieren toont nu fouten in de app in plaats van ze te loggen** Gebruikers‑zichtbare validatie‑meldingen vervangen Sentry‑foutenrapporten voor problemen in activiteitsformulieren. - **Profiel‑laden vermijdt overmatige stal‑queries** Wanneer een gebruiker tot veel organisaties behoort, stopt de app met het ophalen van stallen om resource‑uitputtingsfouten te voorkomen. - **Sticky elementen blijven zichtbaar boven de impersonatie‑banner** Lay‑out‑offsets zorgen er nu voor dat plakkerige headers en sidebars niet verborgen worden door de vaste impersonatie‑balk. - **API‑cache sluit nu verouderde connecties en time‑out bij versie‑wijzigingen** Database‑connecties worden correct gesloten en time‑out toegepast, waardoor pagina's niet meer hangen bij laden. - **KMAR‑fase verschijnt nu in paard‑statusdialogen** Het ontbrekende KMAR‑label is toegevoegd zodat de fase geselecteerd en correct weergegeven kan worden. - **Veld ‘Boxnummer’ accepteert nu numerieke invoer** Het bewerkingsformulier parseert box‑nummers nu correct als getallen, waardoor validatiefouten verdwijnen. - **Faciliteit‑evenementen behouden slots bij opslaan zonder paard** Het formulier wist de slots niet meer wanneer er geen paard is geselecteerd, waardoor de slot‑informatie van het evenement behouden blijft. - **Mest berekeningsbrochure nu intern gehost** De kapotte externe link is vervangen door een interne kopie van de RVO‑brochure. - **Voer‑rapporten tonen hoeveelheidseenheden in de geselecteerde taal** Afkortingen zijn vervangen door gelokaliseerde termen, wat de duidelijkheid in voer‑schema's verbetert. - **Web‑app‑manifest bevat nu een tekst‑beschrijving** Het beschrijvingsveld is een string, waardoor browser‑waarschuwingen verdwijnen. - **Paard‑auto‑completing start alleen wanneer je op de knop drukt** De zoekopdracht tegen externe databases wordt handmatig gestart, waardoor onnodige backend‑aanroepen worden verminderd. - **Agenda‑rijderfilter toont nu alleen rijders van de geselecteerde stal** Wanneer een stal wordt gekozen, wordt de standaard rijderlijst beperkt tot de paarden van die stal. - **Verbinden van boekhoud‑services vereist nu de Accounting‑module** Poging om Moneybird, Exact, Snelstart of Yuki toe te voegen toont een upgrade‑modal als het abonnement de Accounting‑functie niet bevat. - **Registratie toont een fout wanneer wachtwoorden niet overeenkomen** Het herhaal‑wachtwoord‑veld toont nu correct een waarschuwing bij een mismatch. - **Vertaal‑taak stopt bij parser‑fouten en folder‑file‑count‑key gerepareerd** Het CI‑script stopt nu de build wanneer vertalingsextractie faalt, en een ontbrekende standaard voor folder‑file‑count is toegevoegd. - **Facturatie‑lijst op mobiel toont nu meer details** Compacte rijen tonen extra informatie en headers worden correct uitgelijnd, waardoor mobiel factureren duidelijker wordt. - **Verse porties‑rij blijft zichtbaar zelfs wanneer voorraad nul is** De rij toont nu een streepje in plaats van te verdwijnen, waardoor de lay‑out consistent blijft. ## Beveiliging - **Voorkom open‑redirect aanvallen en verberg PDF‑token in logs** Redirect‑URL's worden gevalideerd om open redirects te blokkeren, en PDF‑generatie logt het authenticatietoken niet meer, wat de beveiliging verbetert. ## Prestaties - **Native app‑bundles zijn nu aanzienlijk kleiner** Opstart‑afbeeldingen en source maps zijn verwijderd uit native builds, waardoor iOS‑IPA‑grootte van tot 39 MB naar circa 11 MB daalt en Android‑APK‑grootte evenredig. - **Paardenlijsten laden nu samenvattingen i.p.v. volledige records** Filters en zoekopdrachten halen nu lichte paard‑samenvatting‑data op, waardoor pagina's die voorheen alle paard‑velden lieten laden, sneller zijn. ## Overig - **Herhaalde bestellingen gebruiken nu standaard de meest recente bestelling** Bij het aanmaken van een herhaal‑order vult het systeem velden automatisch in met gegevens van de laatste order, waardoor het bestelproces wordt gestroomlijnd. - **Android‑build ondersteunt nu R8‑optimalisatie** Het Android‑project is geconfigureerd om de R8 code‑shrinker te gebruiken. - **TS‑configuratie target nu ESNext‑modules** Het TypeScript‑project maakt nu gebruik van ESNext module‑syntaxis. - **feat(breedingPlans): filter on plans without agent / insemination station** - **ResizeObserver‑lus‑fouten worden genegeerd in fouttracking** Onschuldige ResizeObserver‑waarschuwingen genereren geen Sentry‑meldingen meer. - **TS target ingesteld op ES2022 en PDF worker geladen vanuit package** Het project compileert nu naar ES2022 en gebruikt pdfjs‑dist voor PDF‑afhandeling. - **Release‑notes‑generator valt nu terug op alternatieve Ollama‑API‑sleutels** Als de primaire sleutel wordt afgewezen, probeert het systeem extra sleutels, waardoor generatie van release‑notes doorgaat.