FpML 4.4 Validation Rules - Rules for Equity Derivatives (EQD)

This is the Equity Derivatives part of the validation rule set accompanying the FpML 4.4 Recommendation. 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.

Additionally, an XQuery implementation of the validation rules is also provided. See the Reference Implementations section for details.

Content

Namespace

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

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: SameCurrency
All instances of currency values within the context of this rule must be identical.

Rules

Unique contexts:

Context: Trade (complex type)

eqd-2 (Mandatory)
//equityExercise/equityAmericanExercise/expirationDate/adjustableDate/unadjustedDate must be greater than or equal to tradeHeader/tradeDate.
Test cases: [Valid] [Invalid]
eqd-4 (Mandatory)
//equityExercise/equityBermudaExercise/commencementDate/adjustableDate/unadjustedDate must be greater than or equal to tradeHeader/tradeDate.
Test cases: [Valid] [Invalid]
eqd-12 (Mandatory)
//equityExercise/equityEuropeanExercise/expirationDate/adjustableDate/unadjustedDate must be greater than or equal to tradeHeader/tradeDate.
Test cases: [Valid] [Invalid]
eqd-13 (Mandatory)
If equityOption/equityPremium/paymentDate/unadjustedDate exists, it must be greater than or equal to tradeHeader/tradeDate.
Test cases: [Valid] [Invalid]
eqd-14 (Mandatory)
If brokerEquityOption/equityPremium/paymentDate/unadjustedDate exists, it must be greater than or equal to tradeHeader/tradeDate.
Test cases: [Valid] [Invalid]

Context: EquityAmericanExercise (complex type)

eqd-3 (Mandatory)
If latestExerciseTimeType is equal to SpecificTime then latestExerciseTime must exist.
Test cases: [Valid] [Invalid]

Context: EquityBermudaExercise (complex type)

eqd-6 (Mandatory)
If latestExerciseTimeType is equal to SpecificTime then latestExerciseTime must exist.
Test cases: [Valid] [Invalid]
eqd-7 (Mandatory)
DEPRECATED: Context: equityBermudaExercise; Description: The elements in bermudaExerciseDates/date should be in order, earliest date first. Rationale for deprecation: Enforcing that data should be in specific order is not permitted.
Test cases: [Valid] [Invalid]
eqd-8 (Mandatory)
All dates in bermudaExerciseDates/date must be greater than commencementDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid] [Invalid]
eqd-9 (Mandatory)
All dates in bermudaExerciseDates/date must be less than or equal to expirationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid]
eqd-10 (Mandatory)
The dates in bermudaExerciseDates/date must be unique.
Test cases: [Valid] [Invalid]

Context: EquityExerciseValuationSettlement (complex type)

eqd-15 (Mandatory)
If equityValuation/valuationDate/adjustableDate exists, and equityEuropeanExercise exists, then equityValuation/valuationDate/adjustableDate/unadjustedDate must be equal to equityEuropeanExercise/expirationDate/adjustableDate/unadjustedDate.
Test cases: [Valid] [Invalid]

Context: EquityOption, EquityDerivativeShortFormBase (complex type)

eqd-17 (Mandatory)
equityExercise/equityAmericanExercise/equityMultipleExercise/maximumNumberOfOptions * equityExercise/equityAmericanExercise/equityMultipleExercise/integralMultipleExercise >= numberOfOptions.
Test cases: [Valid] [Valid] [Invalid] [Invalid]
eqd-18 (Mandatory)
If equityExercise/equityBermudaExercise/equityMultipleExercise exists, and numberOfOptions exists then: maximumNumberOfOptions * integralMultipleExercise (in equityExercise/equityBermudaExercise/equityMultipleExercise) is less than or equal to numberOfOptions.
Test cases: [Valid] [Valid] [Invalid] [Invalid]
eqd-19 (Mandatory)
Preconditions: SameCurrency
If notional, equityPremium/percentageOfNotional and equityPremium/paymentAmount exist, then equityPremium/paymentAmount/amount = notional/amount * equityPremium/percentageOfNotional
Test cases: [Valid] [Invalid]
eqd-20 (Mandatory)
Preconditions: SameCurrency
If numberOfOptions, optionEntitlement, equityPremium/paymentAmount and equityPremium/pricePerOption exist then: equityPremium/pricePerOption/amount * numberOfOptions * optionEntitlement = equityPremium/paymentAmount/amount.
Test cases: [Valid] [Valid] [Invalid] [Invalid]

