FpML 4.2 Validation Rules - Rules for Interest Rate Derivatives (IRD)
This is the Interest Rate Derivatives part of the validation rule set
accompanying the FpML 4.2 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
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 is present and cashflowsMatchParameters is
true: the unadjusted calculation period dates are
calculated from the regular period as in the previous case.
-
cashflows element is present 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
Precondition: isParametric
The ancestor element of type InterestRateStream contains no cashflows
element, or cashflows/cashflowsMatchParameters contains
true.
Rules
Unique contexts:
Context:
InterestRateStream (data type)
ird-1 (Mandatory)
resetDates must be present if and only if a
floatingRateCalculation element 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 is present
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 is present.
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 (data 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 (data 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 (data type)
ird-29 (Mandatory)
If
compoundingMethod is present then
floatingRateCalculation must be present.
Context:
CalculationPeriod (data type)
ird-30 (Mandatory)
Must contain either
unadjustedStartDate or
adjustedStartDate.
ird-31 (Mandatory)
Must contain either
unadjustedEndDate or
adjustedEndDate.
Context:
Discounting (data type)
ird-32 (Mandatory)
If
discountRate is absent then
discountRateDayCountFraction must also be absent.
Context:
Fra (data type)
ird-33 (Mandatory)
adjustedTerminationDate>
adjustedEffectiveDate.
Context:
PaymentCalculationPeriod (data type)
ird-34 (Mandatory)
Either
unadjustedPaymentDate or
adjustedPaymentDate must be present.
Context:
PaymentDates (data 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 (data type)
ird-38 (Mandatory)
Either
initialStub or
finalStub must be present.
Context:
EarlyTerminationEvent (data type)
ird-39 (Mandatory)
adjustedExerciseDate <=
adjustedEarlyTerminationDate
ird-40 (Mandatory)
adjustedExerciseDate <=
adjustedCashSettlementValuationDate
ird-41 (Mandatory)
adjustedCashSettlementValuationDate <=
adjustedCashSettlementPaymentDate
Context:
ExtensionEvent (data type)
ird-42 (Mandatory)
adjustedExerciseDate <
adjustedExtendedTerminationDate
Context:
FxLinkedNotionalAmount (data type)
ird-43 (Mandatory)
At least one element must be present
Context:
MandatoryEarlyTerminationAdjustedDates (data type)
ird-44 (Mandatory)
adjustedEarlyTerminationDate <=
adjustedCashSettlementValuationDate <=
adjustedCashSettlementPaymentDate
Context:
OptionalEarlyTermination (data 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 is present.
Context:
Swaption (data 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 is present.
Context:
ResetFrequency (data 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 it shall match with
calculationPeriodDates in the nearest containing element of type
InterestRateStream
ird-56 (Mandatory)
If resetDatesReference exists then it shall match with resetDates
in the nearest containing element of type InterestRateStream.
Deprecated rules