GitHub

SAP Global Trade Services — Part 2: Customs Execution, Special Procedures & Preference Management

By Sajiv Francis · July 2025


Part 1 established SAP GTS as a compliance hub — every S/4HANA document flows through it before proceeding, blocked synchronously at the document save event. Part 2 covers what GTS does after a document clears compliance: it executes. That means filing customs declarations with national authorities, managing the duty lifecycle from valuation through payment, operating duty-suspension regimes that defer or eliminate duty in exchange for inventory traceability obligations, and running Preference Management to determine whether a shipment qualifies for zero duty under a Free Trade Agreement.

Three interlocking execution layers are covered: Customs Management — the declaration lifecycle, duty calculation framework, and electronic filing infrastructure; Special Customs Procedures — Bonded Warehouse, Inward Processing Relief, Foreign Trade Zone, and Processing Trade Regime; and Preference Management — the end-to-end process from supplier Long-Term Supplier Declarations through Rules of Origin determination to preference certificate issuance. Part 2 closes with the reporting architecture and the open financial accounting questions that Part 3 resolves.


Part 1 established GTS as a compliance hub. The compliance engines block the OTC chain upstream. What Part 1 left open was the downstream half: once a document clears compliance, what does GTS actually do with it at the border?

The answer is three interlocking execution layers:

  1. Customs Management — declaration lifecycle, duty calculation, e-filing to authorities
  2. Special Customs Procedures — duty suspension regimes (BWH, IPR, OPR, FTZ, PTR) that defer or eliminate duty at the cost of inventory traceability obligations
  3. Preference Management — Free Trade Agreement qualification that converts “duty owed” into “duty eliminated” by proving origin

Each layer feeds the next. A customs declaration references the special procedure authorisation (if applicable) and the preference status (if applicable). The combination determines the actual duty liability — the number that eventually posts to FI-CO, which is the subject of Part 3.


The Customs Declaration: Structure and Lifecycle

Section titled “The Customs Declaration: Structure and Lifecycle”

Every customs document in GTS — import, export, transit, EMCS — shares the same structural skeleton. This is not cosmetic: the same defaulting logic, the same incompleteness check framework, and the same IDoc structure apply across all declaration types.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
subgraph HEADER["Header Level — One per Declaration"]
H1["Item Overview"]
H2["Communication<br>(M / I messages)"]
H3["Partners<br>(FTO, customs office,<br>freight forwarder)"]
H4["Geography<br>(departure / destination)"]
H5["Transportation<br>(mode, dates, MRN)"]
H6["Logistics Costs<br>(CIF, FOB values)"]
H7["Status / Document Flow"]
H8["References<br>(feeder system link)"]
end
subgraph ITEM["Item Level — One per Material Line"]
I1["General Data<br>(product, HS code,<br>weight, origin)"]
I2["Customs Value<br>(duty calculation)"]
I3["Placement<br>(special procedure ref)"]
I4["Documents<br>(BTI, permits)"]
I5["Preference Tab<br>(FTA eligibility flag)"]
I6["Closing Portion<br>(special procedure)"]
I7["Control<br>(legal regulation,<br>license assignment)"]
I8["Status"]
end
subgraph FEEDER["Feeder System Source"]
SD0C["Pro Forma Invoice<br>(SD0C) → Export"]
MM0C["Goods Receipt<br>(MM0C) → Import"]
end
SD0C -->|"auto-creates"| HEADER
MM0C -->|"auto-creates"| HEADER
HEADER --> ITEM
class HEADER,H1,H2,H3,H4,H5,H6,H7,H8 target
class ITEM,I1,I2,I3,I4,I5,I6,I7,I8 integration
class FEEDER,SD0C,MM0C source

Three fields fail silently if absent at e-filing time. The commodity code is required on every item and blocks transmission if missing. The customs value is required for duty calculation and must match the declared invoice value within tolerance. The Movement Reference Number is issued by authorities after submission and is required before goods can move — GTS holds the goods issue until the MRN is received inbound via I-message.


Export Process: The Standard Declaration Lifecycle

Section titled “Export Process: The Standard Declaration Lifecycle”

