L'audit trail
Avantages
-
traçabilité des actions opérateur
-
Conforme aux exigences GMP pour l'industrie pharmaceutique (par ex. de la Food and Drug Administration)
-
Réduction des co¹ts d'ingénierie et de validation
-
Idéalement adapté aux exigences des constructeurs de machines qui doivent remplir de sévères critères de qualité (par ex. livraison de machines et d'éléments d'installation devant être validées)
Fonctions
L' Audit trail remplit les principales exigences de GMP (Good Manufacturing Practice) ainsi que celles de la FDA (Food and Drug Administration) selon 21 CFR Part 11.
L' Audit facilite la construction de machines pour les branches travaillant avec des applications nécessitant des validations, étant donné que des fonctions indispensables pour remplir ces exigences sont déjà disponibles comme standard. De cette manière, les différentes machines ou éléments d'installation peuvent déjà être qualifiés chez le fournisseur.
En même temps, les audit trails assurent la traçabilité du processus de fabrication, comme l'exige par ex. la directive européenne 178/2002 pour l'industrie agro-alimentaire dans une optique d'amélioration de la qualité des produits.
Enregistrement d'actions opérateur dans les audit trails En exploitation, tous les changements de variables intéressant GMP (Good Manufacturing Practice) et les actions opérateur sont enregistrés comme audit trails dans un fichier CSV. Il peut s'agir par exemple de la saisie de valeurs process, du démarrage de recettes ou d'un acquittement de messages ou encore de messages relatifs à la gestion des utilisateurs, tels que la connexion et la déconnexion d'un utilisateur. Cela permet alors de voir précisément qui a fait quoi - et ce pour un travail de configuration minimal. En plus, un procédé de Checksum vérifie que les données dans l'audit trail sont exemptes de manipulations.
Archivage et journalisation L' Audit Trail permet l'archivage et la journalisation dans le PC localement ou dans un répertoire réseau. Cela facilite ainsi la réalisation de solutions pour l'archivage à long terme et la restauration des données.
Configuration
Pour fonctionner, une configuration minimum est demandée. Dans le répertoire WQVFiles, le fichier "AuditTrail.ini" doit être présent. Dans ce fichier, la session [System] doit contenir le mot clef suivant:
[System]
AuditTrailPath=C:\VK-WinQV\AuditTrail
Afficher l'audit trail
Pour afficher l'audit trail il faut utiliser le programme AuditTrailViewer.exe. Ce programme a été installé lors de l'installation de QuickView sur votre système. Lancer le programme et la page principale de celui-ci s'affichera:
Lors du premier démarrage de l'application il faut définir le répertoire contenant l'Audit Trail. Celui-ci doit correspondre au répertoire défini dans la configuration. l'icône représentant un symbole OK indique que les fichiers de l'audit n'ont pas été altérés ou modifiés. Si l'un des fichiers a été modifié, le symbole OK est remplacé par le symbole X signifiant ce fait.
Fonctionnement
La génération des enregistrements
Répertoire de sauvegarde/Nom du PC/année/mois/jour/ClientAuditTrail.csv pour le client et
Répertoire de sauvegarde/Nom du PC/année/mois/jour/ServerAuditTrail.csv pour le serveur
Un compteur d'enregistrement est maintenu dans un fichier texte séparé :
Répertoire de sauvegarde/Nom du PC/ClientAuditTrailCounter.ini pour le client et
Répertoire de sauvegarde/Nom du PC/ServerAuditTrailCounter.ini pour le serveur.
Le nom du répertoire de sauvegarde est défini dans un mot clef du fichier de configuration de l'audit trail soit, AuditTrail.ini[System]AuditTrailPath=Nom du répertoire de sauvegarde.
Si ce mot clef n'est pas défini, la fonction " AuditTrail " est désactivée.
La visualisation des enregistrements
Le programme de visualisation permet à l'utilisateur de choisir une date ou une période et affiche tous les enregistrements de tous les PC (client et serveur). Les enregistrements dont le checksum n'est pas valide sont affichés en rouge. La discontinuité dans la numérotation des enregistrements est également indiquée en rouge.
|
Nom |
Description |
|
PcID |
Nom du PC |
|
ProgramID |
Client ou Server |
|
RecordID |
Numéro d'enregistrement |
|
TimeStamp |
Date et heure UTC d'enregistrement |
|
UserID |
Nom de l'utilisateur. |
|
ObjectID |
Variable ou objet ayant été modifié. |
|
Description |
Description de la modification |
|
Comment |
Commentaire éventuel |
Le format des fichiers
|
Nom |
Type |
Description |
|
RecordID |
Integer |
Numéro d'enregistrement |
|
TimeStamp |
DateTObjectNameime |
Date et heure UTC d'enregistrement au format DD.MM.YYYY HH :mm :SS |
|
UserID |
String |
Nom de l'utilisateur. |
|
ObjectID |
String |
Variable ou objet ayant été modifié. |
|
Description |
String |
Description de la modification |
|
Comment |
String |
Commentaire éventuel |
|
Checksum |
Integer |
CRC32 de l'enregistrement. |
Chaque fichier commencera par la description des champs soit :
Calcul de la checksum
Le checksum correspond au CRC32 du string correspondant au record sans le champ checksum mais dernier séparateur inclus.
La procédure de calcul est la suivante :
const
CRC32Table: ARRAY[0..255] OF DWORD =
($00000000, $77073096, $EE0E612C, $990951BA,
$076DC419, $706AF48F, $E963A535, $9E6495A3,
$0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
$09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
$1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
$1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
$136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
$14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
$3B6E20C8, $4C69105E, $D56041E4, $A2677172,
$3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
$35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
$32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
$26D930AC, $51DE003A, $C8D75180, $BFD06116,
$21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
$2802B89E, $5F058808, $C60CD9B2, $B10BE924,
$2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
$76DC4190, $01DB7106, $98D220BC, $EFD5102A,
$71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
$7807C9A2, $0F00F934, $9609A88E, $E10E9818,
$7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
$6B6B51F4, $1C6C6162, $856530D8, $F262004E,
$6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
$65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
$62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
$4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
$4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
$4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
$44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
$5005713C, $270241AA, $BE0B1010, $C90C2086,
$5768B525, $206F85B3, $B966D409, $CE61E49F,
$5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
$59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
$EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
$EAD54739, $9DD277AF, $04DB2615, $73DC1683,
$E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
$E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
$F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
$F762575D, $806567CB, $196C3671, $6E6B06E7,
$FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
$F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
$D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
$D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
$D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
$DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
$CB61B38C, $BC66831A, $256FD2A0, $5268E236,
$CC0C7795, $BB0B4703, $220216B9, $5505262F,
$C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
$C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
$9B64C2B0, $EC63F226, $756AA39C, $026D930A,
$9C0906A9, $EB0E363F, $72076785, $05005713,
$95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
$92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
$86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
$81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
$88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
$8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
$A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
$A7672661, $D06016F7, $4969474D, $3E6E77DB,
$AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
$A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
$BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
$BAD03605, $CDD70693, $54DE5729, $23D967BF,
$B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
$B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);
function _CRC32(AStream : TStream) : Cardinal;
var aMemStream : TMemoryStream;
aValue : Byte;
begin
aMemStream := TMemoryStream.Create;
try
Result := $FFFFFFFF;
while AStream.Position < AStream.Size do
begin
// Lecture d'un bloc de données
aMemStream.Seek(0, soFromBeginning);
if ((AStream.Size - AStream.Position) >= 1024*1024) then
begin
aMemStream.CopyFrom(AStream, 1024*1024);
end else
begin
aMemStream.Clear;
aMemStream.CopyFrom(AStream, AStream.Size-AStream.Position);
end;
//Calcul du CRC du bloc
aMemStream.Seek(0, soFromBeginning);
while aMemStream.Position < aMemStream.Size do
begin
aMemStream.ReadBuffer(aValue, 1);
Result := (Result shr 8) xor CRC32Table[aValue xor (Result and $000000FF)];
end;
end;
Result := not Result;
finally
aMemStream.Free;
end;
end;
function CalculateCRC32(AString : String) : Cardinal;
var
aStringStream : TStringStream;
begin
aStringStream := TStringStream.Create(AString);
Result := $FFFFFFFF;
try
result:=_CRC32(aStringStream);
finally
aStringStream.Free;
end;
end;
Les types d'objet
Les objets suivants sont possibles:
|
Objets |
Description |
|
*System* |
Audit auto-générés par l'application |
|
Users accounts |
Tout ce qui concerne les comptes des utilisateurs : login, logout, add user, delete user, modify user, etc. |
|
Application |
Tout ce qui concerne l'application : Démarrage, Arrêt,... |
|
DataBank |
Tout ce qui concerne l'écriture dans un registre ou dans un bit |
|
Access Level |
Tout ce qui concerne les niveaux d'accès |
|
Settings |
Tout ce qui concerne les modifications de la configuration |
|
Commands |
Toutes les commandes envoyées au serveur : ajout d'une charge, effacement d'un charge, mise en service d'une position, etc. |
|
HoistsAndShuttles |
Toutes les commandes concernant les transporteurs et les transferts. |
|
Rectifiers |
Toutes les commandes concernant les redresseurs |
|
Dosing |
Toutes les commandes concernant les pompe doseuses, |
|
Loading |
Toutes les commandes concernant le chargement |
|
Sequence Editor |
Toutes les opérations sur les fichiers "séquence" |
|
Sequence Step |
Toutes les modifications sur les pas de séquence |
|
Sequence Step Job |
Toutes les modifications sur les jobs d'un step de séquence |
|
Equipement Control Editor |
Toutes les opérations sur les fichiers de commandes d'équipement |
|
Equipement Control Position |
Toutes les opérations sur les commandes d'une position |
|
Equipement Control Step |
Toutes les opérations sur les steps d'une position dans une commande d'équipement |
|
Machine Mode Editor |
Toutes les modifications sur les modes machine |
|
Machine Mode Step |
Toutes les modifications sur les steps d'un mode machine |
|
Machine Mode Execution |
Toutes les opérations effectuées avec les modes machine |
|
Clock Schema Editor |
Toutes les opérations effectuées sur l'éditeur de schéma de l'horloge |
|
Clock Schema Step |
Toutes les opérations effectuées sur les pas d'schéma de l'horloge |
|
Sequencer Editor |
Toutes les opérations effectuées dans l'éditeur de "sequencer" |
|
Sequencer Execution |
Tous les lancements de sequencer. |
|
Start/Stop Clock |
Tous les démarrages et arrêt de l'horloge |
|
TouchScreen |
Content |
|
Chemical product |
Tous les ajouts de produits chimiques |
