{ "badge": { "trigger": "Synthetische demo", "dialogLabel": "Over deze demo-omgeving", "close": "Sluiten", "orgIntro": "{{orgName}} is een fictieve organisatie. Alle namen, voertuigen en boekingen zijn synthetisch.", "orgIntroFallback": "Alle namen, voertuigen en boekingen in deze omgeving zijn synthetisch.", "realWorkflows": "De workflows, controles en automatisering zijn echt geïmplementeerd — enkel de gegevens zijn verzonnen.", "lastReset": "Laatste reset: {{when}} · deze omgeving is op elk moment herstelbaar.", "aboutLink": "Over deze demo", "unknown": "onbekend" }, "guide": { "dialogLabel": "Gegidste demo", "trigger": "Demo-gids", "kicker": "Gegidste demo · stap {{current}} van {{total}}", "whatYouWillSee": "Wat je zal zien", "whyItMatters": "Waarom dit relevant is", "startAction": "Aan de slag", "expectedOutcome": "Verwacht resultaat", "goToStep": "Ga naar deze stap", "next": "Volgende", "close": "Sluiten", "restart": "Demo opnieuw voorbereiden", "restarting": "Bezig met herstellen…", "restartFailed": "De demo kon niet hersteld worden.", "allStepsLabel": "Alle stappen", "progressChip": "Demo-gids · stap {{current}} van {{total}}", "expand": "Demo-gids uitklappen", "collapse": "Demo-gids inklappen", "steps": { "understand-state": { "title": "1. Begrijp de operationele status", "whatYouWillSee": "Het dashboard toont de wagenparkstatus, openstaande aandachtspunten en de bewegingen van vandaag.", "whyItMatters": "Een Operationsmanager start elke dag met dit overzicht om te bepalen waar ingrijpen nodig is.", "startAction": "Open het dashboard en bekijk de aandachtslijst en de tijdlijn van vandaag.", "expectedOutcome": "Je ziet welke boekingen, voertuigen of datakwaliteitsproblemen aandacht vragen." }, "open-booking": { "title": "2. Open een boeking die aandacht nodig heeft", "whatYouWillSee": "De boeking BK-DEMO-RETURN, actief en klaar voor retour vandaag.", "whyItMatters": "Retours zijn het moment waarop foute kilometerstanden of schade voor het eerst zichtbaar worden.", "startAction": "Open de boeking vanuit het dashboard of de boekingenlijst.", "expectedOutcome": "Je ziet de boekingsdetails en de knop om de retour te verwerken." }, "process-return": { "title": "3. Verwerk een retour met een afwijkende kilometerstand", "whatYouWillSee": "Een retourformulier met een vooringevulde, verdachte kilometerstand lager dan de laatst gekende stand.", "whyItMatters": "Een dalende kilometerstand wijst op een foutieve invoer of een verwisseld voertuig — dit moet vóór vrijgave worden opgemerkt.", "startAction": "Vul de retour in met de voorgestelde waarde en bekijk de serverpreview vóór je bevestigt.", "expectedOutcome": "De retour wordt verwerkt, het voertuig krijgt een passende status en er wordt automatisch een datakwaliteitsprobleem aangemaakt." }, "handle-quality-issue": { "title": "4. Bekijk en behandel het gecreëerde datakwaliteitsprobleem", "whatYouWillSee": "Een nieuw issue van het type 'kilometerstand-afwijking' bovenaan de werklijst.", "whyItMatters": "Elk gedetecteerd probleem heeft één afgebakende oplossingsstap — niets wordt automatisch stilzwijgend gecorrigeerd.", "startAction": "Open het datakwaliteitsoverzicht en kies het nieuwste issue.", "expectedOutcome": "Je ziet de aanbevolen actie, kiest een oplossing en het issue wordt opgelost met een audit-spoor." }, "merge-duplicate": { "title": "5. Beoordeel en behandel een mogelijke dubbele klant", "whatYouWillSee": "Twee klantprofielen met hetzelfde e-mailadres en telefoonnummer, naast elkaar vergeleken.", "whyItMatters": "Dubbele klanten leiden tot verspreide boekingsgeschiedenis en verwarrende communicatie.", "startAction": "Vergelijk beide profielen en kies welk profiel behouden blijft.", "expectedOutcome": "De profielen worden samengevoegd, boekingen worden herverbonden en het verliezende profiel wordt een tombstone." }, "ask-knowledge": { "title": "6. Stel een vraag aan de procedureassistent", "whatYouWillSee": "Een antwoord met bronvermelding uit de afgebakende demokennisbank.", "whyItMatters": "Medewerkers moeten snel een onderbouwd antwoord krijgen over procedures, zonder te gokken.", "startAction": "Klik op één van de voorbeeldvragen, in de huidige interfacetaal.", "expectedOutcome": "Je ziet het antwoord, de gebruikte procedure en de brontekst — of een eerlijk 'onvoldoende informatie' als dat niet aanwezig is." }, "check-automation-audit": { "title": "7. Controleer automatisering en auditgeschiedenis", "whatYouWillSee": "De status van de n8n-aflevering voor je retour, en de bijhorende audit-gebeurtenissen.", "whyItMatters": "Elke belangrijke actie moet naspeurbaar zijn: wie deed wat, wanneer, en wat was het gevolg.", "startAction": "Open Integraties om de afleverstatus te zien, en Auditgeschiedenis voor het volledige spoor.", "expectedOutcome": "Je ziet een geslaagde (of herstelbare) aflevering en een leesbaar audit-overzicht van je acties." }, "review-real-vs-simulated": { "title": "8. Bekijk wat echt is, gesimuleerd is, of nog niet gekoppeld", "whatYouWillSee": "Een overzicht van wat in deze demo functioneel geïmplementeerd is, wat synthetisch is, en welke koppelingen nog niet live zijn.", "whyItMatters": "Een demo is pas overtuigend als bezoekers zelf kunnen nagaan wat echt werkt en wat nog toekomstmuziek is.", "startAction": "Lees de pagina 'Over deze demo'.", "expectedOutcome": "Je kan zelf uitleggen wat {{productName}} wel en niet is, zonder mondelinge toelichting." } } }, "scenarios": { "eyebrow": "Demonstratiescenario's", "title": "Probeer een demonstratiescenario", "description": "Vijf afgebakende scenario's die telkens dezelfde vaste boekingen, klanten en voertuigen gebruiken — na een reset zijn ze altijd opnieuw te vinden.", "loading": "Scenario's laden…", "ready": "Klaar voor demo", "notReady": "Niet beschikbaar", "duration": "Duur", "durationValue": "± {{minutes}} min", "role": "Rol", "demonstrates": "Toont aan:", "requiresRole": "Vereist rol: {{roles}}.", "startScenario": "Scenario starten", "roleOr": "{{a}} of {{b}}", "roles": { "operations_manager": "Operationsmanager", "rental_employee": "Verhuurmedewerker" }, "items": { "return-anomaly": { "title": "Retour met afwijkende kilometerstand", "problem": "Een voertuig komt terug met een kilometerstand die lager ligt dan de laatst geregistreerde stand — een teken van een foutieve invoer of een verwisseld voertuig.", "demonstrates": "Retourverwerking, automatische detectie van datakwaliteitsproblemen en de auditgeschiedenis die daaruit ontstaat." }, "duplicate-customer": { "title": "Mogelijke dubbele klant samenvoegen", "problem": "Twee klantprofielen delen hetzelfde e-mailadres en telefoonnummer — waarschijnlijk dezelfde persoon, twee keer geregistreerd.", "demonstrates": "Samenvoegen van klanten met behoud van boekingsgeschiedenis en auditgeschiedenis." }, "booking-overlap": { "title": "Overlappende boekingen herstellen", "problem": "Eén voertuig staat dubbel gereserveerd voor overlappende periodes — een planningsfout die vóór vertrek moet worden opgelost.", "demonstrates": "Detectie en gecontroleerde oplossing van planningsconflicten." }, "automation-retry": { "title": "Mislukte automatisering opnieuw proberen", "problem": "Eén eerdere gebeurtenis kon niet worden afgeleverd aan de automatisering door een gesimuleerde verbindingsfout.", "demonstrates": "Betrouwbare aflevering met begrensde herpogingen en zichtbare foutstatus." }, "knowledge-question": { "title": "Een procedurevraag stellen", "problem": "Een medewerker weet niet zeker welke procedure van toepassing is bij een specifieke operationele situatie.", "demonstrates": "Antwoorden met brongebaseerde onderbouwing uit een afgebakende demokennisbank." } }, "blockedReasons": { "bookingNotFound": "Demoboeking BK-DEMO-RETURN niet gevonden. {{resetHint}}", "bookingAlreadyProcessed": "Deze boeking is al verwerkt sinds de laatste reset. {{resetHint}}", "duplicateIssueNotFound": "Demo-issue DQ-DEMO-DUPLICATE niet gevonden. {{resetHint}}", "issueAlreadyResolved": "Dit issue is al opgelost sinds de laatste reset. {{resetHint}}", "overlapIssueNotFound": "Demo-issue DQ-DEMO-OVERLAP niet gevonden. {{resetHint}}", "failedEventNotFound": "Gesimuleerde mislukte gebeurtenis niet gevonden. {{resetHint}}", "eventAlreadyRecovered": "Deze gebeurtenis is al hersteld sinds de laatste reset. {{resetHint}}", "knowledgeUnavailable": "De demokennisbank is momenteel niet beschikbaar.", "resetHint": "Reset de demogegevens om dit scenario opnieuw beschikbaar te maken." } }, "about": { "eyebrow": "Over deze demo", "title": "Wat {{productName}} wel en niet is", "description": "{{orgName}} is een fictieve verhuurorganisatie die dient om deze demo tastbaar te maken — geen bestaand bedrijf.", "loading": "Demo-informatie laden…", "ctaTitle": "Liever meteen aan de slag?", "ctaBody": "De gegidste demo doorloopt alle acht stappen hierboven in de praktijk.", "ctaButton": "Start begeleide demo", "problemTitle": "Het fictieve probleem", "problemBody": "{{orgName}} verhuurt zo'n 50 campers en bestelwagens vanuit één hoofdlocatie. Boekingen, retours, klantgegevens en onderhoud kwamen tot nu toe uit losse spreadsheets en mondelinge afspraken, waardoor fouten (dubbele klanten, foutieve kilometerstanden, dubbel geboekte voertuigen) laat aan het licht kwamen. {{productName}} toont hoe één samenhangend systeem die problemen vroeg signaleert en gecontroleerd laat oplossen.", "scopeTitle": "Voor wie en met welke scope", "scopeBody": "Deze demo is bedoeld voor wie wil zien hoe {{productName}} operationele problemen bij een kleine verhuurder aanpakt: Operationsmanagers en Verhuurmedewerkers, en iedereen die de aanpak evalueert. De scope is bewust afgebakend tot één samenhangende proof of concept — geen boekhouding, geen betalingen, geen publieke reservaties, geen volledig CRM of ERP.", "realTitle": "Wat écht werkt", "realBody": "Alles hieronder is functionele code, niet alleen een mockup: rol-gebaseerde toegang en sessies, voertuig- en boekingsbeheer, retourverwerking met serverzijdige validatie, vijf datakwaliteitsregels met elk een eigen oplossingsstap, een volledige auditgeschiedenis, geautomatiseerde aflevering naar n8n met begrensde herpogingen, Docker-gebaseerde deployment en een geautomatiseerde testsuite (backend en Playwright end-to-end).", "syntheticTitle": "Wat synthetisch is", "syntheticBody": "De organisatie, alle klanten, voertuigen, boekingen, onderhoudsgeschiedenis, procedures in de kennisbank en de vooraf ingerichte scenario's zijn volledig verzonnen. Geen enkel gegeven verwijst naar een bestaand persoon, voertuig of bedrijf; e-mailadressen gebruiken uitsluitend het testdomein {{testDomain}}.", "architectureTitle": "Architectuur in het kort", "architectureBody": "Een React/TypeScript-frontend praat met een FastAPI-backend (PostgreSQL via SQLAlchemy/Alembic-migraties); belangrijke bedrijfsregels leven in de backend, niet in n8n of in prompts. Retours en andere gebeurtenissen worden eerst lokaal gecommit en pas daarna asynchroon via een automatiseringsopdracht aan n8n afgeleverd, zodat een tijdelijke storing in de automatisering nooit een operationele actie blokkeert.", "securityTitle": "Beveiliging en toegang", "securityBody": "Toegang verloopt via ondertekende, HTTP-only sessiecookies per rol; elke rol gebonden aan een set toegestane routes, zowel serverzijdig afgedwongen als in de navigatie weerspiegeld. Belangrijke statuswijzigingen worden altijd gecontroleerd en gelogd — nooit stilzwijgend automatisch gecorrigeerd.", "testingTitle": "Hoe dit getest is", "testingBody": "Een geautomatiseerde backend-testsuite dekt bedrijfsregels en API-contracten; een volledige Playwright-eindtot-eind-suite dekt de gebruikersstromen, inclusief deze demo-ervaring zelf in drie talen. Elke wijziging wordt bovendien tegen een schone checkout (lege database, opnieuw opgebouwd vanaf de seed-data) gevalideerd voor deployment.", "integrationsTitle": "Koppelingen — eerlijk gelabeld", "integrationsDescription": "Wat operationeel is, wat demomodus is, en wat nog niet gekoppeld is.", "resetTitle": "Demo-omgeving herstellen", "resetBodyManager": "De omgeving is op elk moment terug te zetten naar de startsituatie. Laatste reset: {{when}}. Gebruik Demogegevens herstellen in de zijbalk om opnieuw te beginnen.", "resetBodyEmployee": "De omgeving is op elk moment terug te zetten naar de startsituatie. Laatste reset: {{when}}. Een Operationsmanager kan de demo-omgeving herstellen via de zijbalk.", "limitationsTitle": "Beperkingen", "limitationsBody": "Dit is een gerichte proof of concept, geen volledig ERP. RAGcore en de ITWorx MCP Hub zijn nog niet live gekoppeld; de kennisassistent gebruikt een lokale, afgebakende demokennisbank in plaats van een live RAGcore-omgeving.", "unknown": "onbekend" }, "integrationSummary": { "titles": { "n8n": "Automatisering (n8n)", "ragcore": "Kennisassistent (RAGcore)", "mcp_hub": "ITWorx MCP Hub" }, "n8nDetail": "{{succeeded}} geslaagd · {{failed}} mislukt · {{pending}} in wachtrij.", "ragcoreDetail": "{{count}} procedures geïndexeerd in {{collection}}.", "mcpDetailEnabled": "Voorbereid voor toekomstige, gecontroleerde tool-aanroepen vanuit de Hub.", "mcpDetailNotConnected": "Nog niet gekoppeld — voorbereid voor toekomstige, gecontroleerde tool-aanroepen vanuit de Hub." } }