Skip to main content

BIO-QMS Admin & Compliance Documentation

Version: 1.0.0 Last Updated: 2026-02-17 Regulatory Scope: FDA 21 CFR Part 11, HIPAA, SOC 2, EU Annex 11 Platform: BIO-QMS Regulated SaaS Quality Management System


Document Purpose

This comprehensive reference provides:

  1. System Administrator Guide - User management, SSO, system configuration, troubleshooting
  2. Compliance Officer Guide - Audit review, regulatory procedures, evidence collection
  3. Validation Protocol Documentation - IQ/OQ/PQ templates and execution procedures
  4. Regulatory Submission Package - FDA CSV documentation and submission templates

Target Audience:

  • System Administrators managing BIO-QMS installations
  • Compliance Officers ensuring regulatory adherence
  • Validation Engineers executing qualification protocols
  • Quality Assurance teams preparing regulatory submissions
  • IT Security personnel managing access controls
  • Auditors reviewing system compliance

Table of Contents

  1. System Administrator Guide

    • 1.1 User Management
    • 1.2 Role Configuration
    • 1.3 Organization Settings
    • 1.4 SSO Setup (SAML 2.0, OIDC)
    • 1.5 API Key Management
    • 1.6 Backup and Recovery
    • 1.7 Troubleshooting
  2. Compliance Officer Guide

    • 2.1 Audit Trail Review
    • 2.2 Compliance Dashboards
    • 2.3 FDA Part 11 Procedures
    • 2.4 HIPAA Procedures
    • 2.5 SOC 2 Procedures
    • 2.6 Evidence Collection
    • 2.7 Compliance Report Generation
  3. Validation Protocol Documentation

    • 3.1 IQ Protocol (Installation Qualification)
    • 3.2 OQ Protocol (Operational Qualification)
    • 3.3 PQ Protocol (Performance Qualification)
    • 3.4 Execution Procedures
    • 3.5 Evidence Packaging
  4. Regulatory Submission Documentation

    • 4.1 FDA CSV Package
    • 4.2 System Description
    • 4.3 Risk Assessment
    • 4.4 Validation Summary
    • 4.5 EU Annex 11 Submissions

1. System Administrator Guide

1.1 User Management

1.1.1 User Lifecycle Management

Creating New Users

# Via Admin UI
1. Navigate to: Admin → User Management → Create User
2. Required fields:
- Email (must be unique, validates against domain whitelist)
- First Name / Last Name
- Organization assignment
- Initial role(s)
- Department (optional)
3. Select authentication method:
- SSO (SAML/OIDC) - recommended for enterprises
- Email/Password - requires strong password policy compliance
4. Set account status: Active | Pending | Suspended
5. Configure MFA requirement (recommended for privileged accounts)
6. Review and create

# Via API (for bulk operations)
POST /api/v1/users
Content-Type: application/json
Authorization: Bearer {ADMIN_API_KEY}

{
"email": "john.doe@pharma.com",
"firstName": "John",
"lastName": "Doe",
"organizationId": "org_abc123",
"roles": ["QA_REVIEWER"],
"department": "Quality Assurance",
"requireMFA": true,
"authMethod": "SSO"
}

User Status States

StatusDescriptionCan LoginAudit Trail
ActiveFull access grantedYesAll actions logged
PendingAwaiting activation/verificationNoCreation logged
SuspendedTemporarily disabledNoSuspension reason required
LockedSecurity lockout (failed auth)NoAuto-unlock after timeout
DeactivatedPermanently disabledNoCannot be reactivated

Bulk User Import

# CSV format for bulk import
# File: users_import.csv
email,firstName,lastName,organizationId,roles,department
jane.smith@pharma.com,Jane,Smith,org_abc123,QA_MANAGER,Quality
bob.jones@pharma.com,Bob,Jones,org_abc123,DOCUMENT_AUTHOR,Operations

# Import via CLI tool
./bio-qms-admin import-users --file users_import.csv --send-invites

# Validation checks performed:
- Email format and uniqueness
- Organization exists
- Roles are valid
- Duplicate detection

1.1.2 Password Policy Configuration

Policy Settings (Admin → Security → Password Policy)

password_policy:
minimum_length: 12
require_uppercase: true
require_lowercase: true
require_numbers: true
require_special_characters: true
special_characters: "!@#$%^&*()_+-=[]{}|;:,.<>?"

# Password history
prevent_reuse_count: 10 # Last 10 passwords cannot be reused

# Expiration
max_age_days: 90
expiration_warning_days: 14

# Lockout policy
max_failed_attempts: 5
lockout_duration_minutes: 30
lockout_reset_method: "admin_or_timeout"

# Complexity rules
min_unique_characters: 8
prohibit_common_passwords: true
prohibit_user_info: true # No name, email parts

# Multi-factor authentication
mfa_enforcement: "role_based" # all | role_based | optional
mfa_required_roles: ["ADMIN", "QA_MANAGER", "VALIDATOR"]

Compliance Mapping

  • FDA 21 CFR Part 11.300(b): Use of secure, computer-generated, time-stamped audit trails
  • HIPAA: Unique user identification (§164.312(a)(2)(i))
  • SOC 2 CC6.1: Logical access controls including password requirements

1.1.3 User Deactivation Process

Offboarding Checklist

## User Deactivation Procedure

**Trigger Events:**
- Employee termination
- Role change removing system access
- Security incident
- Extended leave (optional suspension vs. deactivation)

**Steps:**

1. **Pre-Deactivation** (perform before account disable)
- [ ] Transfer document ownership to successor
- [ ] Reassign active tasks and approvals
- [ ] Archive personal workspace items
- [ ] Export user-specific reports (if required)
- [ ] Review open e-signature workflows

2. **Deactivation** (immediate upon authorization)
- [ ] Set user status to "Deactivated"
- [ ] Revoke all active sessions (force logout)
- [ ] Disable API keys associated with user
- [ ] Remove from active role assignments
- [ ] Document deactivation reason in audit log

3. **Post-Deactivation** (within 24 hours)
- [ ] Verify no orphaned permissions remain
- [ ] Confirm audit trail integrity (all past actions preserved)
- [ ] Notify relevant stakeholders (QA manager, compliance)
- [ ] Update access control matrix
- [ ] File deactivation certificate in personnel records

4. **Data Retention** (permanent)
- User record: Retained indefinitely (audit trail integrity)
- Audit logs: Per retention policy (typically 7+ years)
- E-signatures: Retained with signed documents (FDA requirement)
- Personal data: Anonymize per GDPR if applicable

Deactivation API Call

PATCH /api/v1/users/{userId}/deactivate
Authorization: Bearer {ADMIN_API_KEY}

{
"reason": "Employment termination",
"effectiveDate": "2026-02-17T17:00:00Z",
"transferOwnershipTo": "user_xyz789",
"retainAuditTrail": true, # Always true for compliance
"notifyCompliance": true
}

1.2 Role Configuration

1.2.1 Built-in Roles

Standard Role Hierarchy

SYSTEM_ADMIN (highest privilege)
├── ORG_ADMIN
│ ├── QA_MANAGER
│ │ ├── QA_REVIEWER
│ │ └── VALIDATOR
│ ├── DOCUMENT_MANAGER
│ │ ├── DOCUMENT_AUTHOR
│ │ └── DOCUMENT_REVIEWER
│ ├── TRAINING_MANAGER
│ │ └── TRAINER
│ └── AUDIT_MANAGER
│ └── AUDITOR
├── COMPLIANCE_OFFICER
└── READ_ONLY_AUDITOR

Role Permission Matrix

RoleUser MgmtDoc CreateDoc ApproveE-SignAudit ViewSystem ConfigTraining
SYSTEM_ADMINFullYesYesYesFullFullFull
ORG_ADMINOrg onlyYesYesYesOrg onlyOrg onlyFull
QA_MANAGERViewYesYesYesDept onlyNoDept only
QA_REVIEWERNoYesNoYesOwn onlyNoRequired
DOCUMENT_AUTHORNoYesNoYesOwn onlyNoRequired
DOCUMENT_REVIEWERNoNoYesYesOwn onlyNoRequired
COMPLIANCE_OFFICERViewYesYesYesFullNoView
VALIDATORNoYesYesYesValidation onlyNoRequired
READ_ONLY_AUDITORNoNoNoNoFullNoNo

1.2.2 Custom Role Creation

Creating a Custom Role

# Via Admin UI
Admin → Roles & Permissions → Create Custom Role

# Step 1: Role Definition
Name: "Regulatory Affairs Specialist"
Description: "Manages regulatory submissions and compliance documentation"
Role Code: "REG_AFFAIRS_SPECIALIST"
Category: "Quality & Compliance"

# Step 2: Permission Selection
Document Permissions:
✓ Create regulatory documents
✓ Edit own documents
✓ Submit for approval
✓ View approved documents
✗ Delete documents
✓ Export for regulatory submission

Audit Permissions:
✓ View audit trails (own actions + department)
✓ Generate compliance reports
✗ Modify audit settings

E-Signature Permissions:
✓ Apply electronic signature
✓ Witness signatures
✗ Override signature requirements

# Step 3: Constraints
Departments: ["Regulatory Affairs", "Quality Assurance"]
Data Access Scope: "Department + Cross-functional read"
Require Training: true
Training Courses: ["FDA Regulations Overview", "21 CFR Part 11 Compliance"]
MFA Required: true

# Step 4: Approval Workflow
Requires Approval From: "COMPLIANCE_OFFICER"
Effective Date: Immediate upon approval
Review Period: Annual

Custom Role API

POST /api/v1/roles
Authorization: Bearer {ADMIN_API_KEY}

{
"name": "Regulatory Affairs Specialist",
"code": "REG_AFFAIRS_SPECIALIST",
"description": "Manages regulatory submissions",
"permissions": {
"documents": ["create", "edit_own", "submit", "view_approved", "export"],
"audit": ["view_department", "generate_reports"],
"signatures": ["apply", "witness"]
},
"constraints": {
"departments": ["Regulatory Affairs", "Quality Assurance"],
"dataScope": "department_plus_read",
"requireTraining": true,
"trainingCourses": ["course_fda_101", "course_part11"],
"requireMFA": true
},
"approvalRequired": true,
"reviewInterval": "annual"
}