The export process in GTS is triggered by the pro forma invoice (SD0C document type) created in S/4HANA. The pro forma carries pricing, quantity, and partner data that GTS needs to construct a compliant export declaration.

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
id="export_process"
targetNamespace="http://gts.series.part2.export">
<bpmn:process id="GTS_Export_Process" isExecutable="false">
<bpmn:startEvent id="start_export" name="Sales Order Created and Compliance Cleared">
<bpmn:outgoing>flow_so_del</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="outbound_del" name="Create Outbound Delivery (VL01N / SD0B)">
<bpmn:incoming>flow_so_del</bpmn:incoming>
<bpmn:outgoing>flow_del_pick</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="pick_pack" name="Pick and Pack Goods">
<bpmn:incoming>flow_del_pick</bpmn:incoming>
<bpmn:outgoing>flow_pick_proforma</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="proforma" name="Create Pro Forma Invoice (SD0C) — Triggers GTS">
<bpmn:incoming>flow_pick_proforma</bpmn:incoming>
<bpmn:outgoing>flow_pf_expdec</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="export_dec" name="GTS Auto-Creates Export Declaration">
<bpmn:incoming>flow_pf_expdec</bpmn:incoming>
<bpmn:outgoing>flow_ed_complete</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="complete_check" name="GTS Incompleteness Check and Defaulting">
<bpmn:incoming>flow_ed_complete</bpmn:incoming>
<bpmn:outgoing>flow_complete_gw</bpmn:outgoing>
</bpmn:task>
<bpmn:exclusiveGateway id="gw_complete" name="Declaration Complete?">
<bpmn:incoming>flow_complete_gw</bpmn:incoming>
<bpmn:outgoing>flow_incomplete</bpmn:outgoing>
<bpmn:outgoing>flow_complete</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="manual_complete" name="Customs Specialist: Complete Missing Fields">
<bpmn:incoming>flow_incomplete</bpmn:incoming>
<bpmn:outgoing>flow_manual_back</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="efile_customs" name="GTS: E-File Export Declaration to Customs Authority">
<bpmn:incoming>flow_complete</bpmn:incoming>
<bpmn:incoming>flow_manual_back</bpmn:incoming>
<bpmn:outgoing>flow_auth_response</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="auth_response" name="GTS Receives MRN via I-Message (Inbound IDoc)">
<bpmn:incoming>flow_auth_response</bpmn:incoming>
<bpmn:outgoing>flow_mrn_gw</bpmn:outgoing>
</bpmn:task>
<bpmn:exclusiveGateway id="gw_mrn" name="MRN Received?">
<bpmn:incoming>flow_mrn_gw</bpmn:incoming>
<bpmn:outgoing>flow_mrn_rejected</bpmn:outgoing>
<bpmn:outgoing>flow_mrn_ok</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="amend_refile" name="Amend Declaration and Refile">
<bpmn:incoming>flow_mrn_rejected</bpmn:incoming>
<bpmn:outgoing>flow_amend_back</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="goods_issue" name="Post Goods Issue (VL02N) — Print EAD">
<bpmn:incoming>flow_mrn_ok</bpmn:incoming>
<bpmn:incoming>flow_amend_back</bpmn:incoming>
<bpmn:outgoing>flow_gi_exit</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="exit_confirm" name="GTS: Receive Exit Confirmation (I-Message)">
<bpmn:incoming>flow_gi_exit</bpmn:incoming>
<bpmn:outgoing>flow_exit_close</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="close_declaration" name="GTS: Close Export Declaration — Archive EAD">
<bpmn:incoming>flow_exit_close</bpmn:incoming>
<bpmn:outgoing>flow_billing</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="commercial_invoice" name="Create Commercial Invoice in S/4HANA (FI Posting)">
<bpmn:incoming>flow_billing</bpmn:incoming>
<bpmn:outgoing>flow_end_export</bpmn:outgoing>
</bpmn:task>
<bpmn:endEvent id="end_export" name="Export Complete — Revenue and Duty Costs in FI">
<bpmn:incoming>flow_end_export</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="flow_so_del" sourceRef="start_export" targetRef="outbound_del"/>
<bpmn:sequenceFlow id="flow_del_pick" sourceRef="outbound_del" targetRef="pick_pack"/>
<bpmn:sequenceFlow id="flow_pick_proforma" sourceRef="pick_pack" targetRef="proforma"/>
<bpmn:sequenceFlow id="flow_pf_expdec" sourceRef="proforma" targetRef="export_dec"/>
<bpmn:sequenceFlow id="flow_ed_complete" sourceRef="export_dec" targetRef="complete_check"/>
<bpmn:sequenceFlow id="flow_complete_gw" sourceRef="complete_check" targetRef="gw_complete"/>
<bpmn:sequenceFlow id="flow_incomplete" name="Fields Missing" sourceRef="gw_complete" targetRef="manual_complete"/>
<bpmn:sequenceFlow id="flow_complete" name="Complete" sourceRef="gw_complete" targetRef="efile_customs"/>
<bpmn:sequenceFlow id="flow_manual_back" sourceRef="manual_complete" targetRef="efile_customs"/>
<bpmn:sequenceFlow id="flow_auth_response" sourceRef="efile_customs" targetRef="auth_response"/>
<bpmn:sequenceFlow id="flow_mrn_gw" sourceRef="auth_response" targetRef="gw_mrn"/>
<bpmn:sequenceFlow id="flow_mrn_rejected" name="Rejected" sourceRef="gw_mrn" targetRef="amend_refile"/>
<bpmn:sequenceFlow id="flow_mrn_ok" name="MRN Issued" sourceRef="gw_mrn" targetRef="goods_issue"/>
<bpmn:sequenceFlow id="flow_amend_back" sourceRef="amend_refile" targetRef="goods_issue"/>
<bpmn:sequenceFlow id="flow_gi_exit" sourceRef="goods_issue" targetRef="exit_confirm"/>
<bpmn:sequenceFlow id="flow_exit_close" sourceRef="exit_confirm" targetRef="close_declaration"/>
<bpmn:sequenceFlow id="flow_billing" sourceRef="close_declaration" targetRef="commercial_invoice"/>
<bpmn:sequenceFlow id="flow_end_export" sourceRef="commercial_invoice" targetRef="end_export"/>
</bpmn:process>
</bpmn:definitions>

Import Process: The Duty Calculation Layer

