Lesson 04 · 6 min

Changing the Deal

A partial unwind is a quantity decrease by event, and the qualifier derives PartialTermination from the diff.

The unwind order

October 2026. Pershing Square wants less rate risk and asks Goldman to unwind USD 4,000,000 of the 10,000,000 swap. In most systems someone edits a notional field and a comment explains why. In the CDM nobody edits anything: a QuantityChangeInstruction states the delta and the direction, the loop produces a new state at 6,000,000, and the old state at 10,000,000 stays on the line as history. Then the qualifier looks at the diff and names what happened.

intent: absentbeforeUSD 10,000,000quantityChangedirection: DecreaseafterUSD 6,000,000change: USD 4,000,000eventQualifier: PartialTerminationdecreased, something left, nothing closed: that spells partial termination
Key ideas
  • Direction, not arithmetic

    change is always a positive number; QuantityChangeDirectionEnum says what to do with it: Increase, Decrease, or Replace. The model separates the amount from the operation so neither is ever implied.

  • The delta can carry its fee

    change is a PriceQuantity, so the unwind fee Goldman quotes can ride along as a cash price with its own settlement date. One instruction, the full commercial story.

  • The same diff can mean three things

    A decrease with something left is a partial termination. A decrease to zero with the state closed is a termination. And a decrease that merely corrects a booking error is neither, which is where intent finally earns its place.

  • Increases add lots

    Trade lots planted this: an Increase adds a TradeLot at its own price while the original lot stays put. Same verb, opposite direction, same refusal to overwrite.

The unwind, on the wire

{} businessEvent, partial unwind, trimmed
{  "eventDate": "2026-10-15",  "effectiveDate": "2026-10-17",  "instruction": [    {      "before": "… the swap at USD 10,000,000 …",      "primitiveInstruction": {        "quantityChange": {          "direction": "Decrease",          "change": [            {              "quantity": [                {                  "value": 4000000,                  "unit": {                    "currency": "USD"                  }                }              ]            }          ]        }      }    }  ],  "after": [    {      "trade": "… same swap, quantity now USD 6,000,000 …",      "state": {        "positionState": "Formed"      }    }  ],  "eventQualifier": "PartialTermination"}
Note what is absent: intent. No one declared anything, and the event still has a precise name, because the data is unambiguous on its own.

The qualifier reads the diff

Qualify_PartialTermination checks four things: no declared intent, the only verb is quantityChange (a cash transfer may ride along for the fee), the quantity strictly decreased between before and after, and no after state is closed. Change any one and the name changes with it. Run the same decrease all the way to zero and close the state, and Qualify_Termination claims the event instead, an exit the endings lesson walks.

Try itOpen Qualify_PartialTermination in the Playground. Run the True example, then make the decrease consume the whole quantity and watch the qualifier let go of the event.
◆ Checkpoint

01How is a 4 million unwind on a 10 million swap expressed?

1 / 3