Context: CalculationAgent (complex type)

eqd-21 (Mandatory)
DEPRECATED: Context: CalculationAgent; Description: calculationAgentPartyReference must exist. Rationale for deprecation: EQDWG 2007-11-30; agreed that this rule doesn't make any business sense since the calculation agent may be specified in the master confirmation or the master agreement.
Test cases: [Valid] [Invalid]

Context: EquityDerivativeBase (complex type)

eqd-22 (Mandatory)
buyerPartyReference/@href must not be equal to sellerPartyReference/@href
Test cases: [Valid] [Invalid]
eqd-23 (Mandatory)
If equityEffectiveDate exists then: equityEffectiveDate >= ../tradeHeader/tradeDate
Comment: The equityEffectiveDate exists only in the case of a forward starting option.
Test cases: [Valid] [Invalid]

Context: AveragingSchedule (complex type)

eqd-24 (Mandatory)
startDate <= endDate
Test cases: [Valid] [Invalid]

Context: BrokerEquityOption (complex type)

eqd-25 (Mandatory)
Preconditions: SameCurrency
If numberOfOptions, equityPremium/paymentAmount and equityPremium/pricePerOption exist then: equityPremium/pricePerOption/amount * numberOfOptions = equityPremium/paymentAmount/amount.
Comment: This is equivalent to eqd-20, but for brokerEquityOption, where there is no optionEntitlement.
Test cases: [Valid] [Invalid]

Context: EquityMultipleExercise (complex type)

eqd-26 (Mandatory)
maximumNumberOfOptions <= numberOfOptions
Comment: You cannot exercise more than the number of options you have.
Test cases: [Valid] [Invalid]
eqd-27 (Mandatory)
minimumNumberOfOptions <= maximumNumberOfOptions
Comment: Maximum number of options to exercise must be greater than or equal to minimum number of options to exercise.
Test cases: [Valid] [Invalid]
eqd-28 (Mandatory)
If integralMultipleExercise exists, (minimumNumberOfOptions / integralMultipleExercise) must be a positive integer.
Comment: When integral multiple exercise exists, minimum number of options exercised must be a positive integer multiple.
Test cases: [Valid] [Invalid]
eqd-29 (Mandatory)
If integralMultipleExercise exists, (maximumNumberOfOptions / integralMultipleExercise ) must be a positive integer.
Comment: When integral multiple exercise exists, maximum number of options exercised must be a positive integer multiple.
Test cases: [Valid] [Invalid]

Deprecated rules

eqd-7 (Mandatory)
DEPRECATED: Context: equityBermudaExercise; Description: The elements in bermudaExerciseDates/date should be in order, earliest date first. Rationale for deprecation: Enforcing that data should be in specific order is not permitted.
Test cases: [Valid] [Invalid]
eqd-21 (Mandatory)
DEPRECATED: Context: CalculationAgent; Description: calculationAgentPartyReference must exist. Rationale for deprecation: EQDWG 2007-11-30; agreed that this rule doesn't make any business sense since the calculation agent may be specified in the master confirmation or the master agreement.
Test cases: [Valid] [Invalid]

Removed rules

eqd-1 (Mandatory)
REMOVED: Context: Trade; Description: //equityExercise/equityAmericanExercise/commencementDate/adjustableDate/unadjustedDate must be equal to tradeHeader/tradeDate. Rationale for removal: incorrect from business perspective.
eqd-5 (Mandatory)
REMOVED: Context: Trade; Description: //equityExercise/equityBermudaExercise/expirationDate/adjustableDate/unadjustedDate must be greater than or equal to tradeHeader/tradeDate. Rationale for removal: eqd-5 is redundant. The effect of eqd-5 is available by entailment on eqd-4, eqd-8, eqd-9.
eqd-11 (Mandatory)
REMOVED: Context: EquityBermudanExercise; Description: latestExerciseTime/hourMinuteTime must be before or equal to equityExpirationTime/hourMinuteTime.
eqd-16 (Mandatory)
REMOVED: Context: EquityMultipleExercise; Description: minimumNumberOfOptions < maximumNumberOfOptions. Rationale for removal: inconsistent with rule eqd-27