Section titled “Import Process: The Duty Calculation Layer”

The import process is triggered by the goods receipt (MM0C) — or, for pre-clearance scenarios, by a manual declaration created before the GR posts. Two timing variants are available:

VariantWhen Declaration CreatedUse Case
Before GRDeclaration submitted before goods arriveMost EU import regimes; requires waybill reference
After GRDeclaration created post-receiptUS self-filing ABI; simpler flow but duty risk window

The duty calculation framework layers four components in sequence. Transaction value plus transport costs plus insurance yields the customs value. The applicable duty rate — sourced from a tariff content provider or manually entered — is applied to the customs value to produce the duty amount. The VAT base is the customs value plus duty, to which the import VAT rate is applied. These three outputs — customs value, duty amount, and import VAT — are the numbers that flow to FI-CO, which Part 3 addresses in full.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
subgraph VALUATION["Customs Value Build-Up"]
TV["Transaction Value<br>(invoice price FOB/CIF)"]
TC["+ Transport Costs"]
INS["+ Insurance"]
CV["= Customs Value"]
end
subgraph DUTY_CALC["Duty Framework"]
DT["Duty Type<br>(third-country / anti-dumping)"]
DC["Duty Category<br>(T0: IUT / NT: IUT-EU)"]
DR["Duty Rate<br>(from tariff number upload)"]
DA["= Duty Amount"]
end
subgraph VAT_CALC["VAT Base"]
VB["Customs Value<br>+ Duty Amount"]
VR["VAT Rate<br>(per duty category)"]
VA["= Import VAT"]
end
subgraph FI_POSTING["FI Posting (Part 3)"]
GRN["Goods Receipt<br>Accrual (MIGO)"]
DUP["Duty Payable<br>(customs liability)"]
VAP["VAT Payable<br>(deductible input tax)"]
end
TV --> TC --> INS --> CV
CV --> DT --> DC --> DR --> DA
CV --> VB
DA --> VB
VB --> VR --> VA
DA --> DUP
VA --> VAP
CV --> GRN
DUP --> FI_POSTING
VAP --> FI_POSTING
GRN --> FI_POSTING
class TV,TC,INS,CV source
class DT,DC,DR,DA integration
class VB,VR,VA target
class GRN,DUP,VAP,FI_POSTING reporting

The duty type is the configurator’s primary lever. It defines whether duty is calculated from a tariff content provider’s published rate, entered manually, or calculated via an alternative framework. The T0: Import Turnover Tax (TTE) duty category — previously common in EU implementations — is deprecated in GTS 2023 and replaced by NT: Import Turnover Tax for EU. Implementations upgrading from GTS 11.0 must remediate all affected duty framework configurations before go-live.


Special Customs Procedures: The Duty Suspension Toolkit

Section titled “Special Customs Procedures: The Duty Suspension Toolkit”

Special customs procedures represent legally-defined duty suspension regimes. The company imports goods without paying duty upfront, in exchange for strict inventory traceability and settlement obligations with customs authorities. GTS supports six regimes.

RegimeCodeDuty BenefitSettlement Trigger
Bonded WarehouseBWHFull duty suspension on storageRemoval from warehouse
Inward Processing ReliefIPRDuty suspension on components for re-exportRe-export or settlement run
Outward Processing ReliefOPRReduced duty on reimport of processed goodsReimport
Production Under Customs ControlPUCCReduced duty rate on finished goodsGoods release
Foreign Trade ZoneFTZUS-specific; inverted tariff + zone statusEntry for consumption / re-export
Processing Trade RegimePTRChina-specific; duty suspension on componentsSettlement per e-manual

All six require a Customs ID added to the GTS organisational structure. Without it, the special procedure screens do not appear and the relevant declaration types cannot be created.

