Buying Policies — Troubleshooting & FAQs

This page lists common symptoms, root causes, and fixes for Buying Policies, plus short FAQs and operator checklists.

Quick orientation

  • Policies are independent: Credit Control and Quotas can be toggled separately.
  • Blocks always expose reason codes retrievable via API.
  • Operator unblock creates an audit trail.
  • Prefer filters over ad hoc statuses on admin lists.

🚨 Common issues and fixes

A) No orders appear as blocked

Symptom: your list shows zero results.

Checks

  • Filters missing: use blockedByBuyingPolicy=true.
  • Too narrow blockingPolicyTypes: try removing it.
  • Policy toggles are off: enable Credit or Quotas as needed.

Actions

  • List with filters: GET /v1/logistic-orders - ADM-ORDER-551

B) Credit Hold seems ignored

Symptom: an account under hold still places orders.

Checks

  • Hold exists and is active for the correct account set.
  • Credit Control toggle is enabled.

Actions

  • Review holds: GET /v1/buying-policies/credit-control/holds - ADM-BUYING-POLICY-550

C) Grace Amount not applied

Symptom: slightly over limit orders are blocked.

Checks

  • A Grace Amount exists for the account and value is sufficient.
  • Exposure calculation and currency context match your setup.

Actions

  • Review grace items: GET /v1/buying-policies/credit-control/grace-amounts - ADM-BUYING-POLICY-551

D) Default credit limit not used

Symptom: exposure check acts as if no baseline exists.

Checks

  • Credit Control toggle is enabled.
  • Default limit set at tenant level.

Actions

  • Read and patch settings:
    • GET /v1/buying-policies/credit-control - ADM-BUYING-POLICY-500
    • PATCH /v1/buying-policies/credit-control/credit-limit - ADM-BUYING-POLICY-201

E) Quotas block when a rule should override

Symptom: order blocked by default minimum though a specific rule exists.

Checks

  • Rule scope keys exactly match Account and Supplier and optional Store.
  • No typo in identifiers; rule is active.

Actions

  • List rules and verify scope: GET /v1/buying-policies/quotas/rules - ADM-BUYING-POLICY-553

F) Group co-validation does not trigger

Symptom: order evaluated by individual precedence, not by group.

Checks

  • Group membership references the correct rules.
  • Group minimum is set when intended.

Actions

  • Inspect groups: GET /v1/buying-policies/quotas/groups - ADM-BUYING-POLICY-554

G) Blocking reasons are empty

Symptom: a blocked order has no reasons in UI.

Checks

  • You are calling the reasons endpoint with the correct order identifiers.
  • The order is actually blocked by policy, not another process.

Actions

  • Fetch reasons: GET /v1/buying-policies/blocking-reasons - ADM-BUYING-POLICY-552

H) Unblock rejected

Symptom: operator cannot force validation.

Checks

  • Proper rights for the operator role.
  • Mandatory comment provided.

Actions

  • Unblock and read history:
    • POST /v1/logistic-orders/unblock - ADM-ORDER-150
    • GET /v1/logistic-orders/:logisticOrderId/unblock-history - ADM-ORDER-550

🔎 Triage flow

graph LR
  IN[Start investigation] --> L[GET logistic orders<br>ADM-ORDER-551]
  L --> F{Use filters}
  F --> B1[blockedByBuyingPolicy true]
  F --> B2[blockingPolicyTypes optional]
  L --> PICK{Select an order}
  PICK --> R[GET blocking reasons<br>ADM-BUYING-POLICY-552]
  R --> DEC{Unblock needed}
  DEC -->|Yes| U[POST unblock<br>ADM-ORDER-150]
  U --> H[GET unblock history<br>ADM-ORDER-550]
  DEC -->|No| FIX[Adjust settings or rules]

  %% ---------- Styles ----------
  classDef total fill:#e8f1ff,stroke:#2f6feb,stroke-width:2px,color:#0b3d91;
  classDef diff fill:#fff4e5,stroke:#f59e0b,stroke-width:2px,color:#7a3e00;
  classDef inter fill:#fee2e2,stroke:#ef4444,stroke-width:2px,color:#7f1d1d;
  classDef visible fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#064e3b;
  classDef resp fill:#f2f4f7,stroke:#475569,stroke-width:2px,color:#111827;

  class IN total
  class L diff
  class F,B1,B2 resp
  class PICK resp
  class R visible
  class DEC diff
  class U,H visible
  class FIX resp

  style IN rx:8,ry:8
  style L rx:8,ry:8
  style F rx:8,ry:8
  style B1 rx:8,ry:8
  style B2 rx:8,ry:8
  style PICK rx:8,ry:8
  style R rx:8,ry:8
  style DEC rx:8,ry:8
  style U rx:8,ry:8
  style H rx:8,ry:8
  style FIX rx:8,ry:8

✅ Checklists

Credit Control

  • Toggle enabled: GET /v1/buying-policies/credit-control - ADM-BUYING-POLICY-500
  • Default limit set: PATCH /v1/buying-policies/credit-control/credit-limit - ADM-BUYING-POLICY-201
  • Holds and grace reviewed:
    • Holds list: GET /v1/buying-policies/credit-control/holds - ADM-BUYING-POLICY-550
    • Grace list: GET /v1/buying-policies/credit-control/grace-amounts - ADM-BUYING-POLICY-551

Quotas

  • Toggle and default minimum set:
    • GET /v1/buying-policies/quotas - ADM-BUYING-POLICY-501
    • PATCH /v1/buying-policies/quotas/min-value - ADM-BUYING-POLICY-205
  • Rules verified: GET /v1/buying-policies/quotas/rules - ADM-BUYING-POLICY-553
  • Groups verified: GET /v1/buying-policies/quotas/groups - ADM-BUYING-POLICY-554

❓ FAQs

Can I enable only Credit Control or only Quotas Yes. Each policy family has its own toggle.

Do group rules always override individual rules If a matching group exists, the engine uses the group effective minimum. If no group matches, individual precedence applies.

Do Credit Holds take precedence over exposure and grace Yes. A hold blocks before any exposure or grace calculation.

Are reason codes stable over time Yes, codes are meant for routing and analytics. Labels can evolve in UI.

Does unblock bypass other validations Unblock removes the policy block and records an audit entry. Downstream validations and processes still apply.


🔗 API quicklinks

  • Orders list: GET /v1/logistic-orders - ADM-ORDER-551
  • Blocking reasons: GET /v1/buying-policies/blocking-reasons - ADM-BUYING-POLICY-552
  • Unblock: POST /v1/logistic-orders/unblock - ADM-ORDER-150
  • Unblock history: GET /v1/logistic-orders/:logisticOrderId/unblock-history - ADM-ORDER-550
  • Credit Control settings and lists:
    • GET /v1/buying-policies/credit-control - ADM-BUYING-POLICY-500
    • GET /v1/buying-policies/credit-control/holds - ADM-BUYING-POLICY-550
    • GET /v1/buying-policies/credit-control/grace-amounts - ADM-BUYING-POLICY-551
  • Quotas settings and lists:
    • GET /v1/buying-policies/quotas - ADM-BUYING-POLICY-501
    • GET /v1/buying-policies/quotas/rules - ADM-BUYING-POLICY-553
    • GET /v1/buying-policies/quotas/groups - ADM-BUYING-POLICY-554