Skip to content
ERP Preflight

File formats per engine

Which exports and files each analysis engine accepts, from the engines’ declared input contracts.

Content reviewed September 26, 2026

Upload rules that apply to every engine

  • Upload .xml, .json, .csv, .zip or .abap files up to 100 MB each (operator setting).
  • Archives: at most 100:1 compression ratio, 500 MB uncompressed in total, 10 000 entries and 2 levels of nested archives; entries with absolute paths or ../ are rejected.
  • XML is parsed with DTDs, entity declarations and external references disabled.
  • Secrets in text files (XML, XSD, WSDL, EDMX, XDP, JSON, CSV, ABAP and plain-text sources) are redacted before storage, and the redaction count is recorded with the upload. ZIP and PDF files are not rewritten; evidence snippets are redacted during analysis. Details: Data handling in detail.

File formats per engine

Formats each engine accepts (from its input contract). Uploads are additionally checked by magic bytes, archive limits and a malware scan before an engine sees them.

File formats per engine
EngineAccepted formatsInput contract
OPD GuardJSON, XML, CSV, XLSXBRFplus output-determination decision tables (CSV with a Step column or '# Step:' sections, XML <Table name=...> export, XLSX with one sheet per step, or JSON {'tables': {step: [rows]}}) plus an optional document 'scenario' with 'expected_determination', a batch 'scenarios' list ([{id, scenario, expected}]), 'baseline_tables' (previous version, for the before/after diff) and a FormDoctor 'form_handoff' block. XML carries batch scenarios as <Scenarios><Scenario id=...>, expectations as <Expected> and the previous version as <BaselineDecisionTables>.Required input: At least one decision table (CSV/XML/XLSX/JSON)
FormDoctorXML, TEXTAdobe Form XDP template together with the form's runtime data XML and/or the form interface schema (XSD) (as artifacts, or data XML in raw_content + configuration.xdp_content / xsd_content), or a SAPscript / Smart Forms source (XML export or text). Optional configuration: business_source_fields, custom_fields [{name, form_enabled, context_supports_forms}], data_source {name, extensible}, form_template, output_type.Required input: XDP template AND runtime data XML or form interface XSD (binding verification); or a SAPscript / Smart Forms source (legacy form audit)
Custom Field Flow DoctorJSONCustom field registry JSON: {'field_name': 'YY1_…', 'hops': [{source_context, target_context, min_release?}], 'field_definitions': {context: {type, length, usages: ['UI', 'FORM', 'API', ...]}}, 'required_exposures': {context: ['FORM', 'API', 'ANALYTICS', 'UI', 'EMAIL']} (or a list for the final context), 'active_scenarios': [...], 'badi_implementations': [...]}.Required input: field_name; hops or field_definitions
Extension Impact GuardJSONExtension inventory JSON: {'extensions': [{object_name, object_type, status, dependencies, data_type, length, software_collection}], 'dependencies': {object: [consumers]}, 'target_object': '…', 'action': 'DELETE'|'MODIFY'|'CHANGE_TYPE'|'CHANGE_LENGTH'|'TRANSPORT', 'change': {new_type, new_length}}. Deletion / change / transport verdicts require an explicit target_object.Required input: extensions or dependencies/graph adjacency map; target_object for deletion/impact verdicts
SPRO2CloudCSV, JSON, TEXT, XLSXSPRO / IMG activity export: CSV (comma, semicolon, tab or pipe separated) with an activity (ActivityID / IMG activity / node), activity name, SPRO path or table column; JSON rows {'activity_id', 'activity_name', 'spro_path', 'table_name', 'module', 'country', 'source_release'} (list or {'activities': [...]}); an XLSX workbook (base64) whose worksheets start with such a header row; or a plain list of IMG activity IDs / table names, one per line.Required input: At least one IMG activity ID, activity name, SPRO / IMG path or configuration table name
ECC2Cloud NavigatorCSV, JSON, TEXT, ZIPLegacy landscape inventory: ST03N / SUIM usage CSV (TCode / Transaction / object_name column, optional ExecutionCount, AvgResponseTimeMs, UserCount, Module, Process, Owner), TADIR export (OBJECT, OBJ_NAME, DEVCLASS, AUTHOR), JSON rows {name, type, executions, module, process, owner} or typed lists {'img_items', 'tables', 'abap_objects', 'custom_objects', 'requirements'}, 'TCODE [count]' lines, or an abapGit repository ZIP (base64).Required input: At least one transaction, interface, IMG activity, table, ABAP / custom object or requirement
SAP Gap RadarJSON, TEXTBusiness / technical requirement statements: JSON {'requirements': [{'requirement': '…', 'scope_items': [...]}]}, {'requirement': '…'}, a JSON list, or plain text (one statement, or a bulleted / numbered / ID-prefixed list with one requirement per item).Required input: At least one non-empty requirement statement; Every statement must be an SAP business or technical requirement (SAP process, object, configuration or extensibility term); unrelated prose is rejected as GAP_RADAR_INVALID_INPUT
Migration Template IntelligenceXML, CSV, TEXTSAP data migration template (Migration Cockpit 'Migrate Your Data' load file): the Excel 2003 XML spreadsheet as downloaded from SAP (all sheets, document properties OBJECT_NAME / VERSION / LANGUAGE, field list) or the CSV of one data sheet including its header rows (as converted from an XLSX by the upload): title row, SAP structure names, SAP field names, the type-specification row ('ETE;80;0;C;80;0'), group names ('Schlüssel' / 'Key') and field descriptions ('*' = mandatory), then the data rows. EN and DE templates.Required input: A migration template data sheet with its type-specification row (XML spreadsheet or CSV)
Clean Core Object GuardABAP, ZIP, JSONCustom ABAP source (report, class, function group include), an abapGit repository ZIP containing *.abap files, or an object list JSON {'objects': [{'name', 'type': TABL|FUNC|CLAS|DDLS}]} for release-status lookup.Required input: ABAP source with at least one statement, an abapGit ZIP, or an object list
Change Pointer Coverage AuditorJSON, CSV, TEXTALE change pointer configuration: JSON {'target_message_type', 'bd61_active', 'bd50_msg_types', 'bd52_fields', 'expected_fields', 'dd04l_metadata', 'bdcp2_samples', 'change_documents', 'bd53_reduced_fields'} or a record-type CSV (BD61/BD50/BD52/DD04L/BDCP2/CDPOS rows).Required input: message type (target_message_type or active BD50 entry); BD52 field configuration
API Change GuardJSON, XML, TEXTTwo API specifications of the same service — baseline (current) and candidate (target release): OpenAPI 2/3 (JSON or YAML) or OData EDMX V2/V4 XML — supplied as {'baseline': …, 'candidate': …} in raw_content / configuration or as artifacts named *baseline* / *candidate*; optional 'integrations' registry for consumer impact.Required input: baseline specification; candidate specification
Software Collection Dependency GuardJSON, XML, ZIPKey-User Software Collection export: JSON {'collections': [{collection_id, items: [{item_id, type, status, dependencies}], dependencies}], 'target_system_collections': [...], 'import_order': [collection ids]}, XML <software_collections> (optional <import_order><step collection="…"/></import_order>), or a ZIP (nested up to 2 levels) containing manifest.json / manifest.xml.Required input: At least one software collection
Transport Dependency AnalyzerJSON, CSV, XMLCTS transport metadata: CSV export of E070/E071/E071K with a TRKORR header row, JSON {'transports': {TRKORR: ['TABL ZTAB', …]}, 'e070': [...], 'e071': [...], 'call_references': [...], 'seometarel': [...], 'wbcrossgt': [...], 'planned_sequence': [...]}, XML with <E070>/<E071> sections, or the cloud-aware gCTS / abapGit adapter JSON {'adapter': 'GCTS', 'commits': [{id, parents, timestamp, objects | files}], 'planned_sequence': [commit ids]}.Required input: At least one transport request (or gCTS / abapGit commit) with its object list
Safe Decommission PreflightJSON, CSV, TEXTDecommissioning extract: JSON {'target_type' (USER | TECHNICAL_USER | SERVICE_USER | COMMUNICATION_USER | JOB_STEP_USER | RFC_DESTINATION), 'target_user' or 'target_destination', 'evaluation_date', 'usr02': [...], 'tbtco': [...], 'tbtcp': [...], 'rfcdes': [...], 'swwwihead': [...], 'agr_users': [...], 'sm20': [...], 'scheduled_integrations': [...], 'ownership': [...]} or a sectioned CSV ([TARGET], [USR02], [TBTCO], [TBTCP], [AGR_USERS], [INTEGRATIONS], [OWNERSHIP], ...). Time-based rules require 'evaluation_date' (extract date); it is never taken from the system clock.Required input: target_user or target_destination; per target type: USR02, TBTCO, RFCDES, SWWWIHEAD (users); + TBTCP (technical / job-step users); RFCDES + scheduled integration inventory (service / communication users, RFC destinations); evaluation_date for recency rules
Fiori 403 Root-Cause DoctorJSON, CSV, TEXT403 diagnostic telemetry: JSON {'http_response': {status_code, method, url, headers, body}, 'su53': [...], 'iwfnd_error_log': [...], 'icf_services': [...], 'ucon_rules': [...], 'cloud_connector_logs': [...], 'btp_destination': {name, url, proxy_type, authentication, check_status}}, a browser network export (HAR JSON {'log': {'entries': [...]}}), an HTTP request/response text dump or SU53 text export, or SICF/SU53 CSV artifacts.Required input: At least one telemetry source (HTTP trace or HAR, SU53, /IWFND/ERROR_LOG, SICF, UCON, BTP destination, Cloud Connector)
Workflow Stuck ExplainerJSON, CSVWorkflow runtime extracts: JSON {'swwwihead': [{wi_id, wi_type, wi_stat, wi_rh_task}], 'swwloghist': [...], 'agent_traces': [...], 'swetypv': [...], 'containers': [...], 'deadlines': [...]} or CSV exports of SWWWIHEAD / SWWLOGHIST / SWETYPV with their column headers.Required input: SWWWIHEAD work items (or other workflow runtime tables)
IAM Cost OptimizerJSON, CSVRole composition and assignments: JSON {'roles': [{role_name, catalogs, authorizations, assigned_users}], 'users': [...], 'catalogs': [...], 'price_categories': {...}, 'usage_records': [...], 'read_only_alternatives': {app_id: read_only_app_id}} or CSV exports AGR_USERS (UNAME, AGR_NAME), AGR_1251 (AGR_NAME, OBJECT, FIELD, LOW), catalog/app, ST03N usage and read-only alternatives (APP_ID, READ_ONLY_APP_ID).Required input: business roles or user role assignments
Account Determination PreflightJSON, CSVAutomatic account determination: JSON {'chart_of_accounts', 'company_code', 'obyc_rules': [...], 'vkoa_rules': [...], 'fi_rules': [...], 'ska1_accounts': [...], 'skb1_accounts': [...], 'valuation_classes': [...], 'movement_types': [{movement_type, transaction_key, account_modifier}], 'plants': [{plant, valuation_grouping_code}], 'expected_combinations': [{model, ..., expected_account}]} or CSV exports of T030 (KTOPL, KTOSL, BKLAS, KONTS/KONTU), C001/VKOA (VKORG, KTOSL, SAKNR), SKA1, SKB1. Company-code checks run only for an explicitly supplied company code.Required input: OBYC, VKOA and/or FI determination entries
System Refresh Delta GuardJSON, CSV, TEXTPost-refresh extracts of the target system: JSON {'sid', 'client', 'rfc_destinations', 'scot', 'logical_systems', 'jobs', 'printers', 'endpoints', 'integration_destinations', 'queues', 'custom_config', 'isolation_policy'} - optionally as {'pre_refresh': {...}, 'post_refresh': {...}, 'ignore_policy': [{section, key, reason}]} for the before / after comparison - or a sectioned CSV export.Required input: target SID; RFC / SCOT / logical system / job / printer sections for a full verdict
Error Log Root CauseCSV, TEXT, JSONSAP message log export: Migration Cockpit message log (including the Fiori 'SAPUI5-Export' with Typ, Nachrichtentitel, Nachrichtenklasse, Nachrichtennummer, Datum und Uhrzeit), SLG1 application log or any message table as CSV / TSV / semicolon / pipe (ALV list) text with a header row containing a message type column (Type, Msg Type, Typ, Meldungstyp, MSGTY) and a message class + number (ID / Message Class / Nachrichtenklasse / Arbeitsgebiet + Number / No. / Nummer) or a combined message column (Message: 'CNIF_PI 076'); optional object (Instance, Object Key, Source Record, WBS Element / PSP-Element, Project, Material, Customer, Supplier, Order …), parent (Parent, Superior, Higher-Level, Übergeordnet), migration object and timestamp columns. Without an object column the objects are read from the message texts (source-record groups, framework / wrapper message roles). JSON: an array of message objects or {'messages': [...]} with the same keys.Required input: A message log with a message type column and a message id (class + number or combined)
MFS BlackBoxJSON, CSV, XLSXMFS telegram log: CSV/TSV/pipe log with a header row (type, hu_id, cp, to_cp, seq_no, sender_plc, receiver_plc, status, time_sec/timestamp, wt_id, plc_release; EDGE,<from>,<to> rows declare conveyor topology), the same table as the first worksheet of an XLSX workbook, or JSON {'telegrams': [...], 'conveyor_edges': [[from, to]], 'configuration': {ack_timeout_seconds, max_retries, heartbeat_timeout_seconds, completion_timeout_seconds, recurrence_threshold}}. Inline payloads are bounded by the service payload limit; delimited logs of any size (multi-GB) are streamed through POST /api/v1/analyze/stream and processed line by line with bounded memory.Required input: At least one telegram with a 'type'
File formats per engine — ERP Preflight Docs