L'audit trail
1. Description
Pour de hautes exigences de qualité relatives aux produits à fabriquer et aux processus de fabrication, la traçabilité des actions opérateur gagnent en importance dans toutes les branches.
1.1 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)
1.2 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.
2. 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
Le nom du répertoire peut être défini avec un autre répertoire sur la machine en local ou un répertoire sur un disque réseau à votre convenance.
3. 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.
4. Les fonctions
4.1 La génération des enregistrements
Des routines d’enregistrement ont été ajoutées dans le programme client ainsi que dans le serveur. Chaque fois qu’une opération est effectuée par un utilisateur, celle-ci est enregistrée dans le fichier. Les fichiers sont sauvegardés selon la hiérarchie suivante :
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.
4.2 La visualisation des enregistrements
Un programme séparé permet la visualisation et l’impression de l’audit trail. Il vérifie la validité des enregistrements en vérifiant le checksum de chacun d’entre eux. Il vérifie également la continuité des numéros d’enregistrement pour assurer qu’aucun d’entre eux n’ai été effacé. Une marque « Check » verte est affichée si le fichier visualisé est intègre. Dans le cas contraire, une marque « Stop » rouge informe l’utilisateur que l’audit a été manipulé.
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.
L’impression des enregistrements est possible. L’exportation sous forme de fichier pdf est également possible.
Les enregistrements sont affichés sous forme de table avec les colonnes suivantes :
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
5. Les données
5.1 Le format des fichiers
Les fichiers sont de type csv. Le séparateur de liste est le point-virgule. Les champs suivants sont utilisés :
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 :
"RecordID";"TimeStamp";"UserID";"ObjectID";"Description";"Comment";"Checksum"
5.2 Calcul du 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;
5.3 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
Chemical product
Tous les ajouts de produits chimiques
Mis à jour
Ce contenu vous a-t-il été utile ?