# FpML 4.2 Validation Rules - Rules for Credit Derivatives (CD)

This is the Credit Derivatives part of the validation rule set accompanying the FpML 4.2 Trial Recommendation. The introductory section in the validation section of the specifications contains background information and documentation for this page.

The rules contained on this page contain links to cut down versions of valid and invalid test cases. The cut down test cases are non-normative and are provided for the purpose of documentation only.

## Content

- Preconditions
  - ISDA1999
  - ISDA2003
  - ShortForm
  - LongForm
  - SameCurrency
  - SingleName
  - CreditIndex
- Rules

## Preconditions

The following preconditions are always to be executed relative to the root of the FpML document being validated. The context of the rule is NOT carried through to the precondition.

Precondition: ISDA1999
The documentation/contractualDefinitions element or the documentation/masterConfirmation/masterConfirmationType element contains ISDA1999Credit.
Precondition: ISDA2003
The documentation/contractualDefinitions element begins with the substring ISDA2003Credit (this includes ISDA2003CreditJapan, etc.) or the documentation/masterConfirmation/masterConfirmationType element begins with the substring ISDA2003Credit or ISDA2004Credit.
Precondition: ShortForm
documentation/masterConfirmation is present or documentation/contractualMatrix is present or documentation/contractualTermsSupplement is present and begins with substring iTraxx or CDX.
Precondition: LongForm
documentation/masterConfirmation and documentation/contractualMatrix are not present and SingleName precondition applies.
Precondition: SameCurrency
All instances of currency values must be identical.
Precondition: SingleName
creditDefaultSwap/generalTerms/referenceInformation is present.
Precondition: CreditIndex
creditDefaultSwap/generalTerms/indexReferenceInformation is present and creditDefaultSwap/generalTerms/indexReferenceInformation/tranche is not present.

## Rules

#### Unique contexts:

- Trade: cd-1 cd-1b cd-2 cd-3 cd-4
- GeneralTerms (data type): cd-5 cd-6 cd-7 cd-8 cd-41 cd-42
- ReferenceInformation (data type): cd-9 cd-10 cd-11 cd-12
- CreditDefaultSwap (data type): cd-13 cd-14 cd-15 cd-16 cd-17 cd-18 cd-19 cd-20 cd-21 cd-21b cd-22 cd-23 cd-24 cd-25 cd-26 cd-27 cd-28 cd-29 cd-30 cd-43
- PeriodicPayment (data type): cd-31 cd-32 cd-33
- DeliverableObligations (data type): cd-34
- CreditEvents (data type): cd-35
- PubliclyAvailableInformation (data type): cd-36
- CashSettlementTerms (data type): cd-37
- ReferencePool (data type): cd-38
- BasketReferenceInformation (data type): cd-39
- Tranche (data type): cd-40
- Deprecated rules

#### Context: Trade

cd-1 (Mandatory)
Preconditions: SingleName
tradeHeader/tradeDate must be before creditDefaultSwap/generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid]
cd-1b (Mandatory)
Preconditions: CreditIndex
tradeHeader/tradeDate must be equal or after creditDefaultSwap/generalTerms/effectiveDate/unadjustedDate.
cd-2 (Mandatory)
If calculationAgent is present, it may contain only calculationAgentPartyReference elements or calculationAgentParty with the value AsSpecifiedInMasterAgreement.
Test cases: [Valid] [Invalid]
cd-3 (Mandatory)
Preconditions: ISDA1999
documentation/contractualSupplement must not begin with the substring ISDA2003Credit.
Test cases: [Valid] [Invalid]
cd-4 (Mandatory)
Preconditions: ISDA2003
documentation/contractualSupplement must not begin with the substring ISDA1999Credit.
Test cases: [Valid] [Invalid]

#### Context: GeneralTerms (data type)

cd-5 (Mandatory)
If element scheduledTerminationDate/adjustableDate exists, then effectiveDate/unadjustedDate < scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-6 (Mandatory)
buyerPartyReference/@href must not be equal to sellerPartyReference/@href.
Test cases: [Valid] [Invalid]
cd-7 (Mandatory)
Preconditions: LongForm
effectiveDate/dateAdjustments or effectiveDate/dateAdjustmentsReference must be present.
Test cases: [Valid] [Invalid]
cd-8 (Mandatory)
Preconditions: LongForm
scheduledTerminationDate/adjustableDate/eAdjustments or scheduledTerminationDate/adjustableDate/dateAdjustmentsReference must be present.
Test cases: [Valid] [Invalid]
cd-41 (Mandatory)
If indexReferenceInformation/tranche is not present then modifiedEquityDelivery must not be present.
cd-42 (Mandatory)
If basketReferenceInformation is not present then substitution must not be present.

