EU AI Act Art.20 Corrective Actions & Duty of Information: Developer Guide (High-Risk AI 2026)
EU AI Act Article 20 is the reactive compliance mechanism in the high-risk AI framework: where Arts.9–17 establish what you must build and document before placing an AI system on the market, Art.20 governs what you must do when something goes wrong after it is deployed. The obligation is immediate, the notification chain is mandatory, and the cooperation duties with market surveillance authorities are unconditional.
For developers and engineering teams operating high-risk AI systems under EU AI Act Chapter III Section 2, Art.20 translates into concrete build requirements: non-conformity detection pipelines, automated cascade notification systems, market surveillance authority communication protocols, and documented corrective action records that satisfy both Art.20 and the Art.17 QMS incident register.
This guide covers Art.20(1)-(2) in full: the non-conformity trigger, corrective action options, the duty to inform the downstream value chain, the risk-based escalation to market surveillance authorities, the Art.20 × Art.73 serious incident reporting intersection, the Art.20 × Art.25 value chain obligation cascade, CLOUD Act jurisdiction risk for corrective action documentation, Python implementation for CorrectiveActionTracker, NonConformityReport, and Art20ComplianceChecker, and the 40-item Art.20 compliance checklist.
Art.20 in the High-Risk AI Compliance Chain
Art.20 occupies the post-deployment correction layer of Chapter III Section 2:
| Article | Obligation Layer | Timing |
|---|---|---|
| Art.9 | Risk management system | Pre-market (design) |
| Art.10 | Training data governance | Pre-market (development) |
| Art.11 | Technical documentation | Pre-market (documentation) |
| Art.12 | Automatic event logging | Operational (continuous) |
| Art.13 | Instructions for use | Pre-market (deployment) |
| Art.14 | Human oversight design | Pre-market (design) + operational |
| Art.15 | Accuracy and robustness | Pre-market (development) + operational |
| Art.17 | Quality management system | Organisational (ongoing) |
| Art.20 | Corrective actions | Post-deployment (triggered) |
| Art.21 | MSA cooperation | Post-deployment (on-demand) |
Art.20 is explicitly triggered — it does not impose continuous obligations but creates a structured response framework that activates upon detection of non-conformity or risk. The speed of activation, however, is the critical constraint: Art.20(1) uses the word "immediately" without qualification.
Art.20(1): Non-Conformity Detection & Corrective Action Obligation
The Trigger: "Consider or Have Reason to Believe"
Art.20(1) does not require certainty of non-conformity — it activates when the provider "considers or has reason to believe" that a high-risk AI system placed on the market or put into service is not in conformity with the Regulation.
What this threshold means for developers:
The "reason to believe" standard is intentionally low. It covers:
- Performance drift detected by Art.72 post-market monitoring (PMM) system
- Art.12 logging events indicating systematic output deviations
- User reports or deployer feedback indicating unexpected behaviour
- Art.73 serious incident reports revealing underlying system non-conformity
- Market surveillance authority findings under Art.74
- Third-party security research disclosing adversarial vulnerabilities (Art.15 breach)
- Training data bias examination results (Art.10) suggesting discriminatory outputs
What counts as "non-conformity":
Non-conformity with the Regulation means failure to satisfy any of the requirements in Chapter III Section 2 (Arts.9–15) that were applicable at time of conformity assessment (Art.43). This includes:
- Risk management system gap (Art.9): undocumented risk category
- Training data non-conformance (Art.10): bias detected post-deployment
- Technical documentation deficiency (Art.11): missing Annex IV element
- Logging failure (Art.12): audit trail incomplete
- Instructions for use inadequacy (Art.13): mandatory element absent
- Human oversight design flaw (Art.14): override capability non-functional
- Accuracy/robustness breach (Art.15): declared metrics no longer achievable
Substantial modification threshold:
Art.20 applies to the system as originally placed on the market. If the provider introduces a change that constitutes a "substantial modification" under Art.6(3), this creates a new conformity obligation under Art.43 — not an Art.20 corrective action situation. Art.17(1)(h) recalibration procedures and the compliance strategy under Art.17(1)(a) must distinguish between these two scenarios.
Corrective Action Options
Art.20(1) provides three corrective responses, in order of severity:
- Bring into conformity: Technical fix that restores compliance — e.g., model update, data re-processing, documentation correction, monitoring system repair
- Withdraw from the market: Stop making the system available to new deployers; existing deployments may continue with deployer notification
- Recall: Require existing deployers to cease using the system; applicable to serious risk situations
The appropriate response depends on the severity and nature of the non-conformity. Art.20(2) adds a risk-specific escalation path for situations involving risk as defined in Art.79(1).
The Duty to Inform
Upon taking corrective action, Art.20(1) requires the provider to immediately inform:
- Distributors of the high-risk AI system
- Deployers, where applicable
This creates a mandatory downstream notification obligation. The notification must be sufficient for distributors and deployers to discharge their own Art.27 and Art.29 obligations — including stopping distribution, suspending use, or informing their own downstream parties.
Art.20(2): Risk-Based Escalation to Market Surveillance Authorities
Art.79(1) Risk Definition
Art.20(2) activates when the high-risk AI system "presents a risk within the meaning of Article 79(1)" and the provider becomes aware of that risk.
Art.79(1) defines risk as: a situation where a high-risk AI system presents a risk to the health, safety, or fundamental rights of persons, or to compliance with obligations under Union or national law intended to protect those rights.
This is a broader category than non-conformity — a system can be technically conformant with Arts.9–15 but still present risk through unexpected interactions or deployment contexts not anticipated during conformity assessment.
Immediate Risk Assessment Obligation
When Art.20(2) is triggered, the provider must immediately:
- Investigate the causes of the identified risk
- Carry out a risk assessment of the risk and any potential safety implications
- Inform the relevant market surveillance authority of the risk assessment results and measures taken
- Cooperate with the MSA and relevant national authorities throughout the investigation
MSA identification: The relevant market surveillance authority is the authority in the Member State where the AI system was placed on the market or put into service. In cross-border deployments, this may involve multiple MSAs. EU-native providers operating exclusively within the EU simplify this — a single set of national MSAs applies.
Cooperation scope: Art.20(2) cooperation obligations are unconditional. There is no qualification for trade secrets or confidentiality — although Art.78 of the AI Act provides confidentiality protections for information obtained during market surveillance.
The Corrective Action Cascade: Provider → Distributor → Deployer
Art.20 triggers a cascade of obligations across the AI supply chain. Each actor has corresponding duties:
Provider (Art.20)
- Take corrective action immediately
- Inform distributors and deployers
- Cooperate with MSAs
- Document all corrective actions in Art.17 QMS incident register
Distributor (Art.27)
Upon receiving Art.20(1) notification from the provider:
- Must immediately verify that the corrective actions are sufficient
- Must ensure that deployers within their distribution network are informed
- Must cooperate with the provider and MSA in corrective action implementation
- Must suspend distribution to new deployers if corrective action involves withdrawal
Importer (Art.26)
Where an importer is in the chain:
- Must verify that the provider has fulfilled Art.20 obligations
- Must inform the provider, distributor, and relevant MSA if the importer independently identifies risk
- Must suspend import and making available if serious risk is confirmed
Deployer (Art.29)
Upon receiving notification of corrective action:
- Must suspend use of the system if corrective action involves withdrawal or recall
- Must cooperate with the provider's investigation by providing operational data relevant to the identified non-conformity
- Must inform the relevant MSA if the deployer identifies serious risk independently (Art.29(4))
- Must inform end-users (natural persons) of corrective actions affecting them under Art.29(5)
Cascade Notification Timeline
| Actor | Obligation | Timing |
|---|---|---|
| Provider | Corrective action + inform distributors/deployers | Immediately upon detection |
| Distributor | Verify + cascade to deployer network | Upon receipt of provider notification |
| Importer | Verify + inform MSA if independent risk | Upon receipt or independent detection |
| Deployer | Suspend use + cooperate + inform users | Upon receipt of cascade notification |
| MSA | Investigate + order further actions | Art.79 timeline |
Art.20 × Art.25: When Downstream Parties Become Providers
Art.25 creates a mechanism by which distributors, importers, and deployers can acquire provider-equivalent obligations — including Art.20 — when they perform one of the following:
- Place a high-risk AI system on the market under their own name or trademark
- Make a substantial modification to a high-risk AI system after its initial market placement
- Substantially modify the intended purpose of a high-risk AI system
When any of these conditions are met, the downstream party becomes subject to the full provider obligation set, including Art.20 corrective actions.
Developer implications:
A SaaS company that:
- Takes a foundation model, fine-tunes it for a specific Annex III use case, and offers it under its own brand → becomes a provider under Art.25 → Art.20 applies
- Integrates a third-party high-risk AI module but configures it in a way that constitutes substantial modification → becomes a provider → Art.20 applies
- Rebrands a certified high-risk AI system without substantively modifying it → remains a distributor → Art.27 obligations, not Art.20
The Art.17 QMS compliance strategy under element (a) must explicitly document whether the organisation operates as provider, distributor, importer, or deployer for each high-risk AI system — and must classify any value-added modifications against the Art.6(3) substantial modification threshold.
Art.20 × Art.73: Serious Incident Reporting
Art.73 creates a parallel obligation to report "serious incidents" to MSAs — distinct from, but intersecting with, Art.20.
Art.73(1) serious incident definition:
An incident or malfunctioning of a high-risk AI system that directly or indirectly leads to:
- Death of a person or serious damage to a person's health
- Serious and irreversible disruption of critical infrastructure (Annex I NIS2 sectors)
- Infringement of fundamental rights obligations
- Serious damage to property or the environment
Art.20 × Art.73 intersection matrix:
| Scenario | Art.20 Triggered? | Art.73 Triggered? | Action |
|---|---|---|---|
| Performance drift → non-conformity | Yes (Art.20(1)) | No | Corrective action + chain notification |
| Serious incident → non-conformity identified | Yes (Art.20(1)) | Yes (Art.73(1)) | Corrective action + Art.73 15-day report |
| Risk without non-conformity | Yes (Art.20(2)) | Potentially | Risk assessment + MSA cooperation |
| Third-party caused incident, system conformant | No | Yes (Art.73(1)) | Art.73 report only |
| Serious incident + NIS2 critical infra | Yes + Art.20(2) | Yes | Triple: Art.20 + Art.73 + NIS2 Art.21(4) |
Dual reporting under serious incident scenario:
- Art.73: Provider must notify the national MSA of any serious incident within 15 days of becoming aware
- Art.20(2): Provider must immediately carry out risk assessment and cooperate with MSA
- NIS2 Art.21(4): If the AI system is deployed in critical infrastructure, 24-hour early warning + 72-hour report to CSIRT/NCA
Art.17(1)(f) communication procedures and Art.17(1)(g) incident recording system must be designed to handle this triple-regime notification requirement simultaneously.
Implementation: Python Code for Art.20 Compliance
CorrectiveActionTracker
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from typing import Optional
import json
from hashlib import sha256
class CorrectionTrigger(Enum):
PERFORMANCE_DRIFT = "performance_drift" # Art.15 baseline breach
PMM_FINDING = "post_market_monitoring_finding" # Art.72
SERIOUS_INCIDENT = "serious_incident" # Art.73
USER_REPORT = "user_report" # Art.29(4) deployer report
MSA_FINDING = "msa_finding" # Art.74 market surveillance
INDEPENDENT_AUDIT = "independent_audit"
SECURITY_RESEARCH = "security_research_disclosure" # Art.15(5) adversarial
class CorrectiveActionType(Enum):
BRING_INTO_CONFORMITY = "bring_into_conformity" # Art.20(1)(a)
WITHDRAW_FROM_MARKET = "withdraw_from_market" # Art.20(1)(b)
RECALL = "recall" # Art.20(1)(c)
class CascadeStatus(Enum):
PENDING = "pending"
NOTIFIED = "notified"
CONFIRMED = "confirmed"
SUSPENDED = "suspended" # Deployer suspended use
@dataclass
class DownstreamNotification:
"""Art.20(1) duty-to-inform record for each downstream party."""
party_type: str # "distributor" | "importer" | "deployer"
party_id: str
notification_sent_at: Optional[datetime] = None
status: CascadeStatus = CascadeStatus.PENDING
suspension_confirmed_at: Optional[datetime] = None
@dataclass
class CorrectiveActionRecord:
"""Art.20 corrective action record — feeds Art.17(1)(g) incident register."""
action_id: str
system_id: str
trigger: CorrectionTrigger
non_conformity_description: str
action_type: CorrectiveActionType
art79_risk_identified: bool = False # Art.20(2) escalation flag
msa_notification_required: bool = False
msa_notified_at: Optional[datetime] = None
corrective_action_completed_at: Optional[datetime] = None
detected_at: datetime = field(default_factory=datetime.utcnow)
downstream_notifications: list[DownstreamNotification] = field(default_factory=list)
root_cause_summary: Optional[str] = None
risk_assessment_summary: Optional[str] = None
def time_since_detection_hours(self) -> float:
"""Tracks immediacy compliance for Art.20(1) 'immediately' requirement."""
if not self.corrective_action_completed_at:
return (datetime.utcnow() - self.detected_at).total_seconds() / 3600
return (self.corrective_action_completed_at - self.detected_at).total_seconds() / 3600
def all_parties_notified(self) -> bool:
"""Checks Art.20(1) duty-to-inform compliance."""
return all(
n.status in (CascadeStatus.NOTIFIED, CascadeStatus.CONFIRMED, CascadeStatus.SUSPENDED)
for n in self.downstream_notifications
)
def to_art17_log_entry(self) -> dict:
"""Converts to Art.17(1)(g) QMS incident register format."""
return {
"action_id": self.action_id,
"system_id": self.system_id,
"event_type": "corrective_action",
"trigger": self.trigger.value,
"action_type": self.action_type.value,
"art79_risk": self.art79_risk_identified,
"detected_at": self.detected_at.isoformat() + "Z",
"downstream_parties": len(self.downstream_notifications),
"all_notified": self.all_parties_notified(),
"hours_to_action": self.time_since_detection_hours(),
}
class CorrectiveActionTracker:
"""Art.20 corrective action cascade state machine."""
def __init__(self):
self._records: list[CorrectiveActionRecord] = []
def open_action(self, record: CorrectiveActionRecord) -> str:
"""Registers new corrective action. Returns action_id."""
self._records.append(record)
return record.action_id
def notify_party(
self, action_id: str, party_id: str, notification_time: Optional[datetime] = None
) -> None:
"""Records Art.20(1) downstream notification sent."""
record = self._find(action_id)
for notification in record.downstream_notifications:
if notification.party_id == party_id:
notification.status = CascadeStatus.NOTIFIED
notification.notification_sent_at = notification_time or datetime.utcnow()
def confirm_suspension(self, action_id: str, party_id: str) -> None:
"""Records deployer suspension confirmation per Art.29 cascade."""
record = self._find(action_id)
for notification in record.downstream_notifications:
if notification.party_id == party_id:
notification.status = CascadeStatus.SUSPENDED
notification.suspension_confirmed_at = datetime.utcnow()
def complete_action(self, action_id: str, root_cause: str) -> None:
"""Marks corrective action complete with root cause documented."""
record = self._find(action_id)
record.corrective_action_completed_at = datetime.utcnow()
record.root_cause_summary = root_cause
def pending_msa_notifications(self) -> list[CorrectiveActionRecord]:
"""Returns Art.20(2) cases where MSA notification is required but not yet sent."""
return [
r for r in self._records
if r.msa_notification_required and r.msa_notified_at is None
]
def _find(self, action_id: str) -> CorrectiveActionRecord:
for r in self._records:
if r.action_id == action_id:
return r
raise KeyError(f"No corrective action with id {action_id}")
NonConformityReport for Market Surveillance Authority
from dataclasses import dataclass
from datetime import datetime
from typing import Optional
from enum import Enum
class RiskLevel(Enum):
"""Art.79(1) risk classification for MSA notification."""
SERIOUS_RISK_HEALTH_SAFETY = "serious_risk_health_safety"
SERIOUS_RISK_FUNDAMENTAL_RIGHTS = "serious_risk_fundamental_rights"
SERIOUS_RISK_CRITICAL_INFRA = "serious_risk_critical_infra"
NON_CONFORMITY_NO_SERIOUS_RISK = "non_conformity_no_serious_risk"
@dataclass
class NonConformityReport:
"""
Structured report for Art.20(2) MSA notification.
Format aligned with EU AI Act Art.79 and EASA/RAPEX reporting protocols.
"""
report_id: str
system_id: str
system_name: str
provider_name: str
provider_eori_or_eu_registration: str
risk_level: RiskLevel
non_conformity_description: str
affected_annex_iii_category: str # e.g., "Annex III Category 1 (Biometrics)"
detection_date: datetime
detection_method: str
affected_deployers_count: int
affected_member_states: list[str]
corrective_actions_taken: list[str]
risk_assessment_summary: str
art73_serious_incident_reported: bool
msa_contact_authority: str # National MSA identifier
submission_date: datetime = None
def to_rapex_format(self) -> dict:
"""
Produces RAPEX/ICSMS-compatible notification structure.
EU AI Act MSAs use the RAPEX Information and Communication System (ICSMS)
for product safety notifications including high-risk AI systems.
"""
return {
"notification_type": "AI_SYSTEM_RISK",
"report_id": self.report_id,
"product_category": "HIGH_RISK_AI_SYSTEM",
"product_description": {
"system_id": self.system_id,
"system_name": self.system_name,
"annex_iii_category": self.affected_annex_iii_category,
},
"notifying_country": self._primary_member_state(),
"risk_assessment": {
"risk_level": self.risk_level.value,
"description": self.risk_assessment_summary,
"affected_member_states": self.affected_member_states,
},
"measures_taken": {
"corrective_actions": self.corrective_actions_taken,
"art73_incident_reported": self.art73_serious_incident_reported,
"withdrawal_initiated": any(
"withdraw" in action.lower() for action in self.corrective_actions_taken
),
},
"provider": {
"name": self.provider_name,
"registration": self.provider_eori_or_eu_registration,
},
"submission_date": (
self.submission_date or datetime.utcnow()
).isoformat() + "Z",
}
def _primary_member_state(self) -> str:
return self.affected_member_states[0] if self.affected_member_states else "EU"
Art20ComplianceChecker
from dataclasses import dataclass
from typing import Optional
@dataclass
class Art20ProcedureAudit:
"""Validates that an organisation has the required Art.20 procedures in place."""
# Art.20(1) procedure requirements
has_non_conformity_detection: bool = False # Automated monitoring (PMM, Art.12 logs)
has_corrective_action_sop: bool = False # Written SOP: 3 action types
has_chain_notification_procedure: bool = False # Distributor + deployer notification
has_downstream_contact_registry: bool = False # Up-to-date registry of distributors/deployers
notification_sop_specifies_immediacy: bool = False # "Immediately" threshold defined
# Art.20(2) procedure requirements
has_art79_risk_classification: bool = False # Risk level definitions aligned with Art.79(1)
has_risk_assessment_procedure: bool = False # Written risk assessment process
has_msa_notification_procedure: bool = False # MSA contact registry + notification template
has_rapex_icsms_registration: bool = False # Provider registered with ICSMS/RAPEX system
has_msa_cooperation_protocol: bool = False # Defined cooperation workflow
# Art.20 × Art.17 QMS integration
corrective_actions_logged_in_qms: bool = False # Art.17(1)(g) incident register
root_cause_analysis_procedure: bool = False # RCA methodology documented
capa_tracking_system: bool = False # Corrective and preventive actions
corrective_action_doc_retention_10yr: bool = False # Art.11(3) × Art.17 retention
# Art.20 × Art.73 integration
serious_incident_overlap_procedure: bool = False # Dual Art.20 + Art.73 filing workflow
art73_15_day_timeline_tracked: bool = False # Deadline tracking for serious incident reports
triple_reporting_nis2_covered: bool = False # NIS2 Art.21 integration for critical infra
# Art.25 value chain scope
value_chain_role_documented: bool = False # Provider/distributor/importer/deployer classification
substantial_modification_threshold_defined: bool = False # Art.6(3) threshold in compliance strategy
art25_assumption_procedure: bool = False # Procedure for when Art.25 applies
# Infrastructure jurisdiction
corrective_action_records_eu_jurisdictioned: bool = False # No CLOUD Act exposure
def score(self) -> tuple[int, int]:
fields = [v for v in vars(self).values() if isinstance(v, bool)]
return sum(fields), len(fields)
def missing_procedures(self) -> list[str]:
return [
field.replace("_", " ")
for field, value in vars(self).items()
if isinstance(value, bool) and not value
]
def is_art20_compliant(self) -> bool:
"""Minimum Art.20 compliance: all core procedure requirements met."""
core = [
self.has_non_conformity_detection,
self.has_corrective_action_sop,
self.has_chain_notification_procedure,
self.has_downstream_contact_registry,
self.has_art79_risk_classification,
self.has_msa_notification_procedure,
self.corrective_actions_logged_in_qms,
self.serious_incident_overlap_procedure,
]
return all(core)
CLOUD Act × Art.20 Corrective Action Documentation
Art.20 creates extensive documentation requirements that must be retained under Art.11(3) for 10 years from the date the AI system was placed on the market:
- Non-conformity assessment records
- Risk assessment reports (Art.20(2))
- Downstream notification records (dates, parties, content)
- MSA cooperation correspondence
- Corrective action completion evidence
- Root cause analysis documentation
The CLOUD Act dual-compellability problem:
If any of these records are stored with a US-headquartered cloud provider (AWS, Azure, GCP, Salesforce, ServiceNow), the CLOUD Act (18 U.S.C. § 2713) allows US law enforcement and intelligence agencies to compel production of those records regardless of where the data is physically located, and regardless of EU data protection law or the AI Act's Art.78 confidentiality protections.
For Art.20 records specifically, this creates a severe conflict:
- Art.78 AI Act: information obtained during market surveillance must remain confidential
- Art.20 corrective action records contain commercially sensitive non-conformity data
- CLOUD Act subpoena bypasses both Art.78 AI Act and GDPR Art.48 restrictions on international transfers
EU-native mitigation:
An EU-headquartered provider operating exclusively on EU servers — with no US parent entity, no US subsidiary, and no US-based personnel with access to the data — falls outside CLOUD Act jurisdiction. Under 18 U.S.C. § 2713, the obligation applies to "providers of electronic communication service or remote computing service." An entity with no nexus to the US cannot be compelled under the CLOUD Act.
Storing Art.20 corrective action records, MSA correspondence, and non-conformity assessments on EU-native infrastructure eliminates dual-compellability risk and satisfies Art.17 QMS document storage requirements under single-jurisdiction governance.
Cross-Article Compliance Matrix
| Art.20 Obligation | Intersecting Article | Integration Requirement |
|---|---|---|
| Non-conformity detection | Art.72 PMM, Art.12 logging | PMM outputs feed corrective action trigger |
| Corrective action documentation | Art.17(1)(g) QMS incident register | All Art.20 actions must be in QMS log |
| Duty to inform distributors/deployers | Art.27 distributors, Art.29 deployers | Downstream contact registry required |
| Risk assessment (Art.20(2)) | Art.9 risk management system | Risk methodology from Art.9 reused |
| MSA notification (Art.20(2)) | Art.21 cooperation, Art.74 market surveillance | Notification template aligned with MSA requirements |
| Serious incident overlap | Art.73 15-day report | Dual-filing procedure required |
| Art.79(1) risk classification | Art.15(5) cybersecurity, Art.14 oversight failure | Risk definition covers adversarial attacks + oversight failure |
| Corrective action records retention | Art.11(3) 10-year retention | Same 10-year schedule as Annex IV documentation |
| Value chain scope | Art.25 substantial modification, Art.26 importers | Art.25 assumption triggers full Art.20 obligation |
| CLOUD Act documentation risk | GDPR Art.46, Art.78 AI Act confidentiality | EU-native storage required for single-regime compliance |
Art.20 Compliance Checklist (40 Items)
Non-Conformity Detection (Art.20(1))
- ☐ Art.72 post-market monitoring system deployed and generates structured alerts
- ☐ Art.12 automatic logging events reviewed for non-conformity indicators
- ☐ Performance drift thresholds defined relative to Art.15 baseline accuracy metrics
- ☐ User/deployer feedback channel established (Art.29(4) reports ingested)
- ☐ Security disclosure programme in place (adversarial finding intake)
- ☐ Non-conformity definition documented: which Art.9–15 failures trigger Art.20(1)
- ☐ Internal escalation procedure: who decides Art.20(1) trigger?
- ☐ Detection-to-decision SLA defined for "immediately" compliance
- ☐ "Reason to believe" standard documented: lower than certainty threshold explicit
- ☐ Substantial modification threshold documented (Art.6(3) bright-line test)
Corrective Action Procedure (Art.20(1))
- ☐ Three corrective action types defined: bring into conformity / withdraw / recall
- ☐ Decision matrix: which non-conformity → which action type
- ☐ Technical fix procedure: how to bring system into conformity (testing, re-assessment)
- ☐ Market withdrawal procedure: stop new distribution, notify existing deployers
- ☐ Recall procedure: deployer suspension request, evidence collection
- ☐ Art.43 re-assessment trigger: when corrective action requires renewed conformity assessment
- ☐ Emergency withdrawal capability: ability to stop system within defined SLA
- ☐ System versioning: corrected version clearly distinguishable from non-conformant version
Downstream Notification (Art.20(1))
- ☐ Downstream contact registry: all distributors and deployers inventoried
- ☐ Notification template: content sufficient for distributor Art.27 compliance
- ☐ Notification delivery method: defined channel (email, API, registered mail)
- ☐ Confirmation mechanism: notification receipt confirmed by each party
- ☐ Cascade monitoring: verification that deployers received notification via distributor
- ☐ Notification log: each notification timestamped and retained for 10 years (Art.11(3))
MSA Notification (Art.20(2))
- ☐ Art.79(1) risk classification defined: health/safety, fundamental rights, critical infra
- ☐ Risk assessment procedure documented and operationalised
- ☐ MSA contact registry: relevant national MSA for each Member State of operation
- ☐ ICSMS/RAPEX registration: provider registered with EU product safety notification system
- ☐ MSA notification template aligned with RAPEX format
- ☐ MSA notification SLA: immediacy defined for Art.20(2) trigger
- ☐ Cooperation protocol: defined workflow for MSA investigation support
- ☐ Confidentiality procedure: Art.78 AI Act protections invoked for sensitive disclosures
Art.20 × Art.73 Integration
- ☐ Dual-filing procedure: simultaneous Art.20 + Art.73 15-day notification workflow
- ☐ Triple-filing procedure (NIS2 critical infra): Art.20 + Art.73 + NIS2 Art.21 24h/72h
- ☐ Serious incident classifier: maps incident to applicable reporting regimes
- ☐ Art.73 timeline tracker: 15-day deadline monitored from detection
Art.20 × Art.17 QMS Integration
- ☐ All Art.20 corrective actions logged in Art.17(1)(g) incident register
- ☐ Root cause analysis procedure applied to all Art.20(1) triggers
- ☐ Corrective action documentation retained for 10 years from market placement (Art.11(3))
- ☐ Corrective action records stored in EU-jurisdictioned infrastructure (CLOUD Act mitigation)
Enforcement Exposure
Art.20 violations are sanctionable under AI Act Art.99:
- Art.99(3): Failure to take corrective actions, withdraw from market, or cooperate with MSA: up to €15 million or 3% of global annual turnover (whichever is higher for SMEs; whichever is higher for large enterprises)
- Art.99(5): Failure to notify authorities as required under Art.20(2): up to €7.5 million or 1%
Art.20 non-compliance is particularly high-risk from an enforcement perspective because:
- Documentation paper trail is explicit: MSAs can verify whether the Art.20 cascade was executed by reviewing downstream notification records, MSA correspondence, and Art.17 QMS incident logs
- Timeline is objective: The "immediately" standard creates verifiable timestamps — MSAs can calculate notification lag
- Third-party witnesses exist: Distributors and deployers receive (or do not receive) notifications — their testimony is independent evidence
- Art.73 cross-reference: If a serious incident is reported under Art.73 but no Art.20 corrective action was taken, the gap is immediately visible to the MSA
What to Do Now
If you're a high-risk AI provider (August 2026 deadline):
- Inventory downstream parties: Build and maintain the Art.20(1) notification registry — all distributors and deployers must be reachable within your defined notification SLA.
- Connect PMM to corrective action trigger: Your Art.72 post-market monitoring system must generate alerts that automatically create Art.20 decision-support records. Don't treat PMM as a separate compliance silo.
- Register with ICSMS: EU providers must be registered with the Information and Communication System on Market Surveillance (ICSMS) before placing high-risk AI systems on the market. Without registration, Art.20(2) MSA notification is procedurally blocked.
- Define your Art.79(1) risk thresholds: Document what performance metric deviations, incident types, or deployer reports constitute an Art.79(1) risk — triggering Art.20(2) MSA notification obligation.
- Integrate into QMS: Art.17(1)(g) must include a corrective action log. Every Art.20 event is simultaneously an Art.17 QMS incident register entry.
- Audit corrective action record storage: If Art.20 records (incident data, MSA correspondence, non-conformity assessments) are stored with US-headquartered providers, conduct a CLOUD Act risk assessment and migrate to EU-native infrastructure where risk is material.
If you're a distributor or deployer (Art.27/Art.29 obligations):
When you receive an Art.20(1) notification from a provider:
- Verify the notification content is sufficient to discharge your own obligations
- Immediately contact your own downstream parties (if you have sub-distributors or sub-deployers)
- Suspend making the system available (if withdrawal is required) and document the suspension timestamp
- Cooperate with the provider's risk investigation by providing relevant operational data