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 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-4-wd-3
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:
- Any frequency > 0 is a multiple of 1D
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:
-
cashflows element not present: the unadjusted calculation period dates are calculated by stepping through the regular period at the frequency specified in calculationPeriodDates/calculationPeriodFrequency. The first date is the start date of the regular period and the last date is the end date of the regular period.
-
cashflows element exists and cashflowsMatchParameters is true: the unadjusted calculation period dates are calculated from the regular period as in the previous case.
-
cashflows element exists and cashflowsMatchParameters is false: rules that relate elements to unadjusted calculation period dates do not apply. Instead, the cash flows must be validated internally.
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.
ird-2 (Mandatory)
paymentDates/paymentFrequency must be an integer multiple (could be 1) of
calculationPeriodDates/calculationPeriodFrequency. See also:
frequency equivalence.
ird-5 (Mandatory)
The frequency in
calculationPeriodDates/calculationPeriodFrequencymust be an integer multiple of the frequency in
resetDates/resetFrequency. See also:
frequency equivalence
ird-6 (Mandatory)
paymentDates/firstPaymentDate > calculationPeriodDates/effectiveDate/unadjustedDate.
ird-7 (Mandatory)
calculationPeriodAmount/calculation/compoundingMethod exists if and only if the frequencies in
paymentDates/paymentFrequency and
calculationPeriodDates/calculationPeriodFrequency are different. See also:
frequency equivalence.
ird-8 (Mandatory)
payerPartyReference/@href and receiverPartyReference/@href must not be the same.
ird-9 (Mandatory)
calculationPeriodAmount/calculation/compoundingMethod can only be present if a resetDates element exists.
Context:
calculationPeriodDates
ird-10 (Mandatory)
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.
ird-11 (Mandatory)
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.
ird-12 (Mandatory)
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.
ird-14 (Mandatory)
terminationDate/unadjustedDate > effectiveDate/unadjustedDate.
ird-15 (Mandatory)
terminationDate/unadjustedDate > firstPeriodStartDate/unadjustedDate.
ird-16 (Mandatory)
terminationDate/unadjustedDate > firstRegularPeriodStartDate.
ird-17 (Mandatory)
terminationDate/unadjustedDate > lastRegularPeriodEndDate.
ird-18 (Mandatory)
lastRegularPeriodEndDate > firstRegularPeriodStartDate.
ird-19 (Mandatory)
lastRegularPeriodEndDate > firstPeriodStartDate/unadjustedDate.
ird-20 (Mandatory)
lastRegularPeriodEndDate > effectiveDate/unadjustedDate
ird-21 (Mandatory)
firstPeriodStartDate/unadjustedDate < effectiveDate/unadjustedDate
ird-22 (Mandatory)
firstPeriodStartDate/unadjustedDate < firstRegularPeriodStartDate
ird-57 (Mandatory)
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.
ird-58 (Mandatory)
If rollConvention is a day of the week ( MON, TUE, WED, THU, FRI, SAT or SUN) then the period must be W.
Context:
stubCalculationPeriodAmount
ird-23 (Mandatory)
initialStub should only be present if the
calculationPeriodDates element referenced by
calculationPeriodDates/@href contains at least one of:
-
firstPeriodStartDate
-
firstRegularPeriodStartDate
ird-24 (Mandatory)
finalStub should only be present if the calculationPeriodDates element referenced by calculationPeriodDates/@href contains a lastRegularPeriodEndDate element.
Context:
Schedule (complex type)
ird-25 (Mandatory)
If there are no step elements then initialValue must be non-zero.
Context:
businessCentersReference
ird-26 (Mandatory)
The @href attribute must match the @id attribute of a businessCenters element somewhere within the document.
Context:
MandatoryEarlyTermination (complex type)
ird-27 (Mandatory)
cashSettlement/cashSettlementPaymentDate must not be present.
ird-28 (Mandatory)
In cashSettlement/cashSettlementValuationDate/dateRelativeTo, the @href attribute must point to the @id attribute of mandatoryEarlyTerminationDate.
Context:
Calculation (complex type)
ird-29 (Mandatory)
If compoundingMethod exists then fixedRateSchedule must not be present.
Context:
CalculationPeriod (complex type)
ird-30 (Mandatory)
Must contain unadjustedStartDate and/or adjustedStartDate.
ird-31 (Mandatory)
Must contain unadjustedEndDate and/or adjustedEndDate.
Context:
Discounting (complex type)
ird-32 (Mandatory)
If discountRate is absent then discountRateDayCountFraction must also be absent.
Context:
Fra (complex type)
ird-33 (Mandatory)
adjustedTerminationDate> adjustedEffectiveDate.
Context:
PaymentCalculationPeriod (complex type)
ird-34 (Mandatory)
Either unadjustedPaymentDate or adjustedPaymentDate must be present.
Context:
PaymentDates (complex type)
ird-35 (Mandatory)
firstPaymentDate < lastRegularPaymentDate.
ird-36 (Mandatory)
If both firstPaymentDate and lastRegularPaymentDate are present then the period defined by these dates must be an integer multiple of paymentFrequency.
Context:
StubCalculationPeriodAmount (complex type)
ird-38 (Mandatory)
Either initialStub or finalStub must be present.
Context:
EarlyTerminationEvent (complex type)
ird-39 (Mandatory)
adjustedExerciseDate <= adjustedEarlyTerminationDate
ird-40 (Mandatory)
adjustedExerciseDate <= adjustedCashSettlementValuationDate
ird-41 (Mandatory)
adjustedCashSettlementValuationDate <= adjustedCashSettlementPaymentDate
Context:
ExtensionEvent (complex type)
ird-42 (Mandatory)
adjustedExerciseDate < adjustedExtendedTerminationDate
Context:
FxLinkedNotionalAmount (complex type)
ird-43 (Mandatory)
At least one element must be present
Context:
MandatoryEarlyTerminationAdjustedDates (complex type)
ird-44 (Mandatory)
adjustedEarlyTerminationDate <= adjustedCashSettlementValuationDate <= adjustedCashSettlementPaymentDate
Context:
OptionalEarlyTermination (complex type)
ird-46 (Mandatory)
In cashSettlement/cashSettlementValuationDate/dateRelativeTo, the @href attribute must point to the @id attribute of cashSettlement/cashSettlementPaymentDate.
ird-47 (Mandatory)
In cashSettlement/cashSettlementPaymentDate/relativeDate/dateRelativeTo, the @href attribute must point to the @id attribute of americanExercise, bermudaExercise or europeanExercise, whichever one exists.
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.
Context:
ResetFrequency (complex type)
ird-49 (Mandatory)
weeklyRollConventionshould be present if and only if the period is W
Context:
notionalStepSchedule
Context:
fixedRateSchedule
Context:
capRateSchedule
Context:
floorRateSchedule
Context:
knownAmountSchedule
Context:
paymentDates
ird-55 (Mandatory)
If calculationPeriodDatesReference exists, the @href attribute must point to the @id attribute of calculationPeriodDates in the same swapStream.
ird-56 (Mandatory)
If resetDatesReference exists, the @href attribute must point to the @id attribute of resetDates in the same swapStream.
Context:
resetDates
ird-59 (Mandatory)
In calculationPeriodDatesReference, the @href attribute must point to the @id attribute of calculationPeriodDates in the same swapStream.
Deprecated rules
Removed rules