{
  "info": {
    "name": "SAP-lite (Arve test system) - SAP OData APIs",
    "description": "Requests against the SAP-lite SAP S/4HANA stand-in (a test system, not SAP). Set password from the SAP connection page. In Postman, trust the SAP-lite CA (sap-lite-ca.crt) under Settings > Certificates, or turn off SSL certificate verification for localhost. Run 'CSRF token fetch' before the POST requests; Postman keeps the session cookies for the host.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "basic",
    "basic": [
      { "key": "username", "value": "{{user}}", "type": "string" },
      { "key": "password", "value": "{{password}}", "type": "string" }
    ]
  },
  "variable": [
    { "key": "baseUrl", "value": "https://localhost:44300" },
    { "key": "user", "value": "ARVE_COMM" },
    { "key": "password", "value": "" },
    { "key": "client", "value": "100" },
    { "key": "csrfToken", "value": "" },
    { "key": "supplier", "value": "17300001" },
    { "key": "purchaseOrder", "value": "4500001001" },
    { "key": "invoiceReference", "value": "POSTMAN-0001" },
    { "key": "headerText", "value": "POSTMAN-0001" },
    { "key": "supplierInvoice", "value": "" },
    { "key": "fiscalYear", "value": "" }
  ],
  "item": [
    {
      "name": "Service document (API_SUPPLIERINVOICE_PROCESS_SRV)",
      "request": {
        "method": "GET",
        "header": [{ "key": "Accept", "value": "application/json" }],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/?sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_SUPPLIERINVOICE_PROCESS_SRV", ""],
          "query": [{ "key": "sap-client", "value": "{{client}}" }]
        }
      }
    },
    {
      "name": "$metadata (API_SUPPLIERINVOICE_PROCESS_SRV)",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/$metadata?sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_SUPPLIERINVOICE_PROCESS_SRV", "$metadata"],
          "query": [{ "key": "sap-client", "value": "{{client}}" }]
        }
      }
    },
    {
      "name": "Read supplier",
      "request": {
        "method": "GET",
        "header": [{ "key": "Accept", "value": "application/json" }],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_BUSINESS_PARTNER/A_Supplier('{{supplier}}')?sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_BUSINESS_PARTNER", "A_Supplier('{{supplier}}')"],
          "query": [{ "key": "sap-client", "value": "{{client}}" }]
        }
      }
    },
    {
      "name": "Read purchase order with items",
      "request": {
        "method": "GET",
        "header": [{ "key": "Accept", "value": "application/json" }],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV/A_PurchaseOrder('{{purchaseOrder}}')?$expand=to_PurchaseOrderItem&sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_PURCHASEORDER_PROCESS_SRV", "A_PurchaseOrder('{{purchaseOrder}}')"],
          "query": [
            { "key": "$expand", "value": "to_PurchaseOrderItem" },
            { "key": "sap-client", "value": "{{client}}" }
          ]
        }
      }
    },
    {
      "name": "CSRF token fetch",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "const token = pm.response.headers.get('x-csrf-token');",
              "pm.test('token returned', () => pm.expect(token).to.be.a('string').and.not.equal('Required'));",
              "pm.collectionVariables.set('csrfToken', token);"
            ]
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [
          { "key": "Accept", "value": "application/json" },
          { "key": "x-csrf-token", "value": "Fetch" }
        ],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/?sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_SUPPLIERINVOICE_PROCESS_SRV", ""],
          "query": [{ "key": "sap-client", "value": "{{client}}" }]
        }
      }
    },
    {
      "name": "Create supplier invoice",
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "type": "text/javascript",
            "exec": [
              "// OData V2 dates: /Date(ms)/ at midnight UTC today.",
              "const today = new Date().toISOString().slice(0, 10);",
              "pm.variables.set('odataToday', '/Date(' + Date.parse(today) + ')/');"
            ]
          }
        },
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('created', () => pm.response.to.have.status(201));",
              "const d = pm.response.json().d;",
              "if (d) { pm.collectionVariables.set('supplierInvoice', d.SupplierInvoice); pm.collectionVariables.set('fiscalYear', d.FiscalYear); }"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          { "key": "Accept", "value": "application/json" },
          { "key": "Content-Type", "value": "application/json" },
          { "key": "x-csrf-token", "value": "{{csrfToken}}" }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"CompanyCode\": \"1710\",\n  \"DocumentDate\": \"{{odataToday}}\",\n  \"PostingDate\": \"{{odataToday}}\",\n  \"SupplierInvoiceIDByInvcgParty\": \"{{invoiceReference}}\",\n  \"InvoicingParty\": \"{{supplier}}\",\n  \"DocumentCurrency\": \"USD\",\n  \"InvoiceGrossAmount\": \"5184\",\n  \"TaxIsCalculatedAutomatically\": true,\n  \"DocumentHeaderText\": \"{{headerText}}\",\n  \"to_SuplrInvcItemPurOrdRef\": {\n    \"results\": [\n      {\n        \"SupplierInvoiceItem\": \"1\",\n        \"PurchaseOrder\": \"{{purchaseOrder}}\",\n        \"PurchaseOrderItem\": \"10\",\n        \"TaxCode\": \"I1\",\n        \"DocumentCurrency\": \"USD\",\n        \"SupplierInvoiceItemAmount\": \"4800\",\n        \"PurchaseOrderQuantityUnit\": \"PC\",\n        \"QuantityInPurchaseOrderUnit\": \"100\"\n      }\n    ]\n  }\n}",
          "options": { "raw": { "language": "json" } }
        },
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/A_SupplierInvoice?sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_SUPPLIERINVOICE_PROCESS_SRV", "A_SupplierInvoice"],
          "query": [{ "key": "sap-client", "value": "{{client}}" }]
        },
        "description": "Sample: PO 4500001001 item 10, 100 PC at 48.00 USD, tax code I1 (8%): net 4800, gross 5184. Posts once per reference; a second identical call is refused as a duplicate (M8/108)."
      }
    },
    {
      "name": "Status lookup by DocumentHeaderText",
      "request": {
        "method": "GET",
        "header": [{ "key": "Accept", "value": "application/json" }],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/A_SupplierInvoice?$filter=DocumentHeaderText eq '{{headerText}}'&$select=SupplierInvoice,FiscalYear,SupplierInvoiceIDByInvcgParty,InvoiceGrossAmount,PaymentBlockingReason,IsReversed&sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_SUPPLIERINVOICE_PROCESS_SRV", "A_SupplierInvoice"],
          "query": [
            { "key": "$filter", "value": "DocumentHeaderText eq '{{headerText}}'" },
            { "key": "$select", "value": "SupplierInvoice,FiscalYear,SupplierInvoiceIDByInvcgParty,InvoiceGrossAmount,PaymentBlockingReason,IsReversed" },
            { "key": "sap-client", "value": "{{client}}" }
          ]
        }
      }
    },
    {
      "name": "Cancel (reverse) supplier invoice",
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "type": "text/javascript",
            "exec": ["pm.variables.set('todayDate', new Date().toISOString().slice(0, 10));"]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          { "key": "Accept", "value": "application/json" },
          { "key": "x-csrf-token", "value": "{{csrfToken}}" }
        ],
        "url": {
          "raw": "{{baseUrl}}/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV/Cancel?PostingDate=datetime'{{todayDate}}T00:00:00'&ReversalReason='01'&SupplierInvoice='{{supplierInvoice}}'&FiscalYear='{{fiscalYear}}'&sap-client={{client}}",
          "host": ["{{baseUrl}}"],
          "path": ["sap", "opu", "odata", "sap", "API_SUPPLIERINVOICE_PROCESS_SRV", "Cancel"],
          "query": [
            { "key": "PostingDate", "value": "datetime'{{todayDate}}T00:00:00'" },
            { "key": "ReversalReason", "value": "'01'" },
            { "key": "SupplierInvoice", "value": "'{{supplierInvoice}}'" },
            { "key": "FiscalYear", "value": "'{{fiscalYear}}'" },
            { "key": "sap-client", "value": "{{client}}" }
          ]
        }
      }
    }
  ]
}
