# IB Subscription Contract Errors

LLMS index: [llms.txt](/llms.txt)

---

<div id="pslens-context-panel" class="card border-info mb-4 d-none">
  <div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle">
    <i class="bi bi-info-circle-fill me-2"></i>
    <span>Tailored Operational Context</span>
  </div>
  <div class="card-body p-0">
    <ul class="list-group list-group-flush">
      <li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Target Database:</strong>
        <span id="ctx-db" class="badge bg-secondary font-monospace">&mdash;</span>
      </li>
      <li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Context Type:</strong>
        <span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase">&mdash;</span>
      </li>
      <li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Alert Severity:</strong>
        <span id="ctx-severity" class="badge">&mdash;</span>
      </li>
      <li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Triggered Time:</strong>
        <span id="ctx-time" class="text-muted small">&mdash;</span>
      </li>
      <li id="row-details" class="list-group-item py-2 d-none">
        <strong id="label-details" class="d-block mb-1">Firing Context:</strong>
        <code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;">&mdash;</code>
      </li>
    </ul>
  </div>
</div>

<script>
  (function() {
    const params = new URLSearchParams(window.location.search);
    const metadata = params.get('metadata');
    if (!metadata) return;

    try {
      
      const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
      const jsonStr = decodeURIComponent(escape(window.atob(base64)));
      const data = JSON.parse(jsonStr);

      if (data) {
        let hasData = false;

        if (data.db) {
          document.getElementById('ctx-db').textContent = data.db;
          document.getElementById('row-db').classList.remove('d-none');
          hasData = true;
        }

        if (data.type) {
          document.getElementById('ctx-type').textContent = data.type;
          document.getElementById('row-type').classList.remove('d-none');
          hasData = true;
        }

        if (data.severity) {
          const severityBadge = document.getElementById('ctx-severity');
          const severity = data.severity.toLowerCase();
          severityBadge.textContent = severity.toUpperCase();
          if (severity === 'critical') {
            severityBadge.className = 'badge bg-danger';
          } else if (severity === 'warning') {
            severityBadge.className = 'badge bg-warning text-dark';
          } else {
            severityBadge.className = 'badge bg-info';
          }
          document.getElementById('row-severity').classList.remove('d-none');
          hasData = true;
        }

        if (data.t) {
          const date = new Date(data.t * 1000);
          document.getElementById('ctx-time').textContent = date.toLocaleString();
          document.getElementById('row-time').classList.remove('d-none');
          hasData = true;
        }

        if (data.details) {
          document.getElementById('ctx-details').textContent = data.details;

          
          const labelDetails = document.getElementById('label-details');
          if (data.type === 'object') {
            labelDetails.textContent = 'Object Metadata Details:';
          } else if (data.type === 'report') {
            labelDetails.textContent = 'Report Description:';
          } else {
            labelDetails.textContent = 'Firing Context:';
          }

          document.getElementById('row-details').classList.remove('d-none');
          hasData = true;
        }

        if (hasData) {
          document.getElementById('pslens-context-panel').classList.remove('d-none');
        }
      }
    } catch (e) {
      console.error('Failed to parse operational context metadata:', e);
    }
  })();
</script>


## IB Subscription Contract Errors Alert

**Alert ID:** `ib_sub_contract_errors`
**Category:** Integration Broker
**Default lookback:** 24 hours

### What This Alert Detects

This alert finds **Integration Broker subscription contracts** that are in **Error** or **Timeout** status within a configurable lookback window.

In the PeopleSoft Integration Broker architecture, a **subscription contract** tracks the processing of an inbound message by a subscribing handler. When a subscription contract fails, it means PeopleSoft received a message from an external system but was unable to process it completely.

### When This Matters

Subscription contract errors typically mean:

- An inbound message from an integration partner was not fully processed
- PeopleSoft was unable to apply the data changes the message carried
- A business process that depends on this message may be incomplete or in an error state

### Severity Logic

| Status  | Severity |
| ------- | -------- |
| Error   | Critical |
| Timeout | Warning  |

### Alert Details

Each alert item includes:

- Subscription contract ID
- Service operation name
- Status (Error or Timeout)
- The originating (publishing) node
- When the contract was created
- A link to the IB Monitor detail page

### Configuration

```yaml
alerts:
  checks:
    ib_sub_contract_errors:
      enabled: true
      lookbackHours: 24          # How far back to look for errors
      excludeOperations:         # Operation names to skip
        - KNOWN_RETRY_OPERATION
```

|       Setting       | Default |                        Description                         |
| ------------------- | ------- | ---------------------------------------------------------- |
| `lookbackHours`     | `24`    | Number of hours back to search for error/timeout contracts |
| `excludeOperations` | `[]`    | List of IB operation names to exclude from this check      |

### How to Respond

1. Click the alert link to go to the IB Monitor entry for the failed contract
2. Review the error details. The IB Monitor typically shows the exception or error message from the handler PeopleCode
3. Check the subscription handler code for the operation (viewable in the Service Operation detail page in psLens)
4. Investigate whether the data in the message is valid. Handler errors often come from unexpected data
5. If the subscription can be safely reprocessed, resubmit from PeopleSoft's Subscription Contracts Monitor

### Relationship to Other IB Alerts

For sub contracts **stuck in progress**, see [IB Subscription Contracts Stalled](/docs/alerts/integration-broker/ib-sub-contract-stalled/).

For similar alerts on operations and publication contracts:

- [IB Operation Errors](/docs/alerts/integration-broker/ib-operation-errors/)
- [IB Publication Contract Errors](/docs/alerts/integration-broker/ib-pub-contract-errors/)
