FpML 4.4 Validation Rules - Rules for Interest Rate Derivatives (IRD)

This is the Interest Rate Derivatives part of the validation rule set accompanying the FpML 4.4 Last Call Working Draft. The introductory section in the draft 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. These test cases have been analysed using Systemwire's xlinkit rule engine to highlight relevant document portions accessed by a rule. The cut down test cases are non-normative and are provided for the purpose of documentation only.

Content

Namespace

http://www.fpml.org/spec/fpml-4-4-5-lcwd-1

Definitions

Term: regular period
The regular period of a set of calculation period dates is the period between a start date and an end date. The start date is firstRegularPeriodStartDate, if present, or effectiveDate/unadjustedDate otherwise. The end date is lastRegularPeriodEndDate, if present, or terminationDate/unadjustedDate otherwise.
Term: frequency equivalence
A frequency is specified as a tuple of period, which is an integer, and periodMultiplier, which is one of D, M, Y, W or T, standing for day, month, year, week and term. Between any pair of frequencies, the following is the complete list of equivalences where the period multipliers differ: If the period multipliers of a pair of frequencies are equivalent, then they are equal if and only if the period elements are equal. For the purpose of calculating multiples of periods, the following additional rule holds:
Term: unadjusted calculation period dates
This applies in the context of an InterestRateStream. For the purpose of validation, the unadjusted calculation period dates are determined as follows:
Term: the schedule implied by
The schedule defined by the effective- and termination-Date, together with the "RegularPeriod" dates which may appear optionally in the presence of stubs, and the calculation period frequency.

Preconditions

The Validation Preconditions only apply when specific rules reference them. 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: isParametric
(context: InterestRateStream) If cashflows is not present , or cashflows/cashflowsMatchParameters contains true.

Rules

Unique contexts:

Context: InterestRateStream (complex type)

