Spaces:
Paused
Paused
| -- PHI Audit Log Schema for HIPAA Compliance | |
| -- This table logs all PHI scrubbing operations for audit trails | |
| CREATE TABLE IF NOT EXISTS phi_audit_log ( | |
| id SERIAL PRIMARY KEY, | |
| timestamp TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, | |
| user_id VARCHAR(255), -- If applicable, for user tracking | |
| session_id VARCHAR(255), -- For session-based tracking | |
| operation VARCHAR(50) NOT NULL, -- e.g., 'scrub', 'redact', 'anonymize' | |
| input_hash VARCHAR(64) NOT NULL, -- SHA-256 hash of input text | |
| output_hash VARCHAR(64), -- SHA-256 hash of output text | |
| phi_types_found TEXT[], -- Array of PHI types detected | |
| redaction_count INTEGER DEFAULT 0, -- Number of redactions performed | |
| processing_time_ms INTEGER, -- Time taken for operation | |
| ip_address INET, -- Client IP for audit | |
| user_agent TEXT, -- Client user agent | |
| success BOOLEAN DEFAULT TRUE, -- Whether operation succeeded | |
| error_message TEXT -- Error details if failed | |
| ); | |
| -- Index for efficient querying by timestamp | |
| CREATE INDEX IF NOT EXISTS idx_phi_audit_log_timestamp ON phi_audit_log (timestamp); | |
| -- Index for input hash lookups | |
| CREATE INDEX IF NOT EXISTS idx_phi_audit_log_input_hash ON phi_audit_log (input_hash); | |
| -- Index for session tracking | |
| CREATE INDEX IF NOT EXISTS idx_phi_audit_log_session_id ON phi_audit_log (session_id); | |
| -- Partitioning by month for large-scale deployments (optional) | |
| -- This can be enabled if audit logs grow very large | |
| -- CREATE TABLE phi_audit_log_y2024m01 PARTITION OF phi_audit_log FOR VALUES FROM ('2024-01-01') TO ('2024-02-01'); | |
| -- Grant permissions (adjust as needed for your deployment) | |
| -- GRANT SELECT, INSERT ON phi_audit_log TO your_app_user; | |
| -- GRANT USAGE ON SEQUENCE phi_audit_log_id_seq TO your_app_user; | |