Όταν προσπαθείτε να εγκρίνετε ένα Αρχείο Ανάλυσης (Analysis Record — AR) και η έγκριση μπλοκάρεται επειδή η διακρίβωση κάποιου εκ των οργάνων μέτρησης είναι εκπρόθεσμη, ο οδηγός αυτός περιγράφει τις δύο επιτρεπτές οδούς επίλυσης σύμφωνα με το ΕΛΟΤ ΕΝ ISO/IEC 17025:2017:
CalibrationRecord με ενημερωμένη ημερομηνία επόμενης διακρίβωσης και επανεκκινείτε την έγκριση.Καμία από τις δύο οδούς δεν παρακάμπτεται σιωπηλά — κάθε έγκριση επί εκπρόθεσμου οργάνου αφήνει ίχνος στο σύστημα.
| # | Προϋπόθεση | Πού ελέγχεται |
|---|---|---|
| 1 | Το AR βρίσκεται σε κατάσταση Ελεγμένη και είναι έτοιμο για μετάβαση σε Εγκεκριμένη. | Πεδίο status στη σελίδα Λεπτομερειών Ανάλυσης. |
| 2 | Τουλάχιστον μία Measurement του AR αναφέρεται σε Instrument με requiresCalibration = true. | Καρτέλα Μετρήσεις στο AR. |
| 3 | Η ημερομηνία nextCalibrationDate του οργάνου είναι πριν από τη σημερινή ημέρα. | Καρτέλα Διακριβώσεις του Οργάνου. |
| 4 | Για την Επιλογή Β ο χρήστης διαθέτει ρόλο LAB_DIRECTOR, QUALITY_MANAGER ή REVIEWER. | Προφίλ Χρήστη → Ρόλοι. |
| 5 | Για την Επιλογή Α ο χρήστης έχει δικαίωμα δημιουργίας CalibrationRecord στο εν λόγω όργανο. | Δικαιώματα Ρόλου. |
Όργανα με requiresCalibration = false (π.χ. ογκομετρικά γυάλινα σκεύη, χειρωνακτικά εργαλεία) ή χωρίς συμπληρωμένη nextCalibrationDate εξαιρούνται αυτόματα και δεν προκαλούν αποκλεισμό.
Πριν επιλέξετε ανάμεσα σε Α και Β, ανοίξτε την καρτέλα Μετρήσεις του AR και σημειώστε:
APPROVAL_BLOCKED_CALIBRATION_OVERDUE. Το frontend αναγνωρίζει τον κωδικό και ανοίγει το Override Dialog αντί για snackbar σφάλματος, παρουσιάζοντας τη λίστα των εκπρόθεσμων οργάνων (όνομα, αριθμός σειράς, ημερομηνία λήξης διακρίβωσης).CalibrationRecord. Συμπληρώστε:calibrationDate — η σημερινή ημερομηνία διακρίβωσης.withinTolerance: true — το όργανο πέρασε τον έλεγχο.nextCalibrationDate — υπολογίστε με βάση τη συχνότητα του SOP (π.χ. + 12 μήνες).OVERRIDE_REASON_TOO_SHORT.OVERRIDE_CALIBRATION_APPROVE με τα πεδία userId, entityType = 'AnalysisRecord', entityId, reason, χρονοσφραγίδα και τη λίστα των εκπρόθεσμων οργάνων ως changes. Στην ίδια καρτέλα μπορείτε να φιλτράρετε ανά action (OVERRIDE_CALIBRATION_APPROVE) και να εξάγετε CSV για το φάκελο εσωτερικής επιθεώρησης. Η εξαγωγή περιλαμβάνει χρήστη, χρονοσφραγίδα, αιτιολογία και τη λίστα των οργάνων με τις αντίστοιχες nextCalibrationDate, που είναι ακριβώς το είδος των δεδομένων που ζητάει η §6.4.7.
Για να αποφύγετε επανειλημμένες απορρίψεις λόγω ανεπαρκούς τεκμηρίωσης, ακολουθήστε τη δομή:
«Η διακρίβωση του οργάνου <όνομα> (S/N <serial>) έληξε στις <ημερομηνία>. Δεν μπορεί να γίνει άμεσα διότι <λόγος — π.χ. αναμένεται επίσκεψη παρόχου, αναπληρωματικό όργανο σε χρήση>. Η μετρολογική εμπιστοσύνη διατηρείται μέσω <εσωτερικό QC με υλικό αναφοράς LotXXX εντός ορίων / διπλή ανάλυση με αναπληρωματικό όργανο>. Έχει ανοιχθεί CAPA-<αριθμός> και η διακρίβωση έχει προγραμματιστεί για <ημερομηνία>.»
Η λογική αποκλεισμού υλοποιείται στη μέθοδο _enforceCalibrationGuard του analysis-record.resolver.ts (analysis-record.resolver.ts:1001). Για κάθε Measurement του AR συλλέγονται τα μοναδικά instrumentId και ζητείται ο πίνακας Instrument όπου requiresCalibration = 1, nextCalibrationDate IS NOT NULL και nextCalibrationDate < CURDATE(). Αν δεν προκύψουν εγγραφές, ο guard περνά αμέσως· διαφορετικά, χωρίς overrideReason, ρίχνεται GraphQLError με κωδικό extension APPROVAL_BLOCKED_CALIBRATION_OVERDUE (analysis-record.resolver.ts:1044) και payload instruments[] που περιλαμβάνει id, name, serialNumber, nextCalibrationDate.
Το πεδίο nextCalibrationDate στο Instrument (instrument.entity.ts:65) είναι nullable string τύπου date — η πολιτική σύγκρισης χρησιμοποιεί τη συνάρτηση CURDATE() του MariaDB, οπότε όλα τα όργανα του ίδιου tenant ελέγχονται με ενιαία ζώνη ώρας server. Όργανα με nextCalibrationDate IS NULL δεν προκαλούν μπλόκο, αλλά εμφανίζονται ως «μη διακριβωμένα» σε ξεχωριστή κάρτα του Business Dashboard.
Στην οδό παράκαμψης, ο guard ελέγχει διαδοχικά:
overrideHelper.isOverrideRole(role) — διαφορετικά OVERRIDE_DENIED.overrideReason.trim().length >= 20 — διαφορετικά OVERRIDE_REASON_TOO_SHORT.OverrideHelper.recordEvent({ action: 'OVERRIDE_CALIBRATION_APPROVE', ... }) που γράφει αδιάβλητη εγγραφή στο OverrideLog.Η ακολουθία ελέγχων είναι σκόπιμα fail-fast: ένας χρήστης χωρίς ρόλο δεν θα δει ποτέ μήνυμα τύπου «η αιτιολογία είναι πολύ σύντομη», ώστε να μην εξάγει πληροφορίες για το πώς να παρακάμψει.
Σύντομη δίγλωσση περιγραφή είναι ενσωματωμένη στο ίδιο το μήνυμα σφάλματος (analysis-record.resolver.ts:1041), οπότε ακόμη και εργαλεία που δεν προβάλλουν το extensions.instruments (π.χ. απευθείας curl) εμφανίζουν ποιο όργανο είναι εκπρόθεσμο.
Στο frontend, ο component AnalysisDetail (analysis-detail.ts:730) εντοπίζει τον κωδικό σφάλματος μέσα στο err.errors[0].extensions.code (Apollo v4 shape) και ενεργοποιεί το override dialog μέσω showOverrideDialog.set(true), αποθηκεύοντας το recordId σε pendingApprovalRecordId. Η υποβολή της αιτιολογίας καλεί ξανά τη mutation, αυτή τη φορά με το overrideReason σαν παράμετρο — η ίδια ροή guard τρέχει εκ νέου, βλέπει το reason, και προχωρά στην καταγραφή.
instrumentId στη μέτρηση. Διορθώστε ή διαγράψτε τη μέτρηση πριν επιχειρήσετε εκ νέου έγκριση.withinTolerance: false): δεν θεωρείται επιτυχής. Το nextCalibrationDate δεν ενημερώνεται και το AR παραμένει μπλοκαρισμένο.Σημαντική διαφορά για bulk approve. Η μέθοδος μαζικής έγκρισης (analysis-record.resolver.ts:1767) καλεί _enforceCalibrationGuard(r, undefined, userRole, userId) με overrideReason = undefined, οπότε δεν επιτρέπεται καμία παράκαμψη: όλα τα AR με εκπρόθεσμο όργανο αποτυγχάνουν και πρέπει να διορθωθούν είτε μεμονωμένα με reason είτε με πραγματική διακρίβωση. Αυτό είναι σκόπιμο — η μαζική έγκριση δεν πρέπει να καλύπτει εξαιρέσεις.
Για το πλήρες κείμενο των εδαφίων δείτε τη σελίδα Αναφορά → ISO/IEC 17025:2017.
Οι επιθεωρητές ΕΣΥΔ συχνά ζητούν δειγματοληπτικά να δουν παραδείγματα παρακάμψεων. Ένα καλά δομημένο OverrideLog με σαφή αιτιολογία, παραπομπή σε CAPA και αποδείξεις μετρολογικής εμπιστοσύνης (QC charts, αναπληρωματικές μετρήσεις) αποτελεί ισχυρή απόδειξη ότι το εργαστήριο δεν παρακάμπτει σιωπηλά τους ελέγχους, αλλά διαχειρίζεται την εξαίρεση με ώριμο τρόπο. Αντίθετα, λακωνικές αιτιολογίες του τύπου «έκτακτη ανάγκη» είναι κόκκινη σημαία.
Συστηματική χρήση της οδού Β (π.χ. πάνω από 5 παρακάμψεις/μήνα για το ίδιο όργανο) πρέπει να ενεργοποιεί ανασκόπηση του προγράμματος διακρίβωσης σύμφωνα με τη §6.4.7 και ενδεχομένως αύξηση της συχνότητας ή αλλαγή παρόχου.