FpML 4.5 Validation Rules - Rules for Credit Derivatives (CD)

This is the Credit Derivatives part of the validation rule set accompanying the FpML 4.5 Working Draft. 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

Namespace

default element namespace = http://www.fpml.org/2008/FpML-4-5

namespace xs = http://www.w3.org/2001/XMLSchema

Conditions

The Validation Conditions only apply when specific rules reference them. The following conditions 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 condition.

Condition: ISDA1999
(context: Trade) (context: Contract) The documentation/contractualDefinitions element or the documentation/masterConfirmation/masterConfirmationType element contains "ISDA1999Credit".
Condition: ISDA2003
(context: Trade) (context: Contract) Some documentation/contractualDefinitions element begins with the string "ISDA2003Credit" (this includes ISDA2003CreditJapan, etc.) or the documentation/masterConfirmation/masterConfirmationType element begins with the string "ISDA2003Credit" or "ISDA2004Credit".
Condition: ShortForm
(context: Trade) (context: Contract) documentation/masterConfirmation exists, or documentation/contractualMatrix exists, or documentation/contractualTermsSupplement exists and documentation/contractualTermsSupplement/type begins with string "iTraxx" or "CDX".
Condition: LongForm
(context: Trade) (context: Contract) documentation/masterConfirmation and documentation/contractualMatrix do not exist and SingleName condition applies.
Condition: SingleName
(context: Trade) (context: Contract) creditDefaultSwap/generalTerms/referenceInformation exists.
Condition: CreditIndex
(context: CreditDefaultSwap) generalTerms/indexReferenceInformation exists and generalTerms/indexReferenceInformation/tranche does not exist.
Condition: quotationAmount
(context: CashSettlementTerms) quotationAmount exists.
Condition: minimumQuotationAmount
(context: CashSettlementTerms) minimumQuotationAmount exists.

Functions

The following shared functions are used in the rules.

Rules

Unique contexts:

cd-1 (Mandatory)
Context: Trade (complex type)
[exists(creditDefaultSwap/generalTerms/referenceInformation)]
tradeHeader/tradeDate < creditDefaultSwap/generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid]
cd-1b (Mandatory)
Context: Trade (complex type)
[CreditIndex] [exists(creditDefaultSwap/generalTerms/effectiveDate)]
tradeHeader/tradeDate >= creditDefaultSwap/generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Valid] [Invalid]
cd-2 (Mandatory)
Context: Trade (complex type)
[exists(calculationAgent)]
calculationAgent may contain only calculationAgentPartyReference elements or calculationAgentParty with the value "AsSpecifiedInMasterAgreement".
Test cases: [Valid] [Valid] [Invalid]
cd-3b (Mandatory)
Context: ContractualTermsSupplement (complex type)
[ISDA1999]
The content of type must not begin with the string "ISDA2003Credit".
Test cases: [Valid] [Invalid]
cd-4b (Mandatory)
Context: ContractualTermsSupplement (complex type)
[ISDA2003]
The content of type must not begin with the string "ISDA1999Credit".
Test cases: [Valid] [Invalid]
cd-5 (Mandatory)
Context: GeneralTerms (complex type)
[exists(effectiveDate)] [exists(scheduledTerminationDate)]
effectiveDate/unadjustedDate < scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-6 (Mandatory)
Context: GeneralTerms
buyerPartyReference/@href != sellerPartyReference/@href.
Test cases: [Valid] [Invalid]
cd-7 (Mandatory)
Context: GeneralTerms (complex type)
[LongForm]
exists(effectiveDate/dateAdjustments) or exists(effectiveDate/dateAdjustmentsReference).
Comment: effectiveDate/dateAdjustments or effectiveDate/dateAdjustmentsReference must exist.
Test cases: [Valid] [Invalid]
cd-8 (Mandatory)
Context: GeneralTerms (complex type)
[LongForm] [exists(scheduledTerminationDate)]
exists(scheduledTerminationDate/adjustableDate/dateAdjustments) or exists(scheduledTerminationDate/adjustableDate/dateAdjustmentsReference).
Comment: scheduledTerminationDate/adjustableDate/dateAdjustments or scheduledTerminationDate/adjustableDate/dateAdjustmentsReference must exist.
Test cases: [Valid] [Invalid]
cd-9 (Mandatory)
Context: ReferenceInformation (complex type)
[exists(referenceObligation/primaryObligorReference)]
The attribute @href of referenceObligation/primaryObligorReference = the @id attribute of referenceEntity.
Test cases: [Valid] [Invalid]
cd-10 (Mandatory)
Context: ReferenceInformation (complex type)
[exists(referenceObligation/guarantorReference)]
The attribute @href of referenceObligation/guarantorReference = the @id attribute of referenceEntity.
Test cases: [Valid] [Invalid]
cd-11 (Mandatory)
Context: ReferenceInformation (complex type)
[LongForm] [ISDA2003]
exists(allGuarantees).
Comment: allGuarantees must exist.
Test cases: [Valid] [Invalid]
cd-12 (Mandatory)
Context: ReferenceInformation (complex type)
[exists(referencePrice)]
referencePrice >= 0.
Test cases: [Valid] [Valid] [Invalid]
cd-13 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(protectionTerms/creditEvents/creditEventNotice/notifyingParty/buyerPartyReference)]
The @href attribute of protectionTerms/creditEvents/creditEventNotice/notifyingParty/buyerPartyReference = the @href attribute of generalTerms/buyerPartyReference.
Test cases: [Valid] [Invalid]
cd-14 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(protectionTerms/creditEvents/creditEventNotice/notifyingParty/sellerPartyReference)]
The @href attribute of protectionTerms/creditEvents/creditEventNotice/notifyingParty/sellerPartyReference = the @href attribute of generalTerms/sellerPartyReference.
Test cases: [Valid] [Invalid]
cd-15 (Mandatory)
Context: CreditDefaultSwap (complex type)
[count(generalTerms/referenceInformation/referenceObligation)=1] [exists(cashSettlementTerms/valuationDate/singleValuationDate)]
cashSettlementTerms/valuationMethod = ("Market", "Highest").
Comment: The value of cashSettlementTerms/valuationMethod = "Market" or "Highest".
Test cases: [Valid] [Valid] [Invalid]
cd-16 (Mandatory)
Context: CreditDefaultSwap (complex type)
[count(generalTerms/referenceInformation/referenceObligation)=1] [exists(cashSettlementTerms/valuationDate/multipleValuationDates)]
cashSettlementTerms/valuationMethod = ("AverageMarket", "Highest", "AverageHighest").
Comment: The value of cashSettlementTerms/valuationMethod = "AverageMarket", "Highest", or "AverageHighest".
Test cases: [Valid] [Invalid]
cd-17 (Mandatory)
Context: CreditDefaultSwap (complex type)
[count(generalTerms/referenceInformation/referenceObligation)>1] [exists(cashSettlementTerms/valuationDate/singleValuationDate)]
cashSettlementTerms/valuationMethod = ("BlendedMarket", "BlendedHighest").
Comment: The value of cashSettlementTerms/valuationMethod = "BlendedMarket" or "BlendedHighest".
Test cases: [Valid] [Invalid]
cd-18 (Mandatory)
Context: CreditDefaultSwap (complex type)
[there is more than one generalTerms/referenceInformation/referenceObligation] [exists(cashSettlementTerms/valuationDate/multipleValuationDates)]
cashSettlementTerms/valuationMethod = ("AverageBlendedMarket", "AverageBlendedHighest").
Comment: The value of cashSettlementTerms/valuationMethod = "AverageBlendedMarket" or "AverageBlendedHighest".
Test cases: [Valid] [Valid] [Invalid]
cd-19 (Mandatory)
Context: CreditDefaultSwap (complex type)
[ISDA1999]
not(exists(protectionTerms/creditEvents/creditEventNotice/businessCenter)) and not(exists(protectionTerms/creditEvents/restructuring/multipleHolderObligation)) and not(exists(protectionTerms/creditEvents/restructuring/multipleCreditEventNotices)) and not(exists(generalTerms/referenceInformation/allGuarantees)) and not(exists(generalTerms/indexReferenceInformation)) and not(exists(generalTerms/substitution)) and not(exists(generalTerms/modifiedEquityDelivery)).
Comment: The following elements must not exist: 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] [Invalid] [Invalid] [Invalid]
cd-20 (Mandatory)
Context: CreditDefaultSwap (complex type)
[ISDA2003]
not(exists(protectionTerms/obligations/notContingent)).
Comment: protectionTerms/obligations/notContingent must not exist.
Test cases: [Valid] [Invalid]
cd-21 (Mandatory)
Context: CreditDefaultSwap (complex type)
[ShortForm] [SingleName]
not(exists(cashSettlementTerms)) and not(exists(physicalSettlementTerms)) and not(exists(feeLeg/periodicPayment/fixedAmountCalculation/calculationAmount)) and not(exists(feeLeg/periodicPayment/fixedAmountCalculation/dayCountFraction)) and not(exists(protectionTerms/obligations)) and not(exists(generalTerms/referenceInformation/allGuarantees)) and not(exists(generalTerms/referenceInformation/referencePrice)) and not(exists(generalTerms/effectiveDate/dateAdjustments)) and not(exists(generalTerms/effectiveDate/dateAdjustmentsReference)) and not(exists(generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustments)) and not(exists(generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustmentsReference)) and not(exists(generalTerms/dateAdjustments)).
Comment: The following elements must not exist: 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)
Context: CreditDefaultSwap (complex type)
[ShortForm] [CreditIndex]
not(exists(cashSettlementTerms)) and not(exists(physicalSettlementTerms)) and not(exists(feeLeg/periodicPayment/fixedAmountCalculation/calculationAmount)) and not(exists(feeLeg/periodicPayment/fixedAmountCalculation/dayCountFraction)) and not(exists(protectionTerms/obligations)) and not(exists(generalTerms/effectiveDate/dateAdjustments)) and not(exists(generalTerms/effectiveDate/dateAdjustmentsReference)) and not(exists(generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustments)) and not(exists(generalTerms/scheduledTerminationDate/adjustableDate/dateAdjustmentsReference)) and not(exists(generalTerms/dateAdjustments)) and not(exists(protectionTerms/creditEvents)).
Comment: The following elements must not exist: 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)
Context: CreditDefaultSwap (complex type)
[ShortForm]
not(exists(protectionTerms/creditEvents/bankruptcy)) and not(exists(protectionTerms/creditEvents/failureToPay)) and not(exists(protectionTerms/creditEvents/repudiationMoratorium)) and not(exists(protectionTerms/creditEvents/obligationDefault)) and not(exists(protectionTerms/creditEvents/obligationAcceleration)).
Comment: protectionTerms/creditEvents/bankruptcy, protectionTerms/creditEvents/failureToPay, protectionTerms/creditEvents/repudiationMoratorium, protectionTerms/creditEvents/obligationDefault, protectionTerms/creditEvents/obligationAcceleration.
Test cases: [Valid] [Invalid]
cd-23 (Mandatory)
Context: CreditDefaultSwap (complex type)
[LongForm]
exists(cashSettlementTerms) or exists(physicalSettlementTerms).
Comment: cashSettlementTerms or physicalSettlementTerms must exist.
Test cases: [Valid] [Valid] [Valid] [Invalid]
cd-24 (Mandatory)
Context: CreditDefaultSwap (complex type)
[LongForm]
exists(protectionTerms/creditEvents/creditEventNotice) and exists(protectionTerms/obligations) and exists(generalTerms/referenceInformation/referencePrice).
Comment: The following elements must exist: protectionTerms/creditEvents/creditEventNotice, protectionTerms/obligations, generalTerms/referenceInformation/referencePrice.
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
cd-25 (Mandatory)
Context: CreditDefaultSwap (complex type)
[LongForm] [exists(physicalSettlementTerms)]
physicalSettlementTerms must contain settlementCurrency, physicalSettlementPeriod, escrow and deliverableObligations/accruedInterest.
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
cd-26 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(feeLeg/singlePayment/adjustablePaymentDate)]
feeLeg/singlePayment/adjustablePaymentDate > generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-27 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(feeLeg/singlePayment/adjustablePaymentDate)] [exists(generalTerms/scheduledTerminationDate/adjustableDate)]
feeLeg/singlePayment/adjustablePaymentDate < generalTerms/scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-28 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(feeLeg/periodicPayment/firstPaymentDate)]
feeLeg/periodicPayment/firstPaymentDate > generalTerms/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid]
cd-29 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(feeLeg/periodicPayment/firstPaymentDate)] [exists(generalTerms/scheduledTerminationDate/adjustableDate)]
feeLeg/periodicPayment/firstPaymentDate < generalTerms/scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid]
cd-30 (Mandatory)
Context: CreditDefaultSwap (complex type)
[exists(feeLeg/periodicPayment/lastRegularPaymentDate)] [exists(generalTerms/scheduledTerminationDate/adjustableDate)]
feeLeg/periodicPayment/lastRegularPaymentDate < generalTerms/scheduledTerminationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-31 (Mandatory)
Context: PeriodicPayment (complex type)
[exists(firstPaymentDate)] [exists(lastRegularPaymentDate)]
firstPaymentDate < lastRegularPaymentDate.
Test cases: [Valid] [Invalid] [Invalid]
cd-32 (Mandatory)
Context: PeriodicPayment (complex type)
[LongForm] [exists(fixedAmountCalculation/calculationAmount)]
exists(fixedAmountCalculation/dayCountFraction).
Comment: fixedAmountCalculation/dayCountFraction must exist.
Test cases: [Valid] [Invalid] [Invalid]
cd-33 (Mandatory)
Context: PeriodicPayment (complex type)
[exists(firstPaymentDate)] [exists(lastRegularPaymentDate)]
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]
cd-34 (Mandatory)
Context: DeliverableObligations (complex type)
[category = "ReferenceObligationsOnly"]
No other elements may be contained in the deliverable obligations element.
Test cases: [Valid] [Invalid]
cd-35 (Mandatory)
Context: CreditEvents (complex type)
At least one child element must exist.
Test cases: [Valid] [Invalid]
cd-36 (Mandatory)
Context: PubliclyAvailableInformation (complex type)
exists(standardPublicSources) or count(publicSource) > 1.
Comment: Either standardPublicSources or at least one publicSource element must exist.
Test cases: [Valid] [Valid] [Invalid]
cd-37 (Mandatory)
Context: CashSettlementTerms (complex type)
[quotationAmount] [minimumQuotationAmount] [same-currency((quotationAmount,minimumQuotationAmount))]
quotationAmount/amount >= minimumQuotationAmount/amount.
Test cases: [Valid] [Valid] [Invalid]
cd-38 (Mandatory)
Context: ReferencePool (complex type)
sum(referencePoolItem/constituentWeight/basketPercentage) = 1 or not(exists(referencePoolItem/constituentWeight)).
Comment: The sum of referencePoolItem/constituentWeight/basketPercentage = 1 or no referencePoolItem/constituentWeight exists.
Test cases: [Invalid]
cd-39 (Mandatory)
Context: BasketReferenceInformation (complex type)
[exists(nthToDefault)] [exists(mthToDefault)]
nthToDefault < mthToDefault.
Test cases: [Invalid]
cd-40 (Mandatory)
Context: Tranche (complex type)
attachmentPoint <= exhaustionPoint.
Test cases: [Invalid]
cd-41 (Mandatory)
Context: GeneralTerms (complex type)
[not(exists(indexReferenceInformation/tranche))]
not(exists(modifiedEquityDelivery)).
Comment: modifiedEquityDelivery must not exist.
Test cases: [Invalid]
cd-42 (Mandatory)
Context: GeneralTerms (complex type)
[not(exists(basketReferenceInformation))]
not(exists(substitution)).
Comment: substitution must not exist.
Test cases: [Invalid]
cd-43 (Mandatory)
Context: CreditDefaultSwap (complex type)
[SingleName] [exists(feeLeg/initialPayment)]
feeLeg/initialPayment/payerPartyReference/@href = generalTerms/sellerPartyReference/@href and feeLeg/initialPayment/receiverPartyReference/@href = generalTerms/buyerPartyReference/@href
Test cases: [Invalid] [Invalid]
cd-44 (Mandatory)
Context: ReferencePool (complex type)
All referencePoolItem/constituentWeight must have the same name of child element.
Test cases: [Invalid]

Deprecated rules

cd-3 (Mandatory)
DEPRECATED: The content of documentation/contractualSupplement must not begin with the string "ISDA2003Credit". Rationale for deprecation: the rule has been replaced by the reference rule number 3b (cd-3b).
Test cases: [Valid] [Invalid]
cd-4 (Mandatory)
DEPRECATED: Every documentation/contractualSupplement must not begin with the string "ISDA1999Credit". Rationale for deprecation: the rule has been replaced by the reference rule number 4b (cd-4b).
Test cases: [Valid] [Invalid]

Removed rules