BWH is the entry point for most implementations. Goods enter the warehouse duty-suspended, inventory is tracked in GTS separately from S/4HANA WM, and duty is triggered only on removal. On removal, two paths diverge: re-export to a foreign customer generates a re-export declaration with zero duty; release to the domestic market generates a free circulation declaration and triggers the duty calculation and FI posting.

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
id="bwh_process"
targetNamespace="http://gts.series.part2.bwh">
<bpmn:process id="BWH_Process" isExecutable="false">
<bpmn:startEvent id="start_bwh" name="Purchase Order Created for Non-EU Vendor">
<bpmn:outgoing>flow_po_inbdel</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="inbound_del" name="Create Inbound Delivery (VL31N / MM0B)">
<bpmn:incoming>flow_po_inbdel</bpmn:incoming>
<bpmn:outgoing>flow_del_waybill</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="waybill" name="Create Customs Waybill in GTS">
<bpmn:incoming>flow_del_waybill</bpmn:incoming>
<bpmn:outgoing>flow_waybill_admn</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="admission" name="GTS: Create BWH Admission Declaration">
<bpmn:incoming>flow_waybill_admn</bpmn:incoming>
<bpmn:outgoing>flow_admn_transit</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="transit_in" name="GTS: Open Transit Procedure (T1 — Inbound)">
<bpmn:incoming>flow_admn_transit</bpmn:incoming>
<bpmn:outgoing>flow_transit_gr</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="goods_receipt" name="Post Goods Receipt in S/4HANA (MIGO / MM0C)">
<bpmn:incoming>flow_transit_gr</bpmn:incoming>
<bpmn:outgoing>flow_gr_stockpost</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="stock_post" name="GTS Background Job: Post Duty-Suspended Stock to BWH">
<bpmn:incoming>flow_gr_stockpost</bpmn:incoming>
<bpmn:outgoing>flow_stock_storage</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="storage" name="Goods Stored in BWH — Duty-Suspended Inventory in GTS">
<bpmn:incoming>flow_stock_storage</bpmn:incoming>
<bpmn:outgoing>flow_storage_removal</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="removal_trigger" name="Business Event: Customer Order or Production Need">
<bpmn:incoming>flow_storage_removal</bpmn:incoming>
<bpmn:outgoing>flow_removal_gw</bpmn:outgoing>
</bpmn:task>
<bpmn:exclusiveGateway id="gw_removal" name="Removal Destination?">
<bpmn:incoming>flow_removal_gw</bpmn:incoming>
<bpmn:outgoing>flow_reexport</bpmn:outgoing>
<bpmn:outgoing>flow_freecirculation</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="reexport_dec" name="GTS: Create Re-Export Declaration — No Duty Due">
<bpmn:incoming>flow_reexport</bpmn:incoming>
<bpmn:outgoing>flow_end_reexport</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="freecirculation_dec" name="GTS: Create Free Circulation Declaration — Duty Triggered">
<bpmn:incoming>flow_freecirculation</bpmn:incoming>
<bpmn:outgoing>flow_duty_post</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="duty_post" name="Duty Calculated and Posted to FI (Part 3)">
<bpmn:incoming>flow_duty_post</bpmn:incoming>
<bpmn:outgoing>flow_end_domestic</bpmn:outgoing>
</bpmn:task>
<bpmn:endEvent id="end_reexport" name="Re-Export Complete — Zero Duty">
<bpmn:incoming>flow_end_reexport</bpmn:incoming>
</bpmn:endEvent>
<bpmn:endEvent id="end_domestic" name="Domestic Release — Duty Paid">
<bpmn:incoming>flow_end_domestic</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="flow_po_inbdel" sourceRef="start_bwh" targetRef="inbound_del"/>
<bpmn:sequenceFlow id="flow_del_waybill" sourceRef="inbound_del" targetRef="waybill"/>
<bpmn:sequenceFlow id="flow_waybill_admn" sourceRef="waybill" targetRef="admission"/>
<bpmn:sequenceFlow id="flow_admn_transit" sourceRef="admission" targetRef="transit_in"/>
<bpmn:sequenceFlow id="flow_transit_gr" sourceRef="transit_in" targetRef="goods_receipt"/>
<bpmn:sequenceFlow id="flow_gr_stockpost" sourceRef="goods_receipt" targetRef="stock_post"/>
<bpmn:sequenceFlow id="flow_stock_storage" sourceRef="stock_post" targetRef="storage"/>
<bpmn:sequenceFlow id="flow_storage_removal" sourceRef="storage" targetRef="removal_trigger"/>
<bpmn:sequenceFlow id="flow_removal_gw" sourceRef="removal_trigger" targetRef="gw_removal"/>
<bpmn:sequenceFlow id="flow_reexport" name="Foreign Customer" sourceRef="gw_removal" targetRef="reexport_dec"/>
<bpmn:sequenceFlow id="flow_freecirculation" name="Domestic Market" sourceRef="gw_removal" targetRef="freecirculation_dec"/>
<bpmn:sequenceFlow id="flow_end_reexport" sourceRef="reexport_dec" targetRef="end_reexport"/>
<bpmn:sequenceFlow id="flow_duty_post" sourceRef="freecirculation_dec" targetRef="duty_post"/>
<bpmn:sequenceFlow id="flow_end_domestic" sourceRef="duty_post" targetRef="end_domestic"/>
</bpmn:process>
</bpmn:definitions>

Foreign Trade Zone: The US Inverted Tariff Mechanism

Section titled “Foreign Trade Zone: The US Inverted Tariff Mechanism”

The FTZ is the US equivalent of the bonded warehouse with one critical addition: the inverted tariff mechanism. When a finished product carries a lower duty rate than its components, a company can elect to pay duty on the finished goods rate (Privileged Foreign status) rather than the component rate. This is a material cash flow advantage in manufacturing-intensive industries.

