Compare Positions
reconciliation.compare_positions
Overview
Perform bounded deterministic compare positions and return a compact reconciliation receipt. Closed inputs, fixed precision, deterministic ordering, and typed failures apply.
You receive deterministic differences or digest evidence for reconciliation.compare_positions.
Reliability
Closed shapes and bounds fail before expensive work. DECIMAL_INVALID means a malformed or over-limit decimal; correct it. TOLERANCE_INVALID means tolerance is negative or malformed; provide a non-negative decimal. RECONCILIATION_INPUT_INVALID means duplicate keys or malformed rows; correct the closed rows. CURRENCY_MISMATCH means a currency is unsupported or duplicated; use unique supported currencies. CANONICAL_INPUT_INVALID means a type, number, key, or depth violates canonical JSON; correct it. CANONICALIZATION_PROFILE_UNSUPPORTED means the profile is not the published profile; select it. ITEM_LIMIT_EXCEEDED means more than 10,000 items were supplied; split the request. INPUT_LIMIT_EXCEEDED means canonical UTF-8 exceeds 65,536 bytes; reduce it. This guidance applies to reconciliation.compare_positions.
Context footprint
The result replaces repeated prompt comparison with one compact receipt for reconciliation.compare_positions. A successful call costs 1 execution credit.
When to use it
When two position quantities for the same instrument must be compared against tolerance.
When you are comparing cash, or identifiers still need fuzzy matching.
Scope
Non-goals
- Does not infer key equivalence, FX conversion, valuation policy, or materiality for reconciliation.compare_positions.
- Does not mutate records, read files, or process unbounded data for reconciliation.compare_positions.
Properties
Capabilities
Cost & billing
Flat rate per invocation
File handling
How we handle your data
What this means
This skill may receive sensitive content, but it does not target sensitive data and returns only a structured non-sensitive result.
Squillify guarantees
- Runs inside Squillify
- This skill runs inside Squillify.
- Payloads are not sent to an external service by this skill.
- Squillify does not permanently store submitted payloads.
- Telemetry records metadata only, not submitted content.
- Submitted payloads are not used for training.
- Submitted payloads are not reviewed by humans.
- This skill does not target sensitive data.
- The response does not contain submitted content.
Your responsibility
Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
| leftPositions | array | Yes | Array of 1 to 10,000 items; each item is a closed object with required string properties `key`, `quantity`, and `value`. |
| rightPositions | array | Yes | Array of 1 to 10,000 items; each item is a closed object with required string properties `key`, `quantity`, and `value`. |
| quantityTolerance | string | Yes | Required non-negative quantity tolerance. |
| valueTolerance | string | Yes | Required non-negative value tolerance. |
Output schema
| Field | Type | Required | Description |
|---|---|---|---|
| matched | array | Yes | Array of zero to 10,000 lexicographically sorted matching key string items. |
| breaks | array | Yes | Array of zero to 10,000 sorted items; each item is a closed object with key and six decimal comparison properties. |
| summary | object | Yes | Closed object with integer properties `keyCount`, `matchedCount`, and `breakCount`. |
API contract
POST /v1/executecurl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"reconciliation.compare_positions","input":{"leftPositions":[{"key":"ABC","quantity":"10","value":"100"}],"rightPositions":[{"key":"ABC","quantity":"10","value":"99.99"}],"quantityTolerance":"0","valueTolerance":"0.01"}}'import { Squillify } from "@squillify/sdk";
const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });
const { output } = await sq.execute("reconciliation.compare_positions", {"valueTolerance":"0.01","rightPositions":[{"key":"ABC","quantity":"10","value":"99.99"}],"quantityTolerance":"0","leftPositions":[{"key":"ABC","quantity":"10","value":"100"}]});Errors
| Code | HTTP | Retryable | Description |
|---|---|---|---|
| VALIDATION_ERROR | 400 | No | The request payload failed schema validation. |
| UNAUTHORIZED | 401 | No | Missing or invalid API key. |
| SKILL_NOT_ACCESSIBLE | 403 | No | The API key is not granted access to this skill. |
| SKILL_NOT_AVAILABLE_FOR_PLAN | 403 | No | This skill is not included in your current plan. |
| PLAN_ELIGIBILITY_UNAVAILABLE | 503 | Yes | Plan eligibility could not be decided. Retry after backoff. |
| SKILL_NOT_FOUND | 404 | No | The requested skill or version does not exist. |
| TENANT_RATE_LIMITED | 429 | Yes | Request rate limit exceeded. Retry after backoff. |
| QUOTA_EXCEEDED | 429 | Yes | Plan quota exhausted. Retryable once the quota period resets. |
| EXECUTION_TIMEOUT | 504 | Yes | Execution exceeded the allowed time budget. |
| DECIMAL_INVALID | 400 | No | The request payload failed this skill's input validation. |
| TOLERANCE_INVALID | 400 | No | The request payload failed this skill's input validation. |
| RECONCILIATION_INPUT_INVALID | 400 | No | The request payload failed this skill's input validation. |
| ITEM_LIMIT_EXCEEDED | 429 | No | A size, quota, rate, or time limit was exceeded. |
Other limits
| Limit | Value |
|---|---|
| Recommended inline bytes | 32 KiB |
Limitations
- Does not infer key equivalence, FX conversion, valuation policy, or materiality for reconciliation.compare_positions.
- Does not mutate records, read files, or process unbounded data for reconciliation.compare_positions.
- Inferred matching, conversion, valuation, or accounting policy
- Inputs above the declared bounds for reconciliation.compare_positions.
How to call
POST /v1/execute (requires authentication)
{
"skillKey": "reconciliation.compare_positions",
"input": {
"valueTolerance": "0.01",
"rightPositions": [
{
"key": "ABC",
"quantity": "10",
"value": "99.99"
}
],
"quantityTolerance": "0",
"leftPositions": [
{
"key": "ABC",
"quantity": "10",
"value": "100"
}
]
}
}Examples
Verified reconciliation
{
"valueTolerance": "0.01",
"rightPositions": [
{
"key": "ABC",
"quantity": "10",
"value": "99.99"
}
],
"quantityTolerance": "0",
"leftPositions": [
{
"key": "ABC",
"quantity": "10",
"value": "100"
}
]
}{
"matched": [
"ABC"
],
"breaks": [],
"summary": {
"keyCount": 1,
"matchedCount": 1,
"breakCount": 0
}
}Alternative bounded reconciliation
{
"valueTolerance": "0",
"rightPositions": [
{
"key": "ABC",
"quantity": "9",
"value": "100"
}
],
"quantityTolerance": "0",
"leftPositions": [
{
"key": "ABC",
"quantity": "10",
"value": "100"
}
]
}{
"matched": [],
"breaks": [
{
"key": "ABC",
"leftQuantity": "10",
"rightQuantity": "9",
"quantityDifference": "1",
"leftValue": "100",
"rightValue": "100",
"valueDifference": "0"
}
],
"summary": {
"keyCount": 1,
"matchedCount": 0,
"breakCount": 1
}
}Recommended use cases
- Auditable bounded compare positions
- Exact-decimal control evidence for reconciliation.compare_positions.
Avoid for
- Inferred matching, conversion, valuation, or accounting policy
- Inputs above the declared bounds for reconciliation.compare_positions.
Related skills
Composable with
Safety & privacy
- Runs without calling any external service.
- Your payloads are never stored permanently.
- Telemetry captures metadata only — never your payload contents.
- We never train models on your payloads.
- No human reviews your payloads.