Fixing ATC Variant ABAP_CLEAN_CORE_DEVELOPMENT: Remediation Playbook

👤 Author: Andrea Antonio Perrelli (10x SAP Certified Solution Architect) 📅 Updated: October 2026 🎯 Focus: SAP S/4HANA & SAP BTP Clean Core

In SAP S/4HANA (Cloud Private Edition, Public Edition, and On-Premise 2023+), the ABAP Test Cockpit (ATC) enforces the official check variant ABAP_CLEAN_CORE_DEVELOPMENT.

When transports are released, this variant triggers Priority 1 and Priority 2 findings, blocking transport release and preventing technical debt from entering production.


🚨 The 4 Most Common ATC Clean Core Findings

Finding Code Root Cause Severity Clean Core Level
CLEAN_CORE_DIRECT_DB Direct SELECT / UPDATE on non-released SAP standard tables (VBAK, BSEG, MARA) Priority 1 (Blocker) Level D (Hard Anti-Pattern)
CLEAN_CORE_UNRELEASED_API Calling function module or class without release contract C1 (e.g. BAPI_SALESORDER_SIMULATE) Priority 1 (Blocker) Level C (Legacy Debt)
CLEAN_CORE_OBSOLETE_SYNTAX Using obsolete procedural constructs (TABLES, FORM ... ENDFORM, Dynpro CALL SCREEN) Priority 2 (High) Level C (Legacy Debt)
CLEAN_CORE_IMPLICIT_ENH Implicit source code enhancements in standard SAP function pools or classes Priority 1 (Blocker) Level D (Hard Anti-Pattern)

🛠️ Step-by-Step Remediation Workflows

1. Remediating Direct Database Access (CLEAN_CORE_DIRECT_DB)

❌ Forbidden Monolith (Fails ATC Check)

" Fails ATC: Direct read on classic table VBAK
SELECT vbeln, erdat, netwr 
  FROM vbak 
  INTO TABLE @DATA(lt_orders)
  WHERE vkorg = '1000'.

✅ Clean Core Compliant Solution (Passes ATC Variant)

Replace raw standard tables with released SAP CDS View Entities exposing the Contract C1 (Use in Cloud Development):

" Passes ATC: Uses C1-released CDS Interface View
SELECT FROM I_SalesOrderBasic
  FIELDS SalesOrder, CreationDate, TotalNetAmount, TransactionCurrency
  WHERE SalesOrganization = '1000'
  INTO TABLE @DATA(lt_orders).

2. Remediating Unreleased BAPI Calls (CLEAN_CORE_UNRELEASED_API)

When an official C1-released RAP business object or API exists in the Cloudification Repository, replace the BAPI with Entity Manipulation Language (EML).

When standard SAP has not yet released a public C1 API, do not attempt hacky pseudo-comments or raw suppression. Instead, implement a Tier 2 Quarantine Wrapper:

┌─────────────────────────────────────────────────────────────┐
│ Tier 1: ABAP Cloud Application (Language Version 5)          │
│ - Strict ATC: Zero Clean Core findings                      │
│ - Calls strictly released custom interface                  │
└───────────────────────────┬─────────────────────────────────┘
                            │ Calls zif_tier2_sales_wrapper
                            ▼
┌─────────────────────────────────────────────────────────────┐
│ Tier 2: Quarantine Wrapper (Language Version: Standard)      │
│ - Isolated Package: Z_TIER2_QUARANTINE                       │
│ - Encapsulates classic BAPI_SALESORDER_SIMULATE             │
│ - Applies bounded ATC Exemption with documented sunset ADR   │
└─────────────────────────────────────────────────────────────┘

Step 1: Create the Clean Interface in Customer Namespace

INTERFACE zif_tier2_sales_wrapper PUBLIC.
  TYPES:
    BEGIN OF ty_order_input,
      sales_org  TYPE c LENGTH 4,
      distr_chan TYPE c LENGTH 2,
      doc_type   TYPE c LENGTH 4,
    END OF ty_order_input.

  METHODS simulate_order
    IMPORTING is_input TYPE ty_order_input
    RETURNING VALUE(rv_valid) TYPE abap_bool
    RAISING cx_clean_core_quarantine_error.
ENDINTERFACE.

Step 2: Implement the Isolated Quarantine Class

CLASS zcl_tier2_sales_quarantine DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES zif_tier2_sales_wrapper.
ENDCLASS.

CLASS zcl_tier2_sales_quarantine IMPLEMENTATION.
  METHOD zif_tier2_sales_wrapper~simulate_order.
    DATA: ls_header TYPE bapisdhead.
    ls_header-doc_type = is_input-doc_type.

    " Isolated call inside Tier 2 quarantine package
    CALL FUNCTION 'BAPI_SALESORDER_SIMULATE'
      EXPORTING order_header_in = ls_header.

    rv_valid = abap_true.
  ENDMETHOD.
ENDCLASS.

🏛️ ATC Exemption Governance for Clean Core

When registering an ATC exemption for Tier 2 quarantine objects: 1. Scope Exemption strictly to Package: Apply exemptions only to packages matching Z_TIER2_*. Never apply global exemptions to application development packages (Z_TIER1_*). 2. Mandatory Sunset Date: Associate every Tier 2 exemption with an internal Architecture Decision Record (ADR) and a review date aligned with the next SAP S/4HANA Feature Package Stack (FPS). 3. Automated CI/CD Verification: Run automated ATC checks in your GitLab CI/CD pipeline before merging to release branches.


📚 Complete Architecture Guide & Enterprise Suite

Need the complete catalogue of 61 production-grade code listings, 40 Retina diagrams, and step-by-step RAP implementations?

OFFICIAL MASTER PUBLICATION

Take Your Clean Core Architecture to Production

This cheat sheet is an excerpt from The Definitive Guide to ABAP Cloud & Clean Core Extensibility. Get all 40 Retina architecture diagrams, 61 production-grade code patterns, and the complete BTP companion.

14-day 100% money-back guarantee • Instant digital delivery • Corporate VAT invoice provided