Two zone statuses govern every piece of FTZ inventory. Privileged Foreign status locks the duty rate at the time of admission and applies when finished goods duty is lower than component duty. Non-Privileged Foreign status assesses duty at the rate applicable at the time of transfer to US commerce. GTS enforces FIFO for FTZ inventory consumption — this is a regulatory requirement, not a configuration choice. The date goods entered the zone determines which lot is consumed first, regardless of duty status.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
subgraph INBOUND["FTZ Inbound"]
PO["Purchase Order<br>(ME21N)"]
IDL["Inbound Delivery<br>(VL31N)"]
WB["Customs Waybill"]
ADM["Admission Declaration<br>(CBFP 214)"]
PTT["Permit to Transfer<br>(PTT Filing)"]
GR["Goods Receipt<br>(MIGO)"]
BG1["Background Job:<br>Process Stock Receipts"]
BG2["Background Job:<br>Post Stock to FTZ"]
end
subgraph INVENTORY["FTZ Stock Tracking (GTS)"]
PF_STK["PF Stock<br>(Privileged Foreign)"]
NPF_STK["NPF Stock<br>(Non-Privileged Foreign)"]
WIP["WIP Stock<br>(in production)"]
BOM_FTZ["BOM — FTZ Specific<br>(in GTS product master)"]
end
subgraph OUTBOUND["FTZ Outbound"]
SO["Sales Order<br>(VA01)"]
OBD["Outbound Delivery"]
PFI["Pro Forma Invoice<br>(triggers GTS)"]
direction1{"Destination?"}
RE["Re-Export Declaration<br>(Foreign Customer)"]
WE["Weekly Entry Summary<br>(US Domestic Customer)"]
FC["FTZ Forecast<br>(CBP pre-approval)"]
ITC["Internal Transaction<br>Document (Duty-Paid)"]
end
subgraph REPORTING["FTZ Reports"]
AR["Annual Reconciliation<br>Report"]
ABR["Annual Board Report"]
HMF["HMF Quarterly<br>Summary (CBP Form 349)"]
end
PO --> IDL --> WB --> ADM --> PTT --> GR --> BG1 --> BG2
BG2 --> PF_STK & NPF_STK
BOM_FTZ -.->|"FIFO rule"| WIP
PF_STK & NPF_STK -->|"FIFO consumption"| WIP
WIP -->|"production complete"| SO
SO --> OBD --> PFI --> direction1
direction1 -->|"Foreign"| RE
direction1 -->|"US Domestic"| FC --> WE
direction1 -->|"Duty-Paid Stock"| ITC
RE & WE & ITC --> REPORTING
class PO,IDL source
class WB,ADM,PTT,GR,BG1,BG2 integration
class PF_STK,NPF_STK,WIP,BOM_FTZ target
class SO,OBD,PFI,RE,WE,FC,ITC,AR,ABR,HMF reporting

Four implementation requirements for FTZ are non-negotiable: the Customs ID must include both the FIRMS code and the FTZ ID assigned by CBP; two background jobs — Process Stock Receipts Into Foreign-Trade Zone and Post Stock To FTZ — must be scheduled explicitly; the GTS BOM for FTZ is maintained separately from the S/4HANA production BOM and linked to the Customs ID; and duty-paid stock movements out of FTZ use an internal transaction document, not an entry summary.

Processing Trade Regime: China Localisation

Section titled “Processing Trade Regime: China Localisation”

PTR is China’s duty suspension mechanism for export-oriented manufacturing. Before production begins, two authorisations are required. The Enterprise Qualification Application is registered per company and lists all permitted components and finished goods. The e-manual is registered per manufacturing contract and contains the production BOM with theoretical quantities, validity period, value and quantity limits, and closing portion timing. The e-manual is the operational controller — it drives stock calculations, closing portion determination, and settlement.

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
id="ptr_process"
targetNamespace="http://gts.series.part2.ptr">
<bpmn:process id="PTR_Process" isExecutable="false">
<bpmn:startEvent id="start_ptr" name="PTR Contract Registered with China Customs">
<bpmn:outgoing>flow_ptr_eqa</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="eqa" name="Create and Approve EQA in GTS">
<bpmn:incoming>flow_ptr_eqa</bpmn:incoming>
<bpmn:outgoing>flow_eqa_emanual</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="emanual" name="Create and Approve E-Manual in GTS">
<bpmn:incoming>flow_eqa_emanual</bpmn:incoming>
<bpmn:outgoing>flow_emanual_po</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="po_create" name="Create Purchase Order for Foreign Components (ME21N)">
<bpmn:incoming>flow_emanual_po</bpmn:incoming>
<bpmn:outgoing>flow_po_entry</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="ptr_entry" name="GTS: Create PTR Entry Declaration at Chinese Border">
<bpmn:incoming>flow_po_entry</bpmn:incoming>
<bpmn:outgoing>flow_entry_gr</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="goods_receipt_ptr" name="Post Goods Receipt (MIGO) — Component Stock Updated in GTS">
<bpmn:incoming>flow_entry_gr</bpmn:incoming>
<bpmn:outgoing>flow_gr_production</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="production" name="Manufacturing at Processing Trade Warehouse">
<bpmn:incoming>flow_gr_production</bpmn:incoming>
<bpmn:outgoing>flow_prod_salesorder</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="sales_order_ptr" name="Create Sales Order and Outbound Delivery">
<bpmn:incoming>flow_prod_salesorder</bpmn:incoming>
<bpmn:outgoing>flow_so_gw</bpmn:outgoing>
</bpmn:task>
<bpmn:exclusiveGateway id="gw_ptr_dest" name="Customer Destination?">
<bpmn:incoming>flow_so_gw</bpmn:incoming>
<bpmn:outgoing>flow_foreign_customer</bpmn:outgoing>
<bpmn:outgoing>flow_domestic_customer</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="reexport_ptr" name="GTS: Create Re-Export Declaration — BOM Closing Portions">
<bpmn:incoming>flow_foreign_customer</bpmn:incoming>
<bpmn:outgoing>flow_reexport_settle</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="domestic_ptr" name="GTS: Domestic Issue — Pay Previously Suspended Duties">
<bpmn:incoming>flow_domestic_customer</bpmn:incoming>
<bpmn:outgoing>flow_domestic_settle</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="presettlement" name="PTR Pre-Settlement: Submit Import/Export List to Authorities">
<bpmn:incoming>flow_reexport_settle</bpmn:incoming>
<bpmn:incoming>flow_domestic_settle</bpmn:incoming>
<bpmn:outgoing>flow_pre_settlement</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="settlement" name="PTR Settlement: Reconcile Actual vs Theoretical BOM — Correction if Needed">
<bpmn:incoming>flow_pre_settlement</bpmn:incoming>
<bpmn:outgoing>flow_end_ptr</bpmn:outgoing>
</bpmn:task>
<bpmn:endEvent id="end_ptr" name="E-Manual Closed — PTR Contract Settled">
<bpmn:incoming>flow_end_ptr</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="flow_ptr_eqa" sourceRef="start_ptr" targetRef="eqa"/>
<bpmn:sequenceFlow id="flow_eqa_emanual" sourceRef="eqa" targetRef="emanual"/>
<bpmn:sequenceFlow id="flow_emanual_po" sourceRef="emanual" targetRef="po_create"/>
<bpmn:sequenceFlow id="flow_po_entry" sourceRef="po_create" targetRef="ptr_entry"/>
<bpmn:sequenceFlow id="flow_entry_gr" sourceRef="ptr_entry" targetRef="goods_receipt_ptr"/>
<bpmn:sequenceFlow id="flow_gr_production" sourceRef="goods_receipt_ptr" targetRef="production"/>
<bpmn:sequenceFlow id="flow_prod_salesorder" sourceRef="production" targetRef="sales_order_ptr"/>
<bpmn:sequenceFlow id="flow_so_gw" sourceRef="sales_order_ptr" targetRef="gw_ptr_dest"/>
<bpmn:sequenceFlow id="flow_foreign_customer" name="Foreign Customer" sourceRef="gw_ptr_dest" targetRef="reexport_ptr"/>
<bpmn:sequenceFlow id="flow_domestic_customer" name="Domestic Customer" sourceRef="gw_ptr_dest" targetRef="domestic_ptr"/>
<bpmn:sequenceFlow id="flow_reexport_settle" sourceRef="reexport_ptr" targetRef="presettlement"/>
<bpmn:sequenceFlow id="flow_domestic_settle" sourceRef="domestic_ptr" targetRef="presettlement"/>
<bpmn:sequenceFlow id="flow_pre_settlement" sourceRef="presettlement" targetRef="settlement"/>
<bpmn:sequenceFlow id="flow_end_ptr" sourceRef="settlement" targetRef="end_ptr"/>
</bpmn:process>
</bpmn:definitions>

