senaite.storage begann als Karte: Einrichtungen, Positionen,
Container. Man legte eine Probe in ein Fach, wusste, wo sie
liegt. Die letzten Monate haben aus der Karte einen
Lebenszyklus gemacht: wie lange Material verbleibt, warum es
wieder herauskommt, und wie man mit einem Scanner in der Hand
das richtige Regalfach findet.
Konfigurierbare Aufbewahrung
Jedes akkreditierte Labor hat Aufbewahrungsregeln. Wasserproben
halten so lange, Blutproben so lange, “Chikungunya positiv”
wieder anders. Bis
#62 hat
senaite.storage davon nichts gewusst. Aufbewahrung lebte in
einer Tabelle.
Das neue Retention Rules-Raster im Storage-Konfigpanel verknüpft einen Analyse-Service, optional einen bestimmten Ergebniswert, mit einer Aufbewahrungsdauer in Tagen. Der Matching-Algorithmus ist explizit:

- Alle Analysen der Probe durchlaufen.
- Für jede Analyse die Regeln nach Service-UID durchsehen.
- Definiert die Regel einen Ergebniswert, auch danach matchen.
- Regeln mit Ergebniswert schlagen allgemeine Regeln.
- Matchen mehrere Regeln, gewinnt die längste Dauer.
Das deckt zwei reale Muster sauber ab. Ist der Organismus das Ergebnis eines Tests (Service “Identifizierter Organismus”, Resultat “E. coli”), matcht man auf den Ergebniswert. Ist der Organismus ein eigener Test (Service “Chikungunya”, Resultat Positiv oder Negativ), matcht man auf dasselbe Feld. Die Store-Ansicht befüllt die Aufbewahrungstage automatisch aus der Regel; nur wenn nötig überschreibt jemand.
Ergänzungen folgen: #63 bringt ergebnistyp-spezifische Steuerungen (unterschiedliche Felder für numerische und String-Resultate), #64 macht das Ablaufdatum als Spalte sichtbar, #65 fügt einen Filter “Past Retention” hinzu, und #66 färbt abgelaufene Proben rot. Am Ende steht ein Listing, in dem die Kollegin am Montagmorgen im Kühlschrank auf einen Blick sieht, was zur Entsorgung wandert.
Aus Recover wurde Retrieve
Klein, aber wichtig, wenn Auditoren SOPs lesen.
#67
benennt jedes sichtbare Vorkommen von “recover” in “retrieve”
um, angelehnt an die Terminologie von ISO 17025 und ISO 15189.
Interne Transition-IDs (recover, recover_samples) und
Berechtigungs-Strings bleiben unverändert, damit Add-ons, die
darauf hängen, weiterhin funktionieren. Nur Labels, Buttons und
Meldungen sind gewandert.
Pflichtgrund beim Retrieve
Bei Zurückweisungen fragt SENAITE seit jeher nach dem Warum. Bei Rückholen aus dem Lager bislang nicht. Das ist eine Lücke im Audit-Trail: Eine Probe ging ins Lager und kam wieder heraus, ohne dass festgehalten war, ob es für einen Rerun, eine Kundenanfrage oder eine Zweitmeinung war.
#70 bringt ein Retrieve Reasons-Raster ins Storage-Konfigpanel. Lab-Manager konfigurieren die Auswahlliste (“Rerun”, “Kundenanfrage”, “Externe Bestätigung”), ein Toggle macht die Auswahl verpflichtend. Löst man Retrieve auf einer gelagerten Probe aus, landet man auf einem Formular, wählt einen Grund oder tippt einen eigenen via “Andere…”. Ein Info-Viewlet auf der Probe trägt Grund, Bearbeiter und Datum ab da dauerhaft.
Code128-Etiketten für Lagerplätze
Man kann nicht auf ein Regal scannen, wenn das Regal keinen
Barcode hat.
#72
schliesst diese Lücke mit einer Sticker-Vorlage
StorageLocation_50x30mm, die einen Code128-Barcode aus der
getId() des Ortes rendert, dazu die ID und den vollständigen
Breadcrumb-Titel als lesbaren Text. Ein
GetStorageStickers-Adapter registriert die Vorlage für
IStorageFacility, IStoragePosition, IStorageContainer und
IStorageSamplesContainer. Die Listings bekommen in jedem
Review-State eine Aktion Etiketten drucken, die die
bestehende workflow_action?action=print_stickers-Weiterleitung
wiederverwendet.
Ein Etikett aufs Regal, und ein Scanner liefert die exakt
selbe Zeichenkette, die die Sample-Storage-Formulare
akzeptieren. Die Template-ID lautet
senaite.storage:StorageLocation_50x30mm.pt; überschreiben Sie
sie pro Instanz genauso wie jede andere Sticker-Vorlage.

StorageLocation_50x30mm-Etikett gerendert. Code128-Barcode der Ortsnummer, Breadcrumb-Titel als Text, Vorschau vor Millimeterlineal.Eine leise Änderung mit spürbarer Wirkung
#74 hat
die Listings für gelagerte Proben und für abgelaufene
Aufbewahrung auf flat_listing umgestellt. Kein neues Feature,
nur ein schnelleres Rendering bei Containern mit hunderten
Proben. Wert der Erwähnung, weil es eine der letzten
“Storage ist langsam”-Klagen aus der Welt schafft.