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 ?