#### Context: ReferenceInformation (data type)

cd-9 (Mandatory)
If referenceObligation/primaryObligorReference exists, then the attribute @href of this element must be equal to the @id attribute of referenceEntity.
Test cases: [Valid] [Invalid]
cd-10 (Mandatory)
If referenceObligation/guarantorReference exists, then the attribute @href of this element must be equal to the @id attribute of referenceEntity.
Test cases: [Valid] [Invalid]
cd-11 (Mandatory)
Preconditions: LongForm ISDA2003
allGuarantees must be present.
Test cases: [Valid] [Invalid]
cd-12 (Mandatory)
If referencePrice exists, then its value must be greater than or equal to zero.
Test cases: [Valid] [Valid] [Invalid]

#### Context: CreditDefaultSwap (data type)

cd-13 (Mandatory)
If protectionTerms/creditEvents/creditEventNotice/notifyingParty/buyerPartyReference is present, its @href attribute must match that of generalTerms/buyerPartyReference.
Test cases: [Valid] [Invalid]
cd-14 (Mandatory)
If protectionTerms/creditEvents/creditEventNotice/notifyingParty/sellerPartyReference is present, its @href attribute must match that of generalTerms/sellerPartyReference.
Test cases: [Valid] [Invalid]
cd-15 (Mandatory)
If there is exactly one generalTerms/referenceInformation/referenceObligation, and cashSettlementTerms/valuationDate/singleValuationDate occurs, then the value of cashSettlementTerms/valuationMethod must be Market or Highest.
Test cases: [Valid] [Valid] [Invalid]
cd-16 (Mandatory)
If there is exactly one generalTerms/referenceInformation/referenceObligation, and cashSettlementTerms/valuationDate/multipleValuationDates exists, then the value of cashSettlementTerms/valuationMethod must be AverageMarket, Highest, or AverageHighest.
Test cases: [Valid] [Invalid]
cd-17 (Mandatory)
If there is more than one generalTerms/referenceInformation/referenceObligation, and cashSettlementTerms/valuationDate/singleValuationDate exists, then the value of cashSettlementTerms/valuationMethod must be BlendedMarket or BlendedHighest.
Test cases: [Valid] [Invalid]
cd-18 (Mandatory)
If there is more than one generalTerms/referenceInformation/referenceObligation, and cashSettlementTerms/valuationDate/multipleValuationDates exists, then the value of cashSettlementTerms/valuationMethod must be AverageBlendedMarket or AverageBlendedHighest.
Test cases: [Valid] [Valid] [Invalid]
cd-19 (Mandatory)
Preconditions: ISDA1999
The following elements must not be present: protectionTerms/creditEvents/creditEventNotice/businessCenter, protectionTerms/creditEvents/restructuring/multipleHolderObligation, protectionTerms/creditEvents/restructuring/multipleCreditEventNotices, generalTerms/referenceInformation/allGuarantees, generalTerms/indexReferenceInformation, generalTerms/substitution, generalTerms/modifiedEquityDelivery.
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
cd-20 (Mandatory)
Preconditions: ISDA2003
protectionTerms/obligation/notContingent must not be present.
Test cases: [Valid] [Invalid]
cd-21 (Mandatory)
Preconditions: ShortForm SingleName
The following elements must not be present: cashSettlementTerms, physicalSettlementTerms, feeLeg/periodicPayment/fixedAmountCalculation/calculationAmount, feeLeg/periodicPayment/fixedAmountCalculation/dayCountFraction, protectionTerms/obligations, generalTerms/referenceInformation/allGuarantees, generalTerms/referenceInformation/referencePrice, generalTerms/effectiveDate/dateAdjustments, generalTerms/effectiveDate/dateAdjustmentsReference, generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustments, generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustmentsReference, generalTerms/dateAdjustments.
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid]
cd-21b (Mandatory)
Preconditions: ShortForm CreditIndex
The following elements must not be present: cashSettlementTerms, physicalSettlementTerms, feeLeg/periodicPayment/fixedAmountCalculation/calculationAmount, feeLeg/periodicPayment/fixedAmountCalculation/dayCountFraction, protectionTerms/obligations, generalTerms/effectiveDate/dateAdjustments, generalTerms/effectiveDate/dateAdjustmentsReference, generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustments, generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustmentsReference, generalTerms/dateAdjustments, protectionTerms/creditEvents.
cd-22 (Mandatory)
Preconditions: ShortForm
The following elements must not be present: protectionTerms/creditEvents/bankrupcy, protectionTerms/creditEvents/failureToPay, protectionTerms/creditEvents/repudiationMoratorium, protectionTerms/creditEvents/obligationDefault, protectionTerms/creditEvents/obligationAcceleration.
Test cases: [Valid] [Invalid]
cd-23 (Mandatory)
Preconditions: LongForm
cashSettlementTerms or physicalSettlementTerms must be present.
Test cases: [Valid] [Invalid]
cd-24 (Mandatory)
Preconditions: LongForm
The following elements must be present: protectionTerms/creditEvents, protectionTerms/creditEvents/creditEventNotice, protectionTerms/obligations, generalTerms/referenceInformation/referencePrice.
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
cd-25 (Mandatory)
Preconditions: LongForm
If physicalSettlementTerms is present them it must contain settlementCurrency, physicalSettlementPeriod, escrow and deliverableObligations/accruedInterest.
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
cd-26 (Mandatory)
If feeLeg/singlePayment/adjustablePaymentDate is present, then feeLeg/singlePayment/adjustablePaymentDate > generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-27 (Mandatory)
If feeLeg/singlePayment/adjustablePaymentDate and generalTerms/scheduledTerminationDate/adjustableDate are present, then feeLeg/singlePayment/adjustablePaymentDate < generalTerms/scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-28 (Mandatory)
If feeLeg/periodicPayment/firstPaymentDate is present, then feeLeg/periodicPayment/firstPaymentDate > generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid]
cd-29 (Mandatory)
If feeLeg/periodicPayment/firstPaymentDate and generalTerms/scheduledTerminationDate/adjustableDate are present, then feeLeg/periodicPayment/firstPaymentDate < generalTerms/scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid]
cd-30 (Mandatory)
If feeLeg/periodicPayment/lastRegularPaymentDate and generalTerms/scheduledTerminationDate/adjustableDate are present, then feeLeg/periodicPayment/lastRegularPaymentDate < generalTerms/scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-43 (Mandatory)
Preconditions: SingleName
If feeLeg/initialPayment is present, then feeLeg/initialPayment/payerPartyReference/@href must be equal to generalTerms/sellerPartyReference/@href and feeLeg/initialPayment/receiverPartyReference/@href must be equal to generalTerms/buyerPartyReference/@href