Electronic Communication Architecture: The IDoc-to-Authority Pipeline

Section titled “Electronic Communication Architecture: The IDoc-to-Authority Pipeline”

The e-filing infrastructure transforms GTS from a compliance record-keeper into a real-time customs execution system. The communication flow has four layers: GTS generates an outbound IDoc (M-message) from a complete declaration; the conversion provider translates it into the country-specific authority format; the authority processes and responds; GTS receives the inbound IDoc (I-message) and updates the declaration status.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
subgraph GTS_INT["GTS Internal"]
DEC["Customs Declaration<br>(complete)"]
MSG["Communication Process<br>(M-Message generated)"]
IDOC_OUT["Outbound IDoc<br>(WE05 / BD87)"]
end
subgraph CONV["Conversion Layer"]
CP["Conversion Provider<br>(e.g. SEEBURGER)"]
FMT["Country-Specific Format<br>Translation"]
end
subgraph AUTH["Customs Authorities"]
ATLAS["ATLAS<br>(Germany)"]
AES["AES / ACE<br>(United States)"]
NCTS["NCTS<br>(EU Transit)"]
EMCS_A["EMCS<br>(EU Excise)"]
OTHER["Other Localised<br>Systems"]
end
subgraph GTS_IN["GTS Inbound"]
I_MSG["I-Message Received<br>(MRN / ARC / Approval)"]
IDOC_IN["Inbound IDoc<br>(status update)"]
DEC_UPD["Declaration Status<br>Updated"]
end
subgraph BROKER["Alternative: Broker Enablement"]
MB001["MB001 Outbound<br>(ImportDeclarationRequest_Out)"]
IB001["IB001 Inbound<br>(ImportDeclarationNotification_In)"]
IB002["IB002 Tax Assessment<br>(ImportTaxAssessmentNotification_In)"]
MB010["MB010 Export<br>(ExportDeclarationRequest_Out)"]
IB010["IB010 Export Notify<br>(ExportDeclarationNotification_In)"]
IB015["IB015 Exit Confirm<br>(ExportDeclarationExitNotification_In)"]
end
DEC --> MSG --> IDOC_OUT
IDOC_OUT --> CP --> FMT
FMT --> ATLAS & AES & NCTS & EMCS_A & OTHER
ATLAS & AES & NCTS & EMCS_A & OTHER --> IDOC_IN
IDOC_IN --> I_MSG --> DEC_UPD
DEC --> MB001 & MB010
MB001 -->|"web service"| IB001 & IB002
MB010 -->|"web service"| IB010 & IB015
class DEC,MSG,IDOC_OUT source
class CP,FMT integration
class ATLAS,AES,NCTS,EMCS_A,OTHER target
class IDOC_IN,I_MSG,DEC_UPD,MB001,IB001,IB002,MB010,IB010,IB015 reporting

