FpML 4.5 Validation Rules - Rules for Interest Rate Derivatives (IRD)
This is the Interest Rate Derivatives part of the validation rule set accompanying the FpML 4.5 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
default element namespace = http://www.fpml.org/2008/FpML-4-5
namespace xs = http://www.w3.org/2001/XMLSchema
Definitions
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:
iff(
period elements are equal, If the period multipliers of a pair of frequencies are equivalent then they are equal). For the purpose
of calculating multiples of periods, the following additional rule holds:
- Any frequency gt 0 is a multiple of 1D
- 1T is a positive integer multiple (ge 1) of any frequency
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.
Term: the schedule implied byThe 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.
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: isFloating
(context: InterestRateStream)
resetDates exists.
Condition: hasInitialStub
(context: InterestRateStream)
paymentDates/firstPaymentDate exists.
Functions
The following shared functions are used in the rules.
Rules
Unique contexts:
ird-1 (Mandatory)
Context:
InterestRateStream (complex type)
English Description:
resetDates must exist if and only if a floatingRateCalculation or inflationRateCalculation exists in the calculationPeriodAmount/calculation element.
ird-2 (Mandatory)
Context:
InterestRateStream (complex type)
English Description:
paymentDates/paymentFrequency is equal to an integer multiple (could be 1) of
calculationPeriodDates/calculationPeriodFrequency. See also:
frequency equivalence
ird-3 (Mandatory)
Context:
InterestRateStream (complex type)
ird-4 (Mandatory)
Context:
InterestRateStream (complex type)
ird-5 (Mandatory)
Context:
InterestRateStream (complex type)
ird-6 (Mandatory)
Context:
InterestRateStream (complex type)
ird-7 (Mandatory)
Context:
InterestRateStream (complex type)
English Description:
calculationPeriodAmount/calculation/compoundingMethod exists if and only if the frequencies in paymentDates/paymentFrequency and calculationPeriodDates/calculationPeriodFrequency are different.
ird-8 (Mandatory)
Context:
InterestRateStream
ird-9 (Mandatory)
Context:
InterestRateStream (complex type)
ird-10 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-11 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-12 (Mandatory)
Context:
CalculationPeriodDates (complex type)
English Description:The frequency specified in
calculationPeriodFrequency must divide the
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)
Context:
CalculationPeriodDates (complex type)
ird-15 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-16 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-17 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-18 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-19 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-20 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-21 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-22 (Mandatory)
Context:
CalculationPeriodDates (complex type)
ird-23 (Mandatory)
Context:
StubCalculationPeriodAmount (complex type)
English Description:
initialStub exists if and only if the calculationPeriodDates element referenced by calculationPeriodDates/@href contains at least one of: firstPeriodStartDate, firstRegularPeriodStartDate
ird-24 (Mandatory)
Context:
StubCalculationPeriodAmount (complex type)
English Description:
finalStub exists if and only if the calculationPeriodDates element referenced by calculationPeriodDates/@href contains a lastRegularPeriodEndDate element.
ird-25 (Mandatory)
Context:
Schedule (complex type)
English Description:
initialValue not equal to zero.
ird-27 (Mandatory)
Context:
MandatoryEarlyTermination (complex type)
English Description:
cashSettlement/cashSettlementPaymentDate must not exist.
ird-29 (Mandatory)
Context:
Calculation (complex type)
English Description:
fixedRateSchedule must not exist.
ird-30 (Mandatory)
Context:
CalculationPeriod (complex type)
English Description:
unadjustedStartDate exists or adjustedStartDate exists.
ird-31 (Mandatory)
Context:
CalculationPeriod (complex type)
English Description:
unadjustedEndDate exists or adjustedEndDate exists.
ird-33 (Mandatory)
Context:
Fra (complex type)
ird-34 (Mandatory)
Context:
PaymentCalculationPeriod (complex type)
English Description:
Either unadjustedPaymentDate or adjustedPaymentDate must exist.
ird-35 (Mandatory)
Context:
PaymentDates (complex type)
ird-36 (Mandatory)
Context:
PaymentDates (complex type)
ird-39 (Mandatory)
Context:
EarlyTerminationEvent (complex type)
ird-40 (Mandatory)
Context:
EarlyTerminationEvent (complex type)
ird-41 (Mandatory)
Context:
EarlyTerminationEvent (complex type)
ird-42 (Mandatory)
Context:
ExtensionEvent (complex type)
ird-43 (Mandatory)
Context:
FxLinkedNotionalAmount (complex type)
English Description:
At least one element must exist.
ird-44 (Mandatory)
Context:
MandatoryEarlyTerminationAdjustedDates (complex type)
ird-46 (Mandatory)
Context:
OptionalEarlyTermination (complex type)
ird-47 (Mandatory)
Context:
OptionalEarlyTermination (complex type)
ird-48 (Mandatory)
Context:
Swaption (complex type)
ird-49 (Mandatory)
Context:
ResetFrequency (complex type)
English Description:
weeklyRollConvention should exist if and only if the period is "W".
ird-50 (Mandatory)
Context:
InterestRateStream (complex type)
ird-51 (Mandatory)
Context:
InterestRateStream (complex type)
ird-52 (Mandatory)
Context:
InterestRateStream (complex type)
ird-53 (Mandatory)
Context:
InterestRateStream (complex type)
ird-54 (Mandatory)
Context:
InterestRateStream (complex type)
ird-57 (Mandatory)
Context:
CalculationPeriodFrequency (complex type)
English Description:
When the period is "M" or "Y" the rollConvention cannot be a week day, "NONE" or "SFE".
ird-58 (Mandatory)
Context:
CalculationPeriodFrequency (complex type)
English Description:
When the period is "W" the rollConvention must be a week day, "SFE" or "NONE".
ird-59 (Mandatory)
Context:
ResetDates (complex type)
ird-60 (Mandatory)
Context:
CalculationPeriodFrequency (complex type)
English Description:
When the period is "T" the rollConvention must be "NONE".
Deprecated rules
ird-26 (Mandatory)
DEPRECATED:
Context: BusinessCentersReference; Description: The @href attribute must match the @id attribute of a businessCenters element somewhere within the document.
Rationale for deprecation: the rule has been replaced by the reference rule number 39 (ref-39)
ird-28 (Mandatory)
DEPRECATED:
Context: MandatoryEarlyTermination; Description: If cashSettlement/cashSettlementValuationDate exists, the cashSettlement/cashSettlementValuationDate/dateRelativeTo/@href attribute is equal to the mandatoryEarlyTerminationDate/@id attribute.
Rationale for deprecation: the rule has been replaced by the reference rule number 38 (ref-38)
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.
ird-38 (Mandatory)
DEPRECATED:
Context: StubCalculationPeriodAmount; Description: Either initialStub or finalStub must exist.
Rationale for deprecation: the rule has been replaced by a schema constraint.
ird-55 (Mandatory)
DEPRECATED:
Context: InterestRateStream
Description: The paymentDates/calculationPeriodDatesReference/@href attribute is equal to the calculationPeriodDates/@id attribute.
Rationale for deprecation: the rule is an uneeded subset of reference rule number 8 (ref-8)
ird-56 (Mandatory)
DEPRECATED:
Context: InterestRateStream;
Condition: [exists(paymentDates/resetDatesReference)] [exists(resetDates)];
Description: The paymentDates/resetDatesReference/@href attribute is equal to the resetDates/@id.
Rationale for deprecation: the rule is an uneeded subset of reference rule number 12 (ref-12)
Removed rules