#### Context: PeriodicPayment (data type)

cd-31 (Mandatory)
If both element firstPaymentDate and lastRegularPaymentDate exist, then firstPaymentDate < lastRegularPaymentDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-32 (Mandatory)
Preconditions: LongForm
If fixedAmountCalculation is present, it must contain calculationAmount and dayCountFraction.
Test cases: [Valid] [Invalid] [Invalid]
cd-33 (Mandatory)
If both firstPaymentDate and lastRegularPaymentDate are present, then lastRegularPaymentDate must fall precisely on a date reachable by adding an integer multiple of the period in paymentFrequency to firstPaymentDate.
Test cases: [Valid] [Invalid] [Invalid]

#### Context: DeliverableObligations (data type)

cd-34 (Mandatory)
If the value of category is ReferenceObligationsOnly, then no other elements may be contained in the deliverable obligations element.
Test cases: [Valid] [Invalid]

#### Context: CreditEvents (data type)

cd-35 (Mandatory)
At least one child element must be present.
Test cases: [Valid] [Invalid]

#### Context: PubliclyAvailableInformation (data type)

cd-36 (Mandatory)
Either standardPublicSources or at least one publicSource element must be present.
Test cases: [Valid] [Valid] [Invalid]

#### Context: CashSettlementTerms (data type)

cd-37 (Mandatory)
Preconditions: SameCurrency
quotationAmount/amount >= minimumQuotationAmount/amount, if both elements are present.
Test cases: [Valid] [Valid] [Invalid]

#### Context: ReferencePool (data type)

cd-38 (Mandatory)
The sum of referencePoolItem/constituentWeight/basketPercentage is equal to 1 or no referencePoolItem/constituentWeight is present.

#### Context: BasketReferenceInformation (data type)

cd-39 (Mandatory)
If nthToDefault is present and mthToDefault is present then nthToDefault must be less than mthToDefault.

#### Context: Tranche (data type)

cd-40 (Mandatory)
attachmentPoint must be less than or equal to exhaustionPoint.

#### Deprecated rules