02 — System Diagram

🔍 Open the Interactive Diagram Viewer — pan, mouse-wheel zoom, fit-to-screen, full-screen, per-area tabs, the full ERD, and a focus mode that draws one model and its neighbours at a chosen depth. Control and ControlDeficiency are hub tables, so their links can be hidden to declutter the overview.

Regenerate the viewer after any DSL, menu_config.yaml or diagram_config.yaml change: python scripts/build_diagram_viewer.py iscrm.

The assurance spine

flowchart TD
  Entity[Entity]
  Sys[InformationSystem]
  Dom[ControlDomain]
  Obj[ControlObjective]
  Ctl[Control]
  Cyc[AssessmentCycle]
  Asmt[ControlAssessment]
  ER[EvidenceRequirement]
  EV[EvidenceSubmission]
  Def[ControlDeficiency]
  RP[RemediationPlan]
  RA[RemediationAction]
  RT[Retest]
  Risk[RiskAcceptance]
  Dec[AssuranceDecision]
  CR[ClosureRequest]
  CA[ClosureApproval]
  SH[StatusHistory]

  Entity --> Sys
  Sys --> Ctl
  Dom --> Obj
  Obj --> Ctl
  Cyc --> Asmt
  Ctl --> Asmt
  Ctl --> ER
  Asmt --> ER
  ER --> EV
  Ctl --> EV
  Sys --> Def
  Ctl --> Def
  Asmt --> Def
  Def --> EV
  Def --> RP
  RP --> RA
  Def --> RT
  Ctl --> RT
  Def --> Risk
  Def --> Dec
  Def --> CR
  CR --> CA
  Def --> SH

How to read it

  • Control and ControlDeficiency are the hubs. Assessments and evidence hang off the control; remediation, retest, risk acceptance, decisions and closure hang off the deficiency. The viewer lets you hide those hub edges to see local structure.
  • Assessment produces deficiencies. A ControlAssessment records design/operating/ overall effectiveness; an ineffective result raises one or more ControlDeficiency.
  • Retest gates closure. A ControlDeficiency that is closure_blocking must reach a Retest outcome of PASSED before a ClosureApproval can be APPROVED; a FAILED retest keeps it open (an interim RiskAcceptance is not closure).
  • Closure is two-part: a ClosureRequest (declaring completion) and an independent ClosureApproval (the authorised outcome).
  • StatusHistory is the audit trail of each deficiency's state transitions.

Backing data (denormalised for display)

Each foreign key carries a denormalised <fk>_name display column so lists read in plain language (e.g. a Control shows its system and objective; a Retest shows the deficiency title) without a join at read time — the house style for these apps.