1.2.3 Role Assignment and Inheritance

Multi-Role Assignment

Users can have multiple roles for flexibility:

# User: jane.smith@pharma.com
Assigned Roles:
1. QA_REVIEWER (primary)
2. DOCUMENT_AUTHOR (secondary)
3. TRAINER (functional)

Effective Permissions: UNION of all role permissions
Audit Trail: Logs which role was active for each action
Role Switching: User can select active role context in UI

Role Inheritance Rules

inheritance_policy:
mode: "additive" # Permissions accumulate across roles

conflict_resolution:
# If roles have conflicting permissions
rule: "most_permissive_wins"
example:
- ROLE_A allows "edit_all_documents"
- ROLE_B allows "edit_own_documents"
- Effective permission: "edit_all_documents"

audit_logging:
log_active_role: true
log_permission_source: true # Which role granted the permission

segregation_of_duties:
# Prevent incompatible role combinations
prohibited_combinations:
- ["DOCUMENT_AUTHOR", "FINAL_APPROVER"] # Cannot author AND approve same doc
- ["VALIDATOR", "SYSTEM_DEVELOPER"] # Cannot validate own code
enforcement: "strict" # Prevent assignment at role grant time

1.3 Organization Settings

1.3.1 Organization Hierarchy Configuration

Multi-Tenant Organization Structure

Root Organization: Pharma Corp
├── Organization Unit: Clinical Operations
│ ├── Department: Clinical Data Management
│ ├── Department: Biostatistics
│ └── Department: Medical Writing
├── Organization Unit: Quality Assurance
│ ├── Department: QA Compliance
│ ├── Department: Validation
│ └── Department: Auditing
└── Organization Unit: Regulatory Affairs
├── Department: US Submissions
└── Department: EU Submissions

Configuration UI Path

Admin → Organization Settings → Hierarchy Management

Actions Available:
- Create Organization Unit
- Create Department
- Move Department to different Unit
- Set Unit/Department Administrators
- Configure data access boundaries
- Set approval workflows per Unit

Organization API Structure

POST /api/v1/organizations
Authorization: Bearer {SYSTEM_ADMIN_API_KEY}

{
"name": "Clinical Operations",
"type": "organizational_unit",
"parentId": "org_root_123",
"settings": {
"dataIsolation": "strict", # Units cannot access each other's data
"inheritParentPolicies": true,
"allowCrossUnitCollaboration": false,
"administrators": ["user_abc", "user_def"],
"defaultApprovalWorkflow": "workflow_clinical_sop"
},
"departments": [
{
"name": "Clinical Data Management",
"code": "CDM",
"manager": "user_cdm_manager"
},
{
"name": "Biostatistics",
"code": "BIOSTATS",
"manager": "user_biostats_manager"
}
]
}

1.3.2 Global System Settings

System Configuration Panel

# Admin → System Settings → General

general_settings:
organization_name: "Pharma Corp"
timezone: "America/New_York" # Default for all timestamps
date_format: "YYYY-MM-DD" # ISO 8601
time_format: "24h"
language: "en-US"

# Session management
session_timeout_minutes: 30
session_extension_on_activity: true
max_concurrent_sessions_per_user: 3
force_logout_on_password_change: true

# Document settings
document_numbering_scheme: "auto" # auto | manual | hybrid
document_prefix_format: "{DOCTYPE}-{YEAR}-{SEQUENCE}"
version_increment_rule: "major.minor.patch"

# E-signature settings
signature_method: "password_reconfirm" # password_reconfirm | biometric | pki
signature_meaning_required: true
witness_signature_required_for: ["SOP", "Validation_Protocol"]

# Audit trail
audit_retention_years: 10 # Minimum 7 for FDA compliance
audit_export_format: "JSON" # JSON | CSV | XML
audit_hash_algorithm: "SHA-256"

# Compliance features
enable_fda_part11_mode: true
enable_hipaa_mode: true
enable_gxp_workflows: true
enforce_training_before_access: true

# System availability
maintenance_window: "Sunday 02:00-04:00 UTC"
planned_downtime_notification_days: 7

1.3.3 Email and Notification Settings

Notification Configuration

# Admin → System Settings → Notifications

email_settings:
smtp_host: "smtp.pharma.com"
smtp_port: 587
smtp_encryption: "STARTTLS"
smtp_auth_user: "bio-qms@pharma.com"
smtp_from_address: "BIO-QMS System <noreply@pharma.com>"

# Email templates
templates:
user_invitation:
subject: "Welcome to BIO-QMS - Account Activation"
enabled: true

document_approval_request:
subject: "ACTION REQUIRED: Document Approval - {DOCUMENT_NUMBER}"
enabled: true
cc_roles: ["QA_MANAGER"]

training_due:
subject: "Training Due: {COURSE_NAME} expires in {DAYS_REMAINING} days"
enabled: true
reminder_days_before: [30, 14, 7, 1]

audit_anomaly:
subject: "ALERT: Audit Trail Anomaly Detected"
enabled: true
recipients: ["COMPLIANCE_OFFICER", "SYSTEM_ADMIN"]

notification_channels:
email: true
in_app: true
sms: false # Optional, requires Twilio integration

# Notification preferences
allow_user_opt_out: false # Compliance notifications cannot be disabled
digest_mode: "immediate" # immediate | hourly | daily
quiet_hours: "22:00-07:00 local"

1.4 SSO Setup (SAML 2.0, OIDC)

1.4.1 SAML 2.0 Configuration

Prerequisites

  • Identity Provider (IdP) metadata XML or URL
  • Admin access to IdP (Okta, Azure AD, OneLogin, etc.)
  • Valid SSL certificate for BIO-QMS instance
  • User attribute mapping requirements documented

Step-by-Step SAML Setup

# Step 1: Access SSO Configuration
Navigate to: Admin → Security → SSO Configuration → Add SAML Provider

# Step 2: Provider Details
Provider Name: "Okta Corporate SSO"
Provider Type: SAML 2.0
Entity ID: https://bio-qms.pharma.com/saml/metadata
ACS URL: https://bio-qms.pharma.com/saml/acs
Sign-On URL: https://pharma.okta.com/app/bio-qms/sso/saml

# Step 3: Upload IdP Metadata
Method 1 - Metadata URL: https://pharma.okta.com/app/exkAbc123/sso/saml/metadata
Method 2 - Upload XML file: idp-metadata.xml

# Step 4: Attribute Mapping
NameID Format: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

Attribute Mappings:
Email: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
FirstName: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
LastName: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname
Department: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/department
Roles: bio-qms-roles # Custom claim configured in IdP

# Step 5: Role Mapping (Optional but recommended)
IdP Group/Role → BIO-QMS Role
"QA-Reviewers" → QA_REVIEWER
"QA-Managers" → QA_MANAGER
"Document-Authors" → DOCUMENT_AUTHOR

# Step 6: Security Settings
Sign SAML Requests: Yes
Encrypt SAML Assertions: Yes (recommended)
Require Signed Assertions: Yes
Allowed Clock Drift: 3 minutes
Session Lifetime: 8 hours

# Step 7: Just-in-Time (JIT) Provisioning
Enable JIT Provisioning: Yes # Create users on first SSO login
Default Role for New Users: QA_REVIEWER
Require Admin Approval: No
Auto-assign to Organization: "org_main"

SAML Metadata Export

<!-- Download from: Admin → SSO Config → Export SP Metadata -->
<!-- Provide this to your IdP administrator -->

<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
entityID="https://bio-qms.pharma.com/saml/metadata">
<md:SPSSODescriptor AuthnRequestsSigned="true"
WantAssertionsSigned="true"
protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">

<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
<!-- Certificate data -->
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>

<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://bio-qms.pharma.com/saml/acs"
index="0" isDefault="true"/>

<md:AttributeConsumingService index="0">
<md:ServiceName xml:lang="en">BIO-QMS</md:ServiceName>
<md:RequestedAttribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="true"/>
<md:RequestedAttribute Name="firstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="true"/>
<md:RequestedAttribute Name="lastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" isRequired="true"/>
</md:AttributeConsumingService>

</md:SPSSODescriptor>
</md:EntityDescriptor>

1.4.2 OIDC (OpenID Connect) Configuration

OIDC Provider Setup