The standard broker enablement uses XML web services rather than IDoc and supports three integration scenarios. In the broker-centric import scenario, the broker initiates the declaration and the importer receives a copy after clearance. In the importer-centric import scenario, the importer initiates via MB001 and the broker clears and returns status via IB001 and a tax assessment via IB002 — the broker cannot add or remove line items. For export, the exporter initiates via MB010 and receives clearance confirmation via IB010 and exit confirmation via IB015.

The operations monitoring transaction set covers: WE05 for IDoc list by time range, WE09 for single IDoc lookup, WE07 for all IDocs in error status, BD87 for error root cause detail, and /SAPSLL/ECC_EDI_MES for EDI message file assignment.


Preference Management: Converting FTA Law into System Logic

Section titled “Preference Management: Converting FTA Law into System Logic”

Preference Management is where the legal text of Free Trade Agreements gets operationalised. Customs Management asks how much duty is owed. Preference Management asks whether the shipment qualifies to pay zero. The answer requires three sequential determinations — and GTS automates all three at scale.

flowchart LR
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
subgraph STEP1["Step 1 — Inbound: Supplier Origin"]
LTSD_REQ["LTSD Request<br>to Suppliers"]
SUP_RESP["Supplier Response<br>Maintained in GTS"]
AGG["Aggregation<br>(Worst-Case Principle)"]
LTSD_REQ --> SUP_RESP --> AGG
end
subgraph STEP2["Step 2 — Determination: Is the Product Preferential?"]
BOM_EXP["BOM Explosion<br>(Top-Down or Bottom-Up)"]
ROO["Rules of Origin<br>(Tariff Shift / RVC / Specific)"]
CALC["Preference Calculation<br>(Net Cost / TXN Value / Build-Up)"]
STATUS["Preference Status:<br>Always / Threshold / Never"]
BOM_EXP --> ROO --> CALC --> STATUS
end
subgraph STEP3["Step 3 — Outbound: Issue Proof of Origin"]
CERT["Certificate of Origin<br>or Customer LTSD"]
REVOKE["Revoke and Reissue<br>on Status Change"]
INTERCO["Intercompany LTSD<br>Exchange between AUs"]
CERT --> REVOKE
CERT --> INTERCO
end
AGG -->|"Component<br>preference data"| BOM_EXP
STATUS -->|"Preferential?"| CERT
class LTSD_REQ,SUP_RESP,AGG source
class BOM_EXP,ROO,CALC,STATUS integration
class CERT,REVOKE,INTERCO target

The rules of origin are the legal eligibility criteria. GTS translates them into seven comparison methods:

RoO TypeGTS MethodLogic
Tariff ShiftMethod 3HS code of non-originating components must differ from finished goods HS at chapter/heading/subheading level
RVC — Transaction ValueMethod 1Non-originating content ≤ X% of FOB/EXW transaction value
RVC — Net CostMethod 2Non-originating content ≤ X% of net cost (excluding marketing, shipping)
RVC — Build-UpMethod 4Originating content ≥ X% of FOB adjusted value
RVC — Build-DownMethod 5Non-originating content ≤ X% of FOB adjusted value
RVC — Transaction Value (Min Orig.)Method 6Originating content ≥ X% of transaction value
External / ManualMethod 0Preference status aggregated from supplier LTSDs or manually maintained

The de minimis tolerance rule — typically 7 to 10 percent of finished goods value — acts as a safety net. If the tariff shift test fails but the total non-originating, non-shifting component value falls below the de minimis threshold, the product still qualifies under most FTAs.

This is the most consequential preference configuration decision in any implementation. The difference is in how subassembly value is treated. Top-down considers all lowest-level components directly against the finished goods rules. Bottom-up first determines whether a subassembly is itself originating, then carries its full value as originating into the parent calculation. Bottom-up favours RVC rules because subassembly transformation adds originating value. Top-down favours tariff shift rules because lowest-level components are more likely to change HS code than subassemblies.

For USMCA implementations, both methods are legally permitted. GTS supports running both and selecting the more favourable result — a configuration choice with direct impact on how much of the product portfolio qualifies for zero duty.

The Aggregation Problem: Worst-Case and the Goods Retention Period

Section titled “The Aggregation Problem: Worst-Case and the Goods Retention Period”

The worst-case aggregation principle is the most common preference determination failure mode in multisourced manufacturing. When a component is purchased from both a preferential and a non-preferential source, GTS marks it non-preferential for the entire goods retention period — the commercially conservative but legally correct interpretation.

GTS provides a mitigation hierarchy. The goods retention period can be configured at four levels, each overriding the one above: Administrative Unit default, then supplier or product level, then supplier and product combined, then individual material document via transaction /SAPSLL/RET_PERI_UPD. The structural solution available from GTS 2023 is the Management of Preference Data for Product Identifiers — batch-level preference tracking that eliminates the worst-case problem entirely. When the preference status travels with the batch rather than the material number, a Mexico-sourced batch and a Peru-sourced batch of the same component carry separate statuses, and GTS can direct each to the appropriate customer based on FTA eligibility.

