Tulip non impedisce in modo nativo a due operatori di rivendicare contemporaneamente lo stesso lotto. Quando più operatori lavorano da una coda di lotti condivisa su dispositivi separati, può verificarsi una condizione di competizione: entrambi i dispositivi leggono lo stato del lotto come “In sospeso”, entrambi scrivono “In corso” ed entrambi accedono all’app di esecuzione. Il risultato è l’esecuzione parallela di un singolo record di lotto, il che compromette la conformità del processo e invalida il lotto.
Un semplice aggiornamento dello stato non è sufficiente. La soluzione è un blocco del record: un campo dedicato che associa il lotto a un unico responsabile prima dell’inizio dell’esecuzione, verificato prima che sia consentita la navigazione.
> Questo modello si applica a qualsiasi scenario con coda condivisa in Tulip: lanciatori di batch, prelievo degli ordini di lavoro, assegnazione delle attività — ovunque più operatori effettuino selezioni da un elenco condiviso di record su dispositivi separati.
Modelli di blocco
Tulip supports Due modelli di blocco. Il modello 1 memorizza il blocco sul record del lotto stesso, con due opzioni a seconda che il blocco avvenga per stazione o per utente. Il modello 2 utilizza la struttura esistente della tabella delle stazioni.
| Modello | Opzione | Il blocco risiede su | Modifica dello schema? | Ideale per |
|---|---|---|---|---|
| 1 - Blocco in batch delle tabelle | A: Blocco per stazione | Tabella batch | Sì - una colonna | Stazioni fisse, blocco visibile nel record del lotto |
| 1 - Blocco della tabella dei lotti | B: Blocco per utente | Tabella dei lotti | Sì - una colonna | Dispositivi condivisi, audit trail con nome |
| 2 - Proprietà della postazione | - | Tabella delle stazioni | No | Postazioni fisse |
Quando utilizzare il blocco dei record
Applicare questo modello quando:
- più operatori condividono una coda di record su cui è possibile eseguire azioni su dispositivi separati
- Due operatori potrebbero selezionare contemporaneamente lo stesso record
- L'esecuzione in parallelo violerebbe la conformità del processo o l'integrità dei dati
Questo modello non è necessario quando ogni operatore lavora su un batch preassegnato, quando un solo dispositivo accede alla tabella alla volta, oppure quando Tulip Automations gestisce l’assegnazione dei batch prima che gli operatori interagiscano con la coda.
Modello 1: Blocco della tabella dei batch
Tulip scrive un valore di proprietà in una colonna dedicata della tabella dei lotti, quindi rilegge il campo per verificare che il blocco sia stato acquisito prima di consentire la navigazione. Due tipi di campo coprono i due casi d’uso principali.
Opzione A: Blocco per stazione
Aggiungi una colonna alla tua tabella dei lotti:
| Colonna | Tipo | Scopo |
|---|---|---|
locked_by_station |
Stazione | Memorizza la stazione richiedente. Vuoto = sbloccato. |
Un campo nativo di tipo "Stazione" garantisce che in questa colonna possa essere inserita solo una stazione Tulip valida.
Sequenza di richiesta e verifica:
- Leggi
ilcampolocked_by_stationsul lotto selezionato. - Se popolato, bloccare la navigazione. Visualizzare: "Questo lotto è bloccato da un'altra stazione."
- Se vuoto: scrivere la stazione corrente in
locked_by_station. - Rileggere
locked_by_station. - Se il valore corrisponde alla stazione corrente, procedere all’applicazione di esecuzione.
- Se il valore indica una stazione diversa: bloccare la navigazione. Visualizzare il messaggio di errore.
- Al completamento del batch - azzerare
locked_by_station``.
La rilettura nei passaggi 4-6 è fondamentale. Se due stazioni scrivono contemporaneamente, solo una scrittura viene mantenuta. La rilettura determina quale stazione ha prevalso.
Ideale per: ambienti in cui gli operatori lavorano da postazioni fisse e identificate.
Opzione B: Blocco per utente
Identica all’Opzione A, ma utilizza un campo di tipo «Utente». Il blocco è associato all’operatore che ha effettuato l’accesso anziché al dispositivo, il che supporta le tracce di audit identificate in ambienti regolamentati e gestisce i flussi di lavoro con dispositivi condivisi in cui più operatori condividono lo stesso dispositivo.
Aggiungere una colonna alla tabella batch:
| Colonna | Tipo | Scopo |
|---|---|---|
locked_by_user |
Utente | Memorizza l'operatore che effettua la richiesta. Vuoto = sbloccato. |
Sequenza di richiesta e verifica:
- Leggere
locked_by_usersul lotto selezionato. - Se popolato - bloccare la navigazione. Visualizzare: "Questo batch è bloccato da [Nome utente]."
- Se vuoto: scrivere l’utente corrente in
locked_by_user. - Rileggere
locked_by_user. - Se il valore corrisponde all'utente corrente, procedere all'applicazione di esecuzione.
- Se il valore indica un utente diverso, bloccare la navigazione. Visualizzare il messaggio di errore.
- Al completamento del lotto: azzerare
locked_by_user.
Ideale per: ambienti con dispositivi condivisi nel settore farmaceutico, dei dispositivi medici o in settori regolamentati in cui la conformità richiede una registrazione con nome utente di ogni esecuzione di lotto.
Modello 2: Proprietà della stazione
La tabella delle stazioni di Tulip (disponibile nella Libreria) include una colonna order_id. Scrivendo un ID ordine nel campo order_id di una stazione, si designa quella stazione come proprietaria dell’ordine. Qualsiasi altra stazione che tenti di avviare lo stesso ordine troverà il campo già compilato e verrà bloccata.
Non sono necessarie modifiche allo schema.
Sequenza di richiesta e verifica:
- Eseguire una query sulla tabella delle stazioni per individuare eventuali stazioni in cui
l’`order_id`corrisponda all’ordine selezionato. - Se viene trovata una corrispondenza, bloccare la navigazione. Visualizzare il messaggio: "Questo lotto è già in corso presso un'altra stazione."
- Se non viene trovata alcuna corrispondenza, scrivere l’ID dell’ordine nel campo
`` order_id`` della stazione corrente. - Eseguire nuovamente la query sulla tabella Stations per confermare che nessun'altra stazione abbia registrato lo stesso ordine nell'intervallo tra i passaggi 1 e 3.
- Se nessun'altra stazione detiene questo ID ordine, procedere all'applicazione di esecuzione.
- Se ora un'altra stazione lo detiene, bloccare la navigazione. Visualizzare il messaggio di errore.
- Al completamento del lotto, azzerare il campo
order_id`` della stazione.
Se un dispositivo si blocca durante l'elaborazione del lotto, l'
`order_id`della stazione rimane impostato. Fornire una funzione di "Rilascio forzato " per il supervisore che azzeri manualmente il campo.
Ideale per: postazioni di lavoro fisse e identificate. La tabella delle stazioni può anche fungere da vista in tempo reale dell’area di lavoro: interrogandola si può vedere quale stazione sta eseguendo quale ordine in un dato momento.
Comportamento visibile all’operatore
Quando un lotto è bloccato, l’operatore dovrebbe ricevere un messaggio chiaro, non un errore di sistema.
- Nella dashboard dei lotti, utilizzare la formattazione condizionale di Tulip o una tabella interattiva filtrata per contrassegnare visivamente i lotti bloccati (ad esempio, un indicatore “Bloccato” o una riga disattivata).
- Al tocco, visualizzare: "Questo lotto è attualmente in esecuzione da parte di un altro operatore. Selezionare un lotto diverso."
- Aggiungere un trigger a tempo (ad es. ogni 30 secondi) per aggiornare automaticamente l’elenco dei lotti, in modo che i blocchi rimossi vengano riportati tempestivamente.
Rilascio del blocco
Creare un trigger all’uscita dall’app che azzeri il campo di blocco. Gestire i seguenti scenari di uscita:
| Scenario di uscita | Trigger da utilizzare |
|---|---|
| Il batch si completa normalmente | Trigger "App completata" |
| Il batch viene annullato | Trigger "App annullata" - ripristina anche lo stato del batch |
| L'operatore esce durante l'esecuzione | Trigger "App chiusa" |
| Arresto anomalo del dispositivo o sessione che non risponde | Rilascio forzato da parte del supervisore - azzeramento manuale del campo di blocco |
Casi limite
| Scenario | Gestione |
|---|---|
| Il dispositivo si blocca durante l’elaborazione di un batch | Il supervisore azzera il campo di blocco tramite "Rilascio forzato" |
| L'operatore si allontana senza aver completato l'operazione | Il supervisore azzera il campo di blocco tramite "Force Release" |
| Disconnessione dalla rete durante la scrittura | La fase di verifica tramite rilettura rileva le discrepanze causate da scritture parziali |
| Test | Eseguire il test su due dispositivi con lo stesso lotto entro 1-2 secondi. Solo uno dovrebbe procedere all’applicazione di esecuzione |
Risorse correlate
- Trigger - Best practice - include indicazioni su come evitare condizioni di competizione con le variabili
- Revisione dei dati per la conformità GxP: esaminare i flussi di lavoro relativi alla conformità dei lotti
- Widget Cronologia record - tiene traccia delle modifiche apportate ai record bloccati
- Raccolta dati GxP - modelli di acquisizione dei dati regolamentati
- Gruppo di app eBR Review - flussi di lavoro per la revisione dei record di lotto
- Dashboard della produzione in lotto - l’app di avvio in cui si applica questo modello
- Suite di registrazioni elettroniche dei lotti (eBR) - il flusso di lavoro eBR più ampio
