Een automatisering kan op een punt komen waarop ze niet verder mag zonder een beslissing, een gegeven of een controle. Zo kan goedkeuring nodig zijn voordat een gevoelige bewerking wordt bevestigd, of moet de automatisering wachten op informatie die alleen een persoon kan verstrekken. In zulke gevallen moet het systeem een herstelbare status bewaren en duidelijk maken wat er nog ontbreekt, in plaats van alleen de huidige uitvoering te stoppen.
Een automatisering in PHP zo ontwerpen dat ze kan worden gepauzeerd en hervat, betekent dat je de processtatus scheidt van de uitvoering van het werk. De pauze moet bewust worden ingesteld, persistent en controleerbaar zijn; bij hervatting moet worden gecontroleerd of het proces nog geldig is en of eerder toegepaste effecten niet worden herhaald. Dit is iets anders dan een beoordelingswachtrij ontwerpen: hier ligt de nadruk op de levenscyclus van de workflow en op een veilige voortzetting ervan.
Maak onderscheid tussen pauzeren, wachten en mislukken

Niet elk proces dat niet verdergaat, is gepauzeerd. Een API-aanroep waarop nog geen antwoord is ontvangen, is een externe wachttijd. Een netwerkfout kan aanleiding geven tot een nieuwe poging. Een niet-herstelbare uitzondering kan het proces als mislukt beëindigen. Een bewuste pauze betekent daarentegen dat de workflow een bekend grenspunt heeft bereikt en een expliciete voorwaarde nodig heeft om door te gaan of te stoppen.
Een aparte status voor elke situatie voorkomt verkeerde operationele beslissingen. Een actie die op goedkeuring wacht opnieuw uitvoeren, kan een onnodig verzoek herhalen; een legitieme pauze als fout behandelen kan waarschuwingen of herstelbeleid activeren die niet van toepassing zijn. Definieer minimaal afzonderlijke statussen voor uitvoering, externe wachttijd, interventie vereist, voltooid, geannuleerd en mislukt. Voeg een vervaltermijn toe als de bedrijfsvoering vereist dat een pauze na een bepaalde termijn niet meer geldig is.
Leg voordat je een pauze toevoegt vast wat die veroorzaakt en wie de kwestie mag oplossen. Een openstaande taak die automatisch wordt voltooid zodra er een antwoord binnenkomt, vereist niet altijd menselijke tussenkomst. Een beslissing met financiële, juridische, toegangs- of beveiligingsgevolgen kan die wel vereisen. Dit onderscheid bepaalt wie actie mag ondernemen, welk bewijs moet worden opgeslagen en wat er gebeurt als niemand reageert.
Sla de status en het hervattingspunt persistent op
Het proces moet blijven bestaan nadat het PHP-verzoek is afgelopen, een worker opnieuw is gestart en een nieuwe versie van de service is uitgerold. Sla een stabiele identificatie, de huidige status, de bereikte stap, de reden voor de pauze, verwijzingen naar de benodigde gegevens en relevante tijdstempels op in persistente opslag. Registreer waar van toepassing ook wie het proces heeft gepauzeerd of opgelost, en welke beslissing is genomen.
Sla niet alleen een bericht op zoals ‘wacht op goedkeuring’. Daarmee is niet vastgelegd welke uitvoering is stilgezet, welke stap moet worden hervat en of de gegevens zijn gewijzigd. Modelleer de pauze in plaats daarvan als onderdeel van het procesmodel, met voldoende context om de hervatting te valideren. Bewaar waar mogelijk verwijzingen naar gevoelige informatie in plaats van die informatie onnodig te dupliceren; pas toegangs- en bewaarbeperkingen toe die bij de aard ervan passen.
Definieer toegestane transities en controleer die op de server. Een proces met de status interventie vereist kan bijvoorbeeld overgaan naar uitvoering, geannuleerd of verlopen; een voltooid proces mag via een gewoon verzoek niet opnieuw naar uitvoering gaan. Een PHP-functie kan de transitie valideren, maar de regel moet ook tegen gelijktijdige bewerkingen in de database worden beschermd, niet alleen in de interface.
Scheid de procesregistratie van de uitvoering
Vastleggen dat het proces moet doorgaan en de stappen uitvoeren zijn verwante, maar niet identieke bewerkingen. Als de status wordt bijgewerkt en het proces stopt voordat het werk begint, kan de workflow vastlopen. Als het werk begint voordat de transitie is opgeslagen, kan een herhaling dezelfde stap opnieuw uitvoeren. Ontwerp de coördinatie zo dat de persistente status het mogelijk maakt openstaand werk te herstellen.
Een veelgebruikte optie is om de transitie en een instructie om door te gaan in één databasetransactie op te slaan, bijvoorbeeld met het transactional outbox-pattern. Een afzonderlijke worker leest die instructie en voert de volgende stap uit. De concrete keuze hangt af van de architectuur; belangrijk is dat het systeem niet-verwerkt werk kan detecteren en herstellen, in plaats van erop te vertrouwen dat een webverzoek actief blijft.
Externe effecten vereisen extra aandacht. Een lokale transactie kan op zichzelf een verzonden e-mail, een bevestigde betaling of een aanroep die door een andere service al is geaccepteerd, niet ongedaan maken. Ontwerp elke stap met een idempotency key als de ontvangende partij dat ondersteunt, registreer het resultaat voordat je verdergaat en houd rekening met reconciliatie of compensatie wanneer een bewerking niet veilig kan worden herhaald. Markeer een stap pas als voltooid als je weet wat het resultaat was.
Beheers hervatten, annuleren en verlopen
Bij het hervatten moet de actuele status worden gecontroleerd, evenals de identiteit en rechten van degene die het verzoek indient en of aan de vereiste voorwaarden is voldaan. Het is niet voldoende om een geautoriseerde gebruiker een knop te tonen: de server moet alles opnieuw valideren zodra het verzoek binnenkomt. Als voor de beslissing een toelichting of aanvullende informatie nodig is, valideer die dan en bewaar ze als onderdeel van de afhandeling.
Behandel annuleren en verlopen ook als expliciete transities, niet als het verwijderen van de registratie. Annuleren moet nieuwe stappen verhinderen en duidelijk maken of er eerdere effecten zijn die niet ongedaan kunnen worden gemaakt. Bij verlopen moet worden bepaald wat er daarna gebeurt: het proces beëindigen, om een nieuwe interventie vragen of de kwestie naar een andere actie doorverwijzen. Het gedrag hangt af van de bedrijfsregel en moet voor operations inzichtelijk zijn.
Herhaalde verzoeken en racesituaties zijn normaal: iemand kan dubbelklikken of twee actoren kunnen vrijwel gelijktijdig handelen. Gebruik een voorwaardelijke update, een lock of versiebeheer zodat slechts één geldige transitie wordt doorgevoerd. Een tweede verzoek moet een resultaat opleveren dat overeenkomt met de huidige status, zonder effecten opnieuw uit te voeren. Sla een bewerkings-ID of idempotency key op om herhalingen te herkennen.
Maak de pauze begrijpelijk en controleerbaar
De operationele weergave moet uitleggen waarom het proces is stilgezet, welke stap nog openstaat, welke informatie ontbreekt, wie actie mag ondernemen en welke gevolgen elke optie heeft. Vermijd onduidelijke knoppen of acties waarin goedkeuren, gegevens corrigeren en doorgaan worden gecombineerd. Toon alleen de informatie die nodig is om een beslissing te nemen, met toegang die per rol is beperkt. Met een geschiedenis van transities kun je een legitieme wachttijd onderscheiden van een vastgelopen of verkeerd geconfigureerd proces.
Test de workflow op onderbrekingen vóór en na elk extern effect. Controleer of een herstart de pauze bewaart, of herhaald hervatten geen acties dupliceert en of annuleren verdere stappen verhindert. Neem scenario’s op waarin gegevens tijdens de onderbreking zijn gewijzigd, rechten zijn ingetrokken, de pauze is verlopen, antwoorden te laat binnenkomen en twee verzoeken gelijktijdig worden ingediend. Controleer ook de logs en waarschuwingen: daarmee moet je het proces kunnen vinden en de volgende stap begrijpen zonder geheimen bloot te geven.
Checklist om het juiste gedrag te bepalen

- Wachten: er is een externe reactie in behandeling en het systeem kan automatisch doorgaan zodra die binnenkomt, met vastgelegde time-outs en herstelprocedures.
- Pauzeren voor interventie: er is een expliciete menselijke beslissing of een gegeven nodig voordat latere stappen worden uitgevoerd.
- Opnieuw proberen: er is een tijdelijke fout opgetreden en de stap kan veilig worden herhaald of is met idempotentie beschermd.
- Beëindigen: er is geen geldige voortzetting, of het proces is voltooid, geannuleerd, verlopen of definitief mislukt.
Controleer voordat je de workflow uitrolt of elke transitie is geautoriseerd, de status persistent wordt opgeslagen, eerdere effecten niet worden herhaald en het team weet hoe het de pauze kan oplossen. Als je niet kunt aangeven wat wordt hervat, met welke gegevens en onder welke voorwaarden, heeft het proces nog geen veilig hervattingspunt.