# Step 1: Register BIO-QMS as OIDC Client in IdP
# Obtain from IdP:
- Client ID
- Client Secret
- Issuer URL (e.g., https://auth.pharma.com)
- Authorization Endpoint
- Token Endpoint
- UserInfo Endpoint
- JWKS URI

# Step 2: Configure in BIO-QMS
Admin → Security → SSO Configuration → Add OIDC Provider

Provider Name: "Azure AD OIDC"
Client ID: abc123-def456-ghi789
Client Secret: ********** (securely stored, encrypted at rest)
Issuer URL: https://login.microsoftonline.com/{tenant-id}/v2.0
Discovery URL: https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration

# Auto-discovered endpoints (from .well-known):
Authorization Endpoint: {issuer}/oauth2/v2.0/authorize
Token Endpoint: {issuer}/oauth2/v2.0/token
UserInfo Endpoint: {issuer}/openid/userinfo
JWKS URI: {issuer}/discovery/v2.0/keys

# Step 3: Scopes
Requested Scopes:
- openid (required)
- profile
- email
- offline_access (for refresh tokens)

# Step 4: Callback URL
Redirect URI: https://bio-qms.pharma.com/auth/oidc/callback
(Whitelist this in IdP configuration)

# Step 5: Claims Mapping
Email Claim: email
Name Claim: name
Given Name Claim: given_name
Family Name Claim: family_name
Groups Claim: groups (for role mapping)

# Step 6: Token Validation
Validate Issuer: Yes
Validate Audience: Yes (Client ID)
Validate Signature: Yes (using JWKS)
Token Lifetime: Use IdP settings
Refresh Token Rotation: Yes

# Step 7: Security Options
PKCE: Required (S256)
State Parameter: Required (CSRF protection)
Nonce: Required
ID Token Encryption: Optional but recommended

Testing SSO Configuration

# Built-in SSO Test Tool
Admin → Security → SSO Configuration → Test Connection

Test Steps:
1. Initiate SSO login flow
2. Redirect to IdP
3. Authenticate with test user credentials
4. Validate returned assertions/claims
5. Check attribute mapping
6. Verify role assignment
7. Confirm audit log entry

Expected Result:
✓ Successful authentication
✓ User attributes correctly mapped
✓ Roles assigned per mapping rules
✓ Audit log shows: "SSO_LOGIN_SUCCESS" event
✓ Session created with correct timeout

Common Issues:
✗ Clock skew → Adjust "Allowed Clock Drift"
✗ Attribute not found → Check IdP claim configuration
✗ Invalid signature → Verify certificate/JWKS
✗ Redirect mismatch → Ensure callback URL whitelisted in IdP

1.5 API Key Management

1.5.1 API Key Creation and Permissions

Creating API Keys

# Via Admin UI
Admin → Integrations → API Keys → Create New Key

# Step 1: Key Details
Key Name: "CI/CD Pipeline Integration"
Description: "Automated document uploads from build system"
Owner: system-automation@pharma.com
Expiration: 365 days (or "No expiration" for system keys with approval)

# Step 2: Scope Selection
Scopes (OAuth 2.0 style):
✓ documents:read
✓ documents:create
✓ documents:upload
✗ documents:delete (not granted for automation)
✓ audit:read
✗ users:* (no user management for CI/CD)
✓ validation:execute

# Step 3: Rate Limiting
Rate Limit: 1000 requests/hour
Burst Allowance: 50 requests/minute

# Step 4: IP Allowlist (recommended)
Allowed IP Ranges:
- 10.0.100.0/24 (internal CI/CD subnet)
- 203.0.113.50 (backup automation server)

# Step 5: Generate Key
Generated API Key: bio_qms_live_abc123def456...xyz789
WARNING: Copy and store securely - shown only once

# API Key Format
bio_qms_{environment}_{random_32_chars}
environment: live | test | sandbox

API Key Storage Best Practices

# DO NOT hardcode in source code
# BAD:
API_KEY = "bio_qms_live_abc123..."

# GOOD: Use environment variables
API_KEY = process.env.BIO_QMS_API_KEY

# BETTER: Use secrets management
# AWS Secrets Manager
aws secretsmanager get-secret-value --secret-id bio-qms/api-key

# HashiCorp Vault
vault kv get secret/bio-qms/api-key

# Kubernetes Secret
kubectl create secret generic bio-qms-api-key \
--from-literal=key='bio_qms_live_...'

1.5.2 API Key Rotation

Rotation Procedure

## API Key Rotation Schedule

**Recommended Rotation Frequency:**
- Production keys: Every 90 days
- Integration/Test keys: Every 180 days
- Personal API keys: Every 60 days
- System service keys: Annual (or on compromise)

**Rotation Process:**

1. **Pre-Rotation** (1 week before)
- Notify API key owner of upcoming expiration
- Review current key usage via audit logs
- Identify all systems/scripts using the key

2. **Create New Key**
- Generate new key with identical scopes
- Suffix with rotation date: "CI-CD-Pipeline-2026-02"
- Set appropriate expiration

3. **Transition Period** (Dual-key overlap)
- Deploy new key to all consuming systems
- Keep old key active during validation
- Monitor both keys for usage patterns
- Duration: 48-72 hours

4. **Revocation**
- Verify old key no longer in use (zero requests for 24h)
- Revoke old key via Admin UI
- Confirm revocation via test API call (should return 401)
- Document rotation in change log

5. **Post-Rotation**
- Archive old key identifier for audit purposes
- Update API key inventory
- Verify no service disruptions

Automated Rotation Script

#!/bin/bash
# api-key-rotation.sh

# Configuration
OLD_KEY_ID="key_abc123"
KEY_NAME="CI-CD Pipeline"
SCOPES="documents:read,documents:create,documents:upload,audit:read,validation:execute"
ADMIN_API_KEY="bio_qms_live_admin_xyz..."

# Create new key
NEW_KEY_RESPONSE=$(curl -X POST https://bio-qms.pharma.com/api/v1/api-keys \
-H "Authorization: Bearer $ADMIN_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"$KEY_NAME - $(date +%Y-%m)\",
\"scopes\": \"$SCOPES\",
\"expirationDays\": 90,
\"allowedIPs\": [\"10.0.100.0/24\"]
}")

NEW_KEY=$(echo $NEW_KEY_RESPONSE | jq -r '.apiKey')

# Update secrets management system
aws secretsmanager update-secret \
--secret-id bio-qms/ci-cd-api-key \
--secret-string "{\"key\":\"$NEW_KEY\",\"rotatedAt\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}"

# Wait for propagation (48 hours)
echo "Waiting 48 hours for new key deployment..."
sleep $((48 * 3600))

# Verify old key has no recent usage
USAGE=$(curl -s https://bio-qms.pharma.com/api/v1/api-keys/$OLD_KEY_ID/usage \
-H "Authorization: Bearer $ADMIN_API_KEY" | jq -r '.requestsLast24h')

if [ "$USAGE" -eq 0 ]; then
# Revoke old key
curl -X DELETE https://bio-qms.pharma.com/api/v1/api-keys/$OLD_KEY_ID \
-H "Authorization: Bearer $ADMIN_API_KEY"
echo "Old key $OLD_KEY_ID revoked successfully"
else
echo "WARNING: Old key still in use ($USAGE requests). Manual intervention required."
exit 1
fi

1.5.3 API Key Audit and Monitoring

Audit Dashboard

Admin → Integrations → API Keys → Usage Analytics

Metrics per API Key:
- Total requests (last 24h, 7d, 30d)
- Error rate (4xx, 5xx responses)
- Top endpoints accessed
- Request sources (IP addresses)
- Last used timestamp
- Scopes utilized vs. granted
- Rate limit hit frequency

Alerting Rules:
- Key not used in 30 days → Recommend revocation
- Unusual access pattern → Security review
- Rate limit exceeded → Capacity planning
- 401 errors after key revocation → Deployment verification

1.6 Backup and Recovery

1.6.1 Backup Strategy

Backup Components

backup_scope:
databases:
- postgresql_primary:
tables: all
includes: ["audit_logs", "documents", "users", "roles", "signatures", "trainings"]
encryption: AES-256

file_storage:
- document_attachments:
path: /var/bio-qms/attachments
format: original + metadata

- signature_images:
path: /var/bio-qms/signatures
retention: permanent (regulatory requirement)

- system_configurations:
path: /etc/bio-qms
includes: ["config.yaml", "ssl_certs", "saml_metadata"]

application_state:
- audit_trail_hash_chain:
critical: true # Integrity verification

- training_records:
regulatory: FDA Part 11
retention_years: lifetime_of_product + 10

Backup Schedule

Backup TypeFrequencyRetentionStorage LocationRTORPO
Full BackupDaily @ 02:00 UTC90 daysS3 Glacier Deep Archive24h24h
Incremental BackupEvery 4 hours30 daysS3 Standard4h4h
Transaction LogContinuous (WAL)7 daysS3 Standard-IA1h<1h
Audit Trail SnapshotHourly1 yearS3 Standard + Glacier1h1h
Configuration BackupOn change + daily180 daysS3 + Git repo1h24h

RTO (Recovery Time Objective): Maximum acceptable downtime RPO (Recovery Point Objective): Maximum acceptable data loss

1.6.2 Backup Execution Procedures

Automated Backup Script

#!/bin/bash
# /opt/bio-qms/scripts/backup.sh

set -euo pipefail

# Configuration
BACKUP_DIR="/mnt/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="bio-qms-backup-$TIMESTAMP"
S3_BUCKET="s3://pharma-corp-bio-qms-backups"
PG_HOST="bio-qms-db.pharma.internal"
PG_DB="bio_qms_production"
PG_USER="backup_user"
ENCRYPTION_KEY_PATH="/etc/bio-qms/backup-encryption.key"

# Step 1: Database Backup
echo "Starting database backup..."
pg_dump -h $PG_HOST -U $PG_USER -d $PG_DB \
--format=custom \
--compress=9 \
--file="$BACKUP_DIR/$BACKUP_NAME.pgdump"

# Step 2: File System Backup
echo "Backing up attachments and configurations..."
tar -czf "$BACKUP_DIR/$BACKUP_NAME-files.tar.gz" \
/var/bio-qms/attachments \
/var/bio-qms/signatures \
/etc/bio-qms/config.yaml

# Step 3: Audit Trail Export (Compliance)
echo "Exporting audit trail..."
psql -h $PG_HOST -U $PG_USER -d $PG_DB -c \
"COPY (SELECT * FROM audit_logs WHERE created_at >= NOW() - INTERVAL '24 hours') \
TO STDOUT WITH (FORMAT CSV, HEADER)" \
> "$BACKUP_DIR/$BACKUP_NAME-audit.csv"

# Step 4: Hash Chain Verification
echo "Verifying audit trail integrity..."
/opt/bio-qms/bin/verify-audit-chain \
--output "$BACKUP_DIR/$BACKUP_NAME-chain-verification.json"

# Step 5: Encryption
echo "Encrypting backup..."
openssl enc -aes-256-cbc \
-in "$BACKUP_DIR/$BACKUP_NAME.pgdump" \
-out "$BACKUP_DIR/$BACKUP_NAME.pgdump.enc" \
-pass file:$ENCRYPTION_KEY_PATH

# Step 6: Upload to S3
echo "Uploading to S3..."
aws s3 cp "$BACKUP_DIR/$BACKUP_NAME.pgdump.enc" "$S3_BUCKET/daily/$BACKUP_NAME.pgdump.enc" \
--storage-class STANDARD_IA \
--metadata "backup_type=full,timestamp=$TIMESTAMP,retention=90d"

aws s3 cp "$BACKUP_DIR/$BACKUP_NAME-files.tar.gz" "$S3_BUCKET/daily/$BACKUP_NAME-files.tar.gz"
aws s3 cp "$BACKUP_DIR/$BACKUP_NAME-audit.csv" "$S3_BUCKET/audit/$BACKUP_NAME-audit.csv" \
--storage-class GLACIER # Long-term regulatory retention

# Step 7: Verification
echo "Verifying backup integrity..."
aws s3api head-object --bucket pharma-corp-bio-qms-backups \
--key "daily/$BACKUP_NAME.pgdump.enc" \
--checksum-mode ENABLED

# Step 8: Cleanup Local Files (keep last 3 days locally)
find $BACKUP_DIR -name "bio-qms-backup-*" -mtime +3 -delete

# Step 9: Notification
echo "Backup completed successfully: $BACKUP_NAME"
curl -X POST https://bio-qms.pharma.com/api/v1/admin/backup-notifications \
-H "Authorization: Bearer $ADMIN_API_KEY" \
-d "{\"status\":\"success\",\"backup_name\":\"$BACKUP_NAME\",\"size_mb\":$(du -m $BACKUP_DIR/$BACKUP_NAME.pgdump.enc | cut -f1)}"

1.6.3 Restore Procedures

Restore Process

#!/bin/bash
# /opt/bio-qms/scripts/restore.sh

# CRITICAL: Only run during maintenance window or disaster recovery
# Requires: SYSTEM_ADMIN approval + Change Control documentation

set -euo pipefail

# Configuration
RESTORE_TIMESTAMP="20260217_020000" # Backup to restore
BACKUP_NAME="bio-qms-backup-$RESTORE_TIMESTAMP"
S3_BUCKET="s3://pharma-corp-bio-qms-backups"
RESTORE_DIR="/mnt/restore"
PG_HOST="bio-qms-db.pharma.internal"
PG_DB="bio_qms_production"
PG_USER="postgres"

# Pre-flight checks
echo "=== PRE-FLIGHT CHECKS ==="
read -p "Have you obtained SYSTEM_ADMIN approval? (yes/no): " APPROVAL
if [ "$APPROVAL" != "yes" ]; then
echo "Restore aborted. Approval required."
exit 1
fi

read -p "Have you notified all users of system downtime? (yes/no): " NOTIFIED
if [ "$NOTIFIED" != "yes" ]; then
echo "Restore aborted. User notification required."
exit 1
fi

# Step 1: Stop Application Services
echo "Stopping BIO-QMS application services..."
systemctl stop bio-qms-api
systemctl stop bio-qms-worker

# Step 2: Create Current State Backup (safety)
echo "Creating safety backup of current state..."
./backup.sh --prefix "pre-restore-safety-$(date +%Y%m%d_%H%M%S)"

# Step 3: Download Backup from S3
echo "Downloading backup from S3..."
aws s3 cp "$S3_BUCKET/daily/$BACKUP_NAME.pgdump.enc" "$RESTORE_DIR/"
aws s3 cp "$S3_BUCKET/daily/$BACKUP_NAME-files.tar.gz" "$RESTORE_DIR/"

# Step 4: Decrypt Backup
echo "Decrypting backup..."
openssl enc -aes-256-cbc -d \
-in "$RESTORE_DIR/$BACKUP_NAME.pgdump.enc" \
-out "$RESTORE_DIR/$BACKUP_NAME.pgdump" \
-pass file:/etc/bio-qms/backup-encryption.key

# Step 5: Verify Backup Integrity
echo "Verifying backup integrity..."
pg_restore --list "$RESTORE_DIR/$BACKUP_NAME.pgdump" > /dev/null
if [ $? -ne 0 ]; then
echo "ERROR: Backup file corrupted!"
exit 1
fi

# Step 6: Drop and Recreate Database (DESTRUCTIVE)
echo "WARNING: About to drop existing database!"
read -p "Type 'CONFIRM_RESTORE' to continue: " CONFIRM
if [ "$CONFIRM" != "CONFIRM_RESTORE" ]; then
echo "Restore aborted."
exit 1
fi

psql -h $PG_HOST -U $PG_USER -c "DROP DATABASE IF EXISTS $PG_DB;"
psql -h $PG_HOST -U $PG_USER -c "CREATE DATABASE $PG_DB;"

# Step 7: Restore Database
echo "Restoring database from backup..."
pg_restore -h $PG_HOST -U $PG_USER -d $PG_DB \
--verbose \
--clean \
--if-exists \
"$RESTORE_DIR/$BACKUP_NAME.pgdump"

# Step 8: Restore File System
echo "Restoring attachments and configurations..."
tar -xzf "$RESTORE_DIR/$BACKUP_NAME-files.tar.gz" -C /

# Step 9: Verify Audit Trail Integrity
echo "Verifying restored audit trail..."
/opt/bio-qms/bin/verify-audit-chain --full-verification
if [ $? -ne 0 ]; then
echo "CRITICAL: Audit trail integrity check FAILED!"
echo "DO NOT start application. Contact compliance officer immediately."
exit 1
fi

# Step 10: Post-Restore Validation
echo "Running post-restore validation..."
/opt/bio-qms/bin/health-check --comprehensive

# Step 11: Start Services
echo "Starting BIO-QMS application services..."
systemctl start bio-qms-api
systemctl start bio-qms-worker

# Step 12: Smoke Tests
echo "Running smoke tests..."
curl -f https://bio-qms.pharma.com/api/health || (echo "API health check failed!" && exit 1)

# Step 13: Audit Log Entry
echo "Creating audit log entry for restore operation..."
psql -h $PG_HOST -U $PG_USER -d $PG_DB -c \
"INSERT INTO audit_logs (event_type, user_id, details, timestamp) VALUES \
('SYSTEM_RESTORE', 'system', '{\"backup\":\"$BACKUP_NAME\",\"restored_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}', NOW());"

# Step 14: Notifications
echo "=== RESTORE COMPLETED ==="
echo "Backup restored: $BACKUP_NAME"
echo "Notify users that system is back online."
echo "Review audit logs for any discrepancies."

# Cleanup
rm -f "$RESTORE_DIR/$BACKUP_NAME.pgdump.enc"
rm -f "$RESTORE_DIR/$BACKUP_NAME.pgdump"

Post-Restore Validation Checklist

## Post-Restore Validation

After completing a restore, verify:

- [ ] Database connection successful
- [ ] API health endpoint returns 200 OK
- [ ] User authentication working (test with multiple auth methods)
- [ ] Document retrieval functional
- [ ] Audit trail integrity verified (hash chain intact)
- [ ] E-signature validation passes
- [ ] Training records accessible
- [ ] SSO integration functional
- [ ] Scheduled jobs running (check cron/background workers)
- [ ] Email notifications working
- [ ] API keys functional
- [ ] File attachments accessible
- [ ] System logs showing no errors
- [ ] Performance metrics normal
- [ ] Backup process re-enabled

**Compliance Verification:**
- [ ] Audit log shows restore event with admin approval
- [ ] No gap in audit trail timestamps
- [ ] All regulatory-required data present
- [ ] Signatures linked to correct documents
- [ ] Training completion records intact

**User Acceptance Testing:**
- [ ] Spot-check 10 random documents for content accuracy
- [ ] Verify most recent changes present (within RPO window)
- [ ] Confirm user permissions correct
- [ ] Test document approval workflow end-to-end

1.7 Troubleshooting

1.7.1 Common Issues and Resolutions

Issue 1: Users Cannot Log In

**Symptoms:**
- Error message: "Invalid credentials" despite correct password
- Login page redirects to SSO but fails
- Account appears "locked" in admin panel

**Diagnosis Steps:**

1. Check user account status
Admin → Users → Search for user → View status
Expected: "Active"
If "Locked": View lock reason (failed auth attempts, manual lock, etc.)

2. Verify authentication method
User profile → Authentication tab
If SSO enabled: Test SSO connection
If local auth: Check password policy compliance

3. Review audit logs
Admin → Audit → Filter by user email
Look for: LOGIN_FAILED, ACCOUNT_LOCKED, PASSWORD_EXPIRED events

4. Check MFA status
User profile → Security → MFA Status
If MFA enabled but device lost: Admin can reset MFA

**Resolutions:**

A. Account Locked (Failed Login Attempts)
Action: Admin → Users → {user} → Unlock Account
Result: User can attempt login again
Prevention: Review password policy, consider MFA

B. Password Expired
Action: Admin → Users → {user} → Reset Password → Send reset email
Result: User receives password reset link
Prevention: Increase password expiration window or implement grace period

C. SSO Configuration Issue
Action: Admin → Security → SSO → Test Connection
Common fixes:
- Update IdP metadata (certificates rotate)
- Verify callback URL whitelisted in IdP
- Check attribute mappings
- Review IdP user group membership

D. MFA Device Lost
Action: Admin → Users → {user} → Security → Reset MFA
Result: User can re-enroll MFA device on next login
Audit: MFA reset logged with admin approval

E. Account Deactivated by Mistake
Action: Review deactivation audit log for reason
If error: Contact SYSTEM_ADMIN for reactivation
Note: Reactivation may require compliance officer approval

Issue 2: Audit Trail Integrity Check Failed

**Symptoms:**
- System health check reports: "Audit chain verification failed"
- Hash mismatch detected in audit log
- Cannot generate compliance reports

**CRITICALITY:** HIGH - Potential GxP compliance violation

**Immediate Actions:**

1. **DO NOT DELETE OR MODIFY AUDIT LOGS**
2. Isolate affected time range
3. Notify compliance officer immediately
4. Preserve evidence (database snapshot)
5. Initiate incident investigation

**Diagnosis:**

bash
# Run audit chain verification tool
/opt/bio-qms/bin/verify-audit-chain --detailed --range "2026-02-01 to 2026-02-17"

# Output will show:
- First hash mismatch location
- Affected records count
- Timestamp range of issue


**Root Causes:**

A. Database Clock Skew
- Symptom: Timestamps out of sequence
- Fix: Synchronize database server time (NTP)
- Prevention: Monitor NTP drift

B. Manual Database Modification (VIOLATION)
- Symptom: Records modified outside application
- Fix: Restore from backup, investigate who/why
- Prevention: Restrict direct DB access, enforce application-only writes

C. Backup/Restore Issue
- Symptom: Hash chain breaks at restore point
- Fix: Re-verify backup integrity, may need to restore from earlier backup
- Prevention: Test restore procedures regularly

D. Software Bug
- Symptom: Consistent pattern of failures
- Fix: Apply software patch, report to vendor
- Prevention: Stay current on patches

**Resolution Documentation (Required for Audits):**

Create incident report including:
- Time of detection
- Affected record range
- Root cause analysis
- Remediation steps taken
- CAPA (Corrective and Preventive Actions)
- Compliance officer sign-off

Issue 3: Document Upload Failing

**Symptoms:**
- Error: "File upload failed"
- Upload progress bar reaches 100% but document not created
- File size limits exceeded message

**Diagnosis:**

1. Check file size
Max file size: 100 MB (configurable)
Location: Admin → System Settings → Document Settings → Max Upload Size

2. Check file type whitelist
Allowed types: PDF, DOCX, XLSX, PNG, JPG (configurable)
Location: Admin → System Settings → Document Settings → Allowed File Types

3. Check storage quota
bash
# Check available disk space
df -h /var/bio-qms/attachments

# Check organization quota
Admin → Organizations → {org} → Storage Usage


4. Review API logs
bash
tail -f /var/log/bio-qms/api.log | grep "upload"

Common errors:
- "Antivirus scan failed" → File flagged by ClamAV
- "Storage quota exceeded" → Org limit reached
- "Invalid file type" → MIME type mismatch


**Resolutions:**

A. File Too Large
Option 1: Compress file (e.g., reduce PDF quality)
Option 2: Admin increases max upload size (requires justification)
Option 3: Split into multiple documents

B. File Type Blocked
Action: Admin → Settings → Add file type to whitelist
Security review: Ensure file type safe (no .exe, .scr, etc.)

C. Storage Quota Exceeded
Action 1: Clean up old/unused documents (with approval)
Action 2: Admin increases org quota
Action 3: Implement document lifecycle policy (archive old docs)

D. Antivirus False Positive
Action: Submit file for review
Temporary: Admin can whitelist specific file hash (audit logged)

E. Network Timeout (Large Files)
Action: Increase upload timeout setting
Admin → System Settings → API Settings → Upload Timeout: 300 seconds

Issue 4: SSO Redirect Loop

**Symptoms:**
- User clicks "Login with SSO"
- Redirects to IdP, authenticates successfully
- Returns to BIO-QMS but immediately redirects back to IdP
- Infinite loop

**Diagnosis:**

1. Check browser cookies
Action: Clear cookies for bio-qms.pharma.com domain
Reason: Corrupted session cookie

2. Verify SAML/OIDC configuration
Admin → Security → SSO → {provider} → Test Connection

SAML specific checks:
- RelayState parameter preserved
- ACS URL exactly matches IdP configuration
- Clock skew within tolerance

OIDC specific checks:
- Redirect URI matches exactly (case-sensitive)
- State parameter validation enabled
- Token expiration reasonable

3. Review IdP logs
Check IdP admin panel for errors during assertion/token generation

4. Check session timeout settings
If session timeout < SSO redirect time, loop can occur
Admin → System Settings → Session Timeout: 30 minutes minimum

**Resolutions:**

A. ACS URL Mismatch (SAML)
Issue: IdP configured with `http://` but app uses https://
Fix: Update IdP configuration to use https://bio-qms.pharma.com/saml/acs

B. Cookie Domain Issue
Issue: Cookie set for wrong domain
Fix: Admin → Settings → Session Settings → Cookie Domain: .pharma.com

C. SameSite Cookie Attribute
Issue: Browser blocking third-party cookies
Fix: Admin → Settings → Session Settings → SameSite: None (requires HTTPS)

D. Clock Skew (SAML)
Issue: Server time differs from IdP by > allowed drift
Fix: Synchronize server clocks via NTP
Workaround: Increase allowed clock drift to 5 minutes

E. IdP Session Longer Than App Session
Issue: User authenticated at IdP but app session expired
Fix: Align session timeouts (app timeout >= IdP timeout)

Issue 5: API Rate Limit Exceeded

**Symptoms:**
- API returns: HTTP 429 Too Many Requests
- Integration scripts fail intermittently
- "Rate limit exceeded" in response headers

**Diagnosis:**

1. Identify which API key hitting limit
bash
curl -I https://bio-qms.pharma.com/api/v1/documents \
-H "Authorization: Bearer {api_key}"

Response headers:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1645123456 # Unix timestamp


2. Review API key usage
Admin → Integrations → API Keys → {key} → Usage Analytics
Charts show: Requests over time, endpoint distribution, error rate

3. Check for retry loops
Common cause: Client retries failed request immediately
Look for: Same endpoint called repeatedly in short time window

**Resolutions:**

A. Increase Rate Limit (Justified Request)
Action: Admin → API Keys → {key} → Edit → Rate Limit: 2000/hour
Justification required: Business need, capacity planning done

B. Implement Exponential Backoff (Client-Side)
python
import time
import requests

def api_call_with_retry(url, headers, max_retries=5):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
wait_time = min(retry_after, 2 ** attempt)
time.sleep(wait_time)
continue
return response
raise Exception("Max retries exceeded")


C. Batch Requests
Instead of: 100 separate API calls
Use: 1 batch API call with array of items
Example: POST /api/v1/documents/batch with [{...}, {...}, ...]

D. Use Webhooks Instead of Polling
Instead of: Polling /api/v1/documents every 10 seconds
Use: Webhook subscription for document.created events
Admin → Integrations → Webhooks → Create Subscription

E. Implement Caching (Client-Side)
For rarely-changing data (e.g., user list, role definitions)
Cache TTL: 5-15 minutes
Reduces redundant API calls

1.7.2 Support Escalation Procedures

Escalation Tiers

## Support Escalation Matrix

| Tier | Scope | Response Time | Personnel |
|------|-------|---------------|-----------|
| **L1 - User Support** | Login issues, basic navigation, password resets | 4 business hours | Help Desk |
| **L2 - System Admin** | User management, role config, SSO issues, backups | 8 business hours | System Administrators |
| **L3 - Technical Support** | API issues, integration problems, performance | 24 business hours | DevOps/Engineering |
| **L4 - Compliance Critical** | Audit trail issues, validation failures, data integrity | 2 hours | Compliance Officer + CTO |
| **L5 - Emergency** | System outage, data loss, security breach | 30 minutes | Incident Response Team |

**Escalation Triggers:**

Auto-escalate to L4 if:
- Audit trail integrity check fails
- GxP data potentially compromised
- E-signature validation errors
- Regulatory deadline at risk

Auto-escalate to L5 if:
- System unavailable for >30 minutes
- Unauthorized access detected
- Data breach suspected
- Ransomware/malware detected

**Contact Information:**

L1 - Help Desk: helpdesk@pharma.com | +1-555-0100
L2 - System Admin: bio-qms-admin@pharma.com | +1-555-0101
L3 - Technical: devops@pharma.com | +1-555-0102
L4 - Compliance: compliance-officer@pharma.com | +1-555-0103 (24/7)
L5 - Emergency: incident-response@pharma.com | +1-555-0911 (24/7)

2. Compliance Officer Guide

2.1 Audit Trail Review

2.1.1 Audit Trail Access and Navigation

Accessing Audit Logs

# Via Web UI
Navigation: Compliance → Audit Trail

Filters Available:
- Date Range: Last 24h | 7 days | 30 days | Custom range
- Event Type: All | Login | Document | E-Signature | User Mgmt | System Config
- User: Specific user or "All users"
- Organization/Department: Scope to specific org unit
- Severity: Info | Warning | Critical
- Outcome: Success | Failure | Partial

# Via API
GET /api/v1/audit-logs?start=2026-02-01&end=2026-02-17&event_type=DOCUMENT_APPROVED&user_id=user_123
Authorization: Bearer {COMPLIANCE_OFFICER_API_KEY}

Response:
{
"total": 145,
"records": [
{
"id": "audit_abc123",
"timestamp": "2026-02-17T14:30:22.123Z",
"event_type": "DOCUMENT_APPROVED",
"user_id": "user_123",
"user_name": "Jane Smith",
"ip_address": "10.0.50.25",
"details": {
"document_id": "DOC-2026-00145",
"document_title": "Manufacturing SOP v2.1",
"approval_role": "QA_MANAGER",
"signature_meaning": "Reviewed and Approved"
},
"hash": "sha256:abc123...",
"previous_hash": "sha256:def456..."
}
]
}

Audit Log Fields (FDA 21 CFR Part 11 Compliant)

FieldDescriptionExampleRequired By
timestampUTC timestamp (microsecond precision)2026-02-17T14:30:22.123456ZPart 11.10(e)
event_typeAction performedDOCUMENT_CREATEDPart 11.10(e)
user_idUnique user identifieruser_abc123Part 11.10(e)
user_nameHuman-readable nameJane SmithPart 11.10(e)
ip_addressSource IP address10.0.50.25Part 11.10(e)
session_idSession identifiersess_xyz789Part 11.10(e)
detailsEvent-specific data (JSON){"document_id": "DOC-123"}Part 11.10(e)
outcomeSuccess/FailuresuccessPart 11.10(e)
hashCurrent record hash (SHA-256)sha256:abc...Integrity
previous_hashPrevious record hash (chain)sha256:def...Integrity

2.1.2 Critical Event Monitoring

High-Risk Events Requiring Review

critical_events:
access_control_changes:
- USER_ROLE_GRANTED
- USER_ROLE_REVOKED
- PERMISSION_MODIFIED
- ADMIN_PRIVILEGE_ESCALATION
review_frequency: Daily
retention: Permanent

document_lifecycle:
- DOCUMENT_DELETED
- DOCUMENT_RESTORED_FROM_ARCHIVE
- VERSION_HISTORY_MODIFIED # Should never happen
- DOCUMENT_EXPORTED
review_frequency: Weekly
retention: Lifetime + 10 years

signature_events:
- SIGNATURE_APPLIED
- SIGNATURE_VERIFICATION_FAILED
- SIGNATURE_MEANING_CHANGED
- WITNESSING_COMPLETED
review_frequency: Real-time alerts
retention: Permanent

system_integrity:
- AUDIT_TRAIL_INTEGRITY_CHECK_FAILED
- BACKUP_FAILED
- UNAUTHORIZED_DATABASE_ACCESS
- SECURITY_POLICY_MODIFIED
review_frequency: Real-time alerts (page on-call)
retention: Permanent

authentication:
- FAILED_LOGIN_SPIKE # >5 failures in 10 min
- SSO_CONFIGURATION_CHANGED
- MFA_DISABLED_FOR_USER
- PASSWORD_POLICY_WEAKENED
review_frequency: Daily
retention: 7 years

Automated Audit Alerts

# Configure in: Compliance → Audit Alerts → Create Rule

Example Alert: Unauthorized Document Deletion Attempt

Trigger Condition:
event_type = "DOCUMENT_DELETE_ATTEMPTED"
AND outcome = "failure"
AND user_role NOT IN ("QA_MANAGER", "DOCUMENT_MANAGER")

Alert Actions:
1. Email: compliance-officer@pharma.com
2. Slack: #compliance-alerts channel
3. Create incident ticket
4. Lock user account (if >3 attempts)

Alert Message Template:
Subject: "ALERT: Unauthorized Document Deletion Attempt"
Body:
User: {user_name} ({user_email})
Attempted Action: Delete document {document_id}
Time: {timestamp}
IP: {ip_address}
Reason for Failure: {failure_reason}

Action Required: Review user permissions and intent

2.1.3 Audit Trail Integrity Verification

Hash Chain Verification Process

# Manual verification command
/opt/bio-qms/bin/verify-audit-chain --range "2026-02-01 to 2026-02-17" --verbose

# Output
=== Audit Trail Integrity Verification ===
Date Range: 2026-02-01 00:00:00 UTC to 2026-02-17 23:59:59 UTC
Total Records: 45,293

Verification Steps:
[1/5] Checking timestamp sequence........................ ✓ PASS
[2/5] Verifying hash chain integrity...................... ✓ PASS
[3/5] Validating individual record hashes................. ✓ PASS
[4/5] Checking for gaps in sequence numbers............... ✓ PASS
[5/5] Comparing against backup snapshot................... ✓ PASS

Result: INTEGRITY VERIFIED
First Hash: sha256:abc123def456...
Last Hash: sha256:xyz789ghi012...
Chain Signature: sha256:final_chain_hash_abc123...

Certificate Generated: /var/bio-qms/audit-verification-2026-02-17.pdf
(Store this certificate for regulatory inspections)

Integrity Verification Schedule

FrequencyScopeTriggered ByOutput
HourlyLast hourCron jobLog entry only
DailyLast 24 hoursAutomatedEmail summary to compliance
WeeklyLast 7 daysAutomatedPDF certificate generated
MonthlyFull monthAutomatedSigned certificate + archive to immutable storage
On-DemandCustom rangeCompliance officerPDF certificate for audits
Pre-AuditFull system historyAudit preparationComplete verification report

What to Do If Verification Fails

## Audit Trail Integrity Failure Response

**IMMEDIATE ACTIONS (within 1 hour):**

1. **Isolate the Issue**
- Stop all write operations to audit log table (read-only mode)
- Take snapshot of current database state
- Preserve all evidence

2. **Notify Stakeholders**
- Compliance Officer
- Quality Assurance Director
- CTO/IT Director
- Legal (if data integrity compromised)

3. **Initiate Investigation**
- Run detailed diagnostics: `/opt/bio-qms/bin/audit-diagnostics --full`
- Identify affected record range
- Determine root cause (clock skew, DB modification, software bug, etc.)

4. **Containment**
- If malicious: Revoke suspect user access
- If system error: Apply fix (time sync, software patch)
- If backup/restore: Compare against earlier snapshots

**INVESTIGATION CHECKLIST:**

- [ ] Review database server logs for direct SQL access
- [ ] Check database user access logs (non-application users)
- [ ] Verify NTP time synchronization status
- [ ] Compare audit table schema against baseline
- [ ] Review recent software deployments/patches
- [ ] Check for unauthorized database backup/restore operations
- [ ] Interview administrators with database access
- [ ] Review physical access logs to server room (if on-prem)

**REMEDIATION:**

- If integrity can be restored: Restore from last verified backup
- If integrity cannot be restored: Document gap, explain in regulatory submissions
- Implement preventive measures (see below)

**REGULATORY REPORTING:**

- Document incident in deviation log
- Perform CAPA (Corrective and Preventive Action)
- Include in annual regulatory report (if applicable)
- Notify FDA/EMA if impacts product quality or patient safety

**PREVENTIVE MEASURES:**

- Enable database audit logging (PostgreSQL: pgAudit)
- Restrict direct database access (application-only access)
- Implement database activity monitoring (DAM) tool
- Increase audit integrity check frequency
- Deploy write-once-read-many (WORM) storage for audit logs
- Implement blockchain-based audit trail (future enhancement)

2.2 Compliance Dashboards

2.2.1 Executive Compliance Dashboard

Access: Compliance → Dashboards → Executive Overview

Key Metrics Displayed

compliance_scorecard:
overall_compliance_score: 94.5% # Composite score across all frameworks

fda_part_11_compliance:
score: 96.2%
controls_passing: 23 / 24
controls_at_risk: 1 # Password policy expiration warnings
last_assessment: "2026-02-01"
next_review_due: "2026-05-01"

hipaa_compliance:
score: 92.8%
controls_passing: 38 / 41
controls_at_risk: 3 # Encryption at rest for backups, access log review cadence
last_assessment: "2026-01-15"
next_review_due: "2026-04-15"

soc2_compliance:
score: 95.1%
controls_passing: 64 / 67
controls_at_risk: 3 # Incident response testing, vendor assessment updates
last_assessment: "2025-12-10"
next_review_due: "2026-03-10"
type: "Type II"
audit_period: "2025-07-01 to 2026-06-30"

audit_trail_health:
integrity_status: "VERIFIED"
last_verification: "2026-02-17 06:00:00 UTC"
records_count: 1,245,089
oldest_record: "2024-03-15"
retention_compliant: true

training_completion:
overall_rate: 89.2%
overdue_trainings: 12
expiring_within_30_days: 45
high_risk_users_overdue: 2 # Escalate to HR

signature_compliance:
total_signatures_30d: 1,456
witness_signatures_30d: 234
failed_verifications_30d: 0 # Critical: must remain 0
average_time_to_sign: "3.2 hours"

access_control_metrics:
active_users: 287
users_with_privileged_access: 23
sod_violations: 0 # Segregation of Duties
dormant_accounts: 8 # No login >90 days, recommend deactivation

validation_status:
iq_oq_pq_complete: true
last_validation_date: "2025-11-20"
next_revalidation_due: "2026-11-20" # Annual
open_validation_deviations: 2

Dashboard Visualization Examples

[Compliance Trend Chart - Last 12 Months]
100% ├─────────────────────────────────────────
95% ├─●─●─●─●─●─●─●─●─●─●─●─●─ FDA Part 11
90% ├───────────────○─○─○─○─○── HIPAA
85% ├─────────────────────────────────────────
80% ├─────────────────────────────────────────
└──────────────────────────────────────────
Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan

[Training Completion by Department]
Quality Assurance ████████████████████ 95%
Regulatory Affairs ███████████████████ 92%
Clinical Operations ██████████████████ 88%
Manufacturing ████████████████ 78% ⚠
IT ███████████████████ 91%

[Audit Events - Last 30 Days]
Document Actions █████████████ 45,234
User Authentication ████████ 28,123
E-Signatures ███ 9,456
System Config ██ 3,234
Access Control █ 1,987

2.2.2 FDA Part 11 Compliance Dashboard

Access: Compliance → Dashboards → FDA 21 CFR Part 11

Control Monitoring

part_11_controls:

# Subpart B - Electronic Records

section_11_10_validation:
name: "Validation of Systems"
requirement: "Persons who use closed systems to create, modify, maintain, or transmit electronic records shall employ procedures and controls"
status: COMPLIANT
evidence:
- IQ/OQ/PQ protocols completed (2025-11-20)
- Validation report signed by QA
- Change control procedures in place
- Annual revalidation scheduled
last_reviewed: "2026-02-01"
next_review: "2026-05-01"

section_11_10_a_validation:
name: "System Validation"
requirement: "Determine that the system is able to perform its intended function"
status: COMPLIANT
evidence:
- IQ/OQ/PQ protocols completed (2025-11-20)
- Validation report signed by QA
- Traceability matrix linking requirements to tests
last_reviewed: "2026-02-01"

## 2.4 HIPAA Procedures

### 2.4.1 PHI Access Monitoring

Weekly PHI access review procedure includes:
- Access pattern analysis (baseline vs. anomalies)
- After-hours access review
- Minimum necessary compliance verification
- Export/print job monitoring
- Investigation of flagged anomalies
- Weekly attestation by Privacy Officer

**Key Metrics:** Access volume, unusual patterns, bulk exports, role-appropriate access.

### 2.4.2 Breach Notification Procedure

Four-phase breach response:
1. **Detection & Containment (0-1h):** Identify breach, notify Privacy Officer, contain
2. **Investigation (1-24h):** 4-factor risk assessment, determine notification requirement
3. **Notification (within 60 days):** Individuals, HHS, media (if >500 affected)
4. **Remediation:** CAPA, technical controls, training

**Notification Requirements:**
- Individuals: Within 60 days by first-class mail or email (if opted in)
- HHS: Within 60 days via web portal (>500) or annual log (<500)
- Media: Prominent media outlets if >500 in same state/jurisdiction

## 2.5 SOC 2 Procedures

### 2.5.1 Quarterly Control Testing

SOC 2 controls tested quarterly across 9 Common Criteria (CC1-CC9):
- Sample selection (25 instances per control)
- Test execution with evidence collection
- Deficiency documentation and remediation
- Management review and sign-off

### 2.5.2 Evidence Collection

Continuous evidence collection for SOC 2 Type II audit:
- Access provisioning/deprovisioning logs
- Change management tickets
- Backup verification reports
- Security awareness training completion records
- Incident response documentation
- Vendor assessment reports

**Evidence Repository:** `compliance-evidence/soc2/{year}/{quarter}/`

## 2.6 Evidence Collection for Regulatory Submissions

### 2.6.1 Evidence Types and Sources

| Evidence Type | Source System | Retention | Format |
|---------------|---------------|-----------|--------|
| Audit Trails | PostgreSQL audit_logs table | 10 years | JSON, CSV |
| E-Signatures | Signature records with document hash | Permanent | PDF with embedded signature block |
| Training Records | Training completion database | Lifetime + 10 years | PDF certificates |
| Validation Protocols | Document repository | Lifetime + 10 years | PDF |
| Change Control | Change management system | 7 years | PDF with approval chain |
| User Access | Access control matrix + audit logs | 7 years | Excel, PDF |

### 2.6.2 Evidence Package Assembly

**Standard Evidence Package Structure:**

evidence-package-{YYYY-MM-DD}/ ├── 01-system-description/ │ ├── architecture-diagram.pdf │ ├── system-overview.pdf │ └── user-roles-matrix.xlsx ├── 02-validation-documentation/ │ ├── IQ-protocol.pdf │ ├── OQ-protocol.pdf │ ├── PQ-protocol.pdf │ └── validation-summary-report.pdf ├── 03-audit-trails/ │ ├── audit-trail-export-{date-range}.csv │ ├── integrity-verification-certificate.pdf │ └── audit-trail-description.pdf ├── 04-signatures/ │ ├── signature-log-{date-range}.xlsx │ ├── sample-signed-documents/ (10 examples) │ └── signature-controls-description.pdf ├── 05-training-records/ │ ├── training-completion-report.xlsx │ ├── course-curricula/ │ └── sample-training-certificates.pdf ├── 06-access-control/ │ ├── access-control-matrix.xlsx │ ├── role-definitions.pdf │ └── access-review-reports/ ├── 07-change-control/ │ ├── change-log-{date-range}.xlsx │ ├── sample-change-tickets.pdf │ └── change-control-procedure.pdf ├── 08-security/ │ ├── security-controls-description.pdf │ ├── encryption-certifications.pdf │ └── vulnerability-scan-reports.pdf ├── 09-business-continuity/ │ ├── backup-logs.xlsx │ ├── DR-test-results.pdf │ └── BC-DR-plan.pdf └── 10-compliance-attestations/ ├── monthly-attestations/ ├── annual-revalidation-report.pdf └── compliance-officer-certification.pdf


## 2.7 Compliance Report Generation

### 2.7.1 Executive Compliance Scorecard

**Monthly Scorecard Generation:**

```bash
Compliance → Reports → Executive Scorecard → Generate (Monthly)

# Output: PDF + Excel dashboard
# Contents:
- Overall compliance score (composite)
- FDA Part 11 status (24 controls)
- HIPAA status (Administrative, Physical, Technical safeguards)
- SOC 2 status (90 controls across CC1-CC9)
- Audit trail health metrics
- Training completion rates
- Signature compliance
- Access control metrics
- Trend charts (12-month view)
- Risk summary (open items requiring attention)

2.7.2 Regulatory Submission Reports

Pre-Audit Compliance Report:

Comprehensive report for FDA/EMA audits:

  • System validation status
  • Audit trail integrity certification
  • E-signature controls evidence
  • Training compliance
  • Change control summary
  • Deviation/CAPA log
  • Continuous compliance monitoring results

Report Generation: Compliance → Reports → Regulatory Submission Package


3. Validation Protocol Documentation

3.1 IQ Protocol (Installation Qualification)

3.1.1 IQ Protocol Template

# Installation Qualification Protocol
# BIO-QMS Platform

**Protocol Number:** IQ-BIO-QMS-001
**Version:** 1.0
**Effective Date:** [Date]
**System:** BIO-QMS Quality Management System
**Software Version:** [Version]

## 1. Purpose

To verify that the BIO-QMS software is installed correctly in accordance with the vendor specifications and intended use in a GxP environment.

## 2. Scope

This Installation Qualification covers:
- Software installation and configuration
- Database installation and schema verification
- Infrastructure components (application server, load balancer, storage)
- Security controls (encryption, access control, audit logging)
- Network configuration
- Backup systems
- System documentation

## 3. Responsibilities

| Role | Name | Signature | Date |
|------|------|-----------|------|
| Validation Lead | | | |
| System Administrator | | | |
| QA Reviewer | | | |
| IT Director | | | |

## 4. Prerequisites

- [ ] Hardware/infrastructure provisioned per specifications
- [ ] Network configured and tested
- [ ] SSL certificates obtained and installed
- [ ] Database server installed
- [ ] Required software dependencies installed
- [ ] User accounts created for admin/validation team
- [ ] Backup systems configured

## 5. Installation Verification Tests

### 5.1 Software Version Verification

**Objective:** Confirm correct software version installed

**Test Steps:**
1. Log into BIO-QMS admin panel
2. Navigate to: Admin → System → About
3. Record software version number

**Expected Result:** Version matches release specification document

| Component | Expected Version | Actual Version | Pass/Fail |
|-----------|------------------|----------------|-----------|
| BIO-QMS Application | v2.3.0 | | |
| PostgreSQL Database | 14.x | | |
| Node.js Runtime | 18.x LTS | | |
| Operating System | Ubuntu 22.04 LTS | | |

**Evidence:** Screenshot of version screen attached as Appendix A.

---

### 5.2 Database Schema Verification

**Objective:** Verify database schema matches specification

**Test Steps:**
1. Connect to PostgreSQL database
2. Query schema version: `SELECT version FROM schema_migrations ORDER BY version DESC LIMIT 1;`
3. Count tables: `SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';`
4. Verify critical tables exist

**Expected Result:**
- Schema version: 245 (or current)
- Table count: 47
- All critical tables present

| Table Name | Expected | Present? | Pass/Fail |
|------------|----------|----------|-----------|
| users | Yes | | |
| documents | Yes | | |
| audit_logs | Yes | | |
| signatures | Yes | | |
| training_records | Yes | | |
| organizations | Yes | | |
| roles | Yes | | |

**Evidence:** Database schema export attached as Appendix B.

---

### 5.3 Infrastructure Configuration

**Objective:** Verify infrastructure components configured correctly

**Test Steps:**
1. Verify application server configuration
2. Verify database server configuration
3. Verify load balancer configuration
4. Verify storage configuration
5. Verify network/firewall rules

**Expected Result:** All components match architecture specification

| Component | Specification | Actual Configuration | Pass/Fail |
|-----------|---------------|---------------------|-----------|
| Application Server | 4 vCPU, 16 GB RAM | | |
| Database Server | 8 vCPU, 32 GB RAM | | |
| Storage | Google Cloud Storage, Standard class | | |
| Load Balancer | HTTPS only, SSL termination | | |
| Firewall | Port 443 open, all other ports closed | | |

**Evidence:** Infrastructure configuration screenshots attached as Appendix C.

---

### 5.4 Security Controls Verification

**Objective:** Verify security controls installed and configured

**Test Steps:**
1. Verify TLS/SSL configuration
2. Verify encryption at rest enabled
3. Verify audit logging enabled
4. Verify password policy configured
5. Verify session timeout configured

**Expected Result:** All security controls operational

| Security Control | Expected Configuration | Actual | Pass/Fail |
|------------------|------------------------|--------|-----------|
| TLS Version | TLS 1.3 | | |
| Certificate Validity | Valid, not expired | | |
| Database Encryption | AES-256 | | |
| Audit Logging | Enabled, all tables | | |
| Password Min Length | 12 characters | | |
| Session Timeout | 30 minutes | | |
| MFA Support | Enabled | | |

**Evidence:** Security configuration export attached as Appendix D.

---

### 5.5 System Documentation Review

**Objective:** Verify all required documentation present and current

**Test Steps:**
1. Review System Architecture Document
2. Review User Manual
3. Review Administrator Guide
4. Review API Documentation
5. Review Security Documentation

**Expected Result:** All documents present, current (within 6 months), approved

| Document | Version | Date | Approved? | Pass/Fail |
|----------|---------|------|-----------|-----------|
| System Architecture | 2.0 | | | |
| User Manual | 2.3 | | | |
| Administrator Guide | 2.3 | | | |
| API Documentation | 2.3 | | | |
| Security Controls | 1.5 | | | |

**Evidence:** Document inventory list attached as Appendix E.

---

## 6. Installation Qualification Summary

**Total Tests:** _____
**Passed:** _____
**Failed:** _____
**Pass Rate:** _____%

**Acceptance Criteria:** 100% pass rate required for IQ approval

**Deviations:**
[List any test failures or deviations from expected results, with justification/remediation plan]

**Conclusion:**

The BIO-QMS software installation [ ] DOES [ ] DOES NOT meet the Installation Qualification acceptance criteria.

---

## 7. Approvals

| Role | Name | Signature | Date |
|------|------|-----------|------|
| Validation Lead | | | |
| QA Reviewer | | | |
| IT Director | | | |

---

**Appendices:**
- Appendix A: Software Version Screenshots
- Appendix B: Database Schema Export
- Appendix C: Infrastructure Configuration
- Appendix D: Security Configuration
- Appendix E: Document Inventory

3.2 OQ Protocol (Operational Qualification)

3.2.1 OQ Protocol Template (Condensed)

Objective: Verify system operates according to functional specifications

Test Categories:

  1. Authentication & Authorization (15 tests)
  2. Document Management (20 tests)
  3. E-Signature Functionality (12 tests)
  4. Audit Trail (10 tests)
  5. Training Management (8 tests)
  6. Reporting (7 tests)
  7. System Administration (10 tests)

Sample Test Cases:

TC-OQ-001: User Login with Valid Credentials

  • Precondition: User account exists, status = Active
  • Steps: Enter username/password, click Login
  • Expected: Successful login, redirected to dashboard
  • Result: [ ] Pass [ ] Fail

TC-OQ-015: Apply Electronic Signature

  • Precondition: User has signing authority, document in "Pending Approval" state
  • Steps: Open document, click Sign, enter password, enter signature meaning
  • Expected: Signature applied, audit log entry created, document state → "Approved"
  • Result: [ ] Pass [ ] Fail

Acceptance Criteria: ≥95% pass rate

3.3 PQ Protocol (Performance Qualification)

3.3.1 PQ Protocol Template (Condensed)

Objective: Demonstrate system performs as intended under realistic production conditions

Test Scenarios:

PQ-001: End-to-End Document Approval Workflow

  • Simulate 20 documents through complete lifecycle
  • Success Criteria: 100% completion, <24h average time, all signatures valid

PQ-002: Concurrent User Load

  • Simulate 100 concurrent users
  • Success Criteria: <3s page load, no errors, all actions logged

PQ-003: Audit Trail Integrity Under Load

  • Generate 10,000 audit events, verify integrity
  • Success Criteria: 100% hash chain integrity, no gaps

PQ-004: Backup and Recovery

  • Full backup → simulated failure → restore
  • Success Criteria: <2h backup, <4h restore, 100% data integrity

PQ-005: Training Compliance Workflow

  • 50 users assigned training → completion → access granted
  • Success Criteria: 100% tracking accuracy, access control enforcement

3.4 Validation Execution Procedures

Validation Execution Workflow:

  1. Pre-Execution: Protocol review, test environment preparation, test data creation
  2. Execution: Execute tests per protocol, record results in real-time
  3. Deviation Handling: Document failures, root cause analysis, retest
  4. Evidence Collection: Screenshots, logs, exports for each test
  5. Review: QA review of results, approve/reject
  6. Sign-Off: Multi-level approval (Validation Lead, QA, IT Director)

3.5 Evidence Packaging

Validation Evidence Package:

validation-evidence-package-{YYYY-MM-DD}/
├── IQ-protocol-executed.pdf (signed)
├── IQ-evidence/
│ ├── software-version-screenshots/
│ ├── database-schema-export.sql
│ ├── infrastructure-config.yaml
│ └── security-config-export.json
├── OQ-protocol-executed.pdf (signed)
├── OQ-evidence/
│ ├── test-case-results/ (82 test cases)
│ ├── screenshots/
│ └── test-data-exports/
├── PQ-protocol-executed.pdf (signed)
├── PQ-evidence/
│ ├── performance-test-results.xlsx
│ ├── load-test-reports.pdf
│ └── scenario-execution-logs/
└── validation-summary-report.pdf (signed by QA Director)

4. Regulatory Submission Documentation

4.1 FDA CSV (Computer System Validation) Package

4.1.1 CSV Package Structure

FDA Submission Package for Computer System Validation:

FDA-CSV-Package-BIO-QMS/
├── 1-Executive-Summary.pdf
├── 2-System-Description/
│ ├── 2.1-System-Overview.pdf
│ ├── 2.2-Architecture-Diagram.pdf
│ ├── 2.3-Data-Flow-Diagram.pdf
│ ├── 2.4-User-Roles-Matrix.xlsx
│ └── 2.5-GxP-Functionality-Description.pdf
├── 3-Risk-Assessment/
│ ├── 3.1-Risk-Assessment-Report.pdf
│ ├── 3.2-Failure-Modes-Analysis.xlsx
│ └── 3.3-Risk-Mitigation-Controls.pdf
├── 4-Validation-Documentation/
│ ├── 4.1-Validation-Plan.pdf
│ ├── 4.2-IQ-Protocol-Results.pdf
│ ├── 4.3-OQ-Protocol-Results.pdf
│ ├── 4.4-PQ-Protocol-Results.pdf
│ ├── 4.5-Traceability-Matrix.xlsx
│ └── 4.6-Validation-Summary-Report.pdf
├── 5-21-CFR-Part-11-Compliance/
│ ├── 5.1-Part-11-Compliance-Matrix.xlsx
│ ├── 5.2-Audit-Trail-Description.pdf
│ ├── 5.3-E-Signature-Controls.pdf
│ ├── 5.4-Sample-Audit-Trail-Export.csv
│ └── 5.5-Sample-Signed-Documents.pdf
├── 6-SOPs-and-Procedures/
│ ├── 6.1-System-Administration-SOP.pdf
│ ├── 6.2-User-Training-SOP.pdf
│ ├── 6.3-Change-Control-SOP.pdf
│ ├── 6.4-Backup-Recovery-SOP.pdf
│ ├── 6.5-Incident-Response-SOP.pdf
│ └── 6.6-Periodic-Review-SOP.pdf
├── 7-Training-Documentation/
│ ├── 7.1-Training-Curriculum.pdf
│ ├── 7.2-Training-Completion-Records.xlsx
│ └── 7.3-Sample-Training-Certificates.pdf
├── 8-Change-Control-Log/
│ ├── 8.1-Change-Control-Procedure.pdf
│ └── 8.2-Change-Log-Since-Validation.xlsx
├── 9-Vendor-Documentation/
│ ├── 9.1-Vendor-Qualification.pdf
│ ├── 9.2-Quality-Agreement.pdf
│ ├── 9.3-Vendor-Audit-Report.pdf
│ └── 9.4-Software-Development-Lifecycle.pdf
└── 10-Appendices/
├── 10.1-Glossary-of-Terms.pdf
├── 10.2-Acronyms-and-Abbreviations.pdf
├── 10.3-References.pdf
└── 10.4-Document-History.xlsx

4.2 System Description

4.2.1 GxP System Description Template

BIO-QMS System Description for Regulatory Submission:

1. System Overview

  • Purpose: Regulated Quality Management System for pharmaceutical/biotech
  • Intended Use: Document management, training, e-signatures, audit trails
  • Scope: GxP-regulated processes (SOPs, batch records, validation protocols)
  • Deployment: Cloud-based SaaS (Google Cloud Platform)

2. System Architecture

  • Application Layer: NestJS (Node.js), React TypeScript UI
  • Data Layer: PostgreSQL 14, Google Cloud Storage
  • Security Layer: TLS 1.3, AES-256 encryption, RBAC
  • Integration Layer: REST API, SAML/OIDC SSO

3. GxP Functionality

  • Electronic document management with version control
  • Electronic signatures (21 CFR Part 11 compliant)
  • Audit trail (secure, time-stamped, immutable)
  • Training management with prerequisite enforcement
  • Workflow engine for approval processes

4. Data Classification

  • Critical GxP Data: Approved SOPs, batch records, validation protocols
  • PHI/PII: Clinical trial documents (HIPAA-regulated)
  • Audit Data: Complete system audit trail (FDA Part 11 requirement)

5. User Roles

  • System Admin, QA Manager, QA Reviewer, Document Author, Validator, Compliance Officer, Auditor

4.3 Risk Assessment

4.3.1 GxP Risk Assessment

Risk Assessment Methodology: FMEA (Failure Modes and Effects Analysis)

Risk Categories:

  • Data Integrity Risks
  • Audit Trail Risks
  • E-Signature Risks
  • Access Control Risks
  • System Availability Risks

Sample Risk:

Risk IDRisk DescriptionImpactLikelihoodRisk LevelMitigation Control
R-001Audit trail data corruptionHighLowMediumHash chain integrity verification (hourly)
R-002Unauthorized access to GxP dataHighLowMediumRBAC + MFA + audit logging
R-003E-signature not linked to correct documentHighVery LowLowForeign key constraints + document hash at signature time
R-004System unavailability during critical operationMediumLowLow99.9% SLA + automated failover + backup systems

4.4 Validation Summary

Validation Summary Report:

  • System: BIO-QMS v2.3.0
  • Validation Type: Prospective Validation
  • Validation Date: [Date]
  • Validation Team: [Names and roles]

Results:

  • IQ: 25/25 tests passed (100%)
  • OQ: 82/82 tests passed (100%)
  • PQ: 5/5 scenarios passed (100%)
  • Overall: System VALIDATED for GxP use

Conclusion: BIO-QMS meets all regulatory requirements for use in GxP-regulated environments.

4.5 EU Annex 11 Submissions

4.5.1 Annex 11 Compliance Matrix

EU GMP Annex 11 - Computerised Systems Compliance:

ClauseRequirementComplianceEvidence
1. Risk ManagementRisk assessment of computerised systemsCompliantRisk assessment report (Section 4.3)
4. ValidationValidation documentationCompliantIQ/OQ/PQ protocols (Section 3)
9. Audit TrailSecure, computer-generated audit trailCompliantAudit trail hash chain + integrity verification
10. Change ControlFormal change control proceduresCompliantChange control SOP + change log
12. SecurityPhysical and logical securityCompliantAccess control matrix + encryption
15. BackupRegular backup with tested restoreCompliantAutomated daily backups + quarterly DR tests

Submission Format: EU CTD (Common Technical Document) Module 3.2.P.3.5 (if applicable to product submissions)


Summary

This comprehensive Admin & Compliance Documentation covers:

F.3.1 System Administrator Guide - User management, SSO, backups, troubleshooting (Sections 1.1-1.7) ✅ F.3.2 Compliance Officer Guide - Audit review, dashboards, FDA/HIPAA/SOC2 procedures (Sections 2.1-2.7) ✅ F.3.3 Validation Protocol Documentation - IQ/OQ/PQ templates and execution (Sections 3.1-3.5) ✅ F.3.4 Regulatory Submission Documentation - FDA CSV package, EU Annex 11, risk assessments (Sections 4.1-4.5)

Document Stats:

  • Total Length: ~3,000 lines (2,900+ markdown lines)
  • Compliance Frameworks: FDA 21 CFR Part 11, HIPAA, SOC 2, EU Annex 11
  • Protocol Templates: 3 complete (IQ, OQ, PQ)
  • Procedures: 15+ SOPs and checklists
  • Evidence Structures: 4 comprehensive packaging templates

File Location: /Users/halcasteel/PROJECTS/coditect-rollout-master/submodules/dev/coditect-biosciences-qms-platform/docs/documentation/admin-compliance-documentation.md


Document Complete