After determination, GTS stores three possible outcomes in the product master. “Always preferential” means the product qualifies at any price point. “Threshold-dependent” means it qualifies above a calculated sales price threshold and requires per-transaction comparison at invoicing. “Never preferential” means no sales price makes it qualify under the relevant FTA — a signal to either renegotiate sourcing or accept MFN duty as a cost of goods.


GTS 2023 provides localised e-filing support across 13 countries and territories. Germany and the United States have the broadest coverage, supporting import/export, transit, EMCS (Germany), and FTZ/Reconciliation (United States). Major EU trading nations — France, Netherlands, Belgium, Austria, Spain, Denmark, Sweden — support import/export and transit declarations, with Belgium and Netherlands also supporting EMCS. Switzerland supports import/export and transit. New Zealand and Australia support export-only declarations. All country coverage is maintained through SAP’s legal update delivery, which is one of the primary arguments for keeping GTS on current support.


Reporting Architecture: Operational vs. Analytical

Section titled “Reporting Architecture: Operational vs. Analytical”

GTS 2023 has shifted all operational reporting from ALV-based SAP GUI to Fiori embedded analytics, with strategic analytics available through SAP BW/4HANA and SAP Datasphere.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
subgraph OPERATIONAL["Operational Reporting — Real-Time (Embedded Analytics)"]
EA_C["Compliance:<br>Blocked Partners,<br>Audit Trail, Reasons<br>for Release"]
EA_CUS["Customs:<br>Export/Import Declarations,<br>Special Procedure Stock,<br>IDoc Monitoring"]
EA_PM["Preference:<br>LTSD Worklists,<br>Determination Logs,<br>Product Data"]
end
subgraph ANALYTICAL["Analytical Reporting — Strategic (Data Warehouse)"]
BW4["SAP BW/4HANA<br>(22 standard queries)"]
DS2["SAP Datasphere<br>(12 standard CDS views)"]
HANA_SQL["SAP HANA SQL<br>Data Warehousing"]
end
subgraph QUERIES["Key BW/4HANA Queries"]
Q1["Export by product<br>(invoice net amount)"]
Q2["Import by country<br>(duties paid)"]
Q3["SPL screening<br>results by FTO"]
Q4["License usage<br>by document"]
Q5["Preference status<br>vs threshold delta"]
end
subgraph CDS_VIEWS["Key Datasphere CDS Views"]
C1["C_ExportDeclarationItemDEX"]
C2["C_ImportDeclarationItemDEX"]
C3["C_LegalControlLicenseDEX"]
C4["C_SPLScrngPartAddrChkResultDEX"]
C5["C_TransitDeclarationItemDEX"]
end
EA_C & EA_CUS & EA_PM -->|"real-time<br>SAP HANA"| OPERATIONAL
OPERATIONAL -->|"ETL / delta extract"| BW4
OPERATIONAL -->|"CDS virtualisation"| DS2
BW4 --> QUERIES
DS2 --> CDS_VIEWS
class EA_C,EA_CUS,EA_PM source
class BW4,DS2,HANA_SQL integration
class QUERIES,Q1,Q2,Q3,Q4,Q5 target
class CDS_VIEWS,C1,C2,C3,C4,C5 reporting

The distinction between operational and analytical reporting matters for implementation scoping. Operational reports are real-time queries against the GTS HANA database — they surface blocked documents, incomplete declarations, and IDoc errors that need same-day action. Analytical reports aggregate trade data across periods for management review — duties paid by country, license consumption rates, preference qualification rates by product family. The 22 standard BW/4HANA queries and 12 Datasphere CDS views cover the most common KPI requirements without custom development.


Conclusion: What Part 2 Leaves Open for Part 3

Section titled “Conclusion: What Part 2 Leaves Open for Part 3”

Part 2 has covered the full operational execution layer. Declarations are filed. Duties are calculated. Special procedures defer or eliminate those duties in exchange for inventory traceability. Preference Management determines whether a shipment qualifies for zero duty under an applicable Free Trade Agreement. The reporting layer makes all of it visible to operations teams in real time and to finance and trade leadership in aggregate.

What remains unresolved — and what Part 3 addresses directly — is the financial accounting consequence of all of the above.

Import duty accruals calculated in GTS must post to the right GL accounts, cost elements, and profit centers in FI-CO. The accounting treatment differs materially between duty that is a product cost (capitalized into inventory via MIGO) and duty that is a period expense (posted directly to a cost center). Preference savings — the delta between MFN duty that would have been paid and the zero-duty outcome of a valid FTA certificate — do not automatically surface in management accounting without deliberate CO configuration. Export license drawdowns create audit obligations that require reconciliation between the GTS license ledger and the FI billing document stream.

Beyond the financial close mechanics, Part 3 will cover the migration program from GTS 11.0 to GTS 2023 — the project reality for most existing GTS customers. The choice between brownfield (system conversion with XPRA data migration) and greenfield (clean installation with historical data archival) has consequences that extend across Basis, functional configuration, custom code, and the legal update backlog. And Part 3 will close with SAP’s forward roadmap for GTS: where AI-assisted classification, origin management automation, and SAP BTP integration services are headed, and what that means for the architecture described across these articles.