SAP DPP

Auto-generate a Digital Product Passport submodel from a supplier's PDF datasheet and push it into SAP DPP without manual data entry.

Audience: SAP integration architects + compliance officers running a Digital Product Passport rollout for the EU ESPR (Reg. 2024/1781).

Topology

  1. SAP DPP triggers a webhook (or scheduled job) when a new supplier datasheet lands in your DMS
  2. Your integration layer downloads the PDF and posts it to AAS Studio /api/v1/extract
  3. AAS Studio returns the structured DPP submodel with eCl@ss IRDIs already attached
  4. Your integration maps the result onto SAP DPP's expected aspect model and POSTs upstream
  5. Engineer cert + SHA-256 anchor become the audit-trail evidence for the ESPR market-surveillance authority

TypeScript

import { AasStudioClient } from '@aas-studio/sdk'
import { readFileSync } from 'node:fs'

const aas = new AasStudioClient({ apiKey: process.env.AAS_STUDIO_KEY! })

export async function ingestSupplierDatasheet(pdfPath: string, sapPartId: string) {
  const pdf = readFileSync(pdfPath)
  const { result, warnings } = await aas.extract({
    file: pdf,
    fileName: pdfPath.split('/').pop(),
    idPrefix: `urn:acme:dpp:${sapPartId}`,
  })

  // Post to SAP DPP — the aspect-model mapping below is illustrative;
  // adjust to your tenant's exact aspect schema.
  const dppPayload = {
    sapPartId,
    aas: result,
    warnings,
  }
  await fetch(process.env.SAP_DPP_URL!, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.SAP_TOKEN}` },
    body: JSON.stringify(dppPayload),
  })
}

Install: npm install @aas-studio/sdk

Python

import os
import requests
from aas_studio import AasStudioClient

aas = AasStudioClient(api_key=os.environ["AAS_STUDIO_KEY"])

def ingest_supplier_datasheet(pdf_path: str, sap_part_id: str):
    with open(pdf_path, "rb") as f:
        response = aas.extract(f.read(),
                               file_name=os.path.basename(pdf_path),
                               id_prefix=f"urn:acme:dpp:{sap_part_id}")

    requests.post(
        os.environ["SAP_DPP_URL"],
        headers={"Authorization": f"Bearer {os.environ['SAP_TOKEN']}"},
        json={"sapPartId": sap_part_id, "aas": response["result"], "warnings": response["warnings"]},
    )

Install: pip install aas-studio

Common pitfalls

  • SAP DPP's aspect model evolves with each delegated act — pin a schema version on your side and run a regression suite when SAP bumps it. AAS Studio's output is stable; your mapping layer is what changes.
  • AAS Studio extractions over 80,000 chars of PDF text get truncated at the LLM step. For long supplier datasheets, the response's warnings array flags this — re-run with a smaller PDF or use multi-source extraction.
  • Don't store the AAS Studio API key in SAP's tenant config — keep it in your integration layer's secret manager. The key gives full extraction quota access; rotate quarterly.
  • For multi-language datasheets, AAS Studio extracts in the source language. SAP DPP usually wants German or English — add a translation pass between AAS Studio and SAP, or post both versions and let SAP pick.

References

All integration guidesTry AAS Studio free

Command palette

Navigate + run actions