ird-1 (Mandatory)
resetDates must be present if and only if a floatingRateCalculation or inflationRateCalculation is present in the calculationPeriodAmount/calculation element.
Test cases: [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-2 (Mandatory)
Preconditions: isParametric
paymentDates/paymentFrequency must be an integer multiple (could be 1) of calculationPeriodDates/calculationPeriodFrequency. See also: frequency equivalence.
Test cases: [Valid] [Valid] [Valid] [Invalid] [Invalid]
ird-3 (Mandatory)
Preconditions: isParametric
paymentDates/firstPaymentDate must match one of the unadjusted calculation period dates.
Test cases: [Valid] [Valid] [Valid] [Invalid] [Invalid] [Invalid]
ird-4 (Mandatory)
Preconditions: isParametric
paymentDates/lastRegularPaymentDate must match one of the unadjusted calculation period dates
Test cases: [Valid] [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-5 (Mandatory)
Preconditions: isParametric
The frequency in calculationPeriodDates/calculationPeriodFrequency must be an integer multiple of the frequency in resetDates/resetFrequency. See also: frequency equivalence
Test cases: [Valid] [Valid] [Invalid] [Invalid]
ird-6 (Mandatory)
Preconditions: isParametric
paymentDates/firstPaymentDate > calculationPeriodDates/effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid]
ird-7 (Mandatory)
Preconditions: isParametric
calculationPeriodAmount/calculation/compoundingMethod exists if and only if the frequencies in paymentDates/paymentFrequency and calculationPeriodDates/calculationPeriodFrequency are different. See also: frequency equivalence.
Test cases: [Valid] [Valid] [Invalid] [Invalid]
ird-8 (Mandatory)
payerPartyReference/@href and receiverPartyReference/@href must not be the same.
Test cases: [Valid] [Invalid]
ird-9 (Mandatory)
calculationPeriodAmount/calculation/compoundingMethod can only be present if a resetDates element exists.
Test cases: [Valid] [Invalid]
ird-50 (Mandatory)
Preconditions: isParametric
The dates in calculationPeriodAmount/calculation/notionalSchedule/notionalStepSchedule/step/stepDate must be unadjusted calculation period dates in the schedule implied by calculationPeriodDates.
Comment: The rule states that stepDates must be unadjusted period dates in calculationPeriodDates - but the only explicit dates in calculationPeriodDates are the effective- and termination-Date, together with the "RegularPeriod" dates which may appear optionally in the presence of stubs. These dates, in conjunction with the calculation period frequency, imply a schedule of unadjusted period dates; it is this implied schedule which the values of notionalStepSchedule//stepDate must match.
Test cases: [Valid] [Valid] [Invalid] [Invalid] [Invalid]
ird-51 (Mandatory)
Preconditions: isParametric
The dates in calculationPeriodAmount/calculation/notionalSchedule/fixedRateSchedule/step/stepDate must be unadjusted calculation period dates in the schedule implied by calculationPeriodDates.
Comment: The rule states that stepDates must be unadjusted period dates in calculationPeriodDates - but the only explicit dates in calculationPeriodDates are the effective- and termination-Date, together with the "RegularPeriod" dates which may appear optionally in the presence of stubs. These dates, in conjunction with the calculation period frequency, imply a schedule of unadjusted period dates; it is this implied schedule which the values of fixedRateSchedule//stepDate must match.
Test cases: [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-52 (Mandatory)
Preconditions: isParametric
The dates in calculationPeriodAmount/calculation/floatingRateCalculation/capRateSchedule/step/stepDate must be unadjusted calculation period dates in the schedule implied by calculationPeriodDates.
Comment: The rule states that stepDates must be unadjusted period dates in calculationPeriodDates - but the only explicit dates in calculationPeriodDates are the effective- and termination-Date, together with the "RegularPeriod" dates which may appear optionally in the presence of stubs. These dates, in conjunction with the calculation period frequency, imply a schedule of unadjusted period dates; it is this implied schedule which the values of capRateSchedule//stepDate must match.
Test cases: [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-53 (Mandatory)
Preconditions: isParametric
The dates in calculationPeriodAmount/calculation/floatingRateCalculation/floorRateSchedule/step/stepDate must be unadjusted calculation period dates in the schedule implied by calculationPeriodDates.
Comment: The rule states that stepDates must be unadjusted period dates in calculationPeriodDates - but the only explicit dates in calculationPeriodDates are the effective- and termination-Date, together with the "RegularPeriod" dates which may appear optionally in the presence of stubs. These dates, in conjunction with the calculation period frequency, imply a schedule of unadjusted period dates; it is this implied schedule which the values of floorRateSchedule//stepDate must match.
Test cases: [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-54 (Mandatory)
Preconditions: isParametric
The dates in calculationPeriodAmount/knownAmountSchedule/step/stepDate must be unadjusted calculation period dates in the schedule implied by calculationPeriodDates.
Comment: The rule states that stepDates must be unadjusted period dates in calculationPeriodDates - but the only explicit dates in calculationPeriodDates are the effective- and termination-Date, together with the "RegularPeriod" dates which may appear optionally in the presence of stubs. These dates, in conjunction with the calculation period frequency, imply a schedule of unadjusted period dates; it is this implied schedule which the values of knownAmountSchedule//stepDate must match.
Test cases: [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]

Context: CalculationPeriodDates (complex type)

ird-10 (Mandatory)
Preconditions: isParametric
This rule applies when calculationPeriodFrequency/rollConvention is a number. Let the start date be firstRegularPeriodStartDate if it exists, or effectiveDate/unadjustedDate otherwise: If calculationPeriodFrequency/rollConvention is less than or equal to the last day of the month in the start date, then the day of the start date must match it. Otherwise the day of the start date must be the last day of the month of that date.
Test cases: [Valid] [Valid] [Valid] [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-11 (Mandatory)
Preconditions: isParametric
This rule applies when calculationPeriodFrequency/rollConvention is a number. Let the end date be lastRegularPeriodEndDate if it exists, or terminationDate/unadjustedDate otherwise: If calculationPeriodFrequency/rollConvention is less than or equal to the last day of the month in the end date, then the day of the end date must match it. Otherwise the day of the end date must be the last day of the month of that date.
Test cases: [Valid] [Valid] [Valid] [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-12 (Mandatory)
Preconditions: isParametric
The frequency specified in calculationPeriodFrequency must divide the regular period precisely. This means that by stepping through the period from the start date at the specified frequency, it must be possible to reach the end date.
Test cases: [Valid] [Valid] [Valid] [Valid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid]
ird-14 (Mandatory)
Preconditions: isParametric
terminationDate/unadjustedDate > effectiveDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
ird-15 (Mandatory)
Preconditions: isParametric
terminationDate/unadjustedDate > firstPeriodStartDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
ird-16 (Mandatory)
Preconditions: isParametric
terminationDate/unadjustedDate > firstRegularPeriodStartDate.
Test cases: [Valid] [Invalid] [Invalid]
ird-17 (Mandatory)
Preconditions: isParametric
terminationDate/unadjustedDate > lastRegularPeriodEndDate.
Test cases: [Valid] [Invalid]
ird-18 (Mandatory)
Preconditions: isParametric
lastRegularPeriodEndDate > firstRegularPeriodStartDate.
Test cases: [Valid] [Invalid] [Invalid]
ird-19 (Mandatory)
Preconditions: isParametric
lastRegularPeriodEndDate > firstPeriodStartDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
ird-20 (Mandatory)
Preconditions: isParametric
lastRegularPeriodEndDate > effectiveDate/unadjustedDate
Test cases: [Valid] [Invalid]
ird-21 (Mandatory)
Preconditions: isParametric
firstPeriodStartDate/unadjustedDate < effectiveDate/unadjustedDate
Test cases: [Valid] [Invalid] [Invalid]
ird-22 (Mandatory)
Preconditions: isParametric
firstPeriodStartDate/unadjustedDate < firstRegularPeriodStartDate
Test cases: [Valid] [Invalid] [Invalid]
ird-57 (Mandatory)
Preconditions: isParametric
If rollConvention is neither NONE nor SFE, nor a day of the week ( MON, TUE, WED, THU, FRI, SAT or SUN) then the period must be M or Y.
Test cases: [Valid] [Valid] [Valid] [Valid] [Invalid]
ird-58 (Mandatory)
Preconditions: isParametric
If rollConvention is a day of the week ( MON, TUE, WED, THU, FRI, SAT or SUN) then the period must be W.
Test cases: [Valid] [Valid] [Valid] [Valid] [Invalid]

Context: StubCalculationPeriodAmount (complex type)

ird-23 (Mandatory)
initialStub should only be present if the calculationPeriodDates element referenced by calculationPeriodDates/@href contains at least one of:
Test cases: [Valid] [Valid] [Invalid]
ird-24 (Mandatory)
finalStub should only be present if the calculationPeriodDates element referenced by calculationPeriodDates/@href contains a lastRegularPeriodEndDate element.
Test cases: [Valid] [Invalid]
ird-38 (Mandatory)
DEPRECATED: Context: StubCalculationPeriodAmount; Description: Either initialStub or finalStub must be present. Rationale for deprecation: the rule has been replaced by a schema constraint.
Test cases: [Valid] [Valid] [Valid] [Invalid]

Context: Schedule (complex type)

ird-25 (Mandatory)
If there are no step elements then initialValue must be non-zero.
Test cases: [Valid] [Valid] [Invalid]

Context: BusinessCentersReference (complex type)

ird-26 (Mandatory)
The @href attribute must match the @id attribute of a businessCenters element somewhere within the document.
Test cases: [Valid] [Valid] [Invalid] [Invalid]

Context: MandatoryEarlyTermination (complex type)

ird-27 (Mandatory)
cashSettlement/cashSettlementPaymentDate must not be present.
Test cases: [Valid] [Invalid]
ird-28 (Mandatory)
In cashSettlement/cashSettlementValuationDate/dateRelativeTo, the @href attribute must point to the @id attribute of mandatoryEarlyTerminationDate.
Test cases: [Valid] [Invalid]

Context: Calculation (complex type)

ird-29 (Mandatory)
If compoundingMethod exists then fixedRateSchedule must not be present.
Test cases: [Valid] [Invalid]

Context: CalculationPeriod (complex type)

ird-30 (Mandatory)
Must contain unadjustedStartDate and/or adjustedStartDate.
Test cases: [Valid] [Valid] [Invalid]
ird-31 (Mandatory)
Must contain unadjustedEndDate and/or adjustedEndDate.
Test cases: [Valid] [Valid] [Invalid]

Context: Discounting (complex type)

ird-32 (Mandatory)
DEPRECATED: Context: Discounting; Description: If discountRate is absent then discountRateDayCountFraction must also be absent. Rationale for deprecation: the rule has been replaced by a schema constraint.
Test cases: [Valid] [Valid] [Invalid]

Context: Fra (complex type)

ird-33 (Mandatory)
adjustedTerminationDate> adjustedEffectiveDate.
Test cases: [Valid] [Invalid]

Context: PaymentCalculationPeriod (complex type)

ird-34 (Mandatory)
Either unadjustedPaymentDate or adjustedPaymentDate must be present.
Test cases: [Valid] [Valid] [Invalid]

Context: PaymentDates (complex type)

ird-35 (Mandatory)
If firstPaymentDate exists and lastRegularPaymentDate exists, then firstPaymentDate < lastRegularPaymentDate.
Test cases: [Valid] [Invalid] [Invalid]
ird-36 (Mandatory)
If both firstPaymentDate and lastRegularPaymentDate are present then the period defined by these dates must be an integer multiple of paymentFrequency.
Test cases: [Valid] [Invalid]
ird-55 (Mandatory)
If calculationPeriodDatesReference exists, the @href attribute must point to the @id attribute of calculationPeriodDates in the same swapStream.
Test cases: [Valid] [Invalid]
ird-56 (Mandatory)
If resetDatesReference exists, the @href attribute must point to the @id attribute of resetDates in the same swapStream.
Test cases: [Valid] [Invalid]

Context: EarlyTerminationEvent (complex type)

ird-39 (Mandatory)
adjustedExerciseDate <= adjustedEarlyTerminationDate
Test cases: [Valid] [Valid] [Invalid]
ird-40 (Mandatory)
adjustedExerciseDate <= adjustedCashSettlementValuationDate
Test cases: [Valid] [Valid] [Invalid]
ird-41 (Mandatory)
adjustedCashSettlementValuationDate <= adjustedCashSettlementPaymentDate
Test cases: [Valid] [Valid] [Invalid]

Context: ExtensionEvent (complex type)

ird-42 (Mandatory)
adjustedExerciseDate < adjustedExtendedTerminationDate
Test cases: [Valid] [Invalid] [Invalid]

Context: FxLinkedNotionalAmount (complex type)

ird-43 (Mandatory)
At least one element must be present
Test cases: [Valid] [Invalid]

Context: MandatoryEarlyTerminationAdjustedDates (complex type)

ird-44 (Mandatory)
adjustedEarlyTerminationDate <= adjustedCashSettlementValuationDate <= adjustedCashSettlementPaymentDate
Test cases: [Valid] [Invalid] [Invalid] [Invalid] [Invalid] [Invalid]

Context: OptionalEarlyTermination (complex type)

ird-46 (Mandatory)
If cashSettlement/cashSettlementValuationDate/relativeDate/dateRelativeTo is present, cashSettlement/cashSettlementValuationDate/dateRelativeTo/@href attribute must point to the @id attribute of cashSettlement/cashSettlementPaymentDate.
Test cases: [Valid] [Invalid]
ird-47 (Mandatory)
If cashSettlement/cashSettlementPaymentDate/relativeDate/dateRelativeTo is present, cashSettlement/cashSettlementPaymentDate/relativeDate/dateRelativeTo/@href attribute must point to the @id attribute of americanExercise, bermudaExercise or europeanExercise, whichever one exists.
Test cases: [Valid] [Invalid]

Context: Swaption (complex type)

ird-48 (Mandatory)
In cashSettlement/cashSettlementPaymentDate/relativeDate/dateRelativeTo, the @href attribute must point to the @id attribute of americanExercise, bermudaExercise or europeanExercise, whichever one exists.
Test cases: [Valid] [Invalid]

Context: ResetFrequency (complex type)

ird-49 (Mandatory)
weeklyRollConventionshould be present if and only if the period is W
Test cases: [Valid] [Valid] [Invalid] [Invalid]

Context: ResetDates (complex type)

ird-59 (Mandatory)
In calculationPeriodDatesReference, the @href attribute must point to the @id attribute of calculationPeriodDates in the same swapStream.

Deprecated rules

ird-32 (Mandatory)
DEPRECATED: Context: Discounting; Description: If discountRate is absent then discountRateDayCountFraction must also be absent. Rationale for deprecation: the rule has been replaced by a schema constraint.
Test cases: [Valid] [Valid] [Invalid]
ird-38 (Mandatory)
DEPRECATED: Context: StubCalculationPeriodAmount; Description: Either initialStub or finalStub must be present. Rationale for deprecation: the rule has been replaced by a schema constraint.
Test cases: [Valid] [Valid] [Valid] [Invalid]

Removed rules