Rilascio unico (3 moduli) costruito in flotta parallela + verifica avversariale. MODULO A — Audit interni (ISO 27001 §9.2, mig.055): internal_audits + internal_audit_items; codice AUD-NNN; checklist pre-popolata (clausole 4-10 + Annex A applicabili dal SoA); esiti per riga; apertura non conformità collegata a NCR/CAPA (source polimorfico); report HTML stampabile. InternalAuditController + internal-audits.html. MODULO B — Riesame di Direzione (ISO 27001 §9.3, mig.056): management_reviews + management_review_decisions; codice RD-AAAA-NN; INPUT aggregati automaticamente dai moduli (gather: NC/CAPA, audit interni, rischi+trattamenti, KPI/score, obiettivi, formazione, stakeholder, normative, scadenze), congelati nello snapshot all'approvazione; decisioni; verbale stampabile. ManagementReviewController + management-review.html. MODULO C — Calendario unico scadenze: aggregatore SOLA LETTURA (nessuna migrazione) di tutte le scadenze (incidenti/policy/rischi/NC-CAPA/formazione/stakeholder/audit/riesame/review_schedule), griglia mensile + lista + filtri + deep-link. CalendarController + calendario.html. Integrazione: router (3 controller+actionMap), api.js, sidebar V2+legacy, help.js (3 sezioni), i18n (IT+EN), review_schedule ENUM += internal_audit. v1.22.0 + sw cache + cache-buster 20260630. Verifica flotta (28 agenti, 4 dim + avversariale): 9 finding confermati, TUTTI corretti — MAJOR gatherRisks (risk_treatments.organization_id inesistente → JOIN risks); nextCode numerico (no dup >99/anno); footer report audit con etichetta "ISO buona prassi, non obbligo"; help 24→25 clausole; ARIA tab/calendario; focus modali; tasti su celle calendario; rimossi helper api morti. Smoke prod OK (calendario 18 eventi, audit AUD-001 25 item + report + audit→NCR + audit→calendario, riesame gather/decisione/approve/report, gatherRisks ora available); org 151 ripulita. Additivo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
51 lines
3.0 KiB
SQL
51 lines
3.0 KiB
SQL
-- ═══════════════════════════════════════════════════════════════════
|
|
-- NIS2 Agile - Migration 055: Audit interni (ISO 27001 §9.2)
|
|
-- ───────────────────────────────────────────────────────────────────
|
|
-- MODULO A del design DESIGN_AUDIT_INTERNI_RIESAME_DIREZIONE.md
|
|
-- Ciclo: programma audit -> checklist di conduzione -> esiti -> finding NC.
|
|
-- Additivo, runner-safe (CREATE TABLE IF NOT EXISTS + FK inline).
|
|
-- I finding NC confluiscono in non_conformities (source='audit',
|
|
-- source_entity_type='internal_audit_item'); le evidenze su evidence_files
|
|
-- (entity_type='internal_audit'). Nessuna nuova tabella file.
|
|
-- ═══════════════════════════════════════════════════════════════════
|
|
|
|
-- Programma / sessioni di audit interno
|
|
CREATE TABLE IF NOT EXISTS internal_audits (
|
|
id INT NOT NULL AUTO_INCREMENT,
|
|
organization_id INT NOT NULL,
|
|
code VARCHAR(20) NULL,
|
|
title VARCHAR(255) NOT NULL,
|
|
scope TEXT NULL,
|
|
criteria TEXT NULL,
|
|
planned_date DATE NULL,
|
|
executed_date DATE NULL,
|
|
status ENUM('planned','in_progress','completed','cancelled') NOT NULL DEFAULT 'planned',
|
|
lead_auditor_user_id INT NULL,
|
|
lead_auditor_role_id INT NULL,
|
|
conclusion TEXT NULL,
|
|
created_by INT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
KEY idx_intaud_org (organization_id),
|
|
CONSTRAINT fk_intaud_org FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_intaud_lead_user FOREIGN KEY (lead_auditor_user_id) REFERENCES users (id) ON DELETE SET NULL,
|
|
CONSTRAINT fk_intaud_lead_role FOREIGN KEY (lead_auditor_role_id) REFERENCES org_roles (id) ON DELETE SET NULL,
|
|
CONSTRAINT fk_intaud_creator FOREIGN KEY (created_by) REFERENCES users (id) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Voci di checklist (clausole 4-10, controlli Annex A, misure NIS2, custom)
|
|
CREATE TABLE IF NOT EXISTS internal_audit_items (
|
|
id INT NOT NULL AUTO_INCREMENT,
|
|
audit_id INT NOT NULL,
|
|
ref_type ENUM('clause','annex_control','nis2_measure','custom') NOT NULL DEFAULT 'clause',
|
|
ref_code VARCHAR(32) NULL,
|
|
checkpoint TEXT NOT NULL,
|
|
result ENUM('da_verificare','conforme','non_conforme','osservazione','opportunita','non_applicabile') NOT NULL DEFAULT 'da_verificare',
|
|
note TEXT NULL,
|
|
ord INT NOT NULL DEFAULT 0,
|
|
PRIMARY KEY (id),
|
|
KEY idx_intauditem_audit (audit_id),
|
|
CONSTRAINT fk_intauditem_audit FOREIGN KEY (audit_id) REFERENCES internal_audits (id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|