All Downloads are FREE. Search and download functionalities are using the official Maven repository.

.cdm-java.5.0.1.source-code.Types.cs Maven / Gradle / Ivy

There is a newer version: 6.0.0-dev.89
Show newest version
// This file is auto-generated from the ISDA Common Domain Model, do not edit.
//
// Version: 5.0.1
//
[assembly: Rosetta.Lib.Attributes.CdmVersion("5.0.1")]

#nullable enable // Allow nullable reference types

namespace Org.Isda.Cdm
{
    using System.Collections.Generic;

    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    using NodaTime;

    using Rosetta.Lib;
    using Rosetta.Lib.Attributes;
    using Rosetta.Lib.Meta;
    using Rosetta.Lib.Validation;

    using Org.Isda.Cdm.Meta;
    using Org.Isda.Cdm.MetaFields;
    using _MetaFields = Org.Isda.Cdm.MetaFields.MetaFields;
    
    /// 
    /// A class to specify an account as an account number alongside, optionally. an account name, an account type, an account beneficiary and a servicing party.
    /// 
    public class Account : AbstractRosettaModelObject
    {
        private static readonly IRosettaMetaData metaData = new AccountMeta();
        
        [JsonConstructor]
        public Account(ReferenceWithMetaParty? partyReference, FieldWithMetaString accountNumber, FieldWithMetaString? accountName, FieldWithMetaAccountTypeEnum? accountType, ReferenceWithMetaParty? accountBeneficiary, ReferenceWithMetaParty? servicingParty, _MetaFields? meta)
        {
            PartyReference = partyReference;
            AccountNumber = accountNumber;
            AccountName = accountName;
            AccountType = accountType;
            AccountBeneficiary = accountBeneficiary;
            ServicingParty = servicingParty;
            Meta = meta;
        }
        
        /// 
        [JsonIgnore]
        public override IRosettaMetaData MetaData => metaData;
        
        /// 
        /// A reference to the party to which the account refers to.
        /// 
        public ReferenceWithMetaParty? PartyReference { get; }
        
        /// 
        /// The account number.
        /// 
        public FieldWithMetaString AccountNumber { get; }
        
        /// 
        /// The name by which the account is known.
        /// 
        public FieldWithMetaString? AccountName { get; }
        
        /// 
        /// The type of account, e.g. client, house.
        /// 
        public FieldWithMetaAccountTypeEnum? AccountType { get; }
        
        /// 
        /// A reference to the party beneficiary of the account.
        /// 
        public ReferenceWithMetaParty? AccountBeneficiary { get; }
        
        /// 
        /// The reference to the legal entity that services the account, i.e. in the books of which the account is held.
        /// 
        public ReferenceWithMetaParty? ServicingParty { get; }
        
        public _MetaFields? Meta { get; }
    }
    
    public class AcctOwnr : AbstractRosettaModelObject
    {
        private static readonly IRosettaMetaData metaData = new AcctOwnrMeta();
        
        [JsonConstructor]
        public AcctOwnr(Id id)
        {
            Id = id;
        }
        
        /// 
        [JsonIgnore]
        public override IRosettaMetaData MetaData => metaData;
        
        public Id Id { get; }
    }
    
    /// 
    /// A type for defining the Additional Disruption Events.
    /// 
    public class AdditionalDisruptionEvents : AbstractRosettaModelObject
    {
        private static readonly IRosettaMetaData metaData = new AdditionalDisruptionEventsMeta();
        
        [JsonConstructor]
        public AdditionalDisruptionEvents(bool? changeInLaw, bool? failureToDeliver, bool? insolvencyFiling, bool? hedgingDisruption, bool? increasedCostOfHedging, bool? foreignOwnershipEvent, bool? lossOfStockBorrow, decimal? maximumStockLoanRate, bool? increasedCostOfStockBorrow, decimal? initialStockLoanRate, Enums.AncillaryRole? determiningParty, IEnumerable additionalBespokeTerms)
        {
            ChangeInLaw = changeInLaw;
            FailureToDeliver = failureToDeliver;
            InsolvencyFiling = insolvencyFiling;
            HedgingDisruption = hedgingDisruption;
            IncreasedCostOfHedging = increasedCostOfHedging;
            ForeignOwnershipEvent = foreignOwnershipEvent;
            LossOfStockBorrow = lossOfStockBorrow;
            MaximumStockLoanRate = maximumStockLoanRate;
            IncreasedCostOfStockBorrow = increasedCostOfStockBorrow;
            InitialStockLoanRate = initialStockLoanRate;
            DeterminingParty = determiningParty;
            AdditionalBespokeTerms = additionalBespokeTerms;
        }
        
        /// 
        [JsonIgnore]
        public override IRosettaMetaData MetaData => metaData;
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions: 
        /// 
        public bool? ChangeInLaw { get; }
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions
        /// 
        public bool? FailureToDeliver { get; }
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions
        /// 
        public bool? InsolvencyFiling { get; }
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions
        /// 
        public bool? HedgingDisruption { get; }
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions
        /// 
        public bool? IncreasedCostOfHedging { get; }
        
        /// 
        /// Per ISDA Def 
        /// 
        public bool? ForeignOwnershipEvent { get; }
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions:
        /// 
        public bool? LossOfStockBorrow { get; }
        
        /// 
        /// Specifies the maximum stock loan rate for Loss of Stock Borrow. A percentage of 5% is represented as 0.05.
        /// 
        public decimal? MaximumStockLoanRate { get; }
        
        /// 
        /// Per 2002 ISDA Equity Derivatives Definitions
        /// 
        public bool? IncreasedCostOfStockBorrow { get; }
        
        /// 
        /// Specifies the initial stock loan per ISDA Def. A percentage of 5% is represented as 0.05.
        /// 
        public decimal? InitialStockLoanRate { get; }
        
        /// 
        /// Specifies the party which determines additional disruption events.
        /// 
        [JsonConverter(typeof(StringEnumConverter))]
        public Enums.AncillaryRole? DeterminingParty { get; }
        
        /// 
        /// Where parties may optionnaly describe any extra bespoke agreements, in regards of the standardized Extraordinary Events.
        /// 
        public IEnumerable AdditionalBespokeTerms { get; }
    }
    
    /// 
    /// A class to specify the events that will give rise to the payment additional fixed payments.
    /// 
    public class AdditionalFixedPayments : AbstractRosettaModelObject
    {
        private static readonly IRosettaMetaData metaData = new AdditionalFixedPaymentsMeta();
        
        [JsonConstructor]
        public AdditionalFixedPayments(bool? interestShortfallReimbursement, bool? principalShortfallReimbursement, bool? writedownReimbursement)
        {
            InterestShortfallReimbursement = interestShortfallReimbursement;
            PrincipalShortfallReimbursement = principalShortfallReimbursement;
            WritedownReimbursement = writedownReimbursement;
        }
        
        /// 
        [JsonIgnore]
        public override IRosettaMetaData MetaData => metaData;
        
        /// 
        /// An additional Fixed Payment Event. Corresponds to the payment by or on behalf of the Issuer of an actual interest amount in respect to the reference obligation that is greater than the expected interest amount. ISDA 2003 Term: Interest Shortfall Reimbursement.
        /// 
        public bool? InterestShortfallReimbursement { get; }
        
        /// 
        /// An additional Fixed Payment Event. Corresponds to the payment by or on behalf of the Issuer of an actual principal amount in respect to the reference obligation that is greater than the expected principal amount. ISDA 2003 Term: Principal Shortfall Reimbursement.
        /// 
        public bool? PrincipalShortfallReimbursement { get; }
        
        /// 
        /// An Additional Fixed Payment. Corresponds to the payment by or on behalf of the issuer of an amount in respect to the reference obligation in reduction of the prior writedowns. ISDA 2003 Term: Writedown Reimbursement.
        /// 
        public bool? WritedownReimbursement { get; }
    }
    
    /// 
    /// A class to specify a post or street address.
    /// 
    public class Address : AbstractRosettaModelObject
{ private static readonly IRosettaMetaData
metaData = new AddressMeta(); [JsonConstructor] public Address(IEnumerable street, string? city, string? state, FieldWithMetaString? country, string? postalCode) { Street = street; City = city; State = state; Country = country; PostalCode = postalCode; } /// [JsonIgnore] public override IRosettaMetaData
MetaData => metaData; /// /// The set of street and building number information that identifies a postal address within a city. /// public IEnumerable Street { get; } /// /// The city component of the postal address. /// public string? City { get; } /// /// A country subdivision used in postal addresses in some countries. For example, US states, Canadian provinces, Swiss cantons, ... /// public string? State { get; } /// /// The ISO 3166 standard code for the country within which the postal address is located. /// public FieldWithMetaString? Country { get; } /// /// The code, required for computerized mail sorting systems, that is allocated to a physical address by a national postal authority. /// public string? PostalCode { get; } } /// /// Specification of the address and other details for notices. /// public class AddressForNotices : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AddressForNoticesMeta(); [JsonConstructor] public AddressForNotices(ContactElection primaryNotices, IEnumerable additionalNotices) { PrimaryNotices = primaryNotices; AdditionalNotices = additionalNotices; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specification of primary notice details /// public ContactElection PrimaryNotices { get; } /// /// The optional specification of additional information when a party requires notices to be delivered to more than one address. /// public IEnumerable AdditionalNotices { get; } } public class AddtlAttrbts : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AddtlAttrbtsMeta(); [JsonConstructor] public AddtlAttrbts(string rskRdcgTx, string sctiesFincgTxInd) { RskRdcgTx = rskRdcgTx; SctiesFincgTxInd = sctiesFincgTxInd; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string RskRdcgTx { get; } public string SctiesFincgTxInd { get; } } /// /// A class for defining a date that shall be subject to adjustment if it would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the date. /// public class AdjustableDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableDateMeta(); [JsonConstructor] public AdjustableDate(LocalDate? unadjustedDate, BusinessDayAdjustments? dateAdjustments, ReferenceWithMetaBusinessDayAdjustments? dateAdjustmentsReference, FieldWithMetaLocalDate? adjustedDate, _MetaFields? meta) { UnadjustedDate = unadjustedDate; DateAdjustments = dateAdjustments; DateAdjustmentsReference = dateAdjustmentsReference; AdjustedDate = adjustedDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A date subject to adjustment. While in FpML this date is required, this cardinality constraint has been relaxed as part of the CDM in order to support the FRA representation, which effective and termination dates are specified in FpML as adjusted dates. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedDate { get; } /// /// The business day convention and financial business centers used for adjusting the date if it would otherwise fall on a day that is not a business date in the specified business centers. /// public BusinessDayAdjustments? DateAdjustments { get; } /// /// A pointer style reference to date adjustments defined elsewhere in the document. /// public ReferenceWithMetaBusinessDayAdjustments? DateAdjustmentsReference { get; } /// /// The date once the adjustment has been performed. (Note that this date may change if the business center holidays change). /// public FieldWithMetaLocalDate? AdjustedDate { get; } public _MetaFields? Meta { get; } } /// /// A class for defining a series of dates that shall be subject to adjustment if they would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the dates. /// public class AdjustableDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableDatesMeta(); [JsonConstructor] public AdjustableDates(IEnumerable unadjustedDate, BusinessDayAdjustments? dateAdjustments, IEnumerable adjustedDate, _MetaFields? meta) { UnadjustedDate = unadjustedDate; DateAdjustments = dateAdjustments; AdjustedDate = adjustedDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A date subject to adjustment. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public IEnumerable UnadjustedDate { get; } /// /// The business day convention and financial business centers used for adjusting the date if it would otherwise fall on a day that is not a business date in the specified business centers. /// public BusinessDayAdjustments? DateAdjustments { get; } /// /// The date(s) once the adjustment has been performed. (Note that this date may change if the business center holidays change). /// public IEnumerable AdjustedDate { get; } public _MetaFields? Meta { get; } } /// /// A class for defining a date that shall be subject to adjustment if it would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the date. /// public class AdjustableOrAdjustedDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableOrAdjustedDateMeta(); [JsonConstructor] public AdjustableOrAdjustedDate(LocalDate? unadjustedDate, BusinessDayAdjustments? dateAdjustments, FieldWithMetaLocalDate? adjustedDate, _MetaFields? meta) { UnadjustedDate = unadjustedDate; DateAdjustments = dateAdjustments; AdjustedDate = adjustedDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A date subject to adjustment. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedDate { get; } /// /// The business day convention and financial business centers used for adjusting the date if it would otherwise fall on a day that is not a business date in the specified business centers. /// public BusinessDayAdjustments? DateAdjustments { get; } /// /// The date once the adjustment has been performed. (Note that this date may change if the business center holidays change). /// public FieldWithMetaLocalDate? AdjustedDate { get; } public _MetaFields? Meta { get; } } /// /// This Rosetta class specifies the date as either an unadjusted, adjusted or relative date. It supplements the features of the AdjustableOrAdjustedDate to support the credit default swap option premium, which uses the relative date construct. /// public class AdjustableOrAdjustedOrRelativeDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableOrAdjustedOrRelativeDateMeta(); [JsonConstructor] public AdjustableOrAdjustedOrRelativeDate(LocalDate? unadjustedDate, BusinessDayAdjustments? dateAdjustments, FieldWithMetaLocalDate? adjustedDate, RelativeDateOffset? relativeDate) { UnadjustedDate = unadjustedDate; DateAdjustments = dateAdjustments; AdjustedDate = adjustedDate; RelativeDate = relativeDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A date subject to adjustment. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedDate { get; } /// /// The business day convention and financial business centers used for adjusting the date if it would otherwise fall on a day that is not a business date in the specified business centers. /// public BusinessDayAdjustments? DateAdjustments { get; } /// /// The date once the adjustment has been performed. (Note that this date may change if the business center holidays change). /// public FieldWithMetaLocalDate? AdjustedDate { get; } /// /// A date specified as some offset to another date (the anchor date). /// public RelativeDateOffset? RelativeDate { get; } } /// /// A class giving the choice between defining a date as an explicit date together with applicable adjustments or as relative to some other (anchor) date. /// public class AdjustableOrRelativeDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableOrRelativeDateMeta(); [JsonConstructor] public AdjustableOrRelativeDate(AdjustableDate? adjustableDate, AdjustedRelativeDateOffset? relativeDate, _MetaFields? meta) { AdjustableDate = adjustableDate; RelativeDate = relativeDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A date that shall be subject to adjustment if it would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the date. /// public AdjustableDate? AdjustableDate { get; } /// /// A date specified as some offset to another date (the anchor date). /// public AdjustedRelativeDateOffset? RelativeDate { get; } public _MetaFields? Meta { get; } } /// /// A class giving the choice between defining a series of dates as an explicit list of dates together with applicable adjustments or as relative to some other series of (anchor) dates. /// public class AdjustableOrRelativeDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableOrRelativeDatesMeta(); [JsonConstructor] public AdjustableOrRelativeDates(AdjustableDates? adjustableDates, RelativeDates? relativeDates, _MetaFields? meta) { AdjustableDates = adjustableDates; RelativeDates = relativeDates; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A series of dates that shall be subject to adjustment if they would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the date. /// public AdjustableDates? AdjustableDates { get; } /// /// A series of dates specified as some offset to another series of dates (the anchor dates). /// public RelativeDates? RelativeDates { get; } public _MetaFields? Meta { get; } } /// /// A class giving the choice between defining a series of dates as an explicit list of dates together with applicable adjustments or as relative to some other series of (anchor) dates, or as a calculation period schedule. /// public class AdjustableRelativeOrPeriodicDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AdjustableRelativeOrPeriodicDatesMeta(); [JsonConstructor] public AdjustableRelativeOrPeriodicDates(AdjustableDates? adjustableDates, RelativeDates? relativeDates, PeriodicDates? periodicDates, _MetaFields? meta) { AdjustableDates = adjustableDates; RelativeDates = relativeDates; PeriodicDates = periodicDates; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A series of dates that shall be subject to adjustment if they would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the date. /// public AdjustableDates? AdjustableDates { get; } /// /// A series of dates specified as some offset to another series of dates (the anchor dates). /// public RelativeDates? RelativeDates { get; } /// /// A calculation period schedule. /// public PeriodicDates? PeriodicDates { get; } public _MetaFields? Meta { get; } } /// /// A type defining a date (referred to as the derived date) as a relative offset from another date (referred to as the anchor date) plus optional date adjustments. /// public class AdjustedRelativeDateOffset : AbstractRosettaModelObject, IRelativeDateOffset { private static readonly IRosettaMetaData metaData = new AdjustedRelativeDateOffsetMeta(); [JsonConstructor] public AdjustedRelativeDateOffset(BusinessDayAdjustments? relativeDateAdjustments, Enums.BusinessDayConvention businessDayConvention, BusinessCenters? businessCenters, ReferenceWithMetaBusinessCenters? businessCentersReference, BasicReferenceWithMetaLocalDate? dateRelativeTo, LocalDate? adjustedDate, Enums.DayType? dayType, int periodMultiplier, Enums.Period period, _MetaFields? meta) { RelativeDateAdjustments = relativeDateAdjustments; BusinessDayConvention = businessDayConvention; BusinessCenters = businessCenters; BusinessCentersReference = businessCentersReference; DateRelativeTo = dateRelativeTo; AdjustedDate = adjustedDate; DayType = dayType; PeriodMultiplier = periodMultiplier; PeriodValue = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The business day convention and financial business centers used for adjusting the relative date if it would otherwise fall on a day that is not a business date in the specified business centers. /// public BusinessDayAdjustments? RelativeDateAdjustments { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention BusinessDayConvention { get; } public BusinessCenters? BusinessCenters { get; } /// public ReferenceWithMetaBusinessCenters? BusinessCentersReference { get; } /// public BasicReferenceWithMetaLocalDate? DateRelativeTo { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType? DayType { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "period")] public Enums.Period PeriodValue { get; } public _MetaFields? Meta { get; } } /// /// A class to specify a trade affirmation. /// public class Affirmation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AffirmationMeta(); [JsonConstructor] public Affirmation(IEnumerable identifier, IEnumerable party, IEnumerable partyRole, Lineage? lineage, Enums.AffirmationStatus status) { Identifier = identifier; Party = party; PartyRole = partyRole; Lineage = lineage; Status = status; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The identifier(s) associated with the trade and resulting confirmation. /// public IEnumerable Identifier { get; } /// /// The parties associated with the trade. /// public IEnumerable Party { get; } /// /// The role(s) that party(ies) may have in relation to the trade /// public IEnumerable PartyRole { get; } /// /// The lineage attribute provides a linkage to previous lifecycle events and associated data. /// public Lineage? Lineage { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.AffirmationStatus Status { get; } } /// /// Represents a class to specify multiple credit notations alongside a conditional 'any' or 'all' qualifier. /// public class AgencyRatingCriteria : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AgencyRatingCriteriaMeta(); [JsonConstructor] public AgencyRatingCriteria(Enums.Quantifier qualifier, IEnumerable creditNotation, Enums.CreditNotationMismatchResolution? mismatchResolution, Enums.CreditRatingAgency? referenceAgency, Enums.CreditNotationBoundary? boundary) { Qualifier = qualifier; CreditNotation = creditNotation; MismatchResolution = mismatchResolution; ReferenceAgency = referenceAgency; Boundary = boundary; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether all or any agency ratings apply. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.Quantifier Qualifier { get; } /// /// Indicates the agency rating criteria specified for the asset or issuer. /// public IEnumerable CreditNotation { get; } /// /// Indicator for options to be used if several agency ratings (>1) are specified and its necessary to identify specific charateristics. i.e (lowest or highest). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditNotationMismatchResolution? MismatchResolution { get; } /// /// identifies the dominant reference agency if there is a missmatch and several reference agencies exsist. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditRatingAgency? ReferenceAgency { get; } /// /// Indicates the boundary of a credit agency rating i.e minimum or maximum. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditNotationBoundary? Boundary { get; } } /// /// Parameters to be used to filter events that are relevant to a given portfolio in order to calculate the state of this portfolio. The attributes correspond to all the possible aggregation criteria that can be used and these criteria can be combined. All the attributes are optional. /// public class AggregationParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AggregationParametersMeta(); [JsonConstructor] public AggregationParameters(ZonedDateTime dateTime, bool? totalPosition, Enums.PositionStatus? positionStatus, IEnumerable party, IEnumerable product, IEnumerable productQualifier, IEnumerable tradeReference) { DateTime = dateTime; TotalPosition = totalPosition; PositionStatus = positionStatus; Party = party; Product = product; ProductQualifier = productQualifier; TradeReference = tradeReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// To aggregate as of a particular date /// public ZonedDateTime DateTime { get; } /// /// Specifies whether to calculate total position to given date, or only daily position for the given date. /// public bool? TotalPosition { get; } /// /// To aggregate based on position status (EXECUTED, SETTLED etc) /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PositionStatus? PositionStatus { get; } /// /// To aggregate based on a selection of party(ies) / legal entity(ies). /// public IEnumerable Party { get; } /// /// To aggregate based on a selection of products. /// public IEnumerable Product { get; } /// /// To aggregate based on a selection of product type(s). /// public IEnumerable ProductQualifier { get; } public IEnumerable TradeReference { get; } } /// /// Specification of the standard set of terms that define a legal agreement. /// public class Agreement : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AgreementMeta(); [JsonConstructor] public Agreement(CreditSupportAgreementElections? creditSupportAgreementElections, CollateralTransferAgreementElections? collateralTransferAgreementElections, SecurityAgreementElections? securityAgreementElections, MasterAgreementSchedule? masterAgreementSchedule, TransactionAdditionalTerms? transactionAdditionalTerms) { CreditSupportAgreementElections = creditSupportAgreementElections; CollateralTransferAgreementElections = collateralTransferAgreementElections; SecurityAgreementElections = securityAgreementElections; MasterAgreementSchedule = masterAgreementSchedule; TransactionAdditionalTerms = transactionAdditionalTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Elections to specify a Credit Support Annex or Credit Support Deed for Intial or Variation Margin. /// public CreditSupportAgreementElections? CreditSupportAgreementElections { get; } /// /// Elections to specify a Collateral Transfer Agreement. /// public CollateralTransferAgreementElections? CollateralTransferAgreementElections { get; } /// /// Elections to specify a Security agreement. /// public SecurityAgreementElections? SecurityAgreementElections { get; } /// /// Elections to specify a Master Agreement Schedule. /// public MasterAgreementSchedule? MasterAgreementSchedule { get; } /// /// Any additional terms which mainly intend to specify the extraordinary events that may affect a trade and the related contractual rights and obligation of the parties when this happens /// public TransactionAdditionalTerms? TransactionAdditionalTerms { get; } } /// /// Specifies the agreement name through an agreement type and optional detailed sub agreement type. /// public class AgreementName : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AgreementNameMeta(); [JsonConstructor] public AgreementName(Enums.LegalAgreementType agreementType, FieldWithMetaCreditSupportAgreementTypeEnum? creditSupportAgreementType, Enums.CollateralMarginType? creditSupportAgreementMarginType, IEnumerable contractualDefinitionsType, IEnumerable contractualTermsSupplement, IEnumerable contractualMatrix, FieldWithMetaMasterAgreementTypeEnum? masterAgreementType, FieldWithMetaMasterConfirmationTypeEnum? masterConfirmationType, FieldWithMetaMasterConfirmationAnnexTypeEnum? masterConfirmationAnnexType, string? otherAgreement) { AgreementType = agreementType; CreditSupportAgreementType = creditSupportAgreementType; CreditSupportAgreementMarginType = creditSupportAgreementMarginType; ContractualDefinitionsType = contractualDefinitionsType; ContractualTermsSupplement = contractualTermsSupplement; ContractualMatrix = contractualMatrix; MasterAgreementType = masterAgreementType; MasterConfirmationType = masterConfirmationType; MasterConfirmationAnnexType = masterConfirmationAnnexType; OtherAgreement = otherAgreement; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specification of the legal agreement type. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.LegalAgreementType AgreementType { get; } /// /// Specification of the credit support agreement type. /// public FieldWithMetaCreditSupportAgreementTypeEnum? CreditSupportAgreementType { get; } /// /// specifies the type of margin for which a legal agreement is named. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CollateralMarginType? CreditSupportAgreementMarginType { get; } /// /// The definitions such as those published by ISDA that will define the terms of the trade. /// public IEnumerable ContractualDefinitionsType { get; } /// /// A contractual supplement (such as those published by ISDA) that will apply to the trade. /// public IEnumerable ContractualTermsSupplement { get; } /// /// A reference to a contractual matrix of elected terms/values (such as those published by ISDA) that shall be deemed to apply to the trade. The applicable matrix is identified by reference to a name and optionally a publication date. Depending on the structure of the matrix, an additional term (specified in the matrixTerm element) may be required to further identify a subset of applicable terms/values within the matrix. /// public IEnumerable ContractualMatrix { get; } /// /// Specification of the master agreement type. /// public FieldWithMetaMasterAgreementTypeEnum? MasterAgreementType { get; } /// /// The type of master confirmation executed between the parties. /// public FieldWithMetaMasterConfirmationTypeEnum? MasterConfirmationType { get; } /// /// The type of master confirmation annex executed between the parties. /// public FieldWithMetaMasterConfirmationAnnexTypeEnum? MasterConfirmationAnnexType { get; } /// /// Definition of an agreement that is not enumerated in the CDM. /// public string? OtherAgreement { get; } } /// /// Specification of the content of a legal agreement. /// public class AgreementTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AgreementTermsMeta(); [JsonConstructor] public AgreementTerms(Agreement agreement, bool? clauseLibrary, IEnumerable counterparty) { Agreement = agreement; ClauseLibrary = clauseLibrary; Counterparty = counterparty; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specification of the standard set of terms that define a legal agreement. /// public Agreement Agreement { get; } /// /// Specification of whether the agreement terms have been negotiated using the clause library methodology. /// public bool? ClauseLibrary { get; } /// /// Specification of the roles of the counterparties to the agreement. /// public IEnumerable Counterparty { get; } } /// /// A class defining the exercise period for an American style option together with any rules governing the notional amount of the underlying which can be exercised on any given exercise date and any associated exercise fees. /// public class AmericanExercise : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AmericanExerciseMeta(); [JsonConstructor] public AmericanExercise(AdjustableOrRelativeDate commencementDate, AdjustableOrRelativeDate expirationDate, AdjustableOrRelativeDates? relevantUnderlyingDate, BusinessCenterTime? earliestExerciseTime, BusinessCenterTime? latestExerciseTime, BusinessCenterTime expirationTime, Enums.ExpirationTimeType? expirationTimeType, MultipleExercise? multipleExercise, ExerciseFeeSchedule? exerciseFeeSchedule, _MetaFields? meta) { CommencementDate = commencementDate; ExpirationDate = expirationDate; RelevantUnderlyingDate = relevantUnderlyingDate; EarliestExerciseTime = earliestExerciseTime; LatestExerciseTime = latestExerciseTime; ExpirationTime = expirationTime; ExpirationTimeType = expirationTimeType; MultipleExercise = multipleExercise; ExerciseFeeSchedule = exerciseFeeSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The first day of the exercise period for an American style option. /// public AdjustableOrRelativeDate CommencementDate { get; } /// /// The last day within an exercise period for an American style option. For a European style option it is the only day within the exercise period. /// public AdjustableOrRelativeDate ExpirationDate { get; } /// /// The effective date on the underlying product if the option is exercised. For example, for a swaption it is the swap effective date, for an option on an FX spot or forward it is the value date for settlement, and in an extendible/cancelable provision it is the swap termination date, which is the date on which the termination is effective.' /// public AdjustableOrRelativeDates? RelevantUnderlyingDate { get; } /// /// The earliest time at which notice of exercise can be given by the buyer to the seller (or seller's agent) to, and including, the expiration date. /// public BusinessCenterTime? EarliestExerciseTime { get; } /// /// For a Bermuda or American style option, the latest time on an exercise business day (excluding the expiration date) within the exercise period that notice can be given by the buyer to the seller or seller's agent. Notice of exercise given after this time will be deemed to have been given on the next exercise business day. /// public BusinessCenterTime? LatestExerciseTime { get; } /// /// The latest time for exercise on expirationDate. /// public BusinessCenterTime ExpirationTime { get; } /// /// The time of day at which the equity option expires, for example the official closing time of the exchange. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ExpirationTimeType? ExpirationTimeType { get; } /// /// As defined in the 2000 ISDA Definitions, Section 12.4. Multiple Exercise, the buyer of the option has the right to exercise all or less than all the unexercised notional amount of the underlying swap on one or more days in the exercise period, but on any such day may not exercise less than the minimum notional amount or more that the maximum notional amount, and if an integral multiple amount is specified, the notional amount exercised must be equal to, or be an integral multiple of, the integral multiple amount. /// public MultipleExercise? MultipleExercise { get; } /// /// The fees associated with an exercise date. The fees are conditional on the exercise occurring. The fees can be specified as actual currency amounts or as percentages of the notional amount being exercised. /// public ExerciseFeeSchedule? ExerciseFeeSchedule { get; } public _MetaFields? Meta { get; } } /// /// A class to specify a currency amount or a currency amount schedule. /// public class AmountSchedule : AbstractRosettaModelObject, ISchedule { private static readonly IRosettaMetaData metaData = new AmountScheduleMeta(); [JsonConstructor] public AmountSchedule(IEnumerable currency, decimal value, IEnumerable datedValue) { Currency = currency; Value = value; DatedValue = datedValue; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The currency in which the amount schedule is denominated. The currency is specified outside of the actual schedule in order to be applied uniformly to it. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public IEnumerable Currency { get; } /// public decimal Value { get; } /// public IEnumerable DatedValue { get; } } /// /// Holds an identifier for an ancillary entity, either identified directly via its ancillary role or directly as a legal entity. /// public class AncillaryEntity : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AncillaryEntityMeta(); [JsonConstructor] public AncillaryEntity(Enums.AncillaryRole? ancillaryParty, LegalEntity? legalEntity) { AncillaryParty = ancillaryParty; LegalEntity = legalEntity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies a party via its ancillary role on a transaction (e.g. CCP or DCO through which the trade should be cleared.) /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AncillaryRole? AncillaryParty { get; } public LegalEntity? LegalEntity { get; } } /// /// Defines an ancillary role enumerated value with an associated party reference. The product is agnostic to the actual parties involved in the transaction, with the party references abstracted away from the product definition and replaced by the AncillaryRoleEnum. The AncillaryRoleEnum can then be positioned in the product and this AncillaryParty type, which is positioned outside of the product definition, allows the AncillaryRoleEnum to be associated with an actual party reference. /// public class AncillaryParty : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AncillaryPartyMeta(); [JsonConstructor] public AncillaryParty(Enums.AncillaryRole role, IEnumerable partyReference, Enums.CounterpartyRole? onBehalfOf) { Role = role; PartyReference = partyReference; OnBehalfOf = onBehalfOf; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the AncillaryRoleEnum that is associated to the party reference. An ancillary party is any involved party that is not one of the two principal parties to the transaction. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AncillaryRole Role { get; } /// /// Specifies the party, or parties, associated to the ancillary role. /// public IEnumerable PartyReference { get; } /// /// Optionally specifies the counterparty that the ancillary party is acting on behalf of. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole? OnBehalfOf { get; } } /// /// As per ISDA 2002 Definitions. /// public class Asian : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AsianMeta(); [JsonConstructor] public Asian(Enums.AveragingInOut averagingInOut, decimal? strikeFactor, AveragingPeriod? averagingPeriodIn, AveragingPeriod? averagingPeriodOut) { AveragingInOut = averagingInOut; StrikeFactor = strikeFactor; AveragingPeriodIn = averagingPeriodIn; AveragingPeriodOut = averagingPeriodOut; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; [JsonConverter(typeof(StringEnumConverter))] public Enums.AveragingInOut AveragingInOut { get; } /// /// The factor of strike. /// public decimal? StrikeFactor { get; } /// /// The averaging in period. /// public AveragingPeriod? AveragingPeriodIn { get; } /// /// The averaging out period. /// public AveragingPeriod? AveragingPeriodOut { get; } } /// /// Represents a set of criteria used to specify eligible collateral assets. /// public class AssetCriteria : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetCriteriaMeta(); [JsonConstructor] public AssetCriteria(IEnumerable collateralAssetType, IEnumerable assetCountryOfOrigin, IEnumerable denominatedCurrency, IEnumerable agencyRating, Enums.MaturityType? maturityType, PeriodRange? maturityRange, IEnumerable productIdentifier, IEnumerable collateralTaxonomy, bool? domesticCurrencyIssued, ListingType? listing) { CollateralAssetType = collateralAssetType; AssetCountryOfOrigin = assetCountryOfOrigin; DenominatedCurrency = denominatedCurrency; AgencyRating = agencyRating; MaturityType = maturityType; MaturityRange = maturityRange; ProductIdentifier = productIdentifier; CollateralTaxonomy = collateralTaxonomy; DomesticCurrencyIssued = domesticCurrencyIssued; Listing = listing; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a filter based on the asset product type. /// public IEnumerable CollateralAssetType { get; } /// /// Represents a filter on the asset country of origin based on the ISO Standard 3166. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable AssetCountryOfOrigin { get; } /// /// Represents a filter on the underlying asset denominated currency based on ISO Standards. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable DenominatedCurrency { get; } /// /// Represents an agency rating based on default risk and creditors claim in event of default associated with specific instrument. /// public IEnumerable AgencyRating { get; } /// /// Specifies whether the maturity range is the remaining or original maturity. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.MaturityType? MaturityType { get; } /// /// Represents a filter based on the underlying asset maturity. /// public PeriodRange? MaturityRange { get; } /// /// Represents a filter based on specific instrument identifiers (e.g. specific ISINs, CUSIPs etc). /// public IEnumerable ProductIdentifier { get; } /// /// Specifies the collateral taxonomy,which is composed of a taxonomy value and a taxonomy source. /// public IEnumerable CollateralTaxonomy { get; } /// /// Identifies that the Security must be denominated in the domestic currency of the issuer. /// public bool? DomesticCurrencyIssued { get; } /// /// Specifies the exchange, index or sector specific to listing of a security. /// public ListingType? Listing { get; } } /// /// Contains the information relative to the delivery of the asset. /// public class AssetDeliveryInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetDeliveryInformationMeta(); [JsonConstructor] public AssetDeliveryInformation(AssetDeliveryPeriods? periods, IEnumerable location, Quantity? deliveryCapacity) { Periods = periods; Location = location; DeliveryCapacity = deliveryCapacity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the periods of delivery, including the delivery profile. /// public AssetDeliveryPeriods? Periods { get; } /// /// Defines the location of the delivery of the commodity. /// public IEnumerable Location { get; } /// /// The number of units included in the transaction for each delivery interval /// public Quantity? DeliveryCapacity { get; } } /// /// Defines the periods of delivery, including the delivery profile. /// public class AssetDeliveryPeriods : AbstractRosettaModelObject, IAssetDeliveryPeriods { private static readonly IRosettaMetaData metaData = new AssetDeliveryPeriodsMeta(); [JsonConstructor] public AssetDeliveryPeriods(IEnumerable profile, LocalDate? startDate, LocalDate? endDate) { Profile = profile; StartDate = startDate; EndDate = endDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable Profile { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? StartDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EndDate { get; } } /// /// Defines the delivery profile of the asset, including the load type and the delivery intervals. /// public class AssetDeliveryProfile : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetDeliveryProfileMeta(); [JsonConstructor] public AssetDeliveryProfile(Enums.LoadType? loadType, IEnumerable block, Enums.BankHolidayTreatment? bankHolidaysTreatment) { LoadType = loadType; Block = block; BankHolidaysTreatment = bankHolidaysTreatment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identification of the delivery profile. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.LoadType? LoadType { get; } /// /// Defines a delivery profile block, including start and end time, days of the week, duration, delivery capacity and price time interval quantity. /// public IEnumerable Block { get; } /// /// Specifies whether the dates defined include holidays or not. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BankHolidayTreatment? BankHolidaysTreatment { get; } } /// /// Defines a delivery profile block, including start and end time, days of the week, duration, delivery capacity and price time interval quantity. /// public class AssetDeliveryProfileBlock : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetDeliveryProfileBlockMeta(); [JsonConstructor] public AssetDeliveryProfileBlock(LocalTime? startTime, LocalTime? endTime, IEnumerable dayOfWeek, Quantity? deliveryCapacity, Price? priceTimeIntervalQuantity) { StartTime = startTime; EndTime = endTime; DayOfWeek = dayOfWeek; DeliveryCapacity = deliveryCapacity; PriceTimeIntervalQuantity = priceTimeIntervalQuantity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The start time of the delivery interval for each block or shape. /// public LocalTime? StartTime { get; } /// /// The end time of the delivery interval for each block or shape. /// public LocalTime? EndTime { get; } /// /// The days of the week of the delivery. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable DayOfWeek { get; } /// /// The number of units included in the transaction for each delivery interval /// public Quantity? DeliveryCapacity { get; } /// /// Price per quantity per delivery time interval. /// public Price? PriceTimeIntervalQuantity { get; } } /// /// Defines each asset movement of an asset payout. /// public class AssetLeg : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetLegMeta(); [JsonConstructor] public AssetLeg(AdjustableOrRelativeDate settlementDate, Enums.DeliveryMethod deliveryMethod) { SettlementDate = settlementDate; DeliveryMethod = deliveryMethod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the settlement date of securities. In a repo transaction the purchase date would always be the effective date as specified under Economic Terms, the repurchase date would always be the termination date as specified under Economic Terms. /// public AdjustableOrRelativeDate SettlementDate { get; } /// /// Specifies a delivery method for the security transaction. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeliveryMethod DeliveryMethod { get; } } /// /// Security finance payout specification in case the product payout involves some form of security collateral, as in a securities financing transaction. Plus additional description for ICMA. /// public class AssetPayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new AssetPayoutMeta(); [JsonConstructor] public AssetPayout(IEnumerable assetLeg, Product securityInformation, Duration durationType, Money? minimumFee, DividendTerms? dividendTerms, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { AssetLeg = assetLeg; SecurityInformation = securityInformation; DurationType = durationType; MinimumFee = minimumFee; DividendTerms = dividendTerms; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines each asset movement as a buy/sell at different dates, typically 1 near leg and 1 far leg in a securities financing transaction. /// public IEnumerable AssetLeg { get; } /// /// Specifies the Purchased Security. Within SecurityPayout we include a condition which validates that the product must be a Security (see below condition 'ProductMustBeSecurity'). /// public Product SecurityInformation { get; } /// /// Specifies the Duration Terms of the Security Finance transaction. e.g. Open or Term. /// public Duration DurationType { get; } /// /// A contractual minimum amount which the borrower will pay, regardless of the duration of the loan. A mechanism for making sure that a trade generates enough income. /// public Money? MinimumFee { get; } /// /// Specifies the terms under which dividends received by the borrower are passed through to the lender. /// public DividendTerms? DividendTerms { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// Characterizes the asset pool behind an asset backed bond. /// public class AssetPool : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetPoolMeta(); [JsonConstructor] public AssetPool(string? version, LocalDate? effectiveDate, decimal initialFactor, decimal? currentFactor) { Version = version; EffectiveDate = effectiveDate; InitialFactor = initialFactor; CurrentFactor = currentFactor; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The asset pool version. /// public string? Version { get; } /// /// Optionally it is possible to specify a version effective date when a version is supplied. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// /// The part of the mortgage that is outstanding on trade inception, i.e. has not been repaid yet as principal. It is expressed as a multiplier factor to the mortgage: 1 means that the whole mortgage amount is outstanding, 0.8 means that 20% has been repaid. /// public decimal InitialFactor { get; } /// /// The part of the mortgage that is currently outstanding. It is expressed similarly to the initial factor, as factor multiplier to the mortgage. This term is formally defined as part of the 'ISDA Standard Terms Supplement for use with credit derivatives transactions on mortgage-backed security with pas-as-you-go or physical settlement'. /// public decimal? CurrentFactor { get; } } /// /// Represents a class to allow specification of the asset product type. /// public class AssetType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssetTypeMeta(); [JsonConstructor] public AssetType(Enums.AssetType assetType, Enums.SecurityType? securityType, DebtType? debtType, Enums.EquityType? equityType, Enums.FundProductType? fundType, IEnumerable otherAssetType) { AssetTypeValue = assetType; SecurityType = securityType; DebtType = debtType; EquityType = equityType; FundType = fundType; OtherAssetType = otherAssetType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a filter based on the type of collateral asset. /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "assetType")] public Enums.AssetType AssetTypeValue { get; } /// /// Represents a filter based on the type of security. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SecurityType? SecurityType { get; } /// /// Represents a filter based on the type of bond. /// public DebtType? DebtType { get; } /// /// Represents a filter based on the type of equity. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.EquityType? EquityType { get; } /// /// Represents a filter based on the type of fund. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FundProductType? FundType { get; } /// /// Specifies the eligible asset type when not enumerated. /// public IEnumerable OtherAssetType { get; } } /// /// A class to specify the identifier value and its associated version. /// public class AssignedIdentifier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AssignedIdentifierMeta(); [JsonConstructor] public AssignedIdentifier(FieldWithMetaString identifier, int? version) { Identifier = identifier; Version = version; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The identifier value. /// public FieldWithMetaString Identifier { get; } /// /// The identifier version, which is specified as an integer and is meant to be incremented each time the transaction terms (whether contract or event) change. This version is made option to support the use case where the identifier is referenced without the version. The constraint that a contract and a lifecycle event need to have an associated version is enforced through data rules. /// public int? Version { get; } } /// /// A type to define automatic exercise of a swaption. With automatic exercise the option is deemed to have exercised if it is in the money by more than the threshold amount on the exercise date. /// public class AutomaticExercise : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AutomaticExerciseMeta(); [JsonConstructor] public AutomaticExercise(decimal? thresholdRate, bool? isApplicable) { ThresholdRate = thresholdRate; IsApplicable = isApplicable; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A threshold rate. The threshold of 0.10% would be represented as 0.001 /// public decimal? ThresholdRate { get; } /// /// Boolean that indicates if it has an automaticExercise /// public bool? IsApplicable { get; } } /// /// A data type that can be used to describe the inventory of securities that a party holds. The securities are held in the AvailableInventoryRecord, with each item in the array being an individual security and its associated criteria. Criteria can include the quantity available, the rate at which the security is available to borrow at, as well as other details that can affect the decision as to whether a party wants to utilise the securities listed. /// public class AvailableInventory : AbstractRosettaModelObject, IAvailableInventory { private static readonly IRosettaMetaData metaData = new AvailableInventoryMeta(); [JsonConstructor] public AvailableInventory(MessageInformation? messageInformation, IEnumerable party, IEnumerable partyRole, IEnumerable availableInventoryRecord) { MessageInformation = messageInformation; Party = party; PartyRole = partyRole; AvailableInventoryRecord = availableInventoryRecord; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public MessageInformation? MessageInformation { get; } /// public IEnumerable Party { get; } /// public IEnumerable PartyRole { get; } /// public IEnumerable AvailableInventoryRecord { get; } } /// /// An individual piece of available inventory. This represents a single security and its associated criteria. The criteria are used to describe any restrictions on the securities. /// public class AvailableInventoryRecord : AbstractRosettaModelObject, IInventoryRecord { private static readonly IRosettaMetaData metaData = new AvailableInventoryRecordMeta(); [JsonConstructor] public AvailableInventoryRecord(ZonedDateTime? expirationDateTime, IEnumerable collateral, IEnumerable partyRole, Quantity? availableQuantity, Price? interestRate, AssignedIdentifier identifer, Security security) { ExpirationDateTime = expirationDateTime; Collateral = collateral; PartyRole = partyRole; AvailableQuantity = availableQuantity; InterestRate = interestRate; Identifer = identifer; Security = security; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// There may be a set period/time restriction associated to the security. /// public ZonedDateTime? ExpirationDateTime { get; } /// /// The type of collateral can often be required when determining if the piece of availability being described is suitable for a party. /// public IEnumerable Collateral { get; } /// /// An individual security may be held by several agents. Including the party role at this level allows us to reference the party holding this specific item. /// public IEnumerable PartyRole { get; } /// /// The quantity of the security that is available /// public Quantity? AvailableQuantity { get; } /// /// An optional element which can be used to hold a rate associated to this piece of availability. /// public Price? InterestRate { get; } /// public AssignedIdentifier Identifer { get; } /// public Security Security { get; } } /// /// Represents the average trading volume of an Equity product upon an exchange or set of exchanges. /// public class AverageTradingVolume : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AverageTradingVolumeMeta(); [JsonConstructor] public AverageTradingVolume(Period period, Enums.AverageTradingVolumeMethodology methodology) { Period = period; Methodology = methodology; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the period of the equities average trading volume on the exchange/s. /// public Period Period { get; } /// /// Indicates the type of equity average trading volume being stated (single) the highest amount on one exchange, or (consolidated) volumes across multiple exchanges. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AverageTradingVolumeMethodology Methodology { get; } } /// /// Defines parameters for use in cases when a valuation or other term is based on an average of market observations. /// public class AveragingCalculation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AveragingCalculationMeta(); [JsonConstructor] public AveragingCalculation(AveragingCalculationMethod averagingMethod, Rounding precision) { AveragingMethod = averagingMethod; Precision = precision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies enumerations for the type of averaging calculation. /// public AveragingCalculationMethod AveragingMethod { get; } /// /// Rounding applied to the average calculation. /// public Rounding Precision { get; } } /// /// Defines the ways in which multiple values can be aggregated into a single value. /// public class AveragingCalculationMethod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AveragingCalculationMethodMeta(); [JsonConstructor] public AveragingCalculationMethod(bool isWeighted, Enums.AveragingCalculationMethod calculationMethod) { IsWeighted = isWeighted; CalculationMethod = calculationMethod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies whether the average values will be weighted or unweighted. /// public bool IsWeighted { get; } /// /// Identifies which of the Pythagorean means is being used to compute an average value. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AveragingCalculationMethod CalculationMethod { get; } } /// /// An unordered list of weighted averaging observations. /// public class AveragingObservationList : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AveragingObservationListMeta(); [JsonConstructor] public AveragingObservationList(IEnumerable averagingObservation) { AveragingObservation = averagingObservation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A single weighted averaging observation. /// public IEnumerable AveragingObservation { get; } } /// /// Period over which an average value is taken. /// public class AveragingPeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AveragingPeriodMeta(); [JsonConstructor] public AveragingPeriod(IEnumerable schedule, DateTimeList? averagingDateTimes, AveragingObservationList? averagingObservations, FieldWithMetaMarketDisruptionEnum? marketDisruption) { Schedule = schedule; AveragingDateTimes = averagingDateTimes; AveragingObservations = averagingObservations; MarketDisruption = marketDisruption; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A schedule for generating averaging observation dates. /// public IEnumerable Schedule { get; } /// /// An unweighted list of averaging observation date and times. /// public DateTimeList? AveragingDateTimes { get; } /// /// A weighted list of averaging observation date and times. /// public AveragingObservationList? AveragingObservations { get; } /// /// The market disruption event as defined by ISDA 2002 Definitions. /// public FieldWithMetaMarketDisruptionEnum? MarketDisruption { get; } } /// /// Class to representing a method for generating a series of dates. /// public class AveragingSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AveragingScheduleMeta(); [JsonConstructor] public AveragingSchedule(LocalDate startDate, LocalDate endDate, CalculationPeriodFrequency averagingPeriodFrequency) { StartDate = startDate; EndDate = endDate; AveragingPeriodFrequency = averagingPeriodFrequency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Date on which this period begins. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate StartDate { get; } /// /// Date on which this period ends. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EndDate { get; } /// /// The frequency at which averaging period occurs with the regular part of the valuation schedule and their roll date convention. /// public CalculationPeriodFrequency AveragingPeriodFrequency { get; } } /// /// Defines the terms required to calculate the average observations associated with an averaging strike. /// public class AveragingStrikeFeature : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new AveragingStrikeFeatureMeta(); [JsonConstructor] public AveragingStrikeFeature(AveragingCalculation averagingCalculation, ObservationTerms observationTerms) { AveragingCalculation = averagingCalculation; ObservationTerms = observationTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines parameters for use in cases when a valuation or other term is based on an average of market observations. /// public AveragingCalculation AveragingCalculation { get; } /// /// Class containing terms that are associated with observing a price/benchmark/index across either single or multple observations. /// public ObservationTerms ObservationTerms { get; } } /// /// As per ISDA 2002 Definitions. /// public class Barrier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BarrierMeta(); [JsonConstructor] public Barrier(TriggerEvent? barrierCap, TriggerEvent? barrierFloor) { BarrierCap = barrierCap; BarrierFloor = barrierFloor; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A trigger level approached from beneath. /// public TriggerEvent? BarrierCap { get; } /// /// A trigger level approached from above. /// public TriggerEvent? BarrierFloor { get; } } /// /// Defines a custom basket by referencing a product identifier and its consituents. /// public class Basket : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new BasketMeta(); [JsonConstructor] public Basket(IEnumerable basketConstituent, IEnumerable productTaxonomy, IEnumerable productIdentifier) { BasketConstituent = basketConstituent; ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the constituents of the basket /// public IEnumerable BasketConstituent { get; } /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// CDS Basket Reference Information. /// public class BasketReferenceInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BasketReferenceInformationMeta(); [JsonConstructor] public BasketReferenceInformation(FieldWithMetaString? basketName, IEnumerable basketId, ReferencePool referencePool, int? nthToDefault, int? mthToDefault, Tranche? tranche) { BasketName = basketName; BasketId = basketId; ReferencePool = referencePool; NthToDefault = nthToDefault; MthToDefault = mthToDefault; Tranche = tranche; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The name of the basket expressed as a free format string. FpML does not define usage rules for this element. /// public FieldWithMetaString? BasketName { get; } /// /// A CDS basket identifier. /// public IEnumerable BasketId { get; } /// /// This element contains all the reference pool items to define the reference entity and reference obligation(s) in the basket. /// public ReferencePool ReferencePool { get; } /// /// N th reference obligation to default triggers payout. /// public int? NthToDefault { get; } /// /// M th reference obligation to default to allow representation of N th to M th defaults. /// public int? MthToDefault { get; } /// /// This element contains CDS tranche terms. /// public Tranche? Tranche { get; } } /// /// A class defining the Bermuda option exercise dates and the expiration date together with any rules governing the notional amount of the underlying which can be exercised on any given exercise date and any associated exercise fee. /// public class BermudaExercise : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BermudaExerciseMeta(); [JsonConstructor] public BermudaExercise(AdjustableOrRelativeDates bermudaExerciseDates, AdjustableOrRelativeDates? relevantUnderlyingDate, BusinessCenterTime earliestExerciseTime, BusinessCenterTime? latestExerciseTime, BusinessCenterTime expirationTime, Enums.ExpirationTimeType? expirationTimeType, MultipleExercise? multipleExercise, ExerciseFeeSchedule? exerciseFeeSchedule, _MetaFields? meta) { BermudaExerciseDates = bermudaExerciseDates; RelevantUnderlyingDate = relevantUnderlyingDate; EarliestExerciseTime = earliestExerciseTime; LatestExerciseTime = latestExerciseTime; ExpirationTime = expirationTime; ExpirationTimeType = expirationTimeType; MultipleExercise = multipleExercise; ExerciseFeeSchedule = exerciseFeeSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The dates that define the Bermuda option exercise dates and the expiration date. The last specified date is assumed to be the expiration date. The dates can either be specified as a series of explicit dates and associated adjustments or as a series of dates defined relative to another schedule of dates, for example, the calculation period start dates. Where a relative series of dates are defined the first and last possible exercise dates can be separately specified. /// public AdjustableOrRelativeDates BermudaExerciseDates { get; } /// /// The effective date on the underlying product if the option is exercised. For example, for a swaption it is the swap effective date, for an option on an FX spot or forward it is the value date for settlement, and in an extendible/cancelable provision it is the swap termination date, which is the date on which the termination is effective. /// public AdjustableOrRelativeDates? RelevantUnderlyingDate { get; } /// /// The earliest time at which notice of exercise can be given by the buyer to the seller (or seller's agent) on each Bermuda option exercise date and the expiration date. /// public BusinessCenterTime EarliestExerciseTime { get; } /// /// For a Bermuda or American style option, the latest time on an exercise business day (excluding the expiration date) within the exercise period that notice can be given by the buyer to the seller or seller's agent. Notice of exercise given after this time will be deemed to have been given on the next exercise business day. /// public BusinessCenterTime? LatestExerciseTime { get; } /// /// The latest time for exercise on expirationDate. /// public BusinessCenterTime ExpirationTime { get; } /// /// The time of day at which the equity option expires, for example the official closing time of the exchange. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ExpirationTimeType? ExpirationTimeType { get; } /// /// As defined in the 2000 ISDA Definitions, Section 12.4. Multiple Exercise, the buyer of the option has the right to exercise all or less than all the unexercised notional amount of the underlying swap on one or more days in the exercise period, but on any such day may not exercise less than the minimum notional amount or more that the maximum notional amount, and if an integral multiple amount is specified, the notional amount exercised must be equal to, or be an integral multiple of, the integral multiple amount. /// public MultipleExercise? MultipleExercise { get; } /// /// The fees associated with an exercise date. The fees are conditional on the exercise occurring. The fees can be specified as actual currency amounts or as percentages of the notional amount being exercised. /// public ExerciseFeeSchedule? ExerciseFeeSchedule { get; } public _MetaFields? Meta { get; } } /// /// Specifies the instructions for creation of a Security Lending billing invoice. /// public class BillingInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BillingInstructionMeta(); [JsonConstructor] public BillingInstruction(Party sendingParty, Party receivingParty, LocalDate billingStartDate, LocalDate billingEndDate, IEnumerable billingRecordInstruction, IEnumerable billingSummary) { SendingParty = sendingParty; ReceivingParty = receivingParty; BillingStartDate = billingStartDate; BillingEndDate = billingEndDate; BillingRecordInstruction = billingRecordInstruction; BillingSummary = billingSummary; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The party issuing the invoice /// public Party SendingParty { get; } /// /// The party receiving the invoice /// public Party ReceivingParty { get; } /// /// The starting date of the period described by this invoice /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate BillingStartDate { get; } /// /// The ending date of the period described by this invoice /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate BillingEndDate { get; } /// /// Instructions for creating the billing records contained within the invoice /// public IEnumerable BillingRecordInstruction { get; } /// /// The billing summaries contained within the invoice /// public IEnumerable BillingSummary { get; } } /// /// Specifies individual records within a billing invoice. /// public class BillingRecord : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BillingRecordMeta(); [JsonConstructor] public BillingRecord(ReferenceWithMetaTradeState tradeState, Transfer recordTransfer, LocalDate recordStartDate, LocalDate recordEndDate, Money? minimumFee) { TradeState = tradeState; RecordTransfer = recordTransfer; RecordStartDate = recordStartDate; RecordEndDate = recordEndDate; MinimumFee = minimumFee; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The trade for the individual billing record. /// public ReferenceWithMetaTradeState TradeState { get; } /// /// The settlement terms for the billing record /// public Transfer RecordTransfer { get; } /// /// The starting date of the period described by this record /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate RecordStartDate { get; } /// /// The ending date of the period described by this record /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate RecordEndDate { get; } /// /// Indicates the minimum fee amount applied to the billing record, if any. /// public Money? MinimumFee { get; } } /// /// Specifies the instructions for creation of a billing record. /// public class BillingRecordInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BillingRecordInstructionMeta(); [JsonConstructor] public BillingRecordInstruction(ReferenceWithMetaTradeState tradeState, IEnumerable observation, LocalDate recordStartDate, LocalDate recordEndDate, LocalDate settlementDate) { TradeState = tradeState; Observation = observation; RecordStartDate = recordStartDate; RecordEndDate = recordEndDate; SettlementDate = settlementDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The trade for the individual billing record. /// public ReferenceWithMetaTradeState TradeState { get; } /// /// The observations used to calculate the billing amount. /// public IEnumerable Observation { get; } /// /// The starting date of the period described by this record /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate RecordStartDate { get; } /// /// The ending date of the period described by this record /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate RecordEndDate { get; } /// /// The date for settlement of the transfer. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate SettlementDate { get; } } /// /// Specifies individual summaries within a billing invoice. /// public class BillingSummary : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BillingSummaryMeta(); [JsonConstructor] public BillingSummary(Transfer? summaryTransfer, Enums.RecordAmountType summaryAmountType) { SummaryTransfer = summaryTransfer; SummaryAmountType = summaryAmountType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The settlement terms for the billing summary /// public Transfer? SummaryTransfer { get; } /// /// The account level for the billing summary. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RecordAmountType SummaryAmountType { get; } } /// /// Specifies the instructions for creation of a billing summary. /// public class BillingSummaryInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BillingSummaryInstructionMeta(); [JsonConstructor] public BillingSummaryInstruction(Enums.RecordAmountType summaryAmountType) { SummaryAmountType = summaryAmountType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The account level for the billing summary. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RecordAmountType SummaryAmountType { get; } } /// /// A class to specify a bond as having a product identifier. As a difference versus the FpML standard, the CDM structure of this class only includes the productIdentifier class, which consists of an identifier, productTaxonomy, and source of the identifier. The reason for this approach is to avoid the potential for conflicting information between the information associated with the contractual product and the reference information maintained by the relevant service provider. /// public class Bond : AbstractRosettaModelObject, IIdentifiedProduct { private static readonly IRosettaMetaData metaData = new BondMeta(); [JsonConstructor] public Bond(ProductIdentifier productIdentifier) { ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ProductIdentifier ProductIdentifier { get; } } /// /// Either a bond or convertible bond. /// public class BondChoiceModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BondChoiceModelMeta(); [JsonConstructor] public BondChoiceModel(Bond? bond, ConvertibleBond? convertibleBond) { Bond = bond; ConvertibleBond = convertibleBond; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Bond? Bond { get; } public ConvertibleBond? ConvertibleBond { get; } } /// /// Bond equity model to value convertible bonds and modelled onto BondEquity.model in FpML. /// public class BondEquityModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BondEquityModelMeta(); [JsonConstructor] public BondEquityModel(BondChoiceModel? bondchoiceModel, Equity? equity) { BondchoiceModel = bondchoiceModel; Equity = equity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Either the bond or convertible bond. /// public BondChoiceModel? BondchoiceModel { get; } /// /// The equity. /// public Equity? Equity { get; } } /// /// Bond price and yield valuation model for the security leg in a securities financing transaction, closely modelled onto the BondPriceAndYield.model in FpML. /// public class BondPriceAndYieldModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BondPriceAndYieldModelMeta(); [JsonConstructor] public BondPriceAndYieldModel(CleanOrDirtyPrice? cleanOrDirtyPrice, RelativePrice? relativePrice, decimal? yieldToMaturity, decimal? inflationFactor, decimal? allInPrice) { CleanOrDirtyPrice = cleanOrDirtyPrice; RelativePrice = relativePrice; YieldToMaturity = yieldToMaturity; InflationFactor = inflationFactor; AllInPrice = allInPrice; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Either the clean or dirty price of the bond. /// public CleanOrDirtyPrice? CleanOrDirtyPrice { get; } /// /// Bond price relative to a Benchmark. /// public RelativePrice? RelativePrice { get; } /// /// Price specified as a yield to maturity. /// public decimal? YieldToMaturity { get; } /// /// The inflation factor is specified for inflation-linked products which require some additional elements to calculate prices correctly. /// public decimal? InflationFactor { get; } /// /// Bond all-in-price which is a price that includes all relevant price adjustments (i.e. accrued interest, haircut or margin ratio, inflation factor,etc.). It expresses a price in terms of percentage of nominal amount. /// public decimal? AllInPrice { get; } } /// /// Reference to a bond underlier to represent an asset swap or Condition Precedent Bond. /// public class BondReference : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BondReferenceMeta(); [JsonConstructor] public BondReference(ProductIdentifier bond, bool conditionPrecedentBond, bool? discrepancyClause, FixedRateSpecification? couponRate) { Bond = bond; ConditionPrecedentBond = conditionPrecedentBond; DiscrepancyClause = discrepancyClause; CouponRate = couponRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Reference to a bond underlier. /// public ProductIdentifier Bond { get; } /// /// To indicate whether the Condition Precedent Bond is applicable. The swap contract is only valid if the bond is issued and if there is any dispute over the terms of fixed stream then the bond terms would be used. /// public bool ConditionPrecedentBond { get; } /// /// To indicate whether the Discrepancy Clause is applicable. /// public bool? DiscrepancyClause { get; } /// /// Specifies the coupon rate (expressed in percentage) of a fixed income security or convertible bond. /// public FixedRateSpecification? CouponRate { get; } } /// /// Bond valuation model for the security leg in a securities financing transaction, closely modelled onto the BondCollateral.model in FpML. /// public class BondValuationModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BondValuationModelMeta(); [JsonConstructor] public BondValuationModel(Money nominalAmount, BondPriceAndYieldModel bondPriceAndYieldModel, Money? accrualsAmount) { NominalAmount = nominalAmount; BondPriceAndYieldModel = bondPriceAndYieldModel; AccrualsAmount = accrualsAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The quantity of the underlier expressed as a nominal amount. /// public Money NominalAmount { get; } /// /// Price and yield model for valuing a bond security leg. /// public BondPriceAndYieldModel BondPriceAndYieldModel { get; } /// /// Accruals amount for the bond in the security leg /// public Money? AccrualsAmount { get; } } /// /// Describes correlation bounds, which form a cap and a floor on the realized correlation. /// public class BoundedCorrelation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BoundedCorrelationMeta(); [JsonConstructor] public BoundedCorrelation(decimal? minimumBoundaryPercent, decimal? maximumBoundaryPercent) { MinimumBoundaryPercent = minimumBoundaryPercent; MaximumBoundaryPercent = maximumBoundaryPercent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Minimum Boundary as a percentage of the Strike Price. /// public decimal? MinimumBoundaryPercent { get; } /// /// Maximum Boundary as a percentage of the Strike Price. /// public decimal? MaximumBoundaryPercent { get; } } public class BoundedVariance : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BoundedVarianceMeta(); [JsonConstructor] public BoundedVariance(Enums.RealisedVarianceMethod realisedVarianceMethod, bool daysInRangeAdjustment, decimal? upperBarrier, decimal? lowerBarrier) { RealisedVarianceMethod = realisedVarianceMethod; DaysInRangeAdjustment = daysInRangeAdjustment; UpperBarrier = upperBarrier; LowerBarrier = lowerBarrier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The contract specifies which price must satisfy the boundary condition. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RealisedVarianceMethod RealisedVarianceMethod { get; } /// /// The contract specifies whether the notional should be scaled by the Number of Days in Range divided by the Expected N. The number of Days in Ranges refers to the number of returns that contribute to the realized volatility. /// public bool DaysInRangeAdjustment { get; } /// /// All observations above this price level will be excluded from the variance calculation. /// public decimal? UpperBarrier { get; } /// /// All observations below this price level will be excluded from the variance calculation. /// public decimal? LowerBarrier { get; } } /// /// A class for defining a time with respect to a business day calendar location. For example, 11:00:00 GBLO. /// public class BusinessCenterTime : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BusinessCenterTimeMeta(); [JsonConstructor] public BusinessCenterTime(LocalTime hourMinuteTime, FieldWithMetaBusinessCenterEnum businessCenter) { HourMinuteTime = hourMinuteTime; BusinessCenter = businessCenter; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A time specified in hh:mm:ss format where the second component must be '00', e.g. 11am would be represented as 11:00:00. /// public LocalTime HourMinuteTime { get; } /// /// A code identifying a business day calendar location. A business day calendar location is drawn from the list identified by the business day calendar location enumeration. /// public FieldWithMetaBusinessCenterEnum BusinessCenter { get; } } /// /// A class for specifying the business day calendar location used in determining whether a day is a business day or not, either by specifying this business center by reference to an enumerated list that is maintained by the FpML standard, or by reference to such specification when it exists elsewhere as part of the instance document. This class corresponds to the FpML BusinessCentersOrReference.model. /// public class BusinessCenters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BusinessCentersMeta(); [JsonConstructor] public BusinessCenters(IEnumerable businessCenter, IEnumerable commodityBusinessCalendar, ReferenceWithMetaBusinessCenters? businessCentersReference, _MetaFields? meta) { BusinessCenter = businessCenter; CommodityBusinessCalendar = commodityBusinessCalendar; BusinessCentersReference = businessCentersReference; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A code identifying one or several business day calendar location(s). The set of business day calendar locations are specified by the business day calendar location enumeration which is maintained by the FpML standard. /// public IEnumerable BusinessCenter { get; } public IEnumerable CommodityBusinessCalendar { get; } /// /// A reference to a financial business center location specified elsewhere in the instance document. /// public ReferenceWithMetaBusinessCenters? BusinessCentersReference { get; } public _MetaFields? Meta { get; } } /// /// A class defining a range of contiguous business days by defining an unadjusted first date, an unadjusted last date and a business day convention and business centers for adjusting the first and last dates if they would otherwise fall on a non business day in the specified business centers. The days between the first and last date must also be good business days in the specified centers to be counted in the range. /// public class BusinessDateRange : AbstractRosettaModelObject, IDateRange { private static readonly IRosettaMetaData metaData = new BusinessDateRangeMeta(); [JsonConstructor] public BusinessDateRange(Enums.BusinessDayConvention businessDayConvention, BusinessCenters? businessCenters, LocalDate startDate, LocalDate endDate) { BusinessDayConvention = businessDayConvention; BusinessCenters = businessCenters; StartDate = startDate; EndDate = endDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The convention for adjusting a date if it would otherwise fall on a day that is not a business day, as specified by an ISDA convention (e.g. Following, Precedent). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention BusinessDayConvention { get; } /// /// The business center(s), specified either explicitly or by reference to those specified somewhere else in the instance document. /// public BusinessCenters? BusinessCenters { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate StartDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EndDate { get; } } /// /// A class defining the business day convention and financial business centers used for adjusting any relevant date if it would otherwise fall on a day that is not a business day in the specified business center. /// public class BusinessDayAdjustments : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BusinessDayAdjustmentsMeta(); [JsonConstructor] public BusinessDayAdjustments(Enums.BusinessDayConvention businessDayConvention, BusinessCenters? businessCenters, _MetaFields? meta) { BusinessDayConvention = businessDayConvention; BusinessCenters = businessCenters; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The convention for adjusting a date if it would otherwise fall on a day that is not a business day. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention BusinessDayConvention { get; } /// /// The business center(s), specified either explicitly or by reference to those specified somewhere else in the instance document. /// public BusinessCenters? BusinessCenters { get; } public _MetaFields? Meta { get; } } /// /// A business event represents a life cycle event of a trade. The combination of the state changes results in a qualifiable life cycle event. An example of a Business Event is a PartialTermination which is a defined by a quantity change primitive event. /// public class BusinessEvent : AbstractRosettaModelObject, IEventInstruction { private static readonly IRosettaMetaData metaData = new BusinessEventMeta(); [JsonConstructor] public BusinessEvent(string? eventQualifier, IEnumerable after, _MetaFields? meta, Enums.EventIntent? intent, Enums.CorporateActionType? corporateActionIntent, LocalDate? eventDate, LocalDate? effectiveDate, IdentifiedList? packageInformation, IEnumerable instruction) { EventQualifier = eventQualifier; After = after; Meta = meta; Intent = intent; CorporateActionIntent = corporateActionIntent; EventDate = eventDate; EffectiveDate = effectiveDate; PackageInformation = packageInformation; Instruction = instruction; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The CDM event qualifier, which corresponds to the outcome of the isEvent qualification logic which qualifies the lifecycle event as a function of its features (e.g. PartialTermination, ClearingSubmission, Novation, ...). /// public string? EventQualifier { get; } /// /// Specifies the after trade state(s) created. /// public IEnumerable After { get; } public _MetaFields? Meta { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.EventIntent? Intent { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.CorporateActionType? CorporateActionIntent { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EventDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// public IdentifiedList? PackageInformation { get; } /// public IEnumerable Instruction { get; } } /// /// A class to specify an organizational unit. /// public class BusinessUnit : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BusinessUnitMeta(); [JsonConstructor] public BusinessUnit(string name, Identifier? identifier, ContactInformation? contactInformation, _MetaFields? meta) { Name = name; Identifier = identifier; ContactInformation = contactInformation; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A name used to describe the organizational unit /// public string Name { get; } /// /// An identifier used to uniquely identify the organizational unit /// public Identifier? Identifier { get; } /// /// The contact information for such business unit, when different from the contact information associated with the party. /// public ContactInformation? ContactInformation { get; } public _MetaFields? Meta { get; } } /// /// This class corresponds to the FpML BuyerSeller.model construct. /// public class BuyerSeller : AbstractRosettaModelObject, IBuyerSeller { private static readonly IRosettaMetaData metaData = new BuyerSellerMeta(); [JsonConstructor] public BuyerSeller(Enums.CounterpartyRole buyer, Enums.CounterpartyRole seller) { Buyer = buyer; Seller = seller; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Buyer { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Seller { get; } } public class Buyr : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new BuyrMeta(); [JsonConstructor] public Buyr(AcctOwnr acctOwnr) { AcctOwnr = acctOwnr; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public AcctOwnr AcctOwnr { get; } } /// /// Defines the tradeState or payout on which to create a Transfer along with all necessary resets. /// public class CalculateTransferInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculateTransferInstructionMeta(); [JsonConstructor] public CalculateTransferInstruction(TradeState tradeState, ReferenceWithMetaPayout payout, IEnumerable resets, PayerReceiver? payerReceiver, Quantity? quantity, LocalDate? date) { TradeState = tradeState; Payout = payout; Resets = resets; PayerReceiver = payerReceiver; Quantity = quantity; Date = date; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public TradeState TradeState { get; } public ReferenceWithMetaPayout Payout { get; } public IEnumerable Resets { get; } public PayerReceiver? PayerReceiver { get; } /// /// Specifies quantity amount returned if not the full amount from the TradeState, e.g. partial return /// public Quantity? Quantity { get; } [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? Date { get; } } /// /// Type for reporting details of calculated rates, including the observations that went into the final reported rate. /// public class CalculatedRateDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculatedRateDetailsMeta(); [JsonConstructor] public CalculatedRateDetails(CalculatedRateObservations? observations, IEnumerable weightedRates, IEnumerable growthFactor, IEnumerable compoundedGrowth, decimal? aggregateValue, decimal? aggregateWeight, decimal? calculatedRate) { Observations = observations; WeightedRates = weightedRates; GrowthFactor = growthFactor; CompoundedGrowth = compoundedGrowth; AggregateValue = aggregateValue; AggregateWeight = aggregateWeight; CalculatedRate = calculatedRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The observation dates and weights for each observation date. /// public CalculatedRateObservations? Observations { get; } /// /// The weighted value of each observation. /// public IEnumerable WeightedRates { get; } /// /// The daily growth factors, showing the weighted rates divided by the day count basis plus one, giving how much the value grows for each step in the calculation. /// public IEnumerable GrowthFactor { get; } /// /// The compounding curve, showing how the initial value grew during the calculation period. /// public IEnumerable CompoundedGrowth { get; } /// /// The total sum or product of all the individual terms that went into the calculated rate. /// public decimal? AggregateValue { get; } /// /// The total weight of all the terms that went into the calculated rate. /// public decimal? AggregateWeight { get; } /// /// The resulting calculated weight. /// public decimal? CalculatedRate { get; } } /// /// Type for reporting the observations dates and the corresponding weights going into a daily calculated rate /// public class CalculatedRateObservationDatesAndWeights : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculatedRateObservationDatesAndWeightsMeta(); [JsonConstructor] public CalculatedRateObservationDatesAndWeights(IEnumerable observationDates, IEnumerable weights) { ObservationDates = observationDates; Weights = weights; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The observation date upon which the rate is observed. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public IEnumerable ObservationDates { get; } /// /// The corresponding weight for each date. /// public IEnumerable Weights { get; } } /// /// Type for reporting observations that went into the final reported rate. /// public class CalculatedRateObservations : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculatedRateObservationsMeta(); [JsonConstructor] public CalculatedRateObservations(IEnumerable observationDates, IEnumerable weights, IEnumerable observedRates, IEnumerable processedRates) { ObservationDates = observationDates; Weights = weights; ObservedRates = observedRates; ProcessedRates = processedRates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The observation date upon which the rate is observed. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public IEnumerable ObservationDates { get; } /// /// The corresponding weight for each date. /// public IEnumerable Weights { get; } /// /// The value observed for that date /// public IEnumerable ObservedRates { get; } /// /// The value after any processing, such as application of caps or floors. /// public IEnumerable ProcessedRates { get; } } /// /// A class defining the ISDA calculation agent responsible for performing duties as defined in the applicable product definitions. /// public class CalculationAgent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculationAgentMeta(); [JsonConstructor] public CalculationAgent(Enums.AncillaryRole? calculationAgentParty, Enums.PartyDetermination? calculationAgentPartyEnum, FieldWithMetaBusinessCenterEnum? calculationAgentBusinessCenter) { CalculationAgentParty = calculationAgentParty; CalculationAgentPartyEnum = calculationAgentPartyEnum; CalculationAgentBusinessCenter = calculationAgentBusinessCenter; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the party which is the ISDA Calculation Agent for the trade. If more than one party is referenced then the parties are assumed to be co-calculation agents, i.e. they have joint responsibility. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AncillaryRole? CalculationAgentParty { get; } /// /// Specifies the ISDA calculation agent responsible for performing duties as defined in the applicable product definitions. For example, the Calculation Agent may be defined as being the Non-exercising Party. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PartyDetermination? CalculationAgentPartyEnum { get; } /// /// The city in which the office through which ISDA Calculation Agent is acting for purposes of the transaction is located The short-form confirm for a trade that is executed under a Sovereign or Asia Pacific Master Confirmation Agreement ( MCA ), does not need to specify the Calculation Agent. However, the confirm does need to specify the Calculation Agent City. This is due to the fact that the MCA sets the value for Calculation Agent but does not set the value for Calculation Agent City. /// public FieldWithMetaBusinessCenterEnum? CalculationAgentBusinessCenter { get; } } /// /// This class corresponds to the FpML CalculationAgent.model. /// public class CalculationAgentModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculationAgentModelMeta(); [JsonConstructor] public CalculationAgentModel(CalculationAgent? calculationAgent, Enums.BusinessCenter? calculationAgentBusinessCenter) { CalculationAgent = calculationAgent; CalculationAgentBusinessCenter = calculationAgentBusinessCenter; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The ISDA calculation agent responsible for performing duties as defined in the applicable product definitions. /// public CalculationAgent? CalculationAgent { get; } /// /// The city in which the office through which ISDA Calculation Agent is acting for purposes of the transaction is located. The short-form confirm for a trade that is executed under a Sovereign or Asia-Pacific Master Confirmation Agreement (MCA), does not need to specify the Calculation Agent. However, the confirm does need to specify the Calculation Agent city. This is due to the fact that the MCA sets the value for Calculation Agent but does not set the value for Calculation Agent city. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessCenter? CalculationAgentBusinessCenter { get; } } /// /// Represents the parameters for describing how often something (such as collateral interest) is to be calculated. /// public class CalculationFrequency : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculationFrequencyMeta(); [JsonConstructor] public CalculationFrequency(Period period, decimal? monthOfYear, decimal? dayOfMonth, Enums.DayOfWeek? dayOfWeek, decimal? weekOfMonth, decimal offsetDays, BusinessCenterTime dateLocation, IEnumerable businessCenter) { Period = period; MonthOfYear = monthOfYear; DayOfMonth = dayOfMonth; DayOfWeek = dayOfWeek; WeekOfMonth = weekOfMonth; OffsetDays = offsetDays; DateLocation = dateLocation; BusinessCenter = businessCenter; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the time period at which calculation is performed, e.g. 1 month. /// public Period Period { get; } /// /// Specifies the month of the year if used. /// public decimal? MonthOfYear { get; } /// /// Specifies the day of the month if used. /// public decimal? DayOfMonth { get; } /// /// Specifies the day of the week if used. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayOfWeek? DayOfWeek { get; } /// /// Specifies the week of the month if used. /// public decimal? WeekOfMonth { get; } /// /// Specifies how many days from the trigger event should the payment occur. /// public decimal OffsetDays { get; } /// /// Specifies where is the time measured. /// public BusinessCenterTime DateLocation { get; } /// /// Specifies the business center for adjustment of calculation period. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable BusinessCenter { get; } } /// /// A data defining: the parameters used in the calculation of a fixed or floating rate calculation period amount. This data forms: part of cashflows representation of a swap stream. /// public class CalculationPeriod : AbstractRosettaModelObject, ICalculationPeriodBase { private static readonly IRosettaMetaData metaData = new CalculationPeriodMeta(); [JsonConstructor] public CalculationPeriod(LocalDate? unadjustedStartDate, LocalDate? unadjustedEndDate, int? calculationPeriodNumberOfDays, decimal? notionalAmount, FxLinkedNotionalAmount? fxLinkedNotionalAmount, FloatingRateDefinition? floatingRateDefinition, decimal? fixedRate, decimal? dayCountYearFraction, Money? forecastAmount, decimal? forecastRate, LocalDate? adjustedStartDate, LocalDate? adjustedEndDate, _MetaFields? meta) { UnadjustedStartDate = unadjustedStartDate; UnadjustedEndDate = unadjustedEndDate; CalculationPeriodNumberOfDays = calculationPeriodNumberOfDays; NotionalAmount = notionalAmount; FxLinkedNotionalAmount = fxLinkedNotionalAmount; FloatingRateDefinition = floatingRateDefinition; FixedRate = fixedRate; DayCountYearFraction = dayCountYearFraction; ForecastAmount = forecastAmount; ForecastRate = forecastRate; AdjustedStartDate = adjustedStartDate; AdjustedEndDate = adjustedEndDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The calculation start date, unadjusted. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedStartDate { get; } /// /// The calculation end date, unadjusted. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedEndDate { get; } /// /// The number of days from the adjusted effective / start date to the adjusted termination / end date calculated in accordance with the applicable day count fraction. /// public int? CalculationPeriodNumberOfDays { get; } /// /// The amount that a cashflow will accrue interest on. /// public decimal? NotionalAmount { get; } /// /// The amount that a cashflow will accrue interest on. This is the calculated amount of the FX linked - i.e. the other currency notional amount multiplied by the appropriate FX spot rate. /// public FxLinkedNotionalAmount? FxLinkedNotionalAmount { get; } /// /// The floating rate reset information for the calculation period. /// public FloatingRateDefinition? FloatingRateDefinition { get; } /// /// The calculation period fixed rate. A per annum rate, expressed as a decimal. A fixed rate of 5% would be represented as 0.05. /// public decimal? FixedRate { get; } /// /// The year fraction value of the calculation period, result of applying the ISDA rules for day count fraction defined in the ISDA Annex. /// public decimal? DayCountYearFraction { get; } /// /// The amount representing the forecast of the accrued value of the calculation period. An intermediate value used to generate the forecastPaymentAmount in the PaymentCalculationPeriod. /// public Money? ForecastAmount { get; } /// /// A value representing the forecast rate used to calculate the forecast future value of the accrual period. This is a calculated rate determined based on averaging the rates in the rateObservation elements, and incorporates all of the rate treatment and averaging rules. A value of 1% should be represented as 0.01. /// public decimal? ForecastRate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedStartDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedEndDate { get; } public _MetaFields? Meta { get; } } /// /// The calculation period adjusted start and end dates, which are the baseline arguments needed to compute an interest accrual calculation. /// public class CalculationPeriodBase : AbstractRosettaModelObject, ICalculationPeriodBase { private static readonly IRosettaMetaData metaData = new CalculationPeriodBaseMeta(); [JsonConstructor] public CalculationPeriodBase(LocalDate? adjustedStartDate, LocalDate? adjustedEndDate, _MetaFields? meta) { AdjustedStartDate = adjustedStartDate; AdjustedEndDate = adjustedEndDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedStartDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedEndDate { get; } public _MetaFields? Meta { get; } } public class CalculationPeriodData : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculationPeriodDataMeta(); [JsonConstructor] public CalculationPeriodData(LocalDate startDate, LocalDate endDate, int daysInPeriod, int daysInLeapYearPeriod, bool isFirstPeriod, bool isLastPeriod) { StartDate = startDate; EndDate = endDate; DaysInPeriod = daysInPeriod; DaysInLeapYearPeriod = daysInLeapYearPeriod; IsFirstPeriod = isFirstPeriod; IsLastPeriod = isLastPeriod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate StartDate { get; } [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EndDate { get; } public int DaysInPeriod { get; } public int DaysInLeapYearPeriod { get; } public bool IsFirstPeriod { get; } public bool IsLastPeriod { get; } } /// /// A data for: defining the parameters used to generate the calculation period dates schedule, including the specification of any initial or final stub calculation periods. A calculation period schedule consists of an optional initial stub calculation period, one or more regular calculation periods and an optional final stub calculation period. In the absence of any initial or final stub calculation periods, the regular part of the calculation period schedule is assumed to be between the effective date and the termination date. No implicit stubs are allowed, i.e. stubs must be explicitly specified using an appropriate combination of firstPeriodStartDate, firstRegularPeriodStartDate and lastRegularPeriodEndDate. /// public class CalculationPeriodDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculationPeriodDatesMeta(); [JsonConstructor] public CalculationPeriodDates(AdjustableOrRelativeDate? effectiveDate, AdjustableOrRelativeDate? terminationDate, BusinessDayAdjustments? calculationPeriodDatesAdjustments, AdjustableOrRelativeDate? firstPeriodStartDate, LocalDate? firstRegularPeriodStartDate, LocalDate? firstCompoundingPeriodEndDate, LocalDate? lastRegularPeriodEndDate, Enums.StubPeriodType? stubPeriodType, CalculationPeriodFrequency? calculationPeriodFrequency, _MetaFields? meta) { EffectiveDate = effectiveDate; TerminationDate = terminationDate; CalculationPeriodDatesAdjustments = calculationPeriodDatesAdjustments; FirstPeriodStartDate = firstPeriodStartDate; FirstRegularPeriodStartDate = firstRegularPeriodStartDate; FirstCompoundingPeriodEndDate = firstCompoundingPeriodEndDate; LastRegularPeriodEndDate = lastRegularPeriodEndDate; StubPeriodType = stubPeriodType; CalculationPeriodFrequency = calculationPeriodFrequency; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The first day of the terms of the trade. This day may be subject to adjustment in accordance with a business day convention. /// public AdjustableOrRelativeDate? EffectiveDate { get; } /// /// The last day of the terms of the trade. This date may be subject to adjustments in accordance with the business day convention. It can also be specified in relation to another scheduled date (e.g. the last payment date). /// public AdjustableOrRelativeDate? TerminationDate { get; } /// /// The specification of the business day convention and financial business centers used for adjusting any calculation period date if it would otherwise fall on a day that is not a business day in the specified business center. /// public BusinessDayAdjustments? CalculationPeriodDatesAdjustments { get; } /// /// The start date of the calculation period. FpML specifies that for interest rate swaps this date must only be specified if it is not equal to the effective date. It is always specified in the case of equity swaps and credit default swaps with periodic payments. This date may be subject to adjustment in accordance with a business day convention. /// public AdjustableOrRelativeDate? FirstPeriodStartDate { get; } /// /// The start date of the regular part of the calculation period schedule. It must only be specified if there is an initial stub calculation period. This day may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? FirstRegularPeriodStartDate { get; } /// /// The end date of the initial compounding period when compounding is applicable. It must only be specified when the compoundingMethod element is present and not equal to a value of None. This date may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? FirstCompoundingPeriodEndDate { get; } /// /// The end date of the regular part of the calculation period schedule. It must only be specified if there is a final stub calculation period. This day may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? LastRegularPeriodEndDate { get; } /// /// Method to allocate any irregular period remaining after regular periods have been allocated between the effective and termination date. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.StubPeriodType? StubPeriodType { get; } /// /// The frequency at which calculation period end dates occur with the regular part of the calculation period schedule and their roll date convention. /// public CalculationPeriodFrequency? CalculationPeriodFrequency { get; } public _MetaFields? Meta { get; } } /// /// A class to specify the frequency at which calculation period end dates occur within the regular part of the calculation period schedule and their roll date convention. /// public class CalculationPeriodFrequency : AbstractRosettaModelObject, IFrequency { private static readonly IRosettaMetaData metaData = new CalculationPeriodFrequencyMeta(); [JsonConstructor] public CalculationPeriodFrequency(Enums.RollConvention rollConvention, bool? balanceOfFirstPeriod, int periodMultiplier, Enums.PeriodExtended period, _MetaFields? meta) { RollConvention = rollConvention; BalanceOfFirstPeriod = balanceOfFirstPeriod; PeriodMultiplier = periodMultiplier; Period = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The roll convention specifies the period term as part of a periodic schedule, i.e. the calculation period end date within the regular part of the calculation period. The value could be a rule, e.g. IMM Settlement Dates, which is the 3rd Wednesday of the month, or it could be a specific day of the month, such as the first day of the applicable month. It is used in conjunction with a frequency and the regular period start date of a calculation period. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RollConvention RollConvention { get; } /// /// Indicates, when true, that that the first Calculation Period should run from the Effective Date to the end of the calendar period in which the Effective Date falls, e.g. Jan 15 - Jan 31 if the calculation periods are one month long and Effective Date is Jan 15. If false, the first Calculation Period should run from the Effective Date for one whole period, e.g. Jan 15 to Feb 14 if the calculation periods are one month long and Effective Date is Jan 15. Mostly used in Commmodity Swaps. /// public bool? BalanceOfFirstPeriod { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PeriodExtended Period { get; } public _MetaFields? Meta { get; } } /// /// A class that allows the full representation of a payout by defining a set of schedule periods. It supports standard schedule customization by expressing all the dates, quantities, and pricing data in a non-parametric way. /// public class CalculationSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalculationScheduleMeta(); [JsonConstructor] public CalculationSchedule(IEnumerable schedulePeriod) { SchedulePeriod = schedulePeriod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines a period of a calculation schedule structure. /// public IEnumerable SchedulePeriod { get; } } /// /// Period and time profile over which the delivery takes place. /// public class CalculationScheduleDeliveryPeriods : AbstractRosettaModelObject, IAssetDeliveryPeriods { private static readonly IRosettaMetaData metaData = new CalculationScheduleDeliveryPeriodsMeta(); [JsonConstructor] public CalculationScheduleDeliveryPeriods(Quantity? deliveryCapacity, Price? priceTimeIntervalQuantity, IEnumerable profile, LocalDate? startDate, LocalDate? endDate) { DeliveryCapacity = deliveryCapacity; PriceTimeIntervalQuantity = priceTimeIntervalQuantity; Profile = profile; StartDate = startDate; EndDate = endDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of units included in the transaction for each delivery interval /// public Quantity? DeliveryCapacity { get; } /// /// Price per quantity per delivery time interval. /// public Price? PriceTimeIntervalQuantity { get; } /// public IEnumerable Profile { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? StartDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EndDate { get; } } /// /// A type for defining a calendar spread feature. /// public class CalendarSpread : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CalendarSpreadMeta(); [JsonConstructor] public CalendarSpread(AdjustableOrRelativeDate expirationDateTwo) { ExpirationDateTwo = expirationDateTwo; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public AdjustableOrRelativeDate ExpirationDateTwo { get; } } /// /// A data defining: the right of a party to cancel a swap transaction on the specified exercise dates. The provision is for 'walk-away' cancellation (i.e. the fair value of the swap is not paid). A fee payable on exercise can be specified. As a difference from the FpML construct, the canonical model extends the BuyerSeller class. /// public class CancelableProvision : AbstractRosettaModelObject, IBuyerSeller { private static readonly IRosettaMetaData metaData = new CancelableProvisionMeta(); [JsonConstructor] public CancelableProvision(AmericanExercise? americanExercise, BermudaExercise? bermudaExercise, EuropeanExercise? europeanExercise, ExerciseNotice? exerciseNotice, bool followUpConfirmation, CancelableProvisionAdjustedDates? cancelableProvisionAdjustedDates, IEnumerable finalCalculationPeriodDateAdjustment, Transfer? initialFee, Enums.CallingParty? callingParty, AdjustableOrRelativeDate? earliestDate, AdjustableOrRelativeDate? expirationDate, AdjustableOrRelativeDates? effectiveDate, Period? effectivePeriod, BusinessCenterTime? earliestCancellationTime, BusinessCenterTime? latestCancelationTime, Enums.CounterpartyRole buyer, Enums.CounterpartyRole seller) { AmericanExercise = americanExercise; BermudaExercise = bermudaExercise; EuropeanExercise = europeanExercise; ExerciseNotice = exerciseNotice; FollowUpConfirmation = followUpConfirmation; CancelableProvisionAdjustedDates = cancelableProvisionAdjustedDates; FinalCalculationPeriodDateAdjustment = finalCalculationPeriodDateAdjustment; InitialFee = initialFee; CallingParty = callingParty; EarliestDate = earliestDate; ExpirationDate = expirationDate; EffectiveDate = effectiveDate; EffectivePeriod = effectivePeriod; EarliestCancellationTime = earliestCancellationTime; LatestCancelationTime = latestCancelationTime; Buyer = buyer; Seller = seller; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// American exercise. FpML implementations consists in an exercise substitution group. /// public AmericanExercise? AmericanExercise { get; } /// /// Bermuda exercise. FpML implementations consists in an exercise substitution group. /// public BermudaExercise? BermudaExercise { get; } /// /// European exercise. FpML implementations consists in an exercise substitution group. /// public EuropeanExercise? EuropeanExercise { get; } /// /// Definition of the party to whom notice of exercise should be given. /// public ExerciseNotice? ExerciseNotice { get; } /// /// A flag to indicate whether follow-up confirmation of exercise (written or electronic) is required following telephonic notice by the buyer to the seller or seller's agent. /// public bool FollowUpConfirmation { get; } /// /// The adjusted dates associated with a cancelable provision. These dates have been adjusted for any applicable business day convention. /// public CancelableProvisionAdjustedDates? CancelableProvisionAdjustedDates { get; } /// /// Business date convention adjustment to final payment period per leg (swapStream) upon exercise event. The adjustments can be made in-line with leg level BDC's or they can be specified separately. /// public IEnumerable FinalCalculationPeriodDateAdjustment { get; } /// /// An initial fee for the cancelable option. /// public Transfer? InitialFee { get; } /// /// The party with right to exercise a cancellation. Allows for buyer, seller or either. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CallingParty? CallingParty { get; } /// /// The first day when cancelation is permitted to take effect. A party may give notice prior to this date and taken together with the effective period would be necessary to cancel on this date. /// public AdjustableOrRelativeDate? EarliestDate { get; } /// /// The last day within the term of the contract that cancelation is allowed. /// public AdjustableOrRelativeDate? ExpirationDate { get; } /// /// The effective date if cancelation is invoked otherwise the cancellation period defines the cancellation date. /// public AdjustableOrRelativeDates? EffectiveDate { get; } /// /// Effective period for cancelation when notice is given. This is the period after notice is given that cancellation becomes effecticve. /// public Period? EffectivePeriod { get; } /// /// The earliest time in a business day that notice of cancelation can be given. /// public BusinessCenterTime? EarliestCancellationTime { get; } /// /// The latest time at which notice of cancelation can be given. /// public BusinessCenterTime? LatestCancelationTime { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Buyer { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Seller { get; } } /// /// A data to: define the adjusted dates for a cancelable provision on a swap transaction. /// public class CancelableProvisionAdjustedDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CancelableProvisionAdjustedDatesMeta(); [JsonConstructor] public CancelableProvisionAdjustedDates(IEnumerable cancellationEvent) { CancellationEvent = cancellationEvent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The adjusted dates for an individual cancellation date. /// public IEnumerable CancellationEvent { get; } } /// /// The adjusted dates for a specific cancellation date, including the adjusted exercise date and adjusted termination date. /// public class CancellationEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CancellationEventMeta(); [JsonConstructor] public CancellationEvent(LocalDate adjustedExerciseDate, LocalDate adjustedEarlyTerminationDate, _MetaFields? meta) { AdjustedExerciseDate = adjustedExerciseDate; AdjustedEarlyTerminationDate = adjustedEarlyTerminationDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date on which option exercise takes place. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedExerciseDate { get; } /// /// The early termination date that is applicable if an early termination provision is exercised. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedEarlyTerminationDate { get; } public _MetaFields? Meta { get; } } /// /// This type is a generic structure that can represent the parameters of several mid-market valuation and replacement value methods described in the 2021 ISDA Definitions. /// public class CashCollateralValuationMethod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CashCollateralValuationMethodMeta(); [JsonConstructor] public CashCollateralValuationMethod(Enums.CsaType? applicableCsa, string? cashCollateralCurrency, FieldWithMetaString? cashCollateralInterestRate, FieldWithMetaString? agreedDiscountRate, IEnumerable protectedParty, bool? prescribedDocumentationAdjustment) { ApplicableCsa = applicableCsa; CashCollateralCurrency = cashCollateralCurrency; CashCollateralInterestRate = cashCollateralInterestRate; AgreedDiscountRate = agreedDiscountRate; ProtectedParty = protectedParty; PrescribedDocumentationAdjustment = prescribedDocumentationAdjustment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This may be used to specify what type of CSA (credit support annex/agreement) is to be used for cash settlement purposes. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CsaType? ApplicableCsa { get; } /// /// This may be used to indicate the currency of cash collateral for cash settlement purposes. /// public string? CashCollateralCurrency { get; } /// /// This may be used to indicate the interest rate to be used for cash collateral for cash settlement purposes. /// public FieldWithMetaString? CashCollateralInterestRate { get; } /// /// This may be used to indicate the discount rate to be used for cash collateral for cash settlement purposes. /// public FieldWithMetaString? AgreedDiscountRate { get; } /// /// This may be used to specify which party is protected (e.g. under Replacement Value cash settlement methods). /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable ProtectedParty { get; } /// /// This may be used to indicate that 'prescribed documentation adjustment' is applicable. /// public bool? PrescribedDocumentationAdjustment { get; } } /// /// Specifies the nature of a cash price either as a fee type, cash price type, or premium expression. /// public class CashPrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CashPriceMeta(); [JsonConstructor] public CashPrice(Enums.CashPriceType cashPriceType, PremiumExpression? premiumExpression, Enums.FeeType? feeType) { CashPriceType = cashPriceType; PremiumExpression = premiumExpression; FeeType = feeType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the type of Cash Price. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CashPriceType CashPriceType { get; } /// /// Specifies a premium when expressed in a way other than an amount, and any required forward starting price definition. /// public PremiumExpression? PremiumExpression { get; } /// /// Specifies the event type associated with a fee. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FeeType? FeeType { get; } } /// /// Defines the terms required to compute and settle a cash settlement amount according to a fixing value, including the fixing source, fixing method and fixing date. In FpML, PhysicalSettlementTerms and CashSettlementTerms extend SettlementTerms. In the CDM, this extension paradigm has not been used because SettlementTerms class has been used for purposes related to securities transactions, while it is not used as such in the FpML standard (i.e. only as an abstract construct. /// public class CashSettlementTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CashSettlementTermsMeta(); [JsonConstructor] public CashSettlementTerms(Enums.CashSettlementMethod? cashSettlementMethod, ValuationMethod? valuationMethod, ValuationDate? valuationDate, BusinessCenterTime? valuationTime, Money? cashSettlementAmount, decimal? recoveryFactor, bool? fixedSettlement, bool? accruedInterest, _MetaFields? meta) { CashSettlementMethod = cashSettlementMethod; ValuationMethod = valuationMethod; ValuationDate = valuationDate; ValuationTime = valuationTime; CashSettlementAmount = cashSettlementAmount; RecoveryFactor = recoveryFactor; FixedSettlement = fixedSettlement; AccruedInterest = accruedInterest; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the type of cash settlement method: cash price, yield curve etc. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CashSettlementMethod? CashSettlementMethod { get; } /// /// Specifies the parameters required to obtain a valuation, including the source, quotation method (bid, mid etc.) and any applicable quotation amount. /// public ValuationMethod? ValuationMethod { get; } /// /// Defines the different methods to specify a valuation date, as used for cash settlement. The Single / Multiple ValuationDate is used for the determination of recovery in a credit event, the RelativeDateOffset is used for cash-settled option, and FxFixingDate is used for cross-currency settlement. /// public ValuationDate? ValuationDate { get; } /// /// The time of the cash settlement valuation date when the cash settlement amount will be determined according to the cash settlement method, if the parties have not otherwise been able to agree the cash settlement amount. When using quations, this is the time of day in the specified business center when the calculation agent seeks quotations for an amount of the reference obligation for purposes of cash settlement. ISDA 2003 Term: Valuation Time. /// public BusinessCenterTime? ValuationTime { get; } /// /// The amount paid by the seller to the buyer for cash settlement on the cash settlement date. If not otherwise specified, would typically be calculated as 100 (or the Reference Price) minus the price of the Reference Obligation (all expressed as a percentage) times Floating Rate Payer Calculation Amount. ISDA 2003 Term: Cash Settlement Amount. /// public Money? CashSettlementAmount { get; } /// /// Used for fixed recovery, specifies the recovery level, determined at contract formation, to be applied on a default. Used to calculate the amount paid by the seller to the buyer for cash settlement on the cash settlement date. Amount calculation is (1 minus the Recovery Factor) multiplied by the Floating Rate Payer Calculation Amount. The currency will be derived from the Floating Rate Payer Calculation Amount. /// public decimal? RecoveryFactor { get; } /// /// Used for Recovery Lock, to indicate whether fixed Settlement is Applicable or Not Applicable. If Buyer fails to deliver an effective Notice of Physical Settlement on or before the Buyer NOPS Cut-off Date, and if Seller fails to deliver an effective Seller NOPS on or before the Seller NOPS Cut-off Date, then either: (a) if Fixed Settlement is specified in the related Confirmation as not applicable, then the Seller NOPS Cut-off Date shall be the Termination Date; or (b) if Fixed Settlement is specified in the related Confirmation as applicable, then: (i) if the Fixed Settlement Amount is a positive number, Seller shall, subject to Section 3.1 (except for the requirement of satisfaction of the Notice of Physical Settlement Condition to Settlement), pay the Fixed Settlement Amount to Buyer on the Fixed Settlement Payment Date; and (ii) if the Fixed Settlement Amount is a negative number, Buyer shall, subject to Section 3.1 (except for the requirement of satisfaction of the Notice of Physical Settlement Condition to Settlement), pay the absolute value of the Fixed Settlement Amount to Seller on the Fixed Settlement Payment Date. /// public bool? FixedSettlement { get; } /// /// Indicates whether accrued interest is included (true) or not (false). For cash settlement this specifies whether quotations should be obtained inclusive or not of accrued interest. For physical settlement this specifies whether the buyer should deliver the obligation with an outstanding principal balance that includes or excludes accrued interest. ISDA 2003 Term: Include/Exclude Accrued Interest. /// public bool? AccruedInterest { get; } public _MetaFields? Meta { get; } } /// /// Class to specify a cashflow, i.e. the outcome of either of computation (e.g. interest accrual) or an assessment of some sort (e.g. a fee). The cashflow can then be turned into a cash transfer, artefact to be used as the input to a payment system or the outcome of it. The associated globalKey denotes the ability to associate a hash value to the Cashflow instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class Cashflow : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new CashflowMeta(); [JsonConstructor] public Cashflow(CashflowType cashflowType, PaymentDiscounting? paymentDiscounting, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { CashflowType = cashflowType; PaymentDiscounting = paymentDiscounting; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The qualification of the type of cashflow, e.g. brokerage fee, premium, upfront fee etc. Particularly relevant when it cannot be inferred directly through lineage. /// public CashflowType CashflowType { get; } /// /// FpML specifies the FpML PaymentDiscounting.model group for representing the discounting elements that can be associated with a payment. /// public PaymentDiscounting? PaymentDiscounting { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// A data defining: the cashflow representation of a swap trade. /// public class CashflowRepresentation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CashflowRepresentationMeta(); [JsonConstructor] public CashflowRepresentation(bool cashflowsMatchParameters, IEnumerable paymentCalculationPeriod) { CashflowsMatchParameters = cashflowsMatchParameters; PaymentCalculationPeriod = paymentCalculationPeriod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A true/false flag to indicate whether the cashflows match the parametric definition of the stream, i.e. whether the cashflows could be regenerated from the parameters without loss of information. /// public bool CashflowsMatchParameters { get; } /// /// The adjusted payment date and associated calculation period parameters required to calculate the actual or projected payment amount. A list of payment calculation period elements may be ordered in the document by ascending adjusted payment date. An FpML document containing an unordered list of payment calculation periods is still regarded as a conformant document. /// public IEnumerable PaymentCalculationPeriod { get; } } /// /// Characterises the type of cashflow, which can result from either a scheduled or a non-scheduled lifecycle event. /// public class CashflowType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CashflowTypeMeta(); [JsonConstructor] public CashflowType(Enums.ScheduledTransfer? cashflowType, CashPrice? cashPrice, Enums.PriceExpression? priceExpression) { CashflowTypeValue = cashflowType; CashPrice = cashPrice; PriceExpression = priceExpression; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Type of cashflow corresponding to a scheduled event. /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "cashflowType")] public Enums.ScheduledTransfer? CashflowTypeValue { get; } /// /// Type of cashflow corresponding to a non-scheduled event, where a price must be agreed between the parties. /// public CashPrice? CashPrice { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceExpression? PriceExpression { get; } } /// /// Result for the CheckEligibilityByDetails and CheckEligibilityForProduct functions /// public class CheckEligibilityResult : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CheckEligibilityResultMeta(); [JsonConstructor] public CheckEligibilityResult(bool isEligible, IEnumerable matchingEligibleCriteria, EligibilityQuery? eligibilityQuery, EligibleCollateralSpecification specification) { IsEligible = isEligible; MatchingEligibleCriteria = matchingEligibleCriteria; EligibilityQuery = eligibilityQuery; Specification = specification; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// True if the asset is eligible /// public bool IsEligible { get; } /// /// Eligible Collateral Criteria that matched the eligibility query /// public IEnumerable MatchingEligibleCriteria { get; } /// /// eligibility query was was checked against the eligible collateral specification /// public EligibilityQuery? EligibilityQuery { get; } /// /// The eligible collateral specification that was queried /// public EligibleCollateralSpecification Specification { get; } } /// /// A type for documenting additional clause that cannot yet be represented with the model and yet needed for a digital representation of the agreement /// public class Clause : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ClauseMeta(); [JsonConstructor] public Clause(string? identifier, string? terms, IEnumerable subcomponents) { Identifier = identifier; Terms = terms; Subcomponents = subcomponents; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The name or identifier associated to this clause /// public string? Identifier { get; } /// /// Content of this bespoke clause /// public string? Terms { get; } /// /// Additional hierarchichal components of the clause if relevant /// public IEnumerable Subcomponents { get; } } /// /// Class specifying the bond price as either clean or dirty in a bond valuation model. /// public class CleanOrDirtyPrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CleanOrDirtyPriceMeta(); [JsonConstructor] public CleanOrDirtyPrice(CleanPrice? cleanPrice, decimal? dirtyPrice) { CleanPrice = cleanPrice; DirtyPrice = dirtyPrice; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The clean price and accruals presented separately. /// public CleanPrice? CleanPrice { get; } /// /// The dirty price presented as a single number. /// public decimal? DirtyPrice { get; } } /// /// Class to specify the clean price of a bond in a bond valuation model, with accruals presented separately, and modelled onto the cleanPrice model in BonPriceAndYield.model in FpML. /// public class CleanPrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CleanPriceMeta(); [JsonConstructor] public CleanPrice(decimal cleanPrice, decimal? accruals, string? dirtyPrice) { CleanPriceValue = cleanPrice; Accruals = accruals; DirtyPrice = dirtyPrice; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The clean price as a number. /// [JsonProperty(PropertyName = "cleanPrice")] public decimal CleanPriceValue { get; } /// /// The accruals as a number. /// public decimal? Accruals { get; } /// /// Placeholder for a calculation of dirtyPrice based on cleanPrice and accruals. /// public string? DirtyPrice { get; } } /// /// All information required to perform the clear life cycle event; the clearing party (CCP), the two parties facing each other on the alpha contract, and optionally the parties acting as clearing members. /// public class ClearingInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ClearingInstructionMeta(); [JsonConstructor] public ClearingInstruction(TradeState alphaContract, Party clearingParty, Party party1, Party party2, Party? clearerParty1, Party? clearerParty2, bool? isOpenOffer) { AlphaContract = alphaContract; ClearingParty = clearingParty; Party1 = party1; Party2 = party2; ClearerParty1 = clearerParty1; ClearerParty2 = clearerParty2; IsOpenOffer = isOpenOffer; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The contract that will be submitted to the clearing house for clearing. The contract should indicate that it should be cleared by assigning a clearing organisation as a party role. /// public TradeState AlphaContract { get; } /// /// The Central Counter party (CCP) that the contract will be submitted to for clearing. /// public Party ClearingParty { get; } /// /// First party facing the CCP if it is clearing for its own account. /// public Party Party1 { get; } /// /// Second party facing the CCP if it is clearing for its own account. /// public Party Party2 { get; } /// /// Optional party facing the CCP, acting as clearing member for party1. /// public Party? ClearerParty1 { get; } /// /// Optional party facing the CCP, acting as clearing member for party2. /// public Party? ClearerParty2 { get; } /// /// Open Offer /// public bool? IsOpenOffer { get; } } /// /// A class to qualify the closed state of an execution or a contract through the combination or a state (e.g. terminated, novated) and a set of dates: activity date, effective date and, when relevant, last payment date. /// public class ClosedState : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ClosedStateMeta(); [JsonConstructor] public ClosedState(Enums.ClosedState state, LocalDate activityDate, LocalDate? effectiveDate, LocalDate? lastPaymentDate) { State = state; ActivityDate = activityDate; EffectiveDate = effectiveDate; LastPaymentDate = lastPaymentDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The qualification of what gave way to the contract or execution closure, e.g. allocation, termination, ... /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ClosedState State { get; } /// /// The activity date on which the closing state took place, i.e. either the event date of the closing event (e.g. option exercise, contract early termination) or the contractual termination date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate ActivityDate { get; } /// /// The date on which the closing event contractually takes effect, when different from the activity date. When an explicit event effective date attribute is associated with the closing event, it will be that date. In the case of a cancellation event, it will be the date on which the cancelled event took place. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// /// The date associated with the last payment in relation to the artefact (e.g. contract) to which this closed state applies. As an example, in the case of an early termination event, it would be the settlement date of the associated fee, if applicable. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? LastPaymentDate { get; } } /// /// A type for defining the obligations of the counterparty subject to credit support requirements. /// public class Collateral : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralMeta(); [JsonConstructor] public Collateral(IndependentAmount? independentAmount, IEnumerable portfolioIdentifier, IEnumerable collateralPortfolio, CollateralProvisions? collateralProvisions, _MetaFields? meta) { IndependentAmount = independentAmount; PortfolioIdentifier = portfolioIdentifier; CollateralPortfolio = collateralPortfolio; CollateralProvisions = collateralProvisions; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Independent Amount is an amount that usually less creditworthy counterparties are asked to provide. It can either be a fixed amount or a percentage of the Transaction's value. The Independent Amount can be: (i) transferred before any trading between the parties occurs (as a deposit at a third party's account or with the counterparty) or (ii) callable after trading has occurred (typically because a downgrade has occurred). In situation (i), the Independent Amount is not included in the calculation of Exposure, but in situation (ii), it is included in the calculation of Exposure. Thus, for situation (ii), the Independent Amount may be transferred along with any collateral call. Independent Amount is a defined term in the ISDA Credit Support Annex. ('with respect to a party, the amount specified as such for that party in Paragraph 13; if no amount is specified, zero'). /// public IndependentAmount? IndependentAmount { get; } /// /// A list of identifiers pointing to the collateral portfolios which contain the collateral which covers a trade. /// public IEnumerable PortfolioIdentifier { get; } /// /// The collateral portfolios which contain the collateral which covers a trade. (NB: this can be provided by reference to a global key for each CollateralPortfolio object) /// public IEnumerable CollateralPortfolio { get; } /// /// specifies the collateral provisions of the product. /// public CollateralProvisions? CollateralProvisions { get; } public _MetaFields? Meta { get; } } /// /// Represents the parameters needed to calculate the floating rate paid on collateral holdings. /// public class CollateralAgreementFloatingRate : AbstractRosettaModelObject, IFloatingRateBase { private static readonly IRosettaMetaData metaData = new CollateralAgreementFloatingRateMeta(); [JsonConstructor] public CollateralAgreementFloatingRate(bool negativeInterest, bool compressibleSpread, ReferenceWithMetaFloatingRateOption? rateOption, SpreadSchedule? spreadSchedule, StrikeSchedule? capRateSchedule, StrikeSchedule? floorRateSchedule, _MetaFields? meta) { NegativeInterest = negativeInterest; CompressibleSpread = compressibleSpread; RateOption = rateOption; SpreadSchedule = spreadSchedule; CapRateSchedule = capRateSchedule; FloorRateSchedule = floorRateSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies how negative rates should be applied. If rates go negative, should the payment be reversed (true) or zeroed out (false)? /// public bool NegativeInterest { get; } /// /// Specifies how spreads should be applied in a low/negative rate environment. If true, spread is applied only if rate is positive. /// public bool CompressibleSpread { get; } public ReferenceWithMetaFloatingRateOption? RateOption { get; } /// public SpreadSchedule? SpreadSchedule { get; } /// public StrikeSchedule? CapRateSchedule { get; } /// public StrikeSchedule? FloorRateSchedule { get; } public _MetaFields? Meta { get; } } /// /// Represents common attributes to define a collateral balance recorded by the principal as held or posted. /// public class CollateralBalance : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralBalanceMeta(); [JsonConstructor] public CollateralBalance(Enums.CollateralStatus? collateralBalanceStatus, Enums.HaircutIndicator? haircutIndicator, Money amountBaseCurrency, PartyReferencePayerReceiver payerReceiver) { CollateralBalanceStatus = collateralBalanceStatus; HaircutIndicator = haircutIndicator; AmountBaseCurrency = amountBaseCurrency; PayerReceiver = payerReceiver; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the collateral balance breakdown of settlement status. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CollateralStatus? CollateralBalanceStatus { get; } /// /// Indicates if the collateral balance amount is based on pre or post haircut, if a haircut is associated with the collateral asset /// [JsonConverter(typeof(StringEnumConverter))] public Enums.HaircutIndicator? HaircutIndicator { get; } /// /// Specifies the collateral balance amount in base currency determined within a collateral legal agreement, or defined for reporting purposes. /// public Money AmountBaseCurrency { get; } /// /// Specifies each of the parties in the collateral balance and its perspective with regards to the direction of the collateral balance, posted or received. /// public PartyReferencePayerReceiver PayerReceiver { get; } } /// /// Represents a set of criteria used to specify and describe collateral. /// public class CollateralCriteriaBase : AbstractRosettaModelObject, ICollateralCriteriaBase { private static readonly IRosettaMetaData metaData = new CollateralCriteriaBaseMeta(); [JsonConstructor] public CollateralCriteriaBase(IEnumerable issuer, IEnumerable asset, IEnumerable appliesTo) { Issuer = issuer; Asset = asset; AppliesTo = appliesTo; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable Issuer { get; } /// public IEnumerable Asset { get; } /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable AppliesTo { get; } } /// /// Represents parameters for calculating the amount the floating interest calculation, e.g. for a single currency or defaults for all currencies. /// public class CollateralInterestCalculationParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralInterestCalculationParametersMeta(); [JsonConstructor] public CollateralInterestCalculationParameters(decimal? fixedRate, CollateralAgreementFloatingRate? floatingRate, bool inBaseCurrency, Enums.CompoundingType? compoundingType, IEnumerable compoundingBusinessCenter, Enums.DayCountFraction dayCountFraction, Rounding? rounding, Enums.RoundingFrequency? roundingFrequency, decimal? withholdingTaxRate) { FixedRate = fixedRate; FloatingRate = floatingRate; InBaseCurrency = inBaseCurrency; CompoundingType = compoundingType; CompoundingBusinessCenter = compoundingBusinessCenter; DayCountFraction = dayCountFraction; Rounding = rounding; RoundingFrequency = roundingFrequency; WithholdingTaxRate = withholdingTaxRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the applicable fixed rate if used. /// public decimal? FixedRate { get; } /// /// Specifies the floating interest rate to be used. /// public CollateralAgreementFloatingRate? FloatingRate { get; } /// /// If True, specifies that the interest transfers should be converted to base currency equivalent, or if False specifies that the transfer should be in the currency of the collateral. /// public bool InBaseCurrency { get; } /// /// Specifies the type of compounding to be applied (None, Business, Calendar). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CompoundingType? CompoundingType { get; } /// /// Specifies the applicable business centers for compounding. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable CompoundingBusinessCenter { get; } /// /// Specifies the day count fraction to use for that currency. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayCountFraction DayCountFraction { get; } /// /// Specifies the rounding rules for settling in that currency. /// public Rounding? Rounding { get; } /// /// Specifies when/how often is rounding applied? /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RoundingFrequency? RoundingFrequency { get; } /// /// Specifies the withholding tax rate if a withholding tax is applicable. /// public decimal? WithholdingTaxRate { get; } } /// /// Represents parameters that describe how calculated interest amounts are handled, i.e. are they transferred/distributed, or is the collateral balance adjusted, is netting done, and any other special handling. /// public class CollateralInterestHandlingParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralInterestHandlingParametersMeta(); [JsonConstructor] public CollateralInterestHandlingParameters(Enums.CollateralInterestHandling interestPaymentHandling, IEnumerable paymentBusinessCenter, bool netPostedAndHeldInterest, bool netInterestWithMarginCalls, bool includeAccrualInMarginCalc, bool? accrueInterestOnUnsettledInterest, bool onFullReturn, bool onPartialReturn, InterestAmountApplication? interestAmountApplication, NumberBound? interestRolloverLimit, NumberBound? writeoffLimit, Enums.AlternativeToInterestAmount? alternativeToInterestAmount, string? alternativeProvision, LocalTime? cutoffTime, CollateralInterestNotification? notification) { InterestPaymentHandling = interestPaymentHandling; PaymentBusinessCenter = paymentBusinessCenter; NetPostedAndHeldInterest = netPostedAndHeldInterest; NetInterestWithMarginCalls = netInterestWithMarginCalls; IncludeAccrualInMarginCalc = includeAccrualInMarginCalc; AccrueInterestOnUnsettledInterest = accrueInterestOnUnsettledInterest; OnFullReturn = onFullReturn; OnPartialReturn = onPartialReturn; InterestAmountApplication = interestAmountApplication; InterestRolloverLimit = interestRolloverLimit; WriteoffLimit = writeoffLimit; AlternativeToInterestAmount = alternativeToInterestAmount; AlternativeProvision = alternativeProvision; CutoffTime = cutoffTime; Notification = notification; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies how the collateral interest is to be handled. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CollateralInterestHandling InterestPaymentHandling { get; } /// /// Specifies applicable business centers for payments. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable PaymentBusinessCenter { get; } /// /// Indicates whether to net Held and Posted Interest Payments (i.e. whether interest payable for a period can be netted with interest receivable). /// public bool NetPostedAndHeldInterest { get; } /// /// Indicates whether the interest amount may be offset against any margin call deliver or return amounts? (aka 'net payments' indicator). /// public bool NetInterestWithMarginCalls { get; } /// /// Indicates whether or not to include the open interest accrual in the margin calculation. /// public bool IncludeAccrualInMarginCalc { get; } /// /// Indicates whether interest accruing on unsettled interest amount is included (continues to be accrued) in the following period. /// public bool? AccrueInterestOnUnsettledInterest { get; } /// /// Indicates the option that accrued interest should be calculated and distributed when a full return of collateral occurs. /// public bool OnFullReturn { get; } /// /// Indicates the option that accrued interest should be calculated and distributed when a partial return collateral occurs. /// public bool OnPartialReturn { get; } /// /// The application of Interest Amount with respect to the Delivery Amount and the Return Amount. /// public InterestAmountApplication? InterestAmountApplication { get; } /// /// Specifies the level below which the interest will be rolled over. /// public NumberBound? InterestRolloverLimit { get; } /// /// Specifies the level below which the interest will be written off; if omitted write-off is not applicable. /// public NumberBound? WriteoffLimit { get; } /// /// Specifies the alternative to interest amounts. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AlternativeToInterestAmount? AlternativeToInterestAmount { get; } /// /// Specifies an alternative to interest amount, when the alternative provision clause is specified. /// public string? AlternativeProvision { get; } /// /// Specifies the time of day that interest needs to be confirmed by. /// public LocalTime? CutoffTime { get; } /// /// Specifies the terms describing notification requirements. /// public CollateralInterestNotification? Notification { get; } } /// /// Represents the parameters describing when notifications should be made for required collateral interest transfers. /// public class CollateralInterestNotification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralInterestNotificationMeta(); [JsonConstructor] public CollateralInterestNotification(string trigger, decimal offset, LocalTime notificationTime, Enums.DayType notificationDayType) { Trigger = trigger; Offset = offset; NotificationTime = notificationTime; NotificationDayType = notificationDayType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies what triggers notification (should be enum) Interest Statement Frequency, Period End Date. /// public string Trigger { get; } /// /// Specifies the number of days before (negative) or after (positive) the trigger event. /// public decimal Offset { get; } /// /// Specifies the time of day that the notification should occur. /// public LocalTime NotificationTime { get; } /// /// The type of days on which notification should occur. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType NotificationDayType { get; } } /// /// Represents the floating interest calculation and distribution parameters for a single currency. /// public class CollateralInterestParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralInterestParametersMeta(); [JsonConstructor] public CollateralInterestParameters(Enums.CounterpartyRole? postingParty, Enums.CollateralMarginType? marginType, string? currency, CollateralInterestCalculationParameters? interestCalculationParameters, CalculationFrequency? interestCalculationFrequency, CollateralInterestHandlingParameters? interestHandlingParameters) { PostingParty = postingParty; MarginType = marginType; Currency = currency; InterestCalculationParameters = interestCalculationParameters; InterestCalculationFrequency = interestCalculationFrequency; InterestHandlingParameters = interestHandlingParameters; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the party to which these parameters apply (the applicable party). In other words, if the parameters are different depending on which party is posting/holding the collateral, for which party to the Collateral Agreement (Party 1 or Party 2) that is posting the collateral do these parameters apply? /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole? PostingParty { get; } /// /// Specifies the type of margin for which interest is being calculated, if the parameters are different depending on type of margin (initial or variation). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CollateralMarginType? MarginType { get; } /// /// Specifies the currency for which the parameters are captured. /// public string? Currency { get; } /// /// Represents the basic interest calculation parameters. /// public CollateralInterestCalculationParameters? InterestCalculationParameters { get; } /// /// Represents how often and when interest is calculated. /// public CalculationFrequency? InterestCalculationFrequency { get; } /// /// Represents the parameters describing how and when interest transfer occurs. /// public CollateralInterestHandlingParameters? InterestHandlingParameters { get; } } /// /// Represents a class to allow specification of the type of entity issuing the collateral. /// public class CollateralIssuerType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralIssuerTypeMeta(); [JsonConstructor] public CollateralIssuerType(Enums.IssuerType issuerType, Enums.SupraNationalIssuerType? supraNationalType, QuasiGovernmentIssuerType? quasiGovernmentType, RegionalGovernmentIssuerType? regionalGovernmentType, SpecialPurposeVehicleIssuerType? specialPurposeVehicleType) { IssuerType = issuerType; SupraNationalType = supraNationalType; QuasiGovernmentType = quasiGovernmentType; RegionalGovernmentType = regionalGovernmentType; SpecialPurposeVehicleType = specialPurposeVehicleType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the origin of entity issuing the collateral. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.IssuerType IssuerType { get; } /// /// Specifies debt issued by international organisations and multilateral banks. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SupraNationalIssuerType? SupraNationalType { get; } /// /// Specifies debt issues by institutions or bodies, typically constituted by statute, with a function mandated by the government and subject to government supervision inclusive of profit- and non-profit making bodies. Includes the US Agencies and GSEs and the EU concept of public sector entities. Excluding any entities which are also Regional Government. /// public QuasiGovernmentIssuerType? QuasiGovernmentType { get; } /// /// Specifies Regional government, local authority or municipal. /// public RegionalGovernmentIssuerType? RegionalGovernmentType { get; } /// /// Specifies a subsidiary company that is formed to undertake a specific business purpose of acquisition and financing of specific assets on a potentially limited recourse basis dependent of how it is designed. E.g. asset backed securities, including securitisations. /// public SpecialPurposeVehicleIssuerType? SpecialPurposeVehicleType { get; } } /// /// Represents common attributes to define the details of collateral assets, to be used in margin call messaging and contribute to collateral balances e.g securities in a collateral account. /// public class CollateralPortfolio : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralPortfolioMeta(); [JsonConstructor] public CollateralPortfolio(Identifier? portfolioIdentifier, IEnumerable collateralPosition, IEnumerable collateralBalance, ReferenceWithMetaLegalAgreement? legalAgreement, _MetaFields? meta) { PortfolioIdentifier = portfolioIdentifier; CollateralPosition = collateralPosition; CollateralBalance = collateralBalance; LegalAgreement = legalAgreement; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a unique identifier for a set of collateral positions in a portfolio. /// public Identifier? PortfolioIdentifier { get; } /// /// Specifies the individual components of the collateral positions in the collateral portfolio. /// public IEnumerable CollateralPosition { get; } /// /// Represents the populated or calculated collateral aggregate balance amount for the collateral portfolio. /// public IEnumerable CollateralBalance { get; } /// /// The specification of a legal agreement between two parties governing the collateral relationship such as Credit Support Agreement or Collateral Transfer Agreement etc. (NB: this can be provided by reference to a global key for each LegalAgreement object). /// public ReferenceWithMetaLegalAgreement? LegalAgreement { get; } public _MetaFields? Meta { get; } } /// /// Specifies the individual components of collateral positions. /// public class CollateralPosition : AbstractRosettaModelObject, IPosition { private static readonly IRosettaMetaData metaData = new CollateralPositionMeta(); [JsonConstructor] public CollateralPosition(CollateralTreatment? treatment, Enums.CollateralStatus? collateralPositionStatus, IEnumerable priceQuantity, Product product, Money? cashBalance, ReferenceWithMetaTradeState? tradeReference) { Treatment = treatment; CollateralPositionStatus = collateralPositionStatus; PriceQuantity = priceQuantity; Product = product; CashBalance = cashBalance; TradeReference = tradeReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies if there is any treatment to be applied to collateral, such as percentage discount which will impact collateral value. /// public CollateralTreatment? Treatment { get; } /// /// Indicates the collateral positions settlement status. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CollateralStatus? CollateralPositionStatus { get; } /// public IEnumerable PriceQuantity { get; } /// public Product Product { get; } /// public Money? CashBalance { get; } /// public ReferenceWithMetaTradeState? TradeReference { get; } } /// /// Contains collateral attributes which can also inherit information from a GMRA /// public class CollateralProvisions : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralProvisionsMeta(); [JsonConstructor] public CollateralProvisions(Enums.CollateralType collateralType, IEnumerable eligibleCollateral, SubstitutionProvisions? substitutionProvisions) { CollateralType = collateralType; EligibleCollateral = eligibleCollateral; SubstitutionProvisions = substitutionProvisions; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Enumerates the collateral types which are accepted by the Seller. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CollateralType CollateralType { get; } /// /// The eligible collateral as specified in relation to the transaction. /// public IEnumerable EligibleCollateral { get; } /// /// The provisions for collateral substitutions such as how many and when they are allowed. /// public SubstitutionProvisions? SubstitutionProvisions { get; } } /// /// Specifies the collateral taxonomy, which is composed of a taxonomy value and a taxonomy source. /// public class CollateralTaxonomy : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralTaxonomyMeta(); [JsonConstructor] public CollateralTaxonomy(CollateralTaxonomyValue taxonomyValue, Enums.TaxonomySource taxonomySource) { TaxonomyValue = taxonomyValue; TaxonomySource = taxonomySource; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the taxonomy value. /// public CollateralTaxonomyValue TaxonomyValue { get; } /// /// Specifies the taxonomy source. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TaxonomySource TaxonomySource { get; } } /// /// Specifies the collateral taxonomy value, either as a specified enumeration or as a string. /// public class CollateralTaxonomyValue : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralTaxonomyValueMeta(); [JsonConstructor] public CollateralTaxonomyValue(IEnumerable eu_EMIR_EligibleCollateral, IEnumerable uk_EMIR_EligibleCollateral, IEnumerable us_CFTC_PR_EligibleCollateral, IEnumerable nonEnumeratedTaxonomyValue) { Eu_EMIR_EligibleCollateral = eu_EMIR_EligibleCollateral; Uk_EMIR_EligibleCollateral = uk_EMIR_EligibleCollateral; Us_CFTC_PR_EligibleCollateral = us_CFTC_PR_EligibleCollateral; NonEnumeratedTaxonomyValue = nonEnumeratedTaxonomyValue; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies European Union Eligible Collateral Assets classification categories based on EMIR Uncleared Margin Rules. Eligible Collateral asset classes for both initial margin (IM) and variation margin (VM) posted and collected between specified entities. Please note: EMIR regulation will detail which eligible collateral assets classes apply to each type of entity pairing (counterparty) and which apply to posting of IM and VM /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Eu_EMIR_EligibleCollateral { get; } /// /// Identifies United Kingdom Eligible Collateral Assets classification categories based on UK Onshored EMIR Uncleared Margin Rules Eligible Collateral asset classes for both initial margin (IM) and variation margin (VM) posted and collected between specified entities. Please note: UK EMIR regulation will detail which eligible collateral assets classes apply to each type of entity pairing (counterparty) and which apply to posting of IM and VM. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Uk_EMIR_EligibleCollateral { get; } /// /// Identifies US Eligible Collateral Assets classification categories based on Uncleared Margin Rules published by the CFTC and the US Prudential Regulator. Note: While the same basic categories exist in the CFTC and US Prudential Regulators’ margin rules, the precise definitions or application of those rules could differ between the two rules. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Us_CFTC_PR_EligibleCollateral { get; } /// /// Identifies the taxonomy value when not specified as an enumeration. /// public IEnumerable NonEnumeratedTaxonomyValue { get; } } /// /// The set of elections which specify a Collateral Transfer Agreement /// public class CollateralTransferAgreementElections : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralTransferAgreementElectionsMeta(); [JsonConstructor] public CollateralTransferAgreementElections() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// Specifies the treatment terms for the eligible collateral criteria specified. /// public class CollateralTreatment : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralTreatmentMeta(); [JsonConstructor] public CollateralTreatment(CollateralValuationTreatment? valuationTreatment, IEnumerable concentrationLimit, bool isIncluded) { ValuationTreatment = valuationTreatment; ConcentrationLimit = concentrationLimit; IsIncluded = isIncluded; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specification of the valuation treatment for the specified collateral. /// public CollateralValuationTreatment? ValuationTreatment { get; } /// /// Specification of concentration limits applicable to the collateral criteria. /// public IEnumerable ConcentrationLimit { get; } /// /// A boolean attribute to specify whether collateral critieria are inclusion (True) or exclusion (False) criteria. /// public bool IsIncluded { get; } } /// /// Specification of the valuation treatment for the specified collateral. /// public class CollateralValuationTreatment : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CollateralValuationTreatmentMeta(); [JsonConstructor] public CollateralValuationTreatment(decimal? haircutPercentage, decimal? marginPercentage, decimal? fxHaircutPercentage, decimal? additionalHaircutPercentage) { HaircutPercentage = haircutPercentage; MarginPercentage = marginPercentage; FxHaircutPercentage = fxHaircutPercentage; AdditionalHaircutPercentage = additionalHaircutPercentage; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a haircut percentage to be applied to the value of asset and used as a discount factor to the value of the collateral asset,expressed as a percentage in decimal terms. As an example a 0.5% haircut would be represented as a decimal number 0.005. /// public decimal? HaircutPercentage { get; } /// /// Specifies a percentage value of transaction needing to be posted as collateral expressed as a valuation. As an example a 104% requirement would be represented as a decimal number 1.04. /// public decimal? MarginPercentage { get; } /// /// Specifies an FX haircut applied to a specific asset which is agreed between the parties (for example, if pledgor eligible collateral is not denominated in the termination currency or under other specified cases in collateral support documents both for initial margin and variation margin).The percentage value is expressed as the discount haircut to the value of the collateral- as an example an 8% FX haircut would be expressed as 0.08. /// public decimal? FxHaircutPercentage { get; } /// /// Specifies a percentage value of any additional haircut to be applied to a collateral asset,the percentage value is expressed as the discount haircut to the value of the collateral- as an example a 5% haircut would be expressed as 0.05. /// public decimal? AdditionalHaircutPercentage { get; } } /// /// Identifies a specific commodity by referencing a product identifier or by a product definition. /// public class Commodity : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new CommodityMeta(); [JsonConstructor] public Commodity(CommodityProductDefinition? commodityProductDefinition, Enums.QuotationSide priceQuoteType, DeliveryDateParameters? deliveryDateReference, string? description, IEnumerable productTaxonomy, IEnumerable productIdentifier) { CommodityProductDefinition = commodityProductDefinition; PriceQuoteType = priceQuoteType; DeliveryDateReference = deliveryDateReference; Description = description; ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the commodity underlier in the event that no ISDA Commodity Reference Benchmark exists. /// public CommodityProductDefinition? CommodityProductDefinition { get; } /// /// Describes the required quote type of the underlying price that will be observed. Example values include 'Bid, 'Ask', 'Settlement' (for a futures contract) and 'WeightedAverage' (for some published prices and indices). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuotationSide PriceQuoteType { get; } /// /// Specifies the parameters for identifying the relevant contract date when the commodity reference price is a futures contract. /// public DeliveryDateParameters? DeliveryDateReference { get; } /// /// Provides additional information about the commodity underlier. /// public string? Description { get; } /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// Payout based on the averaged price of a referenced underlier. (e.g. Commodities). Can represent both average (average of many) & bullet (average of 1) pricing /// public class CommodityPayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new CommodityPayoutMeta(); [JsonConstructor] public CommodityPayout(AveragingCalculation? averagingFeature, CommodityPriceReturnTerms? commodityPriceReturnTerms, PricingDates pricingDates, CalculationSchedule? schedule, CalculationPeriodDates? calculationPeriodDates, PaymentDates paymentDates, Product underlier, FxFeature? fxFeature, AssetDeliveryInformation? delivery, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { AveragingFeature = averagingFeature; CommodityPriceReturnTerms = commodityPriceReturnTerms; PricingDates = pricingDates; Schedule = schedule; CalculationPeriodDates = calculationPeriodDates; PaymentDates = paymentDates; Underlier = underlier; FxFeature = fxFeature; Delivery = delivery; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates if the averaging calculation, when applicable, is weighted or unweighted. /// public AveragingCalculation? AveragingFeature { get; } /// /// Defines parameters in which the commodity price is assessed. /// public CommodityPriceReturnTerms? CommodityPriceReturnTerms { get; } /// /// Specifies specific dates or parametric rules for the dates on which the price will be determined. /// public PricingDates PricingDates { get; } /// /// Allows the full representation of a payout by defining a set of schedule periods. It supports standard schedule customization by expressing all the dates, quantities, and pricing data in a non-parametric way. /// public CalculationSchedule? Schedule { get; } /// /// Defines the calculation period dates schedule. /// public CalculationPeriodDates? CalculationPeriodDates { get; } /// /// Defines the payment date schedule, as defined by the parameters that are needed to specify it, either in a parametric way or by reference to another schedule of dates (e.g. the valuation dates). /// public PaymentDates PaymentDates { get; } /// /// Identifies the underlying product that is referenced for pricing of the applicable leg in a swap. Referenced in the '2018 ISDA CDM Equity Confirmation for Security Equity Swap' as Security. /// public Product Underlier { get; } /// /// Defines quanto or composite FX features that are included in the swap leg. /// public FxFeature? FxFeature { get; } /// /// Contains the information relative to the delivery of the asset. /// public AssetDeliveryInformation? Delivery { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// Defines parameters in which the commodity price is assessed. /// public class CommodityPriceReturnTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CommodityPriceReturnTermsMeta(); [JsonConstructor] public CommodityPriceReturnTerms(Rounding? rounding, SpreadSchedule? spread, RollFeature? rollFeature, decimal? conversionFactor) { Rounding = rounding; Spread = spread; RollFeature = rollFeature; ConversionFactor = conversionFactor; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines rounding rules and precision to be used in the rounding of a number. /// public Rounding? Rounding { get; } /// /// Defines a spread value for one or more defined dates. /// public SpreadSchedule? Spread { get; } /// /// Used in conjunction with an exchange-based pricing source. Identifies a way in which the futures contracts referenced will roll between periods. /// public RollFeature? RollFeature { get; } /// /// Defines the conversion applied if the quantity unit on contract is different from unit on referenced underlier. /// public decimal? ConversionFactor { get; } } /// /// Specifies the commodity underlier in the event that no ISDA Commodity Reference Price exists. /// public class CommodityProductDefinition : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CommodityProductDefinitionMeta(); [JsonConstructor] public CommodityProductDefinition(CommodityReferenceFramework referenceFramework, PriceSource? priceSource, Enums.CommodityInformationPublisher? commodityInfoPublisher, FieldWithMetaString exchangeId) { ReferenceFramework = referenceFramework; PriceSource = priceSource; CommodityInfoPublisher = commodityInfoPublisher; ExchangeId = exchangeId; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the type of commodity. /// public CommodityReferenceFramework ReferenceFramework { get; } /// /// Specifies a publication that provides the commodity price, including, where applicable the details of where in the publication the price is published. Applicable when the commodity reference price is not a futures contract /// public PriceSource? PriceSource { get; } /// /// Specifies the publication where the commodity prices can be found. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CommodityInformationPublisher? CommodityInfoPublisher { get; } /// /// Identifies the exchange from which the reference price should be sourced, using the scheme at the following url: http://www.fpml.org/coding-scheme/external/exchange-id-MIC-1-0 /// public FieldWithMetaString ExchangeId { get; } } /// /// Specifies the type of commodity. /// public class CommodityReferenceFramework : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CommodityReferenceFrameworkMeta(); [JsonConstructor] public CommodityReferenceFramework(string commodityName, Enums.CapacityUnit? capacityUnit, Enums.WeatherUnit? weatherUnit, FieldWithMetaString currency) { CommodityName = commodityName; CapacityUnit = capacityUnit; WeatherUnit = weatherUnit; Currency = currency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the commodity more specifically. Where possible, this should follow the naming convention used in the 2005 ISDA Commodity Definitions SubAnnex A, including the subCommodity and additional qualifiers, but should be limited to 256 characters or less. /// public string CommodityName { get; } /// /// Provides an enumerated value for a capacity unit, generally used in the context of defining quantities for commodities. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CapacityUnit? CapacityUnit { get; } /// /// Provides an enumerated values for a weather unit, generally used in the context of defining quantities for commodities. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.WeatherUnit? WeatherUnit { get; } /// /// Defines the currency in which the commodity is priced. /// public FieldWithMetaString Currency { get; } } /// /// Specifies the conditions to be applied for converting into a reference currency when the actual currency rate is not determined upfront. /// public class Composite : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CompositeMeta(); [JsonConstructor] public Composite(Enums.DeterminationMethod? determinationMethod, RelativeDateOffset? relativeDate, FxSpotRateSource? fxSpotRateSource, BusinessCenterTime? fixingTime) { DeterminationMethod = determinationMethod; RelativeDate = relativeDate; FxSpotRateSource = fxSpotRateSource; FixingTime = fixingTime; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the method according to which an amount or a date is determined. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? DeterminationMethod { get; } /// /// A date specified as some offset to another date (the anchor date). /// public RelativeDateOffset? RelativeDate { get; } /// /// Specifies the methodology (reference source and, optionally, fixing time) to be used for determining a currency conversion rate. /// public FxSpotRateSource? FxSpotRateSource { get; } /// /// The time at which the spot currency exchange rate will be observed. It is specified as a time in a business day calendar location, e.g. 11:00am London time. /// public BusinessCenterTime? FixingTime { get; } } /// /// A class to specify the outcome of a computed amount, for testing purposes. /// public class ComputedAmount : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ComputedAmountMeta(); [JsonConstructor] public ComputedAmount(string callFunction, decimal amount, FieldWithMetaString? currency) { CallFunction = callFunction; Amount = amount; Currency = currency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string CallFunction { get; } public decimal Amount { get; } /// /// The currency in which the computed amount is denominated. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public FieldWithMetaString? Currency { get; } } /// /// Represents a class to describe concentration limits that may be applicable to eligible collateral criteria. /// public class ConcentrationLimit : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ConcentrationLimitMeta(); [JsonConstructor] public ConcentrationLimit(IEnumerable concentrationLimitCriteria, MoneyRange? valueLimit, NumberRange? percentageLimit) { ConcentrationLimitCriteria = concentrationLimitCriteria; ValueLimit = valueLimit; PercentageLimit = percentageLimit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a set of criteria to describe the assets that the concentration limits apply to. /// public IEnumerable ConcentrationLimitCriteria { get; } /// /// Specifies the value of collateral limit represented as a range. /// public MoneyRange? ValueLimit { get; } /// /// Specifies the perecentage of collateral limit represented as a decimal number - example 25% is 0.25. /// public NumberRange? PercentageLimit { get; } } /// /// Respresents a class to describe a set of criteria to describe specific assets that the concentration limits apply to. /// public class ConcentrationLimitCriteria : AbstractRosettaModelObject, ICollateralCriteriaBase { private static readonly IRosettaMetaData metaData = new ConcentrationLimitCriteriaMeta(); [JsonConstructor] public ConcentrationLimitCriteria(Enums.ConcentrationLimitType? concentrationLimitType, AverageTradingVolume? averageTradingVolume, IEnumerable issuer, IEnumerable asset, IEnumerable appliesTo) { ConcentrationLimitType = concentrationLimitType; AverageTradingVolume = averageTradingVolume; Issuer = issuer; Asset = asset; AppliesTo = appliesTo; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the type of concentration limit to be applied. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ConcentrationLimitType? ConcentrationLimitType { get; } /// /// Specifies an average trading volume on an exchange in relation to Equity products. /// public AverageTradingVolume? AverageTradingVolume { get; } /// public IEnumerable Issuer { get; } /// public IEnumerable Asset { get; } /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable AppliesTo { get; } } /// /// A class to specify a trade confirmation. /// public class Confirmation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ConfirmationMeta(); [JsonConstructor] public Confirmation(IEnumerable identifier, IEnumerable party, IEnumerable partyRole, Lineage? lineage, Enums.ConfirmationStatus status) { Identifier = identifier; Party = party; PartyRole = partyRole; Lineage = lineage; Status = status; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The identifier(s) associated with the trade and resulting confirmation. /// public IEnumerable Identifier { get; } /// /// The parties associated with the trade. /// public IEnumerable Party { get; } /// /// The role(s) that party(ies) may have in relation to the trade /// public IEnumerable PartyRole { get; } /// /// The lineage attribute provides a linkage to previous lifecycle events and associated data. /// public Lineage? Lineage { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.ConfirmationStatus Status { get; } } /// /// A class describing the weight of each of the underlier constituent within the basket, either in absolute or relative terms. /// public class ConstituentWeight : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ConstituentWeightMeta(); [JsonConstructor] public ConstituentWeight(decimal? openUnits, decimal? basketPercentage) { OpenUnits = openUnits; BasketPercentage = basketPercentage; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of units (index or securities) that constitute the underlier of the swap. In the case of a basket swap, this element is used to reference both the number of basket units, and the number of each asset components of the basket when these are expressed in absolute terms. /// public decimal? OpenUnits { get; } /// /// The relative weight of each respective basket constituent, expressed in percentage. A basket percentage of 5% would be represented as 0.05. /// public decimal? BasketPercentage { get; } } /// /// A class to specify the parties' election to specify contact information, in relation to elections such as the Addresses for Transfer or the Demand and Notices as specified in the ISDA Credit Support Annex agreement. /// public class ContactElection : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ContactElectionMeta(); [JsonConstructor] public ContactElection(IEnumerable partyElection) { PartyElection = partyElection; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The parties' contact information election. /// public IEnumerable PartyElection { get; } } /// /// A class to specify contact information associated with a party: telephone, postal/street address, email and web page. /// public class ContactInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ContactInformationMeta(); [JsonConstructor] public ContactInformation(IEnumerable telephone, IEnumerable
address, IEnumerable email, IEnumerable webPage) { Telephone = telephone; Address = address; Email = email; WebPage = webPage; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The telephone number. /// public IEnumerable Telephone { get; } /// /// The street/postal address. /// public IEnumerable
Address { get; } /// /// The email address. /// public IEnumerable Email { get; } /// /// The web page. This attribute is not specified as part of the FpML ContactInformation complex type. /// public IEnumerable WebPage { get; } } /// /// Encapsulates data features common to trade and position. /// public class ContractBase : AbstractRosettaModelObject, IContractBase { private static readonly IRosettaMetaData metaData = new ContractBaseMeta(); [JsonConstructor] public ContractBase(ReferenceWithMetaContractDetails? contractDetails, ReferenceWithMetaExecutionDetails? executionDetails, ReferenceWithMetaCollateral? collateral) { ContractDetails = contractDetails; ExecutionDetails = executionDetails; Collateral = collateral; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public ReferenceWithMetaContractDetails? ContractDetails { get; } /// public ReferenceWithMetaExecutionDetails? ExecutionDetails { get; } /// public ReferenceWithMetaCollateral? Collateral { get; } } /// /// Defines specific attributes that relate to contractual details of trades. /// public class ContractDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ContractDetailsMeta(); [JsonConstructor] public ContractDetails(IEnumerable documentation, FieldWithMetaGoverningLawEnum? governingLaw, _MetaFields? meta) { Documentation = documentation; GoverningLaw = governingLaw; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the legal document(s) that governs a trade and associated contractual product terms, either as a reference to such documents when specified as part of the CDM, or through identification of some of the key terms of those documents, such as the type of document, the document identifier, the publisher, the document vintage and the agreement date. /// public IEnumerable Documentation { get; } /// /// Represents the law governing the trade and associated contractual product terms. /// public FieldWithMetaGoverningLawEnum? GoverningLaw { get; } public _MetaFields? Meta { get; } } /// /// Specifies instructions to create a fully formed contract, with optional legal agreements. /// public class ContractFormationInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ContractFormationInstructionMeta(); [JsonConstructor] public ContractFormationInstruction(IEnumerable legalAgreement) { LegalAgreement = legalAgreement; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Optional legal agreements associated to the contract being formed, for instance a master agreement. /// public IEnumerable LegalAgreement { get; } } public class ContractualMatrix : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ContractualMatrixMeta(); [JsonConstructor] public ContractualMatrix(FieldWithMetaMatrixTypeEnum matrixType, FieldWithMetaMatrixTermEnum? matrixTerm) { MatrixType = matrixType; MatrixTerm = matrixTerm; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the form of applicable matrix. /// public FieldWithMetaMatrixTypeEnum MatrixType { get; } /// /// Defines any applicable key into the relevant matrix. For example, the Transaction Type would be the single term required for the Credit Derivatives Physical Settlement Matrix. This element should be omitted in the case of the 2000 ISDA Definitions Settlement Matrix for Early Termination and Swaptions. /// public FieldWithMetaMatrixTermEnum? MatrixTerm { get; } } /// /// A class to specify the contractual products' economic terms, alongside their product identification and product taxonomy. The contractual product class is meant to be used across the pre-execution, execution and (as part of the Contract) post-execution lifecycle contexts. /// public class ContractualProduct : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new ContractualProductMeta(); [JsonConstructor] public ContractualProduct(EconomicTerms economicTerms, MetaAndTemplateFields? meta, IEnumerable productTaxonomy, IEnumerable productIdentifier) { EconomicTerms = economicTerms; Meta = meta; ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The economic terms associated with a contractual product, i.e. the set of features that are price-forming. /// public EconomicTerms EconomicTerms { get; } public MetaAndTemplateFields? Meta { get; } /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// A contractual supplement (such as those published by ISDA) and its publication date that will apply to the trade. /// public class ContractualTermsSupplement : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ContractualTermsSupplementMeta(); [JsonConstructor] public ContractualTermsSupplement(FieldWithMetaContractualSupplementTypeEnum contractualTermsSupplementType, LocalDate? publicationDate) { ContractualTermsSupplementType = contractualTermsSupplementType; PublicationDate = publicationDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the form of applicable contractual supplement. /// public FieldWithMetaContractualSupplementTypeEnum ContractualTermsSupplementType { get; } /// /// Specifies the publication date of the applicable version of the contractual supplement. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? PublicationDate { get; } } /// /// A class to specify a convertible bond as having a product identifier. As a difference versus the FpML standard, the CDM structure of this class only includes the productIdentifier class, which consists of an identifier, productTaxonomy, and source of the identifier. The reason for this approach is to avoid the potential for conflicting information between the information associated with the contractual product and the reference information maintained by the relevant service provider. /// public class ConvertibleBond : AbstractRosettaModelObject, IIdentifiedProduct { private static readonly IRosettaMetaData metaData = new ConvertibleBondMeta(); [JsonConstructor] public ConvertibleBond(ProductIdentifier productIdentifier) { ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ProductIdentifier ProductIdentifier { get; } } /// /// Specifies the relevant data regarding a corporate action /// public class CorporateAction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CorporateActionMeta(); [JsonConstructor] public CorporateAction(Enums.CorporateActionType corporateActionType, LocalDate exDate, LocalDate payDate, Product underlier) { CorporateActionType = corporateActionType; ExDate = exDate; PayDate = payDate; Underlier = underlier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The type of corporate action taking place. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CorporateActionType CorporateActionType { get; } /// /// The date on which the corporate action is known to have taken place. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate ExDate { get; } /// /// The date on which resulting from the corporate action are delivered. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate PayDate { get; } /// /// The entity impacted by the corporate action. /// public Product Underlier { get; } } public class CorrelationReturnTerms : AbstractRosettaModelObject, IReturnTermsBase { private static readonly IRosettaMetaData metaData = new CorrelationReturnTermsMeta(); [JsonConstructor] public CorrelationReturnTerms(Price correlationStrikePrice, NumberRange? boundedCorrelation, int? numberOfDataSeries, ValuationTerms valuationTerms, int? annualizationFactor, DividendApplicability? dividendApplicability, EquityUnderlierProvisions? equityUnderlierProvisions, bool? sharePriceDividendAdjustment, int expectedN, decimal? initialLevel, Enums.DeterminationMethod? initialLevelSource, bool? meanAdjustment, string? performance) { CorrelationStrikePrice = correlationStrikePrice; BoundedCorrelation = boundedCorrelation; NumberOfDataSeries = numberOfDataSeries; ValuationTerms = valuationTerms; AnnualizationFactor = annualizationFactor; DividendApplicability = dividendApplicability; EquityUnderlierProvisions = equityUnderlierProvisions; SharePriceDividendAdjustment = sharePriceDividendAdjustment; ExpectedN = expectedN; InitialLevel = initialLevel; InitialLevelSource = initialLevelSource; MeanAdjustment = meanAdjustment; Performance = performance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Correlation Strike Price in accordance with the ISDA 2011 Equity Derivatives Definitions. /// public Price CorrelationStrikePrice { get; } /// /// Describes correlation bounds, which form a cap and a floor on the realized correlation. /// public NumberRange? BoundedCorrelation { get; } /// /// Number of data series, normal market practice is that correlation data sets are drawn from geographic market areas, such as America, Europe and Asia Pacific, each of these geographic areas will have its own data series to avoid contagion. /// public int? NumberOfDataSeries { get; } /// public ValuationTerms ValuationTerms { get; } /// public int? AnnualizationFactor { get; } /// public DividendApplicability? DividendApplicability { get; } /// public EquityUnderlierProvisions? EquityUnderlierProvisions { get; } /// public bool? SharePriceDividendAdjustment { get; } /// public int ExpectedN { get; } /// public decimal? InitialLevel { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? InitialLevelSource { get; } /// public bool? MeanAdjustment { get; } /// public string? Performance { get; } } /// /// Defines a counterparty enumerated value, e.g. Party1 or Party2, with an associated party reference. The product is agnostic to the actual parties to the transaction, with the party references abstracted away from the product definition and replaced by the CounterpartyEnum (e.g. values Party1 or Party2). The CounterpartyEnum can then be positioned in the product (e.g. to specify which counterparty is the payer, receiver etc) and this Counterparty type, which is positioned outside of the product definition, allows the CounterpartyEnum to be associated with an actual party reference. /// public class Counterparty : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CounterpartyMeta(); [JsonConstructor] public Counterparty(Enums.CounterpartyRole role, ReferenceWithMetaParty partyReference) { Role = role; PartyReference = partyReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the CounterpartyEnum, e.g. either Party1 or Party2, that is associated to the partyReference. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Role { get; } /// /// Specifies the party that is associated to the counterparty. /// public ReferenceWithMetaParty PartyReference { get; } } /// /// A Position describes the accumulated effect of a set of securities or financial transactions. /// public class CounterpartyPosition : AbstractRosettaModelObject, IContractBase { private static readonly IRosettaMetaData metaData = new CounterpartyPositionMeta(); [JsonConstructor] public CounterpartyPosition(IEnumerable positionIdentifier, LocalDateTime? openDateTime, IEnumerable tradeReference, IEnumerable party, IEnumerable partyRole, TradableProduct positionBase, ReferenceWithMetaContractDetails? contractDetails, ReferenceWithMetaExecutionDetails? executionDetails, ReferenceWithMetaCollateral? collateral) { PositionIdentifier = positionIdentifier; OpenDateTime = openDateTime; TradeReference = tradeReference; Party = party; PartyRole = partyRole; PositionBase = positionBase; ContractDetails = contractDetails; ExecutionDetails = executionDetails; Collateral = collateral; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the identifier(s) that uniquely identify a position for an identity issuer. A position can include multiple identifiers, for example an internal position identifer and a UTI (Unique Trade Identifier). /// public IEnumerable PositionIdentifier { get; } /// /// The date and time when the position was opened. /// public LocalDateTime? OpenDateTime { get; } /// /// Reference to all the trades that constitute the position. /// public IEnumerable TradeReference { get; } /// /// The parties involved in the position, including the Clearing Organization. /// public IEnumerable Party { get; } /// /// Represents the role each specified party takes in the position. /// public IEnumerable PartyRole { get; } /// /// Encapsulates the core constituents that characterize a position. /// public TradableProduct PositionBase { get; } /// public ReferenceWithMetaContractDetails? ContractDetails { get; } /// public ReferenceWithMetaExecutionDetails? ExecutionDetails { get; } /// public ReferenceWithMetaCollateral? Collateral { get; } } /// /// A business event represents a life cycle event of a position. The combination of the state changes results in a qualifiable life cycle event. /// public class CounterpartyPositionBusinessEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CounterpartyPositionBusinessEventMeta(); [JsonConstructor] public CounterpartyPositionBusinessEvent(Enums.PositionEventIntent intent, Enums.CorporateActionType? corporateActionIntent, LocalDate? eventDate, LocalDate? effectiveDate, IdentifiedList? packageInformation, CounterpartyPositionState? after) { Intent = intent; CorporateActionIntent = corporateActionIntent; EventDate = eventDate; EffectiveDate = effectiveDate; PackageInformation = packageInformation; After = after; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The intent attribute is meant to be specified when the event qualification cannot be programmatically inferred from the event features. As a result it is only associated with those primitives that can give way to such ambiguity, the quantityChange being one of those. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PositionEventIntent Intent { get; } /// /// The intent of a corporate action on the position. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CorporateActionType? CorporateActionIntent { get; } /// /// Specifies the date on which the event is taking place. This date is equal to the trade date in the case of a simple execution. However it can be different from the trade date, for example in the case of a partial termination. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EventDate { get; } /// /// The date on which the event contractually takes effect, when different from the event date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// /// Specifies the package information in case the business event represents several trades executed as a package (hence this attribute is optional). The package information is only instantiated once at the business event level to preserve referential integrity, whereas individual trades make reference to it to identify that they are part of a package. /// public IdentifiedList? PackageInformation { get; } /// /// Specifies the after position state(s) created. /// public CounterpartyPositionState? After { get; } } /// /// Defines the fundamental financial information that can be changed by a Primitive Event and by extension any business or life-cycle event. Each PositionState specifies where a Position is in its life-cycle. PositionState is a root type and as such, can be created independently to any other CDM data type, but can also be used as part of the CDM Event Model. /// public class CounterpartyPositionState : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CounterpartyPositionStateMeta(); [JsonConstructor] public CounterpartyPositionState(CounterpartyPosition counterpartyPosition, State? state, IEnumerable observationHistory, IEnumerable valuationHistory, _MetaFields? meta) { CounterpartyPosition = counterpartyPosition; State = state; ObservationHistory = observationHistory; ValuationHistory = valuationHistory; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the Position that has been effected by a business or life-cycle event. /// public CounterpartyPosition CounterpartyPosition { get; } /// /// Represents the State of the Position through its life-cycle. /// public State? State { get; } /// /// Represents the observed events related to a particular product or process, such as credit events or corporate actions. /// public IEnumerable ObservationHistory { get; } public IEnumerable ValuationHistory { get; } public _MetaFields? Meta { get; } } /// /// The credit default payout specification provides the details necessary for determining when a credit payout will be triggered as well as the parameters for calculating the payout and the settlement terms. The associated globalKey denotes the ability to associate a hash value to the CreditDefaultPayout instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class CreditDefaultPayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new CreditDefaultPayoutMeta(); [JsonConstructor] public CreditDefaultPayout(GeneralTerms generalTerms, IEnumerable protectionTerms, TransactedPrice? transactedPrice, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { GeneralTerms = generalTerms; ProtectionTerms = protectionTerms; TransactedPrice = transactedPrice; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The specification of the non-monetary terms for the Credit Derivative Transaction, including the buyer and seller and selected items from the ISDA 2014 Credit Definition article II, such as the reference obligation and related terms. /// public GeneralTerms GeneralTerms { get; } /// /// Specifies the terms for calculating a payout to protect the buyer of the swap in the case of a qualified credit event. These terms include the applicable credit events, the reference obligation, and in the case of a CDS on mortgage-backed securities, the floatingAmountEvents. /// public IEnumerable ProtectionTerms { get; } /// /// The qualification of the price at which the contract has been transacted, in terms of market fixed rate, initial points, market price and/or quotation style. In FpML, those attributes are positioned as part of the fee leg. /// public TransactedPrice? TransactedPrice { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// Specifies the relevant data regarding a credit event. /// public class CreditEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditEventMeta(); [JsonConstructor] public CreditEvent(Enums.CreditEventType creditEventType, LocalDate eventDeterminationDate, LocalDate? auctionDate, Price? finalPrice, decimal? recoveryPercent, IEnumerable publiclyAvailableInformation, ReferenceInformation referenceInformation) { CreditEventType = creditEventType; EventDeterminationDate = eventDeterminationDate; AuctionDate = auctionDate; FinalPrice = finalPrice; RecoveryPercent = recoveryPercent; PubliclyAvailableInformation = publiclyAvailableInformation; ReferenceInformation = referenceInformation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The type of credit event taking place. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditEventType CreditEventType { get; } /// /// The date in which the credit event is determined by the Credit Derivatives Determinations Comitee. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EventDeterminationDate { get; } /// /// The date on which the auction is scheduled to occur. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AuctionDate { get; } /// /// The final price resulting from the auction. /// public Price? FinalPrice { get; } /// /// The percentage of the original value of the asset affected by the credit event that can be recovered. /// public decimal? RecoveryPercent { get; } /// /// A public information source, e.g. a particular newspaper or electronic news service, that may publish relevant information used in the determination of whether or not a credit event has occurred. /// public IEnumerable PubliclyAvailableInformation { get; } /// /// The reference entity, part of a credit basket, impacted by the credit event. /// public ReferenceInformation ReferenceInformation { get; } } public class CreditEventNotice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditEventNoticeMeta(); [JsonConstructor] public CreditEventNotice(IEnumerable notifyingParty, Enums.BusinessCenter? businessCenter, PubliclyAvailableInformation? publiclyAvailableInformation) { NotifyingParty = notifyingParty; BusinessCenter = businessCenter; PubliclyAvailableInformation = publiclyAvailableInformation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The notifying party is the party that notifies the other party when a credit event has occurred by means of a credit event notice. If more than one party is referenced as being the notifying party then either party may notify the other of a credit event occurring. ISDA 2003 Term: Notifying Party. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable NotifyingParty { get; } /// /// Inclusion of this business center element implies that Greenwich Mean Time in Section 3.3 of the 2003 ISDA Credit Derivatives Definitions is replaced by the local time of the city indicated by the businessCenter element value. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessCenter? BusinessCenter { get; } /// /// A specified condition to settlement. Publicly available information means information that reasonably confirms any of the facts relevant to determining that a credit event or potential repudiation/moratorium, as applicable, has occurred. The ISDA defined list (2003) is the market standard and is considered comprehensive, and a minimum of two differing public sources must have published the relevant information, to declare a Credit Event. ISDA 2003 Term: Notice of Publicly Available Information Applicable. /// public PubliclyAvailableInformation? PubliclyAvailableInformation { get; } } /// /// A class to specify the applicable Credit Events that would trigger a settlement, as specified in the related Confirmation and defined in the ISDA 2014 Credit Definition article IV section 4.1. /// public class CreditEvents : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditEventsMeta(); [JsonConstructor] public CreditEvents(bool? bankruptcy, FailureToPay? failureToPay, bool? failureToPayPrincipal, bool? failureToPayInterest, bool? obligationDefault, bool? obligationAcceleration, bool? repudiationMoratorium, Restructuring? restructuring, bool? governmentalIntervention, bool? distressedRatingsDowngrade, bool? maturityExtension, bool? writedown, bool? impliedWritedown, Money? defaultRequirement, CreditEventNotice? creditEventNotice, _MetaFields? meta) { Bankruptcy = bankruptcy; FailureToPay = failureToPay; FailureToPayPrincipal = failureToPayPrincipal; FailureToPayInterest = failureToPayInterest; ObligationDefault = obligationDefault; ObligationAcceleration = obligationAcceleration; RepudiationMoratorium = repudiationMoratorium; Restructuring = restructuring; GovernmentalIntervention = governmentalIntervention; DistressedRatingsDowngrade = distressedRatingsDowngrade; MaturityExtension = maturityExtension; Writedown = writedown; ImpliedWritedown = impliedWritedown; DefaultRequirement = defaultRequirement; CreditEventNotice = creditEventNotice; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A credit event. The reference entity has been dissolved or has become insolvent. It also covers events that may be a precursor to insolvency such as instigation of bankruptcy or insolvency proceedings. Sovereign trades are not subject to Bankruptcy as 'technically' a Sovereign cannot become bankrupt. ISDA 2003 Term: Bankruptcy. /// public bool? Bankruptcy { get; } /// /// A credit event. This credit event triggers, after the expiration of any applicable grace period, if the reference entity fails to make due payments in an aggregate amount of not less than the payment requirement on one or more obligations (e.g. a missed coupon payment). ISDA 2003 Term: Failure to Pay. /// public FailureToPay? FailureToPay { get; } /// /// A credit event. Corresponds to the failure by the Reference Entity to pay an expected principal amount or the payment of an actual principal amount that is less than the expected principal amount. ISDA 2003 Term: Failure to Pay Principal. /// public bool? FailureToPayPrincipal { get; } /// /// A credit event. Corresponds to the failure by the Reference Entity to pay an expected interest amount or the payment of an actual interest amount that is less than the expected interest amount. ISDA 2003 Term: Failure to Pay Interest. /// public bool? FailureToPayInterest { get; } /// /// A credit event. One or more of the obligations have become capable of being declared due and payable before they would otherwise have been due and payable as a result of, or on the basis of, the occurrence of a default, event of default or other similar condition or event other than failure to pay. ISDA 2003 Term: Obligation Default. /// public bool? ObligationDefault { get; } /// /// A credit event. One or more of the obligations have been declared due and payable before they would otherwise have been due and payable as a result of, or on the basis of, the occurrence of a default, event of default or other similar condition or event other than failure to pay (preferred by the market over Obligation Default, because more definitive and encompasses the definition of Obligation Default - this is more favorable to the Seller). Subject to the default requirement amount. ISDA 2003 Term: Obligation Acceleration. /// public bool? ObligationAcceleration { get; } /// /// A credit event. The reference entity, or a governmental authority, either refuses to recognise or challenges the validity of one or more obligations of the reference entity, or imposes a moratorium thereby postponing payments on one or more of the obligations of the reference entity. Subject to the default requirement amount. ISDA 2003 Term: Repudiation/Moratorium. /// public bool? RepudiationMoratorium { get; } /// /// A credit event. A restructuring is an event that materially impacts the reference entity's obligations, such as an interest rate reduction, principal reduction, deferral of interest or principal, change in priority ranking, or change in currency or composition of payment. ISDA 2003 Term: Restructuring. /// public Restructuring? Restructuring { get; } /// /// A credit event. A governmental intervention is an event resulting from an action by a governmental authority that materially impacts the reference entity's obligations, such as an interest rate reduction, principal reduction, deferral of interest or principal, change in priority ranking, or change in currency or composition of payment. ISDA 2014 Term: Governmental Intervention. /// public bool? GovernmentalIntervention { get; } /// /// A credit event. Results from the fact that the rating of the reference obligation is down-graded to a distressed rating level. From a usage standpoint, this credit event is typically not applicable in case of RMBS trades. /// public bool? DistressedRatingsDowngrade { get; } /// /// A credit event. Results from the fact that the underlier fails to make principal payments as expected. /// public bool? MaturityExtension { get; } /// /// A credit event. Results from the fact that the underlier writes down its outstanding principal amount. /// public bool? Writedown { get; } /// /// A credit event. Results from the fact that losses occur to the underlying instruments that do not result in reductions of the outstanding principal of the reference obligation. /// public bool? ImpliedWritedown { get; } /// /// In relation to certain credit events, serves as a threshold for Obligation Acceleration, Obligation Default, Repudiation/Moratorium and Restructuring. Market standard is USD 10,000,000 (JPY 1,000,000,000 for all Japanese Yen trades). This is applied on an aggregate or total basis across all Obligations of the Reference Entity. Used to prevent technical/operational errors from triggering credit events. ISDA 2003 Term: Default Requirement. /// public Money? DefaultRequirement { get; } /// /// A specified condition to settlement. An irrevocable written or verbal notice that describes a credit event that has occurred. The notice is sent from the notifying party (either the buyer or the seller) to the counterparty. It provides information relevant to determining that a credit event has occurred. This is typically accompanied by Publicly Available Information. ISDA 2003 Term: Credit Event Notice. /// public CreditEventNotice? CreditEventNotice { get; } public _MetaFields? Meta { get; } } /// /// A class defining a Credit Default Swap Index. /// public class CreditIndexReferenceInformation : AbstractRosettaModelObject, IIndexReferenceInformation { private static readonly IRosettaMetaData metaData = new CreditIndexReferenceInformationMeta(); [JsonConstructor] public CreditIndexReferenceInformation(int? indexSeries, int? indexAnnexVersion, LocalDate? indexAnnexDate, FieldWithMetaIndexAnnexSourceEnum? indexAnnexSource, IEnumerable excludedReferenceEntity, Tranche? tranche, SettledEntityMatrix? settledEntityMatrix, decimal? indexFactor, Enums.CreditSeniority? seniority, _MetaFields? meta, FieldWithMetaString? indexName, IEnumerable indexId) { IndexSeries = indexSeries; IndexAnnexVersion = indexAnnexVersion; IndexAnnexDate = indexAnnexDate; IndexAnnexSource = indexAnnexSource; ExcludedReferenceEntity = excludedReferenceEntity; Tranche = tranche; SettledEntityMatrix = settledEntityMatrix; IndexFactor = indexFactor; Seniority = seniority; Meta = meta; IndexName = indexName; IndexId = indexId; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A CDS index series identifier, e.g. 1, 2, 3 etc. /// public int? IndexSeries { get; } /// /// A CDS index series version identifier, e.g. 1, 2, 3 etc. /// public int? IndexAnnexVersion { get; } /// /// A CDS index series annex date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? IndexAnnexDate { get; } /// /// A CDS index series annex source. /// public FieldWithMetaIndexAnnexSourceEnum? IndexAnnexSource { get; } /// /// Excluded reference entity. /// public IEnumerable ExcludedReferenceEntity { get; } /// /// This element contains CDS tranche terms. /// public Tranche? Tranche { get; } /// /// Used to specify the Relevant Settled Entity Matrix when there are settled entities at the time of the trade. /// public SettledEntityMatrix? SettledEntityMatrix { get; } /// /// Index Factor is the index version factor or percent, expressed as an absolute decimal value between 0 and 1, that multiplied by the original notional amount yields the notional amount covered by the seller of protection. /// public decimal? IndexFactor { get; } /// /// Seniority of debt instruments comprising the index. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditSeniority? Seniority { get; } public _MetaFields? Meta { get; } /// public FieldWithMetaString? IndexName { get; } /// public IEnumerable IndexId { get; } } /// /// A class to represent the credit limit utilisation information. /// public class CreditLimitInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditLimitInformationMeta(); [JsonConstructor] public CreditLimitInformation(IEnumerable limitApplicable) { LimitApplicable = limitApplicable; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public IEnumerable LimitApplicable { get; } } /// /// Credit limit utilisation breakdown by executed trades and pending orders. /// public class CreditLimitUtilisation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditLimitUtilisationMeta(); [JsonConstructor] public CreditLimitUtilisation(CreditLimitUtilisationPosition? executed, CreditLimitUtilisationPosition? pending) { Executed = executed; Pending = pending; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Credit limit utilisation attributable to executed trades. /// public CreditLimitUtilisationPosition? Executed { get; } /// /// Credit limit utilisation attributable to pending unexecuted orders. /// public CreditLimitUtilisationPosition? Pending { get; } } public class CreditLimitUtilisationPosition : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditLimitUtilisationPositionMeta(); [JsonConstructor] public CreditLimitUtilisationPosition(decimal? shortPosition, decimal? longPosition, decimal? global) { ShortPosition = shortPosition; LongPosition = longPosition; Global = global; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Credit limit utilisation attributable to short positions. /// public decimal? ShortPosition { get; } /// /// Credit limit utilisation attributable to long positions. /// public decimal? LongPosition { get; } /// /// Global credit limit utilisation amount, agnostic of long/short position direction. /// public decimal? Global { get; } } /// /// Represents a class to specify the credit notation as the combination of agency, notation, scale and debt type qualifications. /// public class CreditNotation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditNotationMeta(); [JsonConstructor] public CreditNotation(Enums.CreditRatingAgency agency, FieldWithMetaString notation, FieldWithMetaString? scale, CreditRatingDebt? debt, Enums.CreditRatingOutlook? outlook, Enums.CreditRatingCreditWatch? creditWatch) { Agency = agency; Notation = notation; Scale = scale; Debt = debt; Outlook = outlook; CreditWatch = creditWatch; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies The credit agency to which the other variables (notation, scale, debt type) refer to. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditRatingAgency Agency { get; } /// /// Specifies The credit rating notation. As it varies among credit rating agencies, FpML doesn't specify a default scheme. /// public FieldWithMetaString Notation { get; } /// /// Specifies the credit rating scale, with a typical distinction between short term, long term. FpML doesn't specify a default scheme, which is hence not specified as an enumeration as part of the CDM. /// public FieldWithMetaString? Scale { get; } /// /// Specifies the credit rating debt type (e.g. long term, high yield, deposits, ...) associated with the credit rating notation and scale. /// public CreditRatingDebt? Debt { get; } /// /// Assesses the potential direction of a long-term credit rating over the intermediate term, which is generally up to two years for investment grade and generally up to one year for speculative grade. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditRatingOutlook? Outlook { get; } /// /// Indicates the potential direction of a short-term or long-term rating. It focuses on identifiable events and short-term trends that cause ratings to be placed under special surveillance. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditRatingCreditWatch? CreditWatch { get; } } /// /// Represents the credit rating notation higher level construct, which provides the ability to specify multiple rating notations. /// public class CreditNotations : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditNotationsMeta(); [JsonConstructor] public CreditNotations(CreditNotation? creditNotation, MultipleCreditNotations? creditNotations) { CreditNotation = creditNotation; CreditNotationsValue = creditNotations; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies only one credit notation is determined. /// public CreditNotation? CreditNotation { get; } /// /// Specifies if several credit notations exist, alongside an 'any' or 'all' or all condition. /// [JsonProperty(PropertyName = "creditNotations")] public MultipleCreditNotations? CreditNotationsValue { get; } } /// /// Specifies the credit rating debt type(s) associated with the credit rating notation and scale. When several debt types are specified, they must be qualified through an 'any' or 'all'. /// public class CreditRatingDebt : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditRatingDebtMeta(); [JsonConstructor] public CreditRatingDebt(FieldWithMetaString? debtType, MultipleDebtTypes? debtTypes) { DebtType = debtType; DebtTypes = debtTypes; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies when there is only one debt type. FpML doesn't specify values in relation to the associated scheme, which is hence not specified as an enumeration as part of the CDM. /// public FieldWithMetaString? DebtType { get; } /// /// Specifies if there are several debt types, alongside an 'any' or 'all' or all condition. As an example, Baa1 rating is required for any long term debt and deposit. /// public MultipleDebtTypes? DebtTypes { get; } } /// /// The set of elections which specify a Credit Support Annex or Deed. /// public class CreditSupportAgreementElections : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CreditSupportAgreementElectionsMeta(); [JsonConstructor] public CreditSupportAgreementElections() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// A class that is used for including the currency exchange rates used to cross between the traded currencies for non-base currency FX contracts. /// public class CrossRate : AbstractRosettaModelObject, IQuotedCurrencyPair { private static readonly IRosettaMetaData metaData = new CrossRateMeta(); [JsonConstructor] public CrossRate(decimal rate, decimal? spotRate, decimal? forwardPoints, FieldWithMetaString currency1, FieldWithMetaString currency2, Enums.QuoteBasis quoteBasis) { Rate = rate; SpotRate = spotRate; ForwardPoints = forwardPoints; Currency1 = currency1; Currency2 = currency2; QuoteBasis = quoteBasis; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The exchange rate used to cross between the traded currencies. /// public decimal Rate { get; } /// /// An optional element used for FX forwards and certain types of FX OTC options. For deals consummated in the FX Forwards Market, this represents the current market rate for a particular currency pair. /// public decimal? SpotRate { get; } /// /// An optional element used for deals consummated in the FX Forwards market. Forward points represent the interest rate differential between the two currencies traded and are quoted as a premium or a discount. Forward points are added to, or subtracted from, the spot rate to create the rate of the forward trade. /// public decimal? ForwardPoints { get; } /// public FieldWithMetaString Currency1 { get; } /// public FieldWithMetaString Currency2 { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuoteBasis QuoteBasis { get; } } public class Curve : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CurveMeta(); [JsonConstructor] public Curve(InterestRateCurve? interestRateCurve, FieldWithMetaCommodityReferencePriceEnum? commodityCurve) { InterestRateCurve = interestRateCurve; CommodityCurve = commodityCurve; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public InterestRateCurve? InterestRateCurve { get; } public FieldWithMetaCommodityReferencePriceEnum? CommodityCurve { get; } } /// /// A class to specify an offset either as a normalized [multiplier, period, dayType] or as a custom provision of type string. /// public class CustomisableOffset : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CustomisableOffsetMeta(); [JsonConstructor] public CustomisableOffset(Offset? offset, string? customProvision) { Offset = offset; CustomProvision = customProvision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Offset? Offset { get; } public string? CustomProvision { get; } } /// /// In its initial iteration, this class is meant to support the DTCC TIW workflow information. /// public class CustomisedWorkflow : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new CustomisedWorkflowMeta(); [JsonConstructor] public CustomisedWorkflow(string itemName, string itemValue) { ItemName = itemName; ItemValue = itemValue; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// In this initial iteration, this corresponds to the DTCC TIW element name. /// public string ItemName { get; } /// /// In this initial iteration, this corresponds to the DTCC value. /// public string ItemValue { get; } } /// /// List of dates. /// public class DateList : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DateListMeta(); [JsonConstructor] public DateList(IEnumerable date) { Date = date; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public IEnumerable Date { get; } } /// /// A class defining a contiguous series of calendar dates. The date range is defined as all the dates between and including the start and the end date. The start date must fall on or before the end date. /// public class DateRange : AbstractRosettaModelObject, IDateRange { private static readonly IRosettaMetaData metaData = new DateRangeMeta(); [JsonConstructor] public DateRange(LocalDate startDate, LocalDate endDate) { StartDate = startDate; EndDate = endDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate StartDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EndDate { get; } } /// /// A data to: provide the ability to point to multiple payment nodes in the document through the unbounded paymentDatesReference. /// public class DateRelativeToCalculationPeriodDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DateRelativeToCalculationPeriodDatesMeta(); [JsonConstructor] public DateRelativeToCalculationPeriodDates(IEnumerable calculationPeriodDatesReference) { CalculationPeriodDatesReference = calculationPeriodDatesReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A set of href pointers to calculation period dates defined somewhere else in the document. /// public IEnumerable CalculationPeriodDatesReference { get; } } /// /// A data to: provide the ability to point to multiple payment nodes in the document through the unbounded paymentDatesReference. /// public class DateRelativeToPaymentDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DateRelativeToPaymentDatesMeta(); [JsonConstructor] public DateRelativeToPaymentDates(IEnumerable paymentDatesReference) { PaymentDatesReference = paymentDatesReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A set of href pointers to payment dates defined somewhere else in the document. /// public IEnumerable PaymentDatesReference { get; } } /// /// A data to: provide the ability to point to multiple payment nodes in the document through the unbounded paymentDatesReference. /// public class DateRelativeToValuationDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DateRelativeToValuationDatesMeta(); [JsonConstructor] public DateRelativeToValuationDates(IEnumerable valuationDatesReference) { ValuationDatesReference = valuationDatesReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A set of href pointers to valuation period dates defined somewhere else in the document. /// public IEnumerable ValuationDatesReference { get; } } /// /// List of dateTimes. /// public class DateTimeList : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DateTimeListMeta(); [JsonConstructor] public DateTimeList(IEnumerable dateTime) { DateTime = dateTime; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The CDM specifies that the zoned date time is to be expressed in accordance with ISO 8601, either as UTC as an offset to UTC. /// public IEnumerable DateTime { get; } } /// /// Defines a date and value pair. This definition is used for varying rate or amount schedules, e.g. a notional amortisation or a step-up coupon schedule. /// public class DatedValue : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DatedValueMeta(); [JsonConstructor] public DatedValue(LocalDate date, decimal value, _MetaFields? meta) { Date = date; Value = value; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date on which the associated step value becomes effective. This day may be subject to adjustment in accordance with a business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate Date { get; } /// /// The rate of amount which becomes effective on the associated step date. A rate of 5% would be represented as 0.05. /// public decimal Value { get; } public _MetaFields? Meta { get; } } /// /// Specifies selected economics of a debt instrument. /// public class DebtEconomics : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DebtEconomicsMeta(); [JsonConstructor] public DebtEconomics(Enums.DebtSeniority? debtSeniority, Enums.DebtInterest? debtInterest, Enums.DebtPrincipal? debtPrincipal) { DebtSeniority = debtSeniority; DebtInterest = debtInterest; DebtPrincipal = debtPrincipal; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the order of repayment in the event of a sale or bankruptcy of the issuer or a related party (eg guarantor). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DebtSeniority? DebtSeniority { get; } /// /// Specifies the general rule for periodic interest rate payment. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DebtInterest? DebtInterest { get; } /// /// Specifies the general rule for repayment of principal. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DebtPrincipal? DebtPrincipal { get; } } /// /// Specifies the type of debt instrument. /// public class DebtType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DebtTypeMeta(); [JsonConstructor] public DebtType(Enums.DebtClass? debtClass, IEnumerable debtEconomics) { DebtClass = debtClass; DebtEconomics = debtEconomics; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the characteristics of a debt instrument. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DebtClass? DebtClass { get; } /// /// Specifies selected financial terms of a debt instrument. /// public IEnumerable DebtEconomics { get; } } /// /// A class to specify all the ISDA terms relevant to defining the deliverable obligations. /// public class DeliverableObligations : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DeliverableObligationsMeta(); [JsonConstructor] public DeliverableObligations(bool? accruedInterest, Enums.ObligationCategory? category, bool? notSubordinated, SpecifiedCurrency? specifiedCurrency, bool? notSovereignLender, NotDomesticCurrency? notDomesticCurrency, bool? notDomesticLaw, bool? listed, bool? notContingent, bool? notDomesticIssuance, PCDeliverableObligationCharac? assignableLoan, PCDeliverableObligationCharac? consentRequiredLoan, LoanParticipation? directLoanParticipation, bool? transferable, Period? maximumMaturity, bool? acceleratedOrMatured, bool? notBearer, bool? fullFaithAndCreditObLiability, bool? generalFundObligationLiability, bool? revenueObligationLiability, LoanParticipation? indirectLoanParticipation, string? excluded, string? othReferenceEntityObligations) { AccruedInterest = accruedInterest; Category = category; NotSubordinated = notSubordinated; SpecifiedCurrency = specifiedCurrency; NotSovereignLender = notSovereignLender; NotDomesticCurrency = notDomesticCurrency; NotDomesticLaw = notDomesticLaw; Listed = listed; NotContingent = notContingent; NotDomesticIssuance = notDomesticIssuance; AssignableLoan = assignableLoan; ConsentRequiredLoan = consentRequiredLoan; DirectLoanParticipation = directLoanParticipation; Transferable = transferable; MaximumMaturity = maximumMaturity; AcceleratedOrMatured = acceleratedOrMatured; NotBearer = notBearer; FullFaithAndCreditObLiability = fullFaithAndCreditObLiability; GeneralFundObligationLiability = generalFundObligationLiability; RevenueObligationLiability = revenueObligationLiability; IndirectLoanParticipation = indirectLoanParticipation; Excluded = excluded; OthReferenceEntityObligations = othReferenceEntityObligations; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether accrued interest is included (true) or not (false). For cash settlement this specifies whether quotations should be obtained inclusive or not of accrued interest. For physical settlement this specifies whether the buyer should deliver the obligation with an outstanding principal balance that includes or excludes accrued interest. ISDA 2003 Term: Include/Exclude Accrued Interest. /// public bool? AccruedInterest { get; } /// /// Used in both obligations and deliverable obligations to represent a class or type of securities which apply. ISDA 2003 Term: Obligation Category/Deliverable Obligation Category. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ObligationCategory? Category { get; } /// /// An obligation and deliverable obligation characteristic. An obligation that ranks at least equal with the most senior Reference Obligation in priority of payment or, if no Reference Obligation is specified in the related Confirmation, the obligations of the Reference Entity that are senior. ISDA 2003 Term: Not Subordinated. /// public bool? NotSubordinated { get; } /// /// An obligation and deliverable obligation characteristic. The currency or currencies in which an obligation or deliverable obligation must be payable. ISDA 2003 Term: Specified Currency. /// public SpecifiedCurrency? SpecifiedCurrency { get; } /// /// An obligation and deliverable obligation characteristic. Any obligation that is not primarily (majority) owed to a Sovereign or Supranational Organisation. ISDA 2003 Term: Not Sovereign Lender. /// public bool? NotSovereignLender { get; } /// /// An obligation and deliverable obligation characteristic. Any obligation that is payable in any currency other than the domestic currency. Domestic currency is either the currency so specified or, if no currency is specified, the currency of (a) the reference entity, if the reference entity is a sovereign, or (b) the jurisdiction in which the relevant reference entity is organised, if the reference entity is not a sovereign. ISDA 2003 Term: Not Domestic Currency. /// public NotDomesticCurrency? NotDomesticCurrency { get; } /// /// An obligation and deliverable obligation characteristic. If the reference entity is a Sovereign, this means any obligation that is not subject to the laws of the reference entity. If the reference entity is not a sovereign, this means any obligation that is not subject to the laws of the jurisdiction of the reference entity. ISDA 2003 Term: Not Domestic Law. /// public bool? NotDomesticLaw { get; } /// /// An obligation and deliverable obligation characteristic. Indicates whether or not the obligation is quoted, listed or ordinarily purchased and sold on an exchange. ISDA 2003 Term: Listed. /// public bool? Listed { get; } /// /// A deliverable obligation characteristic. In essence Not Contingent means the repayment of principal cannot be dependant on a formula/index, i.e. to prevent the risk of being delivered an instrument that may never pay any element of principal, and to ensure that the obligation is interest bearing (on a regular schedule). ISDA 2003 Term: Not Contingent. /// public bool? NotContingent { get; } /// /// An obligation and deliverable obligation characteristic. Any obligation other than an obligation that was intended to be offered for sale primarily in the domestic market of the relevant Reference Entity. This specifies that the obligation must be an internationally recognised bond. ISDA 2003 Term: Not Domestic Issuance. /// public bool? NotDomesticIssuance { get; } /// /// A deliverable obligation characteristic. A loan that is freely assignable to a bank or financial institution without the consent of the Reference Entity or the guarantor, if any, of the loan (or the consent of the applicable borrower if a Reference Entity is guaranteeing the loan) or any agent. ISDA 2003 Term: Assignable Loan. /// public PCDeliverableObligationCharac? AssignableLoan { get; } /// /// A deliverable obligation characteristic. A loan that is capable of being assigned with the consent of the Reference Entity or the guarantor, if any, of the loan or any agent. ISDA 2003 Term: Consent Required Loan. /// public PCDeliverableObligationCharac? ConsentRequiredLoan { get; } /// /// A deliverable obligation characteristic. A loan with a participation agreement whereby the buyer is capable of creating, or procuring the creation of, a contractual right in favour of the seller that provides the seller with recourse to the participation seller for a specified share in any payments due under the relevant loan which are received by the participation seller. ISDA 2003 Term: Direct Loan Participation. /// public LoanParticipation? DirectLoanParticipation { get; } /// /// A deliverable obligation characteristic. An obligation that is transferable to institutional investors without any contractual, statutory or regulatory restrictions. ISDA 2003 Term: Transferable. /// public bool? Transferable { get; } /// /// A deliverable obligation characteristic. An obligation that has a remaining maturity from the Physical Settlement Date of not greater than the period specified. ISDA 2003 Term: Maximum Maturity. /// public Period? MaximumMaturity { get; } /// /// A deliverable obligation characteristic. An obligation at time of default is due to mature and due to be repaid, or as a result of downgrade/bankruptcy is due to be repaid as a result of an acceleration clause. ISDA 2003 Term: Accelerated or Matured. /// public bool? AcceleratedOrMatured { get; } /// /// A deliverable obligation characteristic. Any obligation that is not a bearer instrument. This applies to Bonds only and is meant to avoid tax, fraud and security/delivery provisions that can potentially be associated with Bearer Bonds. ISDA 2003 Term: Not Bearer. /// public bool? NotBearer { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published additional provisions for U.S. Municipal as Reference Entity. ISDA 2003 Term: Full Faith and Credit Obligation Liability. /// public bool? FullFaithAndCreditObLiability { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published additional provisions for U.S. Municipal as Reference Entity. ISDA 2003 Term: General Fund Obligation Liability. /// public bool? GeneralFundObligationLiability { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published additional provisions for U.S. Municipal as Reference Entity. ISDA 2003 Term: Revenue Obligation Liability. /// public bool? RevenueObligationLiability { get; } /// /// ISDA 1999 Term: Indirect Loan Participation. NOTE: Only applicable as a deliverable obligation under ISDA Credit 1999. /// public LoanParticipation? IndirectLoanParticipation { get; } /// /// A free format string to specify any excluded obligations or deliverable obligations, as the case may be, of the reference entity or excluded types of obligations or deliverable obligations. ISDA 2003 Term: Excluded Obligations/Excluded Deliverable Obligations. /// public string? Excluded { get; } /// /// This element is used to specify any other obligations of a reference entity in both obligations and deliverable obligations. The obligations can be specified free-form. ISDA 2003 Term: Other Obligations of a Reference Entity. /// public string? OthReferenceEntityObligations { get; } } /// /// A class to specify the application of Interest Amount with respect the Delivery Amount. /// public class DeliveryAmount : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DeliveryAmountMeta(); [JsonConstructor] public DeliveryAmount(Enums.DeliveryAmountElection? standardElection, string? customElection) { StandardElection = standardElection; CustomElection = customElection; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The standard election as specified by an enumeration. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeliveryAmountElection? StandardElection { get; } /// /// The custom election that might be specified by the parties to the agreement. /// public string? CustomElection { get; } } /// /// Specifies a specific date or the parameters for identifying the relevant contract date when the commodity reference price is a futures contract. /// public class DeliveryDateParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DeliveryDateParametersMeta(); [JsonConstructor] public DeliveryDateParameters(Offset? deliveryNearby, AdjustableDate? deliveryDate, Offset? deliveryDateRollConvention, Offset? deliveryDateExpirationConvention) { DeliveryNearby = deliveryNearby; DeliveryDate = deliveryDate; DeliveryDateRollConvention = deliveryDateRollConvention; DeliveryDateExpirationConvention = deliveryDateExpirationConvention; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Provides a container for the parametric representation that specifies which nearby contract date would be used as a refrence for a price. /// public Offset? DeliveryNearby { get; } /// /// Specifies the specific contract date for the contract that should be referenced for a price. /// public AdjustableDate? DeliveryDate { get; } /// /// Specifies, for a Commodity Transaction that references a listed future, the day on which the specified future will roll to the next nearby month prior to the expiration of the referenced future. If the future will not roll at all - i.e. the price will be taken from the expiring contract, 0 days should be specified here. If the future will roll to the next nearby on the last trading day - i.e. the price will be taken from the next nearby on the last trading day, then 1 business day should be specified and so on. /// public Offset? DeliveryDateRollConvention { get; } /// /// Specifies, for a Commodity Transaction that references a listed future, the day on which the specified future will expire ahead of the actual expiration of the referenced future. For example: Z21 Contract expires on 19Nov21, with an adjust of 2D the 'expire' will be 16Nov21. DeliveryDateRollConvention takes precedence. Example: Pricing on the Z21 Contract with NearbyContractDay and a deliveryDateRoll of 10D, Sampling of the F22 Contract will occur on 8Nov21 through the last Date of the Z21 Contract. With an ExpConvention of 5D, the last sampling date on the F22 contract will be 12Nov21. /// public Offset? DeliveryDateExpirationConvention { get; } } public class DerivInstrmAttrbts : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DerivInstrmAttrbtsMeta(); [JsonConstructor] public DerivInstrmAttrbts(string xpryDt, string pricMltplr, UndrlygInstrm undrlygInstrm, string dlvryTp) { XpryDt = xpryDt; PricMltplr = pricMltplr; UndrlygInstrm = undrlygInstrm; DlvryTp = dlvryTp; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string XpryDt { get; } public string PricMltplr { get; } public UndrlygInstrm UndrlygInstrm { get; } public string DlvryTp { get; } } /// /// Specifies the method according to which an amount or a date is determined. /// public class DeterminationMethodology : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DeterminationMethodologyMeta(); [JsonConstructor] public DeterminationMethodology(Enums.DeterminationMethod? determinationMethod, Enums.AveragingCalculationMethod? averagingMethod) { DeterminationMethod = determinationMethod; AveragingMethod = averagingMethod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a more granular dimention of observation. Typically relevent for resolving a unique equity price, which can be expressed as trade-weighted or volume-weighted averages. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? DeterminationMethod { get; } /// /// Specifies enumerations for the type of averaging calculation. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AveragingCalculationMethod? AveragingMethod { get; } } /// /// Defines the roles and related terms which document the agreement of parties about any determination requirements ; mostly about Extraordinary Events, without being necessarily restricted to such scope, as further specified in the particular product at stake e.g. for instance when Calculation Agent is mentioned as the Price Determination Method enumarated value, etc. /// public class DeterminationRolesAndTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DeterminationRolesAndTermsMeta(); [JsonConstructor] public DeterminationRolesAndTerms() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// A data defining: discounting information. The 2000 ISDA definitions, section 8.4. discounting (related to the calculation of a discounted fixed amount or floating amount) apply. This type must only be included if discounting applies. /// public class DiscountingMethod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DiscountingMethodMeta(); [JsonConstructor] public DiscountingMethod(Enums.DiscountingType discountingType, decimal? discountRate, FieldWithMetaDayCountFractionEnum? discountRateDayCountFraction) { DiscountingType = discountingType; DiscountRate = discountRate; DiscountRateDayCountFraction = discountRateDayCountFraction; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The discounting method that is applicable. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DiscountingType DiscountingType { get; } /// /// A discount rate, expressed as a decimal, to be used in the calculation of a discounted amount. A discount amount of 5% would be represented as 0.05. /// public decimal? DiscountRate { get; } /// /// A discount day count fraction to be used in the calculation of a discounted amount. /// public FieldWithMetaDayCountFractionEnum? DiscountRateDayCountFraction { get; } } /// /// A class to specify the Distributions and Interest Payment provisions applicable to the collateral agreement. /// public class DistributionAndInterestPayment : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DistributionAndInterestPaymentMeta(); [JsonConstructor] public DistributionAndInterestPayment(IEnumerable interestParameters) { InterestParameters = interestParameters; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the interest parameters for the various currencies, margin types, posting parties. /// public IEnumerable InterestParameters { get; } } /// /// The parameters which define whether dividends are applicable /// public class DividendApplicability : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendApplicabilityMeta(); [JsonConstructor] public DividendApplicability(bool? optionsExchangeDividends, bool? additionalDividends, bool? allDividends) { OptionsExchangeDividends = optionsExchangeDividends; AdditionalDividends = additionalDividends; AllDividends = allDividends; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// If present and true, then options exchange dividends are applicable. /// public bool? OptionsExchangeDividends { get; } /// /// If present and true, then additional dividends are applicable. /// public bool? AdditionalDividends { get; } /// /// Represents the European Master Confirmation value of 'All Dividends' which, when applicable, signifies that, for a given Ex-Date, the daily observed Share Price for that day is adjusted (reduced) by the cash dividend and/or the cash value of any non cash dividend per Share (including Extraordinary Dividends) declared by the Issuer. All Dividends in accordance with the ISDA 2002 Equity Derivatives Definitions. /// public bool? AllDividends { get; } } /// /// A class to specify the currency in which the dividends will be denominated, i.e. either in the dividend currency or in a currency specified as part of the contract. /// public class DividendCurrency : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendCurrencyMeta(); [JsonConstructor] public DividendCurrency(FieldWithMetaString? currency, Enums.DeterminationMethod? determinationMethod, BasicReferenceWithMetaString? currencyReference) { Currency = currency; DeterminationMethod = determinationMethod; CurrencyReference = currencyReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The currency in which the dividend is denominated. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public FieldWithMetaString? Currency { get; } /// /// Specifies the method according to which the dividend is determined, e.g. the dividend currency. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? DeterminationMethod { get; } /// /// Reference to a currency specified elsewhere in the document /// public BasicReferenceWithMetaString? CurrencyReference { get; } } /// /// A class to specify the dividend date by reference to another date, with the ability to apply and offset. This class doesn't exist in FpML and is meant to simplify the choice constraint associated with the DividendPaymentDate class. /// public class DividendDateReference : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendDateReferenceMeta(); [JsonConstructor] public DividendDateReference(Enums.DividendDateReference dateReference, Offset? paymentDateOffset) { DateReference = dateReference; PaymentDateOffset = paymentDateOffset; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specification of the dividend date using an enumeration, with values such as the pay date, the ex-date or the record date. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendDateReference DateReference { get; } /// /// Only to be used when SharePayment has been specified in the dividendDateReference element. The number of Currency Business Days following the day on which the Issuer of the Shares pays the relevant dividend to holders of record of the Shares. /// public Offset? PaymentDateOffset { get; } } /// /// A class describing the date on which the dividend will be paid/received. This class is also used to specify the date on which the FX rate will be determined, when applicable. /// public class DividendPaymentDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendPaymentDateMeta(); [JsonConstructor] public DividendPaymentDate(DividendDateReference? dividendDateReference, ReferenceWithMetaAdjustableOrRelativeDate? dividendDate) { DividendDateReference = dividendDateReference; DividendDate = dividendDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public DividendDateReference? DividendDateReference { get; } public ReferenceWithMetaAdjustableOrRelativeDate? DividendDate { get; } } /// /// A class describing the dividend payout ratio associated with an equity underlier. In certain cases the actual ratio is not known on trade inception, and only general conditions are then specified. /// public class DividendPayoutRatio : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendPayoutRatioMeta(); [JsonConstructor] public DividendPayoutRatio(decimal totalRatio, decimal? cashRatio, decimal? nonCashRatio, Product? basketConstituent) { TotalRatio = totalRatio; CashRatio = cashRatio; NonCashRatio = nonCashRatio; BasketConstituent = basketConstituent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the total actual dividend payout ratio associated with the equity underlier. A ratio of 90% should be expressed at 0.90. /// public decimal TotalRatio { get; } /// /// Specifies the cash actual dividend payout ratio associated with the equity underlier. A ratio of 90% should be expressed at 0.90. /// public decimal? CashRatio { get; } /// /// Specifies the non cash actual dividend payout ratio associated with the equity underlier. A ratio of 90% should be expressed at 0.90. /// public decimal? NonCashRatio { get; } /// /// In the case of a basket underlier, specifies to which component of the basket this particular set of dividend payout ratios correspond. /// public Product? BasketConstituent { get; } } /// /// Time bounded dividend payment periods, each with a dividend payment date per period. /// public class DividendPeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendPeriodMeta(); [JsonConstructor] public DividendPeriod(DividendPaymentDate? startDate, DividendPaymentDate? endDate, BusinessDayAdjustments dateAdjustments, Product? basketConstituent, DividendPaymentDate dividendPaymentDate, AdjustableOrRelativeDate? dividendValuationDate) { StartDate = startDate; EndDate = endDate; DateAdjustments = dateAdjustments; BasketConstituent = basketConstituent; DividendPaymentDate = dividendPaymentDate; DividendValuationDate = dividendValuationDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Dividend period start date. /// public DividendPaymentDate? StartDate { get; } /// /// Dividend period end date. /// public DividendPaymentDate? EndDate { get; } /// /// Date adjustments for all unadjusted dates in this dividend period. /// public BusinessDayAdjustments DateAdjustments { get; } /// /// For basket undeliers, reference to the basket component which is paying dividends in the specified period. /// public Product? BasketConstituent { get; } /// /// Specifies when the dividend will be paid to the receiver of the equity return. Has the meaning as defined in the ISDA 2002 Equity Derivatives Definitions. Is not applicable in the case of a dividend reinvestment election. /// public DividendPaymentDate DividendPaymentDate { get; } /// /// Specifies the dividend valuation dates of the swap. /// public AdjustableOrRelativeDate? DividendValuationDate { get; } } /// /// A class describing the conditions governing the payment of dividends to the receiver of the equity return, with the exception of the dividend payout ratio, which is defined for each of the underlying components. /// public class DividendReturnTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendReturnTermsMeta(); [JsonConstructor] public DividendReturnTerms(IEnumerable dividendPayoutRatio, bool? dividendReinvestment, Enums.DividendEntitlement? dividendEntitlement, Enums.DividendAmountType? dividendAmountType, string? performance, Enums.DividendPeriod? firstOrSecondPeriod, Enums.AncillaryRole? extraordinaryDividendsParty, Enums.DividendAmountType? excessDividendAmount, DividendCurrency? dividendCurrency, Enums.NonCashDividendTreatment? nonCashDividendTreatment, Enums.DividendComposition? dividendComposition, bool? specialDividends, bool? materialDividend, IEnumerable dividendPeriod) { DividendPayoutRatio = dividendPayoutRatio; DividendReinvestment = dividendReinvestment; DividendEntitlement = dividendEntitlement; DividendAmountType = dividendAmountType; Performance = performance; FirstOrSecondPeriod = firstOrSecondPeriod; ExtraordinaryDividendsParty = extraordinaryDividendsParty; ExcessDividendAmount = excessDividendAmount; DividendCurrency = dividendCurrency; NonCashDividendTreatment = nonCashDividendTreatment; DividendComposition = dividendComposition; SpecialDividends = specialDividends; MaterialDividend = materialDividend; DividendPeriod = dividendPeriod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the dividend payout ratio associated with each underlier. In FpML 5.10 the payout is positioned at the underlier level, although there is an intent to reconsider this approach and position it at the leg level. This is approach adopted by the CDM. /// public IEnumerable DividendPayoutRatio { get; } /// /// Boolean element that defines whether the dividend will be reinvested or not. /// public bool? DividendReinvestment { get; } /// /// Defines the date on which the receiver of the equity return is entitled to the dividend. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendEntitlement? DividendEntitlement { get; } /// /// Specifies whether the dividend is paid with respect to the Dividend Period. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendAmountType? DividendAmountType { get; } /// /// Performance calculation, in accordance with Part 1 Section 12 of the 2018 ISDA CDM Equity Confirmation for Security Equity Swap, Para 75. 'Equity Performance'. Cumulative performance is used as a notional multiplier factor on both legs of an Equity Swap. /// public string? Performance { get; } /// /// 2002 ISDA Equity Derivatives Definitions: Dividend Period as either the First Period or the Second Period. | /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendPeriod? FirstOrSecondPeriod { get; } /// /// Specifies the party which determines if dividends are extraordinary in relation to normal levels. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AncillaryRole? ExtraordinaryDividendsParty { get; } /// /// Determination of Gross Cash Dividend per Share. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendAmountType? ExcessDividendAmount { get; } /// /// Specifies the currency in which the dividend will be denominated, e.g. the dividend currency, or a specified currency. This class is not specified as such in FpML, which makes use of the CurrencyAndDeterminationMethod.model to specify such terms. /// public DividendCurrency? DividendCurrency { get; } /// /// Specifies the treatment of Non-Cash Dividends. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NonCashDividendTreatment? NonCashDividendTreatment { get; } /// /// Specifies how the composition of Dividends is to be determined. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendComposition? DividendComposition { get; } /// /// Specifies the method according to which special dividends are determined. /// public bool? SpecialDividends { get; } /// /// If present and true, then material non cash dividends are applicable. /// public bool? MaterialDividend { get; } /// /// One to many time bounded dividend payment periods, each with a dividend payment date per period. /// public IEnumerable DividendPeriod { get; } } /// /// Information related to dividends and payments. /// public class DividendTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DividendTermsMeta(); [JsonConstructor] public DividendTerms(DividendPayoutRatio manufacturedIncomeRequirement, Enums.DividendEntitlement? dividendEntitlement, Money? minimumBillingAmount) { ManufacturedIncomeRequirement = manufacturedIncomeRequirement; DividendEntitlement = dividendEntitlement; MinimumBillingAmount = minimumBillingAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the proportion of the value of the dividend on the borrowed shares that the borrower is legally obligated to return to the lender. /// public DividendPayoutRatio ManufacturedIncomeRequirement { get; } /// /// Defines the date on which the receiver of the equity return is entitled to the dividend. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DividendEntitlement? DividendEntitlement { get; } /// /// daily fee increments accrue until a threshold is crossed, at which point payment becomes due) /// public Money? MinimumBillingAmount { get; } } public class Document : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DocumentMeta(); [JsonConstructor] public Document(FinInstrmRptgTxRpt finInstrmRptgTxRpt) { FinInstrmRptgTxRpt = finInstrmRptgTxRpt; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public FinInstrmRptgTxRpt FinInstrmRptgTxRpt { get; } } /// /// Specifies the Duration Terms of the Security Financing Transaction, and optionally any Evergreen terms. /// public class Duration : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new DurationMeta(); [JsonConstructor] public Duration(Enums.DurationType durationType, EvergreenProvision? evergreenProvision) { DurationType = durationType; EvergreenProvision = evergreenProvision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the Duration Terms of the Security Financing transaction. e.g. Open or Term. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DurationType DurationType { get; } /// /// A data defining: the right of a party to exercise an Evergreen option /// public EvergreenProvision? EvergreenProvision { get; } } /// /// A data to: define the adjusted dates associated with an early termination provision. /// public class EarlyTerminationEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EarlyTerminationEventMeta(); [JsonConstructor] public EarlyTerminationEvent(LocalDate adjustedExerciseDate, LocalDate adjustedEarlyTerminationDate, LocalDate adjustedCashSettlementValuationDate, LocalDate adjustedCashSettlementPaymentDate, LocalDate? adjustedExerciseFeePaymentDate, _MetaFields? meta) { AdjustedExerciseDate = adjustedExerciseDate; AdjustedEarlyTerminationDate = adjustedEarlyTerminationDate; AdjustedCashSettlementValuationDate = adjustedCashSettlementValuationDate; AdjustedCashSettlementPaymentDate = adjustedCashSettlementPaymentDate; AdjustedExerciseFeePaymentDate = adjustedExerciseFeePaymentDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date on which option exercise takes place. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedExerciseDate { get; } /// /// The early termination date that is applicable if an early termination provision is exercised. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedEarlyTerminationDate { get; } /// /// The date by which the cash settlement amount must be agreed. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedCashSettlementValuationDate { get; } /// /// The date on which the cash settlement amount is paid. This date should already be adjusted for any applicable business date convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedCashSettlementPaymentDate { get; } /// /// The date on which the exercise fee amount is paid. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedExerciseFeePaymentDate { get; } public _MetaFields? Meta { get; } } /// /// A data defining: an early termination provision for a swap. This early termination is at fair value, i.e. on termination the fair value of the product must be settled between the parties. /// public class EarlyTerminationProvision : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EarlyTerminationProvisionMeta(); [JsonConstructor] public EarlyTerminationProvision(MandatoryEarlyTermination? mandatoryEarlyTermination, Period? mandatoryEarlyTerminationDateTenor, OptionalEarlyTermination? optionalEarlyTermination, ExercisePeriod? optionalEarlyTerminationParameters, _MetaFields? meta) { MandatoryEarlyTermination = mandatoryEarlyTermination; MandatoryEarlyTerminationDateTenor = mandatoryEarlyTerminationDateTenor; OptionalEarlyTermination = optionalEarlyTermination; OptionalEarlyTerminationParameters = optionalEarlyTerminationParameters; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A mandatory early termination provision to terminate the swap at fair value. /// public MandatoryEarlyTermination? MandatoryEarlyTermination { get; } /// /// Period after trade date of the mandatory early termination date. /// public Period? MandatoryEarlyTerminationDateTenor { get; } /// /// An option for either or both parties to terminate the swap at fair value. /// public OptionalEarlyTermination? OptionalEarlyTermination { get; } /// /// Definition of the first early termination date and the frequency of the termination dates subsequent to that. American exercise is defined by having a frequency of one day. /// public ExercisePeriod? OptionalEarlyTerminationParameters { get; } public _MetaFields? Meta { get; } } /// /// This class represents the full set of price-forming features associated with a contractual product: the payout component, the notional/quantity, the effective and termination date and the date adjustment provisions when applying uniformily across the payout components. This class also includes the legal provisions which have valuation implications: cancelable provision, extendible provision, early termination provision and extraordinary events specification. /// public class EconomicTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EconomicTermsMeta(); [JsonConstructor] public EconomicTerms(AdjustableOrRelativeDate? effectiveDate, AdjustableOrRelativeDate? terminationDate, BusinessDayAdjustments? dateAdjustments, Payout payout, TerminationProvision? terminationProvision, CalculationAgent? calculationAgent, bool? nonStandardisedTerms, Collateral? collateral) { EffectiveDate = effectiveDate; TerminationDate = terminationDate; DateAdjustments = dateAdjustments; Payout = payout; TerminationProvision = terminationProvision; CalculationAgent = calculationAgent; NonStandardisedTerms = nonStandardisedTerms; Collateral = collateral; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The first day of the terms of the trade. This day may be subject to adjustment in accordance with a business day convention. /// public AdjustableOrRelativeDate? EffectiveDate { get; } /// /// The last day of the terms of the trade. This date may be subject to adjustments in accordance with the business day convention. It can also be specified in relation to another scheduled date (e.g. the last payment date). /// public AdjustableOrRelativeDate? TerminationDate { get; } /// /// The business day adjustment convention when it applies across all the payout components. This specification of the business day convention and financial business centers is used for adjusting any calculation period date if it would otherwise fall on a day that is not a business day in the specified business center. /// public BusinessDayAdjustments? DateAdjustments { get; } /// /// The payout specifies the future cashflow computation methodology which characterizes a financial product. /// public Payout Payout { get; } /// /// Contains optional provisions pertaining to the termination characteristics of a contract. /// public TerminationProvision? TerminationProvision { get; } /// /// The ISDA calculation agent responsible for performing duties as defined in the applicable product definitions. /// public CalculationAgent? CalculationAgent { get; } /// /// Specifies, when boolean value is True, that additional economic terms exist that have not been included in the product representation. /// public bool? NonStandardisedTerms { get; } /// /// Represents the collateral obligations of a party. /// public Collateral? Collateral { get; } } /// /// Query to check against an EligibleCollateralSpecification /// public class EligibilityQuery : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EligibilityQueryMeta(); [JsonConstructor] public EligibilityQuery(decimal maturity, AssetType collateralAssetType, Enums.ISOCountryCode assetCountryOfOrigin, Enums.CurrencyCode denominatedCurrency, AgencyRatingCriteria agencyRating, CollateralIssuerType issuerType, LegalEntity issuerName) { Maturity = maturity; CollateralAssetType = collateralAssetType; AssetCountryOfOrigin = assetCountryOfOrigin; DenominatedCurrency = denominatedCurrency; AgencyRating = agencyRating; IssuerType = issuerType; IssuerName = issuerName; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Maturity in years /// public decimal Maturity { get; } /// /// The asset product type. /// public AssetType CollateralAssetType { get; } /// /// The asset country of origin. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ISOCountryCode AssetCountryOfOrigin { get; } /// /// The underlying asset denominated currency. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CurrencyCode DenominatedCurrency { get; } /// /// The agency rating based on default risk and creditors claim in event of default associated with specific instrument. /// public AgencyRatingCriteria AgencyRating { get; } /// /// Represents a filter based on the type of entity issuing the asset. /// public CollateralIssuerType IssuerType { get; } /// /// Specifies the issuing entity name or LEI. /// public LegalEntity IssuerName { get; } } /// /// Represents a set of criteria used to specify eligible collateral. /// public class EligibleCollateralCriteria : AbstractRosettaModelObject, ICollateralCriteriaBase { private static readonly IRosettaMetaData metaData = new EligibleCollateralCriteriaMeta(); [JsonConstructor] public EligibleCollateralCriteria(CollateralTreatment treatment, IEnumerable issuer, IEnumerable asset, IEnumerable appliesTo) { Treatment = treatment; Issuer = issuer; Asset = asset; AppliesTo = appliesTo; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the treatment of specified collateral, e.g., haircuts,holding limits or exclusions. /// public CollateralTreatment Treatment { get; } /// public IEnumerable Issuer { get; } /// public IEnumerable Asset { get; } /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable AppliesTo { get; } } /// /// Represents a set of criteria used to specify eligible collateral. /// public class EligibleCollateralSpecification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EligibleCollateralSpecificationMeta(); [JsonConstructor] public EligibleCollateralSpecification(IEnumerable identifier, IEnumerable party, IEnumerable counterparty, IEnumerable criteria, _MetaFields? meta) { Identifier = identifier; Party = party; Counterparty = counterparty; Criteria = criteria; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the identifier(s) to uniquely identify eligible collateral or a set of eligible collateral, such as a schedule or equivalant for an identity issuer. /// public IEnumerable Identifier { get; } /// /// The parties associated with the specification. /// public IEnumerable Party { get; } /// /// Specification of the roles of the counterparties to the specification. /// public IEnumerable Counterparty { get; } /// /// Represents a set of criteria used to specify eligible collateral. /// public IEnumerable Criteria { get; } public _MetaFields? Meta { get; } } public class EligibleCollateralSpecificationInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EligibleCollateralSpecificationInstructionMeta(); [JsonConstructor] public EligibleCollateralSpecificationInstruction(EligibleCollateralCriteria common, IEnumerable variable) { Common = common; Variable = variable; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public EligibleCollateralCriteria Common { get; } public IEnumerable Variable { get; } } /// /// A class to specify an equity as having a product identifier. As a difference versus the FpML standard, the CDM structure of this class only includes the productIdentifier class, which consists of an identifier, productTaxonomy, and source of the identifier. The reason for this approach is to avoid the potential for conflicting information between the information associated with the contractual product and the reference information maintained by the relevant service provider. /// public class Equity : AbstractRosettaModelObject, IIdentifiedProduct { private static readonly IRosettaMetaData metaData = new EquityMeta(); [JsonConstructor] public Equity(ProductIdentifier productIdentifier) { ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ProductIdentifier ProductIdentifier { get; } } /// /// Transaction AdditionalTerms that apply to Equity asset class. /// public class EquityAdditionalTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EquityAdditionalTermsMeta(); [JsonConstructor] public EquityAdditionalTerms(ExtraordinaryEvents? extraordinaryEvents, IEnumerable determinationTerms, UnderlierSubstitutionProvision? substitutionProvision) { ExtraordinaryEvents = extraordinaryEvents; DeterminationTerms = determinationTerms; SubstitutionProvision = substitutionProvision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ExtraordinaryEvents? ExtraordinaryEvents { get; } public IEnumerable DeterminationTerms { get; } public UnderlierSubstitutionProvision? SubstitutionProvision { get; } } /// /// A class for defining the merger events and their treatment. /// public class EquityCorporateEvents : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EquityCorporateEventsMeta(); [JsonConstructor] public EquityCorporateEvents() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// Specification for General Terms and Elections of an Equity Master Confirmation that is applicable across multiple Equity confirmations and is referenced by each of these confirmations, an example of which being the 2018 ISDA CDM Equity Confirmation for Security Equity Swap. /// public class EquityMasterConfirmation : AbstractRosettaModelObject, IEquityMasterConfirmation, IMasterConfirmationBase { private static readonly IRosettaMetaData metaData = new EquityMasterConfirmationMeta(); [JsonConstructor] public EquityMasterConfirmation() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// Specification for the General Terms and Relationship Supplement Elections as provided in the 2018 ISDA CDM Equity Confirmation for Security Equity Swap. /// public class EquitySwapMasterConfirmation2018 : AbstractRosettaModelObject, IEquityMasterConfirmation { private static readonly IRosettaMetaData metaData = new EquitySwapMasterConfirmation2018Meta(); [JsonConstructor] public EquitySwapMasterConfirmation2018(Enums.ReturnType typeOfSwapElection, PriceReturnTerms pricingMethodElection, Enums.InterpolationMethod linearInterpolationElection, SettlementTerms settlementTerms, ValuationDates valuationDates, PaymentDates equityCashSettlementDates) { TypeOfSwapElection = typeOfSwapElection; PricingMethodElection = pricingMethodElection; LinearInterpolationElection = linearInterpolationElection; SettlementTerms = settlementTerms; ValuationDates = valuationDates; EquityCashSettlementDates = equityCashSettlementDates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Per Part 1 Section 4, 'Dividend Obligations', of the 2018 ISDA CDM Equity Confirmation, Para 4.2 'Dividend Returns' /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ReturnType TypeOfSwapElection { get; } /// /// Per Part 1 Section 5, 'Pricing', of the 2018 ISDA CDM Equity Confirmation, Para 5.1 /// public PriceReturnTerms PricingMethodElection { get; } /// /// Per Part 1 Section 3, 'Floating Obligations', of the 2018 ISDA CDM Equity Confirmation. Para 3.3 /// [JsonConverter(typeof(StringEnumConverter))] public Enums.InterpolationMethod LinearInterpolationElection { get; } /// /// Per Part 1 Section 8, 'Settlement', of the 2018 ISDA CDM Equity Confirmation for Security Equity Swap /// public SettlementTerms SettlementTerms { get; } /// /// The parameters used to generate the 'Equity Valuation Dates' schedule, including the Effective Date and Termination Date for the Swap. /// public ValuationDates ValuationDates { get; } /// /// The parameters used to generate the payment date schedule, relative to the equityCalculationPeriod. Per Part 1 Section 12, 'Definitions', of the 2018 ISDA CDM Equity Confirmation. Para 73 /// public PaymentDates EquityCashSettlementDates { get; } } public class EquityUnderlierProvisions : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EquityUnderlierProvisionsMeta(); [JsonConstructor] public EquityUnderlierProvisions(bool? multipleExchangeIndexAnnexFallback, bool? componentSecurityIndexAnnexFallback, FieldWithMetaString? localJurisdiction, FieldWithMetaString? relevantJurisdiction) { MultipleExchangeIndexAnnexFallback = multipleExchangeIndexAnnexFallback; ComponentSecurityIndexAnnexFallback = componentSecurityIndexAnnexFallback; LocalJurisdiction = localJurisdiction; RelevantJurisdiction = relevantJurisdiction; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// For an index option or swap transaction, a flag to indicate whether a relevant Multiple Exchange Index Annex is applicable to the transaction. This annex defines additional provisions which are applicable where an index is comprised of component securities that are traded on multiple exchanges. /// public bool? MultipleExchangeIndexAnnexFallback { get; } /// /// For an index option or swap transaction, a flag to indicate whether a relevant Component Security Index Annex is applicable to the transaction. /// public bool? ComponentSecurityIndexAnnexFallback { get; } /// /// The ISO 3166 standard code for the country within which the postal address is located. /// public FieldWithMetaString? LocalJurisdiction { get; } /// /// The ISO 3166 standard code for the country within which the postal address is located. /// public FieldWithMetaString? RelevantJurisdiction { get; } } /// /// A class defining the exercise period for a European style option together with any rules governing the notional amount of the underlying which can be exercised on any given exercise date and any associated exercise fees. /// public class EuropeanExercise : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EuropeanExerciseMeta(); [JsonConstructor] public EuropeanExercise(IEnumerable expirationDate, AdjustableOrRelativeDates? relevantUnderlyingDate, BusinessCenterTime? earliestExerciseTime, BusinessCenterTime expirationTime, Enums.ExpirationTimeType? expirationTimeType, PartialExercise? partialExercise, ExerciseFee? exerciseFee, _MetaFields? meta) { ExpirationDate = expirationDate; RelevantUnderlyingDate = relevantUnderlyingDate; EarliestExerciseTime = earliestExerciseTime; ExpirationTime = expirationTime; ExpirationTimeType = expirationTimeType; PartialExercise = partialExercise; ExerciseFee = exerciseFee; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The last day within an exercise period for an American style option. For a European style option it is the only day within the exercise period. /// public IEnumerable ExpirationDate { get; } /// /// The effective date on the underlying product if the option is exercised. For example, for a swaption it is the swap effective date, for an option on an FX spot or forward it is the value date for settlement, and in an extendible/cancelable provision it is the swap termination date, which is the date on which the termination is effective. /// public AdjustableOrRelativeDates? RelevantUnderlyingDate { get; } /// /// The earliest time at which notice of exercise can be given by the buyer to the seller (or seller's agent) on the expiration date. /// public BusinessCenterTime? EarliestExerciseTime { get; } /// /// The latest time for exercise on expirationDate. /// public BusinessCenterTime ExpirationTime { get; } /// /// The time of day at which the equity option expires, for example the official closing time of the exchange. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ExpirationTimeType? ExpirationTimeType { get; } /// /// As defined in the 2000 ISDA Definitions, Section 12.3. Partial Exercise, the buyer of the option has the right to exercise all or less than all the notional amount of the underlying swap on the expiration date, but may not exercise less than the minimum notional amount, and if an integral multiple amount is specified, the notional amount exercised must be equal to, or be an integral multiple of, the integral multiple amount. /// public PartialExercise? PartialExercise { get; } /// /// A fee to be paid on exercise. This could be represented as an amount or a rate and notional reference on which to apply the rate. /// public ExerciseFee? ExerciseFee { get; } public _MetaFields? Meta { get; } } /// /// Specifies instructions to create a BusinessEvent. /// public class EventInstruction : AbstractRosettaModelObject, IEventInstruction { private static readonly IRosettaMetaData metaData = new EventInstructionMeta(); [JsonConstructor] public EventInstruction(Enums.EventIntent? intent, Enums.CorporateActionType? corporateActionIntent, LocalDate? eventDate, LocalDate? effectiveDate, IdentifiedList? packageInformation, IEnumerable instruction) { Intent = intent; CorporateActionIntent = corporateActionIntent; EventDate = eventDate; EffectiveDate = effectiveDate; PackageInformation = packageInformation; Instruction = instruction; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.EventIntent? Intent { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.CorporateActionType? CorporateActionIntent { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EventDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// public IdentifiedList? PackageInformation { get; } /// public IEnumerable Instruction { get; } } /// /// A class to represent the various set of timestamps that can be associated with lifecycle events, as a collection of [dateTime, qualifier]. /// public class EventTimestamp : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EventTimestampMeta(); [JsonConstructor] public EventTimestamp(ZonedDateTime dateTime, Enums.EventTimestampQualification qualification) { DateTime = dateTime; Qualification = qualification; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The CDM specifies that the zoned date time is to be expressed in accordance with ISO 8601, either as UTC as an offset to UTC. /// public ZonedDateTime DateTime { get; } /// /// The timestamp qualifier is specified through an enumeration because the experience of integrating the DTCC and CME data representations suggests that a wide set of timestamps are currently utilized among service providers, while there is not at present an objective set of criteria that could help suggest a defined set of timestamps as part of the CDM. At some future point, one possible baseline could be developed from the review of the set of timestamps specified across regulatory regimes and regulations (incl. regulations such as high frequency trading). Also, the integration with a further set of implementations and the specification of business workflows such as clearing as part of the CDM development should help confirm the implementation approach in this respect. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.EventTimestampQualification Qualification { get; } } /// /// Specifies a transaction which automatically extends for a specified timeframe until the exercise of an embedded option. /// public class EvergreenProvision : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new EvergreenProvisionMeta(); [JsonConstructor] public EvergreenProvision(PartyRole? singlePartyOption, RelativeDateOffset noticePeriod, RelativeDateOffset? noticeDeadlinePeriod, ZonedDateTime? noticeDeadlineDateTime, AdjustableRelativeOrPeriodicDates extensionFrequency, Price? finalPeriodFeeAdjustment) { SinglePartyOption = singlePartyOption; NoticePeriod = noticePeriod; NoticeDeadlinePeriod = noticeDeadlinePeriod; NoticeDeadlineDateTime = noticeDeadlineDateTime; ExtensionFrequency = extensionFrequency; FinalPeriodFeeAdjustment = finalPeriodFeeAdjustment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// If evergreen termination is not available to both parties then this component specifies the buyer and seller of the option. /// public PartyRole? SinglePartyOption { get; } /// /// The length of each evergreen extension period relative to the effective date of the preceding contract. /// public RelativeDateOffset NoticePeriod { get; } /// /// Defines the minimum period before an evergreen is scheduled to terminate that notice can be given that it will terminate beyond the scheduled termination date. /// public RelativeDateOffset? NoticeDeadlinePeriod { get; } /// /// A specific date and time for the notice deadline /// public ZonedDateTime? NoticeDeadlineDateTime { get; } /// /// The frequency with which the evergreen contract will be extended if notice is not given. /// public AdjustableRelativeOrPeriodicDates ExtensionFrequency { get; } /// /// An optional adjustment to the rate for the last period of the evergreen i.e. the period from when notice is given to stop rolling the contract through to the termination date. /// public Price? FinalPeriodFeeAdjustment { get; } } /// /// A class that is used for describing the exchange rate for a particular transaction. /// public class ExchangeRate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExchangeRateMeta(); [JsonConstructor] public ExchangeRate(IEnumerable crossRate) { CrossRate = crossRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An optional element that allow for definition of the currency exchange rates used to cross between the traded currencies for non-base currency FX contracts. /// public IEnumerable CrossRate { get; } } public class ExctgPrsn : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExctgPrsnMeta(); [JsonConstructor] public ExctgPrsn(Prsn prsn) { Prsn = prsn; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Prsn Prsn { get; } } /// /// Defines specific attributes that relate to trade executions. /// public class ExecutionDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExecutionDetailsMeta(); [JsonConstructor] public ExecutionDetails(Enums.ExecutionType executionType, LegalEntity? executionVenue, IdentifiedList? packageReference, _MetaFields? meta) { ExecutionType = executionType; ExecutionVenue = executionVenue; PackageReference = packageReference; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the type of execution, e.g. via voice, electronically... /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ExecutionType ExecutionType { get; } /// /// Represents the venue on which a trade was executed. /// public LegalEntity? ExecutionVenue { get; } /// /// A reference to the package linking the trade with other trades, in case the trade was executed as part of a package (hence this attribute is optional). /// public IdentifiedList? PackageReference { get; } public _MetaFields? Meta { get; } } /// /// Specifies instructions for execution of a transaction, consisting of a product, price, quantity, parties, trade identifier, execution details, and settlement terms. /// public class ExecutionInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExecutionInstructionMeta(); [JsonConstructor] public ExecutionInstruction(Product product, IEnumerable priceQuantity, IEnumerable counterparty, IEnumerable ancillaryParty, IEnumerable parties, IEnumerable partyRoles, ExecutionDetails executionDetails, FieldWithMetaLocalDate tradeDate, FieldWithMetaTimeZone? tradeTime, IEnumerable tradeIdentifier, Collateral? collateral) { Product = product; PriceQuantity = priceQuantity; Counterparty = counterparty; AncillaryParty = ancillaryParty; Parties = parties; PartyRoles = partyRoles; ExecutionDetails = executionDetails; TradeDate = tradeDate; TradeTime = tradeTime; TradeIdentifier = tradeIdentifier; Collateral = collateral; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the financial product to be executed and contract formed. /// public Product Product { get; } /// /// Defines the prices (e.g. spread, equity price, FX rate), quantities (e.g. currency amount, no. shares) and settlement terms (e.g. initial fee, broker fee, up-front cds payment or option premium settlement) associated with the constituents of the transacted product. /// public IEnumerable PriceQuantity { get; } /// /// Maps two defined parties to counterparty enums for the transacted product. /// public IEnumerable Counterparty { get; } /// /// Maps any ancillary parties, e.g. parties involved in the transaction that are not one of the two principal parties. /// public IEnumerable AncillaryParty { get; } /// /// Defines all parties to that execution, including agents and brokers. /// public IEnumerable Parties { get; } /// /// Defines the role(s) that party(ies) may have in relation to the execution. /// public IEnumerable PartyRoles { get; } /// /// Specifies the type and venue of execution, e.g. via voice, or electronically. /// public ExecutionDetails ExecutionDetails { get; } /// /// Denotes the trade/execution date. /// public FieldWithMetaLocalDate TradeDate { get; } /// /// Denotes the trade time and timezone as agreed by the parties to the trade. /// public FieldWithMetaTimeZone? TradeTime { get; } /// /// Denotes one or more identifiers associated with the transaction. /// public IEnumerable TradeIdentifier { get; } /// /// Detail the collateral requirement anticipated with the transaction. /// public Collateral? Collateral { get; } } /// /// A data defining: the adjusted dates associated with a particular exercise event. /// public class ExerciseEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExerciseEventMeta(); [JsonConstructor] public ExerciseEvent(LocalDate adjustedExerciseDate, LocalDate adjustedRelevantSwapEffectiveDate, LocalDate? adjustedCashSettlementValuationDate, LocalDate? adjustedCashSettlementPaymentDate, LocalDate? adjustedExerciseFeePaymentDate, _MetaFields? meta) { AdjustedExerciseDate = adjustedExerciseDate; AdjustedRelevantSwapEffectiveDate = adjustedRelevantSwapEffectiveDate; AdjustedCashSettlementValuationDate = adjustedCashSettlementValuationDate; AdjustedCashSettlementPaymentDate = adjustedCashSettlementPaymentDate; AdjustedExerciseFeePaymentDate = adjustedExerciseFeePaymentDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date on which the option exercise takes place. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedExerciseDate { get; } /// /// The effective date of the underlying swap associated with a given exercise date. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedRelevantSwapEffectiveDate { get; } /// /// The date by which the cash settlement amount must be agreed. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedCashSettlementValuationDate { get; } /// /// The date on which the cash settlement amount is paid. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedCashSettlementPaymentDate { get; } /// /// The date on which the exercise fee amount is paid. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedExerciseFeePaymentDate { get; } public _MetaFields? Meta { get; } } /// /// A class defining the fee payable on exercise of an option. This fee may be defined as an amount or a percentage of the notional exercised. As a difference with FpML, it extends the BuyerSeller class. /// public class ExerciseFee : AbstractRosettaModelObject, IPayerReceiver { private static readonly IRosettaMetaData metaData = new ExerciseFeeMeta(); [JsonConstructor] public ExerciseFee(ReferenceWithMetaMoney notionalReference, decimal? feeAmount, decimal? feeRate, RelativeDateOffset feePaymentDate, Enums.CounterpartyRole payer, Enums.CounterpartyRole receiver) { NotionalReference = notionalReference; FeeAmount = feeAmount; FeeRate = feeRate; FeePaymentDate = feePaymentDate; Payer = payer; Receiver = receiver; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A pointer style reference to the associated notional schedule defined elsewhere in the document. /// public ReferenceWithMetaMoney NotionalReference { get; } /// /// The amount of fee to be paid on exercise. The fee currency is that of the referenced notional. /// public decimal? FeeAmount { get; } /// /// A fee represented as a percentage of some referenced notional. A percentage of 5% would be represented as 0.05. /// public decimal? FeeRate { get; } /// /// The date on which exercise fee(s) will be paid. It is specified as a relative date. /// public RelativeDateOffset FeePaymentDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Payer { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Receiver { get; } } /// /// A class to define a fee or schedule of fees to be payable on the exercise of an option. This fee may be defined as an amount or a percentage of the notional exercised. As a difference with FpML, it extends the BuyerSeller class. /// public class ExerciseFeeSchedule : AbstractRosettaModelObject, IPayerReceiver { private static readonly IRosettaMetaData metaData = new ExerciseFeeScheduleMeta(); [JsonConstructor] public ExerciseFeeSchedule(ReferenceWithMetaMoney notionalReference, AmountSchedule? feeAmountSchedule, Schedule? feeRateSchedule, RelativeDateOffset feePaymentDate, Enums.CounterpartyRole payer, Enums.CounterpartyRole receiver) { NotionalReference = notionalReference; FeeAmountSchedule = feeAmountSchedule; FeeRateSchedule = feeRateSchedule; FeePaymentDate = feePaymentDate; Payer = payer; Receiver = receiver; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A pointer style reference to the associated notional schedule defined elsewhere in the document. /// public ReferenceWithMetaMoney NotionalReference { get; } /// /// The exercise fee amount schedule. The fees are expressed as currency amounts. The currency of the fee is assumed to be that of the notional schedule referenced. /// public AmountSchedule? FeeAmountSchedule { get; } /// /// The exercise free rate schedule. The fees are expressed as percentage rates of the notional being exercised. The currency of the fee is assumed to be that of the notional schedule referenced. /// public Schedule? FeeRateSchedule { get; } /// /// The date on which exercise fee(s) will be paid. It is specified as a relative date. /// public RelativeDateOffset FeePaymentDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Payer { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Receiver { get; } } /// /// Specifies the information required to communicate the choices made by the exercising party, in a financial product endowing the party with at least one option. /// public class ExerciseInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExerciseInstructionMeta(); [JsonConstructor] public ExerciseInstruction(PrimitiveInstruction exerciseQuantity, ReferenceWithMetaOptionPayout? exerciseOption, AdjustableOrAdjustedDate? exerciseDate, BusinessCenterTime? exerciseTime, IEnumerable replacementTradeIdentifier) { ExerciseQuantity = exerciseQuantity; ExerciseOption = exerciseOption; ExerciseDate = exerciseDate; ExerciseTime = exerciseTime; ReplacementTradeIdentifier = replacementTradeIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Contains instructions for exercising the option including a quantity change, and optionally a transfer. /// public PrimitiveInstruction ExerciseQuantity { get; } /// /// Specifies the Option Payout being exercised on the trade. /// public ReferenceWithMetaOptionPayout? ExerciseOption { get; } /// /// Specifies the date on which an option contained within the financial product would be exercised. The date may be omitted if the contractual product allows for only a single date of exercise (European exercise). /// public AdjustableOrAdjustedDate? ExerciseDate { get; } /// /// Specifies the time at which an option contained within the financial product woulld be exercised. The time may be omitted if the contractual product allows for only a single time of exercise (European exercise). /// public BusinessCenterTime? ExerciseTime { get; } /// /// Specifies the trade identifier to apply to the replacement trade for physical exercise. /// public IEnumerable ReplacementTradeIdentifier { get; } } /// /// Defines to whom and where notice of execution should be given. The exerciseNoticeGiver refers to one or both of the principal parties of the trade. If present the exerciseNoticeReceiver refers to a party, other than the principal party, to whom notice should be given. /// public class ExerciseNotice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExerciseNoticeMeta(); [JsonConstructor] public ExerciseNotice(Enums.ExerciseNoticeGiver exerciseNoticeGiver, Enums.AncillaryRole? exerciseNoticeReceiver, FieldWithMetaBusinessCenterEnum businessCenter) { ExerciseNoticeGiver = exerciseNoticeGiver; ExerciseNoticeReceiver = exerciseNoticeReceiver; BusinessCenter = businessCenter; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the principal party of the trade that has the right to exercise. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ExerciseNoticeGiver ExerciseNoticeGiver { get; } /// /// Specifies the party to which notice of exercise should be given, e.g. by the buyer of the option. Although in many cases it is the buyer of the option who sends the exercise notice to the seller of the option, this component is reused, e.g. in case of OptionEarlyTermination, either or both parties have the right to exercise. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AncillaryRole? ExerciseNoticeReceiver { get; } /// /// Specifies the location where the exercise must be reported, e.g. where the exercise notice receiver is based. /// public FieldWithMetaBusinessCenterEnum BusinessCenter { get; } } /// /// This defines the time interval to the start of the exercise period, i.e. the earliest exercise date, and the frequency of subsequent exercise dates (if any). /// public class ExercisePeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExercisePeriodMeta(); [JsonConstructor] public ExercisePeriod(Period earliestExerciseDateTenor, Period? exerciseFrequency, _MetaFields? meta) { EarliestExerciseDateTenor = earliestExerciseDateTenor; ExerciseFrequency = exerciseFrequency; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The time interval to the first (and possibly only) exercise date in the exercise period. /// public Period EarliestExerciseDateTenor { get; } /// /// The frequency of subsequent exercise dates in the exercise period following the earliest exercise date. An interval of 1 day should be used to indicate an American style exercise period. /// public Period? ExerciseFrequency { get; } public _MetaFields? Meta { get; } } /// /// A class describing how notice of exercise should be given. This can be either manual or automatic. /// public class ExerciseProcedure : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExerciseProcedureMeta(); [JsonConstructor] public ExerciseProcedure(ManualExercise? manualExercise, AutomaticExercise? automaticExercise, bool followUpConfirmation, bool? limitedRightToConfirm, bool? splitTicket) { ManualExercise = manualExercise; AutomaticExercise = automaticExercise; FollowUpConfirmation = followUpConfirmation; LimitedRightToConfirm = limitedRightToConfirm; SplitTicket = splitTicket; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies that the notice of exercise must be given by the buyer to the seller or seller's agent. /// public ManualExercise? ManualExercise { get; } /// /// If automatic is specified, then the notional amount of the underlying swap not previously exercised under the swaption will be automatically exercised at the expiration time on the expiration date if at such time the buyer is in-the-money, provided that the difference between the settlement rate and the fixed rate under the relevant underlying swap is not less than the specified threshold rate. The term in-the-money is assumed to have the meaning defining in the 2000 ISDA Definitions, Section 17.4 In-the-money. /// public AutomaticExercise? AutomaticExercise { get; } /// /// A flag to indicate whether follow-up confirmation of exercise (written or electronic) is required following telephonic notice by the buyer to the seller or seller's agent. /// public bool FollowUpConfirmation { get; } /// /// Has the meaning defined as part of the 1997 ISDA Government Bond Option Definitions, section 4.5 Limited Right to Confirm Exercise. If present, (i) the Seller may request the Buyer to confirm its intent if not done on or before the expiration time on the Expiration date (ii) specific rules will apply in relation to the settlement mode. /// public bool? LimitedRightToConfirm { get; } /// /// Typically applicable to the physical settlement of bond and convertible bond options. If present, means that the party required to deliver the bonds will divide those to be delivered as notifying party desires to facilitate delivery obligations. /// public bool? SplitTicket { get; } } /// /// Represents the current mark to market value or IM calculation value of the trade portfolio as recorded by the principle (in base currency). /// public class Exposure : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExposureMeta(); [JsonConstructor] public Exposure(ReferenceWithMetaPortfolioState tradePortfolio, Money aggregateValue, ZonedDateTime? calculationDateTime, ZonedDateTime valuationDateTime) { TradePortfolio = tradePortfolio; AggregateValue = aggregateValue; CalculationDateTime = calculationDateTime; ValuationDateTime = valuationDateTime; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a Portfolio that describes all the positions held at a given time, in various states which can be either traded, settled, etc., with lineage information to the previous state. /// public ReferenceWithMetaPortfolioState TradePortfolio { get; } /// /// Represents the aggregate value of the portfolio in base currency. /// public Money AggregateValue { get; } /// /// Indicates the date when the exposure is calculated if different from valuation date. /// public ZonedDateTime? CalculationDateTime { get; } /// /// Indicates the valuation date of the exposure underlying the calculation. /// public ZonedDateTime ValuationDateTime { get; } } /// /// A data defining: an option to extend an existing swap transaction on the specified exercise dates for a term ending on the specified new termination date. As a difference from FpML, it extends the BuyerSeller class, which represents the BuyerSeller.model. /// public class ExtendibleProvision : AbstractRosettaModelObject, IBuyerSeller { private static readonly IRosettaMetaData metaData = new ExtendibleProvisionMeta(); [JsonConstructor] public ExtendibleProvision(AmericanExercise? americanExercise, BermudaExercise? bermudaExercise, EuropeanExercise? europeanExercise, ExerciseNotice? exerciseNotice, bool? followUpConfirmation, ExtendibleProvisionAdjustedDates? extendibleProvisionAdjustedDates, Enums.CallingParty? callingParty, PartyRole? singlePartyOption, RelativeDateOffset? noticeDeadlinePeriod, ZonedDateTime? noticeDeadlineDateTime, RelativeDateOffset? extensionTerm, AdjustableRelativeOrPeriodicDates? extensionPeriod, Enums.CounterpartyRole buyer, Enums.CounterpartyRole seller) { AmericanExercise = americanExercise; BermudaExercise = bermudaExercise; EuropeanExercise = europeanExercise; ExerciseNotice = exerciseNotice; FollowUpConfirmation = followUpConfirmation; ExtendibleProvisionAdjustedDates = extendibleProvisionAdjustedDates; CallingParty = callingParty; SinglePartyOption = singlePartyOption; NoticeDeadlinePeriod = noticeDeadlinePeriod; NoticeDeadlineDateTime = noticeDeadlineDateTime; ExtensionTerm = extensionTerm; ExtensionPeriod = extensionPeriod; Buyer = buyer; Seller = seller; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// American exercise. FpML implementations consists in an exercise substitution group. /// public AmericanExercise? AmericanExercise { get; } /// /// Bermuda exercise. FpML implementations consists in an exercise substitution group. /// public BermudaExercise? BermudaExercise { get; } /// /// European exercise. FpML implementations consists in an exercise substitution group. /// public EuropeanExercise? EuropeanExercise { get; } /// /// Definition of the party to whom notice of exercise should be given. /// public ExerciseNotice? ExerciseNotice { get; } /// /// A flag to indicate whether follow-up confirmation of exercise (written or electronic) is required following telephonic notice by the buyer to the seller or seller's agent. /// public bool? FollowUpConfirmation { get; } /// /// The adjusted dates associated with an extendible provision. These dates have been adjusted for any applicable business day convention. /// public ExtendibleProvisionAdjustedDates? ExtendibleProvisionAdjustedDates { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.CallingParty? CallingParty { get; } /// /// If the ability to extend the contract is not available to both parties then this component specifies the buyer and seller of the option. /// public PartyRole? SinglePartyOption { get; } /// /// Defines the minimum period before a contract is scheduled to terminate that notice can be given that it will terminate beyond the scheduled termination date. /// public RelativeDateOffset? NoticeDeadlinePeriod { get; } /// /// A specific date and time for the notice deadline /// public ZonedDateTime? NoticeDeadlineDateTime { get; } /// /// The length of each extension period relative to the effective date of the preceding contract. /// public RelativeDateOffset? ExtensionTerm { get; } /// /// The period within which notice can be given that the contract will be extended. /// public AdjustableRelativeOrPeriodicDates? ExtensionPeriod { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Buyer { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Seller { get; } } /// /// A data defining: the adjusted dates associated with a provision to extend a swap. /// public class ExtendibleProvisionAdjustedDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExtendibleProvisionAdjustedDatesMeta(); [JsonConstructor] public ExtendibleProvisionAdjustedDates(IEnumerable extensionEvent) { ExtensionEvent = extensionEvent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The adjusted dates associated with a single extendible exercise date. /// public IEnumerable ExtensionEvent { get; } } /// /// A data to: define the adjusted dates associated with an individual extension event. /// public class ExtensionEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExtensionEventMeta(); [JsonConstructor] public ExtensionEvent(LocalDate adjustedExerciseDate, LocalDate adjustedExtendedTerminationDate, _MetaFields? meta) { AdjustedExerciseDate = adjustedExerciseDate; AdjustedExtendedTerminationDate = adjustedExtendedTerminationDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date on which option exercise takes place. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedExerciseDate { get; } /// /// The termination date if an extendible provision is exercised. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedExtendedTerminationDate { get; } public _MetaFields? Meta { get; } } /// /// Where the underlying is shares, defines market events affecting the issuer of those shares that may require the terms of the transaction to be adjusted. /// public class ExtraordinaryEvents : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ExtraordinaryEventsMeta(); [JsonConstructor] public ExtraordinaryEvents(IEnumerable additionalBespokeTerms, EquityCorporateEvents? mergerEvents, EquityCorporateEvents? tenderOfferEvents, bool? compositionOfCombinedConsideration, IndexAdjustmentEvents? indexAdjustmentEvents, AdditionalDisruptionEvents? additionalDisruptionEvents, bool? failureToDeliver, Representations? representations, Enums.NationalizationOrInsolvencyOrDelistingEvent? nationalizationOrInsolvency, Enums.NationalizationOrInsolvencyOrDelistingEvent? delisting) { AdditionalBespokeTerms = additionalBespokeTerms; MergerEvents = mergerEvents; TenderOfferEvents = tenderOfferEvents; CompositionOfCombinedConsideration = compositionOfCombinedConsideration; IndexAdjustmentEvents = indexAdjustmentEvents; AdditionalDisruptionEvents = additionalDisruptionEvents; FailureToDeliver = failureToDeliver; Representations = representations; NationalizationOrInsolvency = nationalizationOrInsolvency; Delisting = delisting; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Where parties may optionnaly describe any extra bespoke agreements, in regards of the standardized Extraordinary Events. /// public IEnumerable AdditionalBespokeTerms { get; } /// /// Per the 2018 ISDA CDM Equity Confirmation for Security Equity Swap /// public EquityCorporateEvents? MergerEvents { get; } /// /// Per the 2002 ISDA Equity Derivatives Definitions: /// public EquityCorporateEvents? TenderOfferEvents { get; } /// /// Per the 2002 ISDA Equity Derivatives Definitions: /// public bool? CompositionOfCombinedConsideration { get; } /// /// Per the 2002 ISDA Equity Derivatives Definitions: Adjustments to Indices /// public IndexAdjustmentEvents? IndexAdjustmentEvents { get; } /// /// Per the 2002 ISDA Equity Derivatives Definitions | 2018 ISDA CDM Equity Confirmation for Security Equity Swaps /// public AdditionalDisruptionEvents? AdditionalDisruptionEvents { get; } /// /// If true, failure to deliver is applicable. /// public bool? FailureToDeliver { get; } public Representations? Representations { get; } /// /// Per the 2002 ISDA Equity Derivatives Definitions | 2018 ISDA CDM Equity Confirmation for Security Equity Swap /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NationalizationOrInsolvencyOrDelistingEvent? NationalizationOrInsolvency { get; } /// /// Per the 2002 ISDA Equity Derivatives Definitions | 2018 ISDA CDM Equity Confirmation for Security Equity Swap: /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NationalizationOrInsolvencyOrDelistingEvent? Delisting { get; } } public class FailureToPay : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FailureToPayMeta(); [JsonConstructor] public FailureToPay(bool applicable, GracePeriodExtension? gracePeriodExtension, Money? paymentRequirement) { Applicable = applicable; GracePeriodExtension = gracePeriodExtension; PaymentRequirement = paymentRequirement; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether the failure to pay provision is applicable. /// public bool Applicable { get; } /// /// If this element is specified, indicates whether or not a grace period extension is applicable. ISDA 2003 Term: Grace Period Extension Applicable. /// public GracePeriodExtension? GracePeriodExtension { get; } /// /// Specifies a threshold for the failure to pay credit event. Market standard is USD 1,000,000 (JPY 100,000,000 for Japanese Yen trades) or its equivalent in the relevant obligation currency. This is applied on an aggregate basis across all Obligations of the Reference Entity. Intended to prevent technical/operational errors from triggering credit events. ISDA 2003 Term: Payment Requirement /// public Money? PaymentRequirement { get; } } /// /// Defines the structure needed to represent fallback rate parameters. This type is used to represent modular computed rates in interestRatePayouts. /// public class FallbackRateParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FallbackRateParametersMeta(); [JsonConstructor] public FallbackRateParameters(Enums.FloatingRateIndex floatingRateIndex, LocalDate? effectiveDate, FloatingRateCalculationParameters? calculationParameters, decimal? spreadAdjustment) { FloatingRateIndex = floatingRateIndex; EffectiveDate = effectiveDate; CalculationParameters = calculationParameters; SpreadAdjustment = spreadAdjustment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The floating rate index that is used as the basis of the fallback rate. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndex FloatingRateIndex { get; } /// /// The date the fallback rate takes effect. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// /// Support for modular calculated rates, such such as lockout compound calculations. /// public FloatingRateCalculationParameters? CalculationParameters { get; } /// /// The economic spread applied to the underlying fallback rate to replicate the original risky rate. /// public decimal? SpreadAdjustment { get; } } /// /// The method, prioritised by the order it is listed in this element, to get a replacement rate for the disrupted settlement rate option. /// public class FallbackReferencePrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FallbackReferencePriceMeta(); [JsonConstructor] public FallbackReferencePrice(ValuationPostponement? valuationPostponement, IEnumerable fallBackSettlementRateOption, bool? fallbackSurveyValuationPostponement, CalculationAgent? calculationAgentDetermination) { ValuationPostponement = valuationPostponement; FallBackSettlementRateOption = fallBackSettlementRateOption; FallbackSurveyValuationPostponement = fallbackSurveyValuationPostponement; CalculationAgentDetermination = calculationAgentDetermination; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies how long to wait to get a quote from a settlement rate option upon a price source disruption. /// public ValuationPostponement? ValuationPostponement { get; } /// /// This settlement rate option will be used in its place. /// public IEnumerable FallBackSettlementRateOption { get; } /// /// Request rate quotes from the market. This element is set as type Empty in FpML. When present, the FpML synonym is mapped to a value True in the CDM. /// public bool? FallbackSurveyValuationPostponement { get; } /// /// The calculation agent will decide the rate. /// public CalculationAgent? CalculationAgentDetermination { get; } } /// /// Payment made following trigger occurrence. /// public class FeaturePayment : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FeaturePaymentMeta(); [JsonConstructor] public FeaturePayment(PartyReferencePayerReceiver payerReceiver, decimal? levelPercentage, decimal? amount, Enums.TimeType? time, FieldWithMetaString? currency, AdjustableOrRelativeDate? paymentDate, _MetaFields? meta) { PayerReceiver = payerReceiver; LevelPercentage = levelPercentage; Amount = amount; Time = time; Currency = currency; PaymentDate = paymentDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This attribute doesn't exist as part of the FpML construct, which makes use of the PayerReceiver.model group. /// public PartyReferencePayerReceiver PayerReceiver { get; } /// /// The trigger level percentage. /// public decimal? LevelPercentage { get; } /// /// The monetary quantity in currency units. /// public decimal? Amount { get; } /// /// The feature payment time. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TimeType? Time { get; } /// /// The currency in which an amount is denominated. /// public FieldWithMetaString? Currency { get; } /// /// The feature payment date. /// public AdjustableOrRelativeDate? PaymentDate { get; } public _MetaFields? Meta { get; } } public class FinInstrm : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FinInstrmMeta(); [JsonConstructor] public FinInstrm(Othr othr) { Othr = othr; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Othr Othr { get; } } public class FinInstrmGnlAttrbts : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FinInstrmGnlAttrbtsMeta(); [JsonConstructor] public FinInstrmGnlAttrbts(string fullNm, string clssfctnTp, string ntnlCcy) { FullNm = fullNm; ClssfctnTp = clssfctnTp; NtnlCcy = ntnlCcy; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string FullNm { get; } public string ClssfctnTp { get; } public string NtnlCcy { get; } } public class FinInstrmRptgTxRpt : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FinInstrmRptgTxRptMeta(); [JsonConstructor] public FinInstrmRptgTxRpt(Tx tx) { Tx = tx; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Tx Tx { get; } } /// /// A data to: define business date convention adjustment to final payment period per leg. /// public class FinalCalculationPeriodDateAdjustment : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FinalCalculationPeriodDateAdjustmentMeta(); [JsonConstructor] public FinalCalculationPeriodDateAdjustment(ReferenceWithMetaAdjustableOrRelativeDates relevantUnderlyingDateReference, ReferenceWithMetaInterestRatePayout swapStreamReference, Enums.BusinessDayConvention businessDayConvention) { RelevantUnderlyingDateReference = relevantUnderlyingDateReference; SwapStreamReference = swapStreamReference; BusinessDayConvention = businessDayConvention; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Reference to the unadjusted cancellation effective dates. /// public ReferenceWithMetaAdjustableOrRelativeDates RelevantUnderlyingDateReference { get; } /// /// Reference to the leg, where date adjustments may apply. /// public ReferenceWithMetaInterestRatePayout SwapStreamReference { get; } /// /// Override business date convention. This takes precedence over leg level information. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention BusinessDayConvention { get; } } /// /// Type for reporting the detailed results of calculating a cash flow for a calculation period. This is enhanced relative to the FpML-based cashflows structure to allow more information to be returned about daily compounded rates. /// public class FixedAmountCalculationDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FixedAmountCalculationDetailsMeta(); [JsonConstructor] public FixedAmountCalculationDetails(CalculationPeriodBase calculationPeriod, Money calculationPeriodNotionalAmount, decimal fixedRate, decimal yearFraction, decimal calculatedAmount) { CalculationPeriod = calculationPeriod; CalculationPeriodNotionalAmount = calculationPeriodNotionalAmount; FixedRate = fixedRate; YearFraction = yearFraction; CalculatedAmount = calculatedAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The calculation period for which the floating calculation was performed. /// public CalculationPeriodBase CalculationPeriod { get; } /// /// The notional in effect during the calculation period. /// public Money CalculationPeriodNotionalAmount { get; } /// /// The value of the fixed rate that was used. /// public decimal FixedRate { get; } /// /// The fraction of a year that this calculation represents, according to the day count fraction method. /// public decimal YearFraction { get; } /// /// The amount of the cash flow that was computed, including any spreads and other processing. /// public decimal CalculatedAmount { get; } } /// /// A predefined price accorded by the counterparties. /// public class FixedPrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FixedPriceMeta(); [JsonConstructor] public FixedPrice(ReferenceWithMetaPriceSchedule? price) { Price = price; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Fixed price step schedule, including an initial price specified as an absolute number. /// public ReferenceWithMetaPriceSchedule? Price { get; } } /// /// Represents a fixed price payout. There is no underlier associated with this payout type and is based on fixed pricing per a given unit (e.g. in commodities price per barrel) /// public class FixedPricePayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new FixedPricePayoutMeta(); [JsonConstructor] public FixedPricePayout(PaymentDates paymentDates, FixedPrice fixedPrice, CalculationSchedule? schedule, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { PaymentDates = paymentDates; FixedPrice = fixedPrice; Schedule = schedule; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the parameters to generate the payment date schedule, either through a parametric representation or by reference to specified dates. /// public PaymentDates PaymentDates { get; } /// /// Specifies the fixed price on which fixed forward payments are based. /// public FixedPrice FixedPrice { get; } /// /// Allows the full representation of a payout by defining a set of schedule periods. It supports standard schedule customization by expressing all the dates, quantities, and pricing data in a non-parametric way. /// public CalculationSchedule? Schedule { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// Type defining the specification for a fixed rate. /// public class FixedRateSpecification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FixedRateSpecificationMeta(); [JsonConstructor] public FixedRateSpecification(RateSchedule? rateSchedule, _MetaFields? meta) { RateSchedule = rateSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The fixed rate or fixed rate schedule expressed as explicit fixed rates and dates. In the case of a schedule, the step dates may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. /// public RateSchedule? RateSchedule { get; } public _MetaFields? Meta { get; } } /// /// Type for reporting the detailed results of calculating a cash flow for a calculation period. This is enhanced relative to the FpML-based cashflows structure to allow more information to be returned about daily compounded rates. /// public class FloatingAmountCalculationDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingAmountCalculationDetailsMeta(); [JsonConstructor] public FloatingAmountCalculationDetails(CalculationPeriodBase calculationPeriod, Money calculationPeriodNotionalAmount, FloatingRateSettingDetails? floatingRate, FloatingRateProcessingDetails? processingDetails, decimal appliedRate, decimal yearFraction, decimal calculatedAmount, decimal spreadExclusiveCalculatedAMount) { CalculationPeriod = calculationPeriod; CalculationPeriodNotionalAmount = calculationPeriodNotionalAmount; FloatingRate = floatingRate; ProcessingDetails = processingDetails; AppliedRate = appliedRate; YearFraction = yearFraction; CalculatedAmount = calculatedAmount; SpreadExclusiveCalculatedAMount = spreadExclusiveCalculatedAMount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The calculation period for which the floating calculation was performed. /// public CalculationPeriodBase CalculationPeriod { get; } /// /// The notional in effect during the calculation period. /// public Money CalculationPeriodNotionalAmount { get; } /// /// The details of the floating rate setting. (If it is a calculated rate, details of that calculation will be inside that. /// public FloatingRateSettingDetails? FloatingRate { get; } /// /// Details fo the floating rate treatment after the rate is observed or calculated. This will include details of things like multipliers, spreads, caps and floors, and the raw and treated rates. /// public FloatingRateProcessingDetails? ProcessingDetails { get; } /// /// The rate that was actually applied, after all calculations and treatments. /// public decimal AppliedRate { get; } /// /// The fraction of a year that this calculation represents, according to the day count fraction method. /// public decimal YearFraction { get; } /// /// The amount of the cash flow that was computed, including any spreads and other processing. /// public decimal CalculatedAmount { get; } /// /// The amount of the cash flow excluding any spread, for subsequent processing. /// public decimal SpreadExclusiveCalculatedAMount { get; } } /// /// A class to specify the ISDA terms relating to the floating rate payment events and the implied additional fixed payments, applicable to the credit derivatives transactions on mortgage-backed securities with pay-as-you-go or physical settlement. /// public class FloatingAmountEvents : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingAmountEventsMeta(); [JsonConstructor] public FloatingAmountEvents(bool? failureToPayPrincipal, InterestShortFall? interestShortfall, bool? writedown, bool? impliedWritedown, FloatingAmountProvisions? floatingAmountProvisions, AdditionalFixedPayments? additionalFixedPayments) { FailureToPayPrincipal = failureToPayPrincipal; InterestShortfall = interestShortfall; Writedown = writedown; ImpliedWritedown = impliedWritedown; FloatingAmountProvisions = floatingAmountProvisions; AdditionalFixedPayments = additionalFixedPayments; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A floating rate payment event. Corresponds to the failure by the Reference Entity to pay an expected principal amount or the payment of an actual principal amount that is less than the expected principal amount. ISDA 2003 Term: Failure to Pay Principal. /// public bool? FailureToPayPrincipal { get; } /// /// A floating rate payment event. With respect to any Reference Obligation Payment Date, either (a) the non-payment of an Expected Interest Amount or (b) the payment of an Actual Interest Amount that is less than the Expected Interest Amount. ISDA 2003 Term: Interest Shortfall. /// public InterestShortFall? InterestShortfall { get; } /// /// A floating rate payment event. Results from the fact that the underlier writes down its outstanding principal amount. ISDA 2003 Term: Writedown. /// public bool? Writedown { get; } /// /// A floating rate payment event. Results from the fact that losses occur to the underlying instruments that do not result in reductions of the outstanding principal of the reference obligation. /// public bool? ImpliedWritedown { get; } /// /// Specifies the floating amount provisions associated with the floatingAmountEvents. /// public FloatingAmountProvisions? FloatingAmountProvisions { get; } /// /// Specifies the events that will give rise to the payment additional fixed payments. /// public AdditionalFixedPayments? AdditionalFixedPayments { get; } } public class FloatingAmountProvisions : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingAmountProvisionsMeta(); [JsonConstructor] public FloatingAmountProvisions(bool? wacCapInterestProvision, bool? stepUpProvision) { WacCapInterestProvision = wacCapInterestProvision; StepUpProvision = stepUpProvision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// As specified by the ISDA Supplement for use with trades on mortgage-backed securities, 'WAC Cap' means a weighted average coupon or weighted average rate cap provision (however defined in the Underlying Instruments) of the Underlying Instruments that limits, increases or decreases the interest rate or interest entitlement, as set out in the Underlying Instruments on the Effective Date without regard to any subsequent amendment The presence of the element with value set to 'true' signifies that the provision is applicable. From a usage standpoint, this provision is typically applicable in the case of CMBS and not applicable in case of RMBS trades. /// public bool? WacCapInterestProvision { get; } /// /// As specified by the ISDA Standard Terms Supplement for use with trades on mortgage-backed securities. The presence of the element with value set to 'true' signifies that the provision is applicable. If applicable, the applicable step-up terms are specified as part of that ISDA Standard Terms Supplement. From a usage standpoint, this provision is typically applicable in the case of RMBS and not applicable in case of CMBS trades. /// public bool? StepUpProvision { get; } } public class FloatingRate : AbstractRosettaModelObject, IFloatingRate, IFloatingRateBase { private static readonly IRosettaMetaData metaData = new FloatingRateMeta(); [JsonConstructor] public FloatingRate(RateSchedule? floatingRateMultiplierSchedule, Enums.RateTreatment? rateTreatment, FloatingRateCalculationParameters? calculationParameters, FallbackRateParameters? fallbackRate, ReferenceWithMetaFloatingRateOption? rateOption, SpreadSchedule? spreadSchedule, StrikeSchedule? capRateSchedule, StrikeSchedule? floorRateSchedule, _MetaFields? meta) { FloatingRateMultiplierSchedule = floatingRateMultiplierSchedule; RateTreatment = rateTreatment; CalculationParameters = calculationParameters; FallbackRate = fallbackRate; RateOption = rateOption; SpreadSchedule = spreadSchedule; CapRateSchedule = capRateSchedule; FloorRateSchedule = floorRateSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public RateSchedule? FloatingRateMultiplierSchedule { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RateTreatment? RateTreatment { get; } /// public FloatingRateCalculationParameters? CalculationParameters { get; } /// public FallbackRateParameters? FallbackRate { get; } public ReferenceWithMetaFloatingRateOption? RateOption { get; } /// public SpreadSchedule? SpreadSchedule { get; } /// public StrikeSchedule? CapRateSchedule { get; } /// public StrikeSchedule? FloorRateSchedule { get; } public _MetaFields? Meta { get; } } /// /// A class defining a floating interest rate through the specification of the floating rate index, the tenor, the multiplier schedule, the spread, the qualification of whether a specific rate treatment and/or a cap or floor apply. /// public class FloatingRateBase : AbstractRosettaModelObject, IFloatingRateBase { private static readonly IRosettaMetaData metaData = new FloatingRateBaseMeta(); [JsonConstructor] public FloatingRateBase(ReferenceWithMetaFloatingRateOption? rateOption, SpreadSchedule? spreadSchedule, StrikeSchedule? capRateSchedule, StrikeSchedule? floorRateSchedule, _MetaFields? meta) { RateOption = rateOption; SpreadSchedule = spreadSchedule; CapRateSchedule = capRateSchedule; FloorRateSchedule = floorRateSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ReferenceWithMetaFloatingRateOption? RateOption { get; } /// public SpreadSchedule? SpreadSchedule { get; } /// public StrikeSchedule? CapRateSchedule { get; } /// public StrikeSchedule? FloorRateSchedule { get; } public _MetaFields? Meta { get; } } /// /// Defines the structures needed to represent the calculation parameters for daily averaged and compounded modular rates as defined in the 2021 ISDA Definitions in Section 7. This type is used to represent modular computed rates in interestRatePayouts. /// public class FloatingRateCalculationParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateCalculationParametersMeta(); [JsonConstructor] public FloatingRateCalculationParameters(Enums.CalculationMethod calculationMethod, ObservationShiftCalculation? observationShiftCalculation, OffsetCalculation? lookbackCalculation, OffsetCalculation? lockoutCalculation, BusinessCenters? applicableBusinessDays, ObservationParameters? observationParameters) { CalculationMethod = calculationMethod; ObservationShiftCalculation = observationShiftCalculation; LookbackCalculation = lookbackCalculation; LockoutCalculation = lockoutCalculation; ApplicableBusinessDays = applicableBusinessDays; ObservationParameters = observationParameters; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// calculation type (averaging or compounding). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CalculationMethod CalculationMethod { get; } /// /// any obervation shift parameters if applicable. /// public ObservationShiftCalculation? ObservationShiftCalculation { get; } /// /// any lookback parameters if applicable. /// public OffsetCalculation? LookbackCalculation { get; } /// /// any lockout parameters if applicable. /// public OffsetCalculation? LockoutCalculation { get; } /// /// the business days that are applicable for the calculation. /// public BusinessCenters? ApplicableBusinessDays { get; } /// /// any applicable observation parameters, such as daily caps or floors. /// public ObservationParameters? ObservationParameters { get; } } /// /// A data defining: parameters associated with a floating rate reset. This data forms: part of the cashflows representation of a stream. /// public class FloatingRateDefinition : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateDefinitionMeta(); [JsonConstructor] public FloatingRateDefinition(decimal? calculatedRate, IEnumerable rateObservation, decimal? floatingRateMultiplier, decimal? spread, IEnumerable capRate, IEnumerable floorRate) { CalculatedRate = calculatedRate; RateObservation = rateObservation; FloatingRateMultiplier = floatingRateMultiplier; Spread = spread; CapRate = capRate; FloorRate = floorRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The final calculated rate for a calculation period after any required averaging of rates A calculated rate of 5% would be represented as 0.05. /// public decimal? CalculatedRate { get; } /// /// The details of a particular rate observation, including the fixing date and observed rate. A list of rate observation elements may be ordered in the document by ascending adjusted fixing date. An FpML document containing an unordered list of rate observations is still regarded as a conformant document. /// public IEnumerable RateObservation { get; } /// /// A rate multiplier to apply to the floating rate. The multiplier can be a positive or negative decimal. This element should only be included if the multiplier is not equal to 1 (one). /// public decimal? FloatingRateMultiplier { get; } /// /// The ISDA Spread, if any, which applies for the calculation period. The spread is a per annum rate, expressed as a decimal. For purposes of determining a calculation period amount, if positive the spread will be added to the floating rate and if negative the spread will be subtracted from the floating rate. A positive 10 basis point (0.1%) spread would be represented as 0.001. /// public decimal? Spread { get; } /// /// The cap rate, if any, which applies to the floating rate for the calculation period. The cap rate (strike) is only required where the floating rate on a swap stream is capped at a certain strike level. The cap rate is assumed to be exclusive of any spread and is a per annum rate, expressed as a decimal. A cap rate of 5% would be represented as 0.05. /// public IEnumerable CapRate { get; } /// /// The floor rate, if any, which applies to the floating rate for the calculation period. The floor rate (strike) is only required where the floating rate on a swap stream is floored at a certain strike level. The floor rate is assumed to be exclusive of any spread and is a per annum rate, expressed as a decimal. The floor rate of 5% would be represented as 0.05. /// public IEnumerable FloorRate { get; } } /// /// This holds the rate calculation defaults applicable for a floating rate index. /// public class FloatingRateIndexCalculationDefaults : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateIndexCalculationDefaultsMeta(); [JsonConstructor] public FloatingRateIndexCalculationDefaults(Enums.FloatingRateIndexCategory? category, Enums.FloatingRateIndexStyle? indexStyle, Enums.FloatingRateIndexCalculationMethod? method) { Category = category; IndexStyle = indexStyle; Method = method; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The ISDA FRO category (e.g. screen rate or calculated rate). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndexCategory? Category { get; } /// /// The ISDA FRO style (e.g. term rate, swap rate, etc). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndexStyle? IndexStyle { get; } /// /// The ISDA FRO calculation method (e.g. OIS Compounding). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndexCalculationMethod? Method { get; } } public class FloatingRateIndexDefinition : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateIndexDefinitionMeta(); [JsonConstructor] public FloatingRateIndexDefinition(FloatingRateIndexIdentification fro, FloatingRateIndexCalculationDefaults? calculationDefaults) { Fro = fro; CalculationDefaults = calculationDefaults; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The underlying FRO name and designated maturity. /// public FloatingRateIndexIdentification Fro { get; } /// /// Any calculation default values. /// public FloatingRateIndexCalculationDefaults? CalculationDefaults { get; } } public class FloatingRateIndexIdentification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateIndexIdentificationMeta(); [JsonConstructor] public FloatingRateIndexIdentification(FieldWithMetaFloatingRateIndexEnum? floatingRateIndex, Enums.ISOCurrencyCode? currency, string? froType) { FloatingRateIndex = floatingRateIndex; Currency = currency; FroType = froType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The reference index that is used to specify the floating interest rate. The FpML standard maintains the list of such indices, which are positioned as enumeration values as part of the CDM. /// public FieldWithMetaFloatingRateIndexEnum? FloatingRateIndex { get; } /// /// FRO currency - 3 character ISO currrency code /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ISOCurrencyCode? Currency { get; } /// /// FRO type (e.g. OIS) /// public string? FroType { get; } } /// /// Specification of a floating rate option as a floating rate index and tenor. /// public class FloatingRateOption : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateOptionMeta(); [JsonConstructor] public FloatingRateOption(FieldWithMetaFloatingRateIndexEnum? floatingRateIndex, FieldWithMetaInflationRateIndexEnum? inflationRateIndex, Period? indexTenor, IndexReferenceInformation? indexReferenceInformation) { FloatingRateIndex = floatingRateIndex; InflationRateIndex = inflationRateIndex; IndexTenor = indexTenor; IndexReferenceInformation = indexReferenceInformation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The reference index that is used to specify the floating interest rate. The FpML standard maintains the list of such indices, which are positioned as enumeration values as part of the CDM. /// public FieldWithMetaFloatingRateIndexEnum? FloatingRateIndex { get; } /// /// The reference index that is used to specify the inflation interest rate. The FpML standard maintains the list of such indices, which are positioned as enumeration values as part of the CDM. /// public FieldWithMetaInflationRateIndexEnum? InflationRateIndex { get; } /// /// The ISDA Designated Maturity, i.e. the floating rate tenor. /// public Period? IndexTenor { get; } /// /// This Attribute contains all the terms relevant to defining an Index. /// public IndexReferenceInformation? IndexReferenceInformation { get; } } /// /// Type for reporting the details of the rate treatment. This could potentially be replaced by the existing FloatingRateDefinition type , but this is slightly more detailed. /// public class FloatingRateProcessingDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateProcessingDetailsMeta(); [JsonConstructor] public FloatingRateProcessingDetails(decimal rawRate, FloatingRateProcessingParameters? processingParameters, decimal processedRate, decimal spreadExclusiveRate) { RawRate = rawRate; ProcessingParameters = processingParameters; ProcessedRate = processedRate; SpreadExclusiveRate = spreadExclusiveRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The raw or untreated rate, prior to any of the rate treatments. /// public decimal RawRate { get; } public FloatingRateProcessingParameters? ProcessingParameters { get; } /// /// The value of the rate after processing. /// public decimal ProcessedRate { get; } /// /// The value of the processed rate without the spread applied, for subsequent compounding, etc. /// public decimal SpreadExclusiveRate { get; } } /// /// Type to hold the processing parameters that should be or were used to calculate a floating amount. These parameters can vary over a schedule so this type holds the acutal values applicable to this calculation. /// public class FloatingRateProcessingParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateProcessingParametersMeta(); [JsonConstructor] public FloatingRateProcessingParameters(Price? initialRate, decimal? multiplier, decimal? spread, Enums.RateTreatment? treatment, decimal? capRate, decimal? floorRate, Rounding? rounding, Enums.NegativeInterestRateTreatment? negativeTreatment) { InitialRate = initialRate; Multiplier = multiplier; Spread = spread; Treatment = treatment; CapRate = capRate; FloorRate = floorRate; Rounding = rounding; NegativeTreatment = negativeTreatment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The rate to be applied for the initial period. /// public Price? InitialRate { get; } /// /// floating rate multiplier. /// public decimal? Multiplier { get; } /// /// spread to be added to the floating rate. /// public decimal? Spread { get; } /// /// US rate treatment (Bond Equivalent Yield or Money Market Yield, if applicable. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RateTreatment? Treatment { get; } /// /// capt to be applied to the floating rate. /// public decimal? CapRate { get; } /// /// floor to be applied to the floating rate. /// public decimal? FloorRate { get; } /// /// THe final rate rounding to be applied. /// public Rounding? Rounding { get; } /// /// How to handle negative interest rates. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NegativeInterestRateTreatment? NegativeTreatment { get; } } /// /// Type for reporting the raw (untreated) observed or calculated rate for a calculation period. If this is a calculated rate, it allows details of the observations and the resulting rate to be returned. /// public class FloatingRateSettingDetails : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FloatingRateSettingDetailsMeta(); [JsonConstructor] public FloatingRateSettingDetails(CalculatedRateDetails? calculationDetails, LocalDate? observationDate, LocalDate? resetDate, decimal floatingRate) { CalculationDetails = calculationDetails; ObservationDate = observationDate; ResetDate = resetDate; FloatingRate = floatingRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Calculated rate details (observation dates, values, and weights). /// public CalculatedRateDetails? CalculationDetails { get; } /// /// The day upon which the rate was observed (for term rates). /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? ObservationDate { get; } /// /// The day for which the rate is needed (e.g. period beginning or end date). /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? ResetDate { get; } /// /// The resulting rate that was observed or calculated. /// public decimal FloatingRate { get; } } /// /// A class to specify the floating interest rate by extending the floating rate definition with a set of attributes that specify such rate: the initial value specified as part of the trade, the rounding convention, the averaging method and the negative interest rate treatment. /// public class FloatingRateSpecification : AbstractRosettaModelObject, IFloatingRateSpecification, IFloatingRate { private static readonly IRosettaMetaData metaData = new FloatingRateSpecificationMeta(); [JsonConstructor] public FloatingRateSpecification(Price? initialRate, Rounding? finalRateRounding, Enums.AveragingWeightingMethod? averagingMethod, Enums.NegativeInterestRateTreatment? negativeInterestRateTreatment, RateSchedule? floatingRateMultiplierSchedule, Enums.RateTreatment? rateTreatment, FloatingRateCalculationParameters? calculationParameters, FallbackRateParameters? fallbackRate, ReferenceWithMetaFloatingRateOption? rateOption, SpreadSchedule? spreadSchedule, StrikeSchedule? capRateSchedule, StrikeSchedule? floorRateSchedule, _MetaFields? meta) { InitialRate = initialRate; FinalRateRounding = finalRateRounding; AveragingMethod = averagingMethod; NegativeInterestRateTreatment = negativeInterestRateTreatment; FloatingRateMultiplierSchedule = floatingRateMultiplierSchedule; RateTreatment = rateTreatment; CalculationParameters = calculationParameters; FallbackRate = fallbackRate; RateOption = rateOption; SpreadSchedule = spreadSchedule; CapRateSchedule = capRateSchedule; FloorRateSchedule = floorRateSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public Price? InitialRate { get; } /// public Rounding? FinalRateRounding { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AveragingWeightingMethod? AveragingMethod { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NegativeInterestRateTreatment? NegativeInterestRateTreatment { get; } /// public RateSchedule? FloatingRateMultiplierSchedule { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RateTreatment? RateTreatment { get; } /// public FloatingRateCalculationParameters? CalculationParameters { get; } /// public FallbackRateParameters? FallbackRate { get; } public ReferenceWithMetaFloatingRateOption? RateOption { get; } /// public SpreadSchedule? SpreadSchedule { get; } /// public StrikeSchedule? CapRateSchedule { get; } /// public StrikeSchedule? FloorRateSchedule { get; } public _MetaFields? Meta { get; } } /// /// From FpML: A type defining either a spot or forward FX transactions. /// public class ForeignExchange : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ForeignExchangeMeta(); [JsonConstructor] public ForeignExchange(Cashflow exchangedCurrency1, Cashflow exchangedCurrency2, Period? tenorPeriod, ExchangeRate? exchangeRate) { ExchangedCurrency1 = exchangedCurrency1; ExchangedCurrency2 = exchangedCurrency2; TenorPeriod = tenorPeriod; ExchangeRate = exchangeRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This is the first of the two currency flows that define a single leg of a standard foreign exchange transaction. /// public Cashflow ExchangedCurrency1 { get; } /// /// This is the second of the two currency flows that define a single leg of a standard foreign exchange transaction. /// public Cashflow ExchangedCurrency2 { get; } /// /// A tenor expressed as a period type and multiplier (e.g. 1D, 1Y, etc.) /// public Period? TenorPeriod { get; } /// /// The rate of exchange between the two currencies. /// public ExchangeRate? ExchangeRate { get; } } /// /// Represents a forward settling payout. The underlier attribute captures the underlying payout, which is settled according to the settlementTerms attribute (which is part of PayoutBase). Both FX Spot and FX Forward should use this component. /// public class ForwardPayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new ForwardPayoutMeta(); [JsonConstructor] public ForwardPayout(Product underlier, string? deliveryTerm, AssetDeliveryInformation? delivery, CalculationSchedule? schedule, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { Underlier = underlier; DeliveryTerm = deliveryTerm; Delivery = delivery; Schedule = schedule; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Underlying product that the forward is written on, which can be of any type: FX, a contractual product, a security, etc. /// public Product Underlier { get; } /// /// Also called contract month or delivery month. However, it's not always a month. It is usually expressed using a code, e.g. Z23 would be the Dec 2023 contract, (Z = December). For crude oil, the corresponding contract might be called CLZ23. /// public string? DeliveryTerm { get; } /// /// Contains the information relative to the delivery of the asset. /// public AssetDeliveryInformation? Delivery { get; } /// /// Allows the full representation of a payout by defining a set of schedule periods. It supports standard schedule customization by expressing all the dates, quantities, and pricing data in a non-parametric way. /// public CalculationSchedule? Schedule { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// A class for defining a date frequency, e.g. one day, three months, through the combination of an integer value and a standardized period value that is specified as part of an enumeration. /// public class Frequency : AbstractRosettaModelObject, IFrequency { private static readonly IRosettaMetaData metaData = new FrequencyMeta(); [JsonConstructor] public Frequency(int periodMultiplier, Enums.PeriodExtended period, _MetaFields? meta) { PeriodMultiplier = periodMultiplier; Period = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PeriodExtended Period { get; } public _MetaFields? Meta { get; } } /// /// A class defining a currency and a future value date. /// public class FutureValueAmount : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FutureValueAmountMeta(); [JsonConstructor] public FutureValueAmount(ReferenceWithMetaNonNegativeQuantitySchedule? quantity, FieldWithMetaString currency, int calculationPeriodNumberOfDays, LocalDate valueDate) { Quantity = quantity; Currency = currency; CalculationPeriodNumberOfDays = calculationPeriodNumberOfDays; ValueDate = valueDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ReferenceWithMetaNonNegativeQuantitySchedule? Quantity { get; } /// /// The currency in which the an amount is denominated. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public FieldWithMetaString Currency { get; } /// /// The number of days from the adjusted calculation period start date to the adjusted value date, calculated in accordance with the applicable day count fraction. /// public int CalculationPeriodNumberOfDays { get; } /// /// Adjusted value date of the future value amount. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate ValueDate { get; } } /// /// TransactionAdditionalTerms which apply to the CurrencyPair asset class. /// public class FxAdditionalTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxAdditionalTermsMeta(); [JsonConstructor] public FxAdditionalTerms() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// A type for defining FX Features. /// public class FxFeature : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxFeatureMeta(); [JsonConstructor] public FxFeature(FieldWithMetaString referenceCurrency, Composite? composite, Quanto? quanto, Composite? crossCurrency) { ReferenceCurrency = referenceCurrency; Composite = composite; Quanto = quanto; CrossCurrency = crossCurrency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the reference currency of the trade. /// public FieldWithMetaString ReferenceCurrency { get; } /// /// If 'Composite' is specified as the Settlement Type in the relevant Transaction Supplement, an amount in the Settlement Currency, determined by the Calculation Agent as being equal to the number of Options exercised or deemed exercised, multiplied by: (Settlement Price – Strike Price) / (Strike Price – Settlement Price) x Multiplier provided that if the above is equal to a negative amount the Option Cash Settlement Amount shall be deemed to be zero. /// public Composite? Composite { get; } /// /// If 'Quanto' is specified as the Settlement Type in the relevant Transaction Supplement, an amount, as determined by the Calculation Agent in accordance with the Section 8.2 of the Equity Definitions. /// public Quanto? Quanto { get; } /// /// If 'Cross-Currency' is specified as the Settlement Type in the relevant Transaction Supplement, an amount in the Settlement Currency, determined by the Calculation Agent as being equal to the number of Options exercised or deemed exercised, multiplied by: (Settlement Price – Strike Price) / (Strike Price – Settlement Price) x Multiplier x one unit of the Reference Currency converted into an amount in the Settlement Currency using the rate of exchange of the Settlement Currency as quoted on the Reference Price Source on the Valuation Date, provided that if the above is equal to a negative amount the Option Cash Settlement Amount shall be deemed to be zero. /// public Composite? CrossCurrency { get; } } /// /// Extends the Offset structure to specify an FX fixing date as an offset to dates specified somewhere else in the document. /// public class FxFixingDate : AbstractRosettaModelObject, IOffset { private static readonly IRosettaMetaData metaData = new FxFixingDateMeta(); [JsonConstructor] public FxFixingDate(Enums.BusinessDayConvention? businessDayConvention, BusinessCenters? businessCenters, ReferenceWithMetaBusinessCenters? businessCentersReference, DateRelativeToPaymentDates? dateRelativeToPaymentDates, DateRelativeToCalculationPeriodDates? dateRelativeToCalculationPeriodDates, DateRelativeToValuationDates? dateRelativeToValuationDates, AdjustableOrRelativeDate? fxFixingDate, Enums.DayType? dayType, int periodMultiplier, Enums.Period period, _MetaFields? meta) { BusinessDayConvention = businessDayConvention; BusinessCenters = businessCenters; BusinessCentersReference = businessCentersReference; DateRelativeToPaymentDates = dateRelativeToPaymentDates; DateRelativeToCalculationPeriodDates = dateRelativeToCalculationPeriodDates; DateRelativeToValuationDates = dateRelativeToValuationDates; FxFixingDateValue = fxFixingDate; DayType = dayType; PeriodMultiplier = periodMultiplier; PeriodValue = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The convention for adjusting a date if it would otherwise fall on a day that is not a business day, as specified by an ISDA convention (e.g. Following, Precedent). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention? BusinessDayConvention { get; } public BusinessCenters? BusinessCenters { get; } /// /// A reference to a set of financial business centers defined elsewhere in the document. This set of business centers is used to determine whether a particular day is a business day or not. /// public ReferenceWithMetaBusinessCenters? BusinessCentersReference { get; } /// /// The payment date references on which settlements in non-deliverable currency are due and will then have to be converted according to the terms specified through the other parts of the nonDeliverableSettlement structure. /// public DateRelativeToPaymentDates? DateRelativeToPaymentDates { get; } /// /// The calculation period references on which settlements in non-deliverable currency are due and will then have to be converted according to the terms specified through the other parts of the nonDeliverableSettlement structure. Implemented for Brazilian-CDI swaps where it will refer to the termination date of the appropriate leg. /// public DateRelativeToCalculationPeriodDates? DateRelativeToCalculationPeriodDates { get; } /// /// The calculation period references on which settlements in non-deliverable currency are due and will then have to be converted according to the terms specified through the other parts of the nonDeliverableSettlement structure. Implemented for Brazilian-CDI swaps where it will refer to the termination date of the appropriate leg. /// public DateRelativeToValuationDates? DateRelativeToValuationDates { get; } /// /// Describes the specific date when a non-deliverable forward or cash-settled option will 'fix' against a particular rate, which will be used to compute the ultimate cash settlement. This element should be omitted where a single, discrete fixing date cannot be identified e.g. on an american option, where fixing may occur at any date on a continuous range. This attribute was formerly part of 'fxSettlementTerms', which is now being harmonised into a common 'CashSettlementTerms' that includes a 'ValuationDate'. /// [JsonProperty(PropertyName = "fxFixingDate")] public AdjustableOrRelativeDate? FxFixingDateValue { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType? DayType { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "period")] public Enums.Period PeriodValue { get; } public _MetaFields? Meta { get; } } /// /// Information source specific to Foreign Exchange products. /// public class FxInformationSource : AbstractRosettaModelObject, IInformationSource { private static readonly IRosettaMetaData metaData = new FxInformationSourceMeta(); [JsonConstructor] public FxInformationSource(BusinessCenterTime? fixingTime, FieldWithMetaInformationProviderEnum sourceProvider, FieldWithMetaString? sourcePage, string? sourcePageHeading) { FixingTime = fixingTime; SourceProvider = sourceProvider; SourcePage = sourcePage; SourcePageHeading = sourcePageHeading; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The time that the fixing will be taken along with a business center to define the time zone. /// public BusinessCenterTime? FixingTime { get; } /// public FieldWithMetaInformationProviderEnum SourceProvider { get; } /// public FieldWithMetaString? SourcePage { get; } /// public string? SourcePageHeading { get; } } /// /// A data to: describe the cashflow representation for FX linked notionals. /// public class FxLinkedNotionalAmount : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxLinkedNotionalAmountMeta(); [JsonConstructor] public FxLinkedNotionalAmount(LocalDate? resetDate, LocalDate? adjustedFxSpotFixingDate, decimal? observedFxSpotRate, decimal? notionalAmount) { ResetDate = resetDate; AdjustedFxSpotFixingDate = adjustedFxSpotFixingDate; ObservedFxSpotRate = observedFxSpotRate; NotionalAmount = notionalAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The reset date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? ResetDate { get; } /// /// The date on which the FX spot rate is observed. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedFxSpotFixingDate { get; } /// /// The actual observed FX spot rate. /// public decimal? ObservedFxSpotRate { get; } /// /// The calculation period notional amount. /// public decimal? NotionalAmount { get; } } /// /// A data to: describe a notional schedule where each notional that applies to a calculation period is calculated with reference to a notional amount or notional amount schedule in a different currency by means of a spot currency exchange rate which is normally observed at the beginning of each period. /// public class FxLinkedNotionalSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxLinkedNotionalScheduleMeta(); [JsonConstructor] public FxLinkedNotionalSchedule(FieldWithMetaString varyingNotionalCurrency, RelativeDateOffset varyingNotionalFixingDates, FxSpotRateSource fxSpotRateSource, BusinessCenterTime? fixingTime, RelativeDateOffset varyingNotionalInterimExchangePaymentDates) { VaryingNotionalCurrency = varyingNotionalCurrency; VaryingNotionalFixingDates = varyingNotionalFixingDates; FxSpotRateSource = fxSpotRateSource; FixingTime = fixingTime; VaryingNotionalInterimExchangePaymentDates = varyingNotionalInterimExchangePaymentDates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The currency of the varying notional amount, i.e. the notional amount being determined periodically based on observation of a spot currency exchange rate. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public FieldWithMetaString VaryingNotionalCurrency { get; } /// /// The dates on which spot currency exchange rates are observed for purposes of determining the varying notional currency amount that will apply to a calculation period. /// public RelativeDateOffset VaryingNotionalFixingDates { get; } /// /// The information source and time at which the spot currency exchange rate will be observed. /// public FxSpotRateSource FxSpotRateSource { get; } /// /// The time at which the spot currency exchange rate will be observed. It is specified as a time in a business day calendar location, e.g. 11:00am London time. /// public BusinessCenterTime? FixingTime { get; } /// /// The dates on which interim exchanges of notional are paid. Interim exchanges will arise as a result of changes in the spot currency exchange amount or changes in the constant notional schedule (e.g. amortisation). /// public RelativeDateOffset VaryingNotionalInterimExchangePaymentDates { get; } } /// /// A class describing the rate of a currency conversion: pair of currency, quotation mode and exchange rate. /// public class FxRate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxRateMeta(); [JsonConstructor] public FxRate(QuotedCurrencyPair quotedCurrencyPair, decimal? rate) { QuotedCurrencyPair = quotedCurrencyPair; Rate = rate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the two currencies for an FX trade and the quotation relationship between the two currencies. /// public QuotedCurrencyPair QuotedCurrencyPair { get; } /// /// The rate of exchange between the two currencies of the leg of a deal. Must be specified with a quote basis. /// public decimal? Rate { get; } } /// /// Defines foreign exchange (FX) asset class specific parameters for market observations. /// public class FxRateObservable : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxRateObservableMeta(); [JsonConstructor] public FxRateObservable(ReferenceWithMetaQuotedCurrencyPair quotedCurrencyPair, InformationSource primaryFxSpotRateSource, InformationSource? secondaryFxSpotRateSource) { QuotedCurrencyPair = quotedCurrencyPair; PrimaryFxSpotRateSource = primaryFxSpotRateSource; SecondaryFxSpotRateSource = secondaryFxSpotRateSource; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Describes the composition of a rate that has been quoted or is to be quoted. /// public ReferenceWithMetaQuotedCurrencyPair QuotedCurrencyPair { get; } /// /// Specifies the primary source from which a rate should be observed. /// public InformationSource PrimaryFxSpotRateSource { get; } /// /// Specifies an alternative, or secondary, source from which a rate should be observed. /// public InformationSource? SecondaryFxSpotRateSource { get; } } /// /// Describes a rate source to be fixed and the date the fixing occurs /// public class FxRateSourceFixing : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxRateSourceFixingMeta(); [JsonConstructor] public FxRateSourceFixing(FxSettlementRateSource settlementRateSource, AdjustableDate fixingDate) { SettlementRateSource = settlementRateSource; FixingDate = fixingDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public FxSettlementRateSource SettlementRateSource { get; } /// /// The date on which the fixing is scheduled to occur. /// public AdjustableDate FixingDate { get; } } /// /// The source of the Foreign Exchange settlement rate. /// public class FxSettlementRateSource : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxSettlementRateSourceMeta(); [JsonConstructor] public FxSettlementRateSource(FieldWithMetaString? settlementRateOption, FxInformationSource? nonstandardSettlementRate) { SettlementRateOption = settlementRateOption; NonstandardSettlementRate = nonstandardSettlementRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates that an officially defined rate settlement rate option will be the used for the fixing. /// public FieldWithMetaString? SettlementRateOption { get; } /// /// Indicates that a non-standard rate source will be used for the fixing. /// public FxInformationSource? NonstandardSettlementRate { get; } } /// /// A class defining the rate source and fixing time for an FX rate. /// public class FxSpotRateSource : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new FxSpotRateSourceMeta(); [JsonConstructor] public FxSpotRateSource(InformationSource primarySource, InformationSource? secondarySource) { PrimarySource = primarySource; SecondarySource = secondarySource; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The primary source for where the rate observation will occur. Will typically be either a page or a reference bank published rate. /// public InformationSource PrimarySource { get; } /// /// An alternative, or secondary, source for where the rate observation will occur. Will typically be either a page or a reference bank published rate. /// public InformationSource? SecondarySource { get; } } /// /// A class specifying a set of non-monetary terms for the Credit Derivative Transaction, including the buyer and seller and selected items from the ISDA 2014 Credit Definition article II, such as the reference obligation and related terms. The CDM GeneralTerms class corresponds to the FpML GeneralTerms complex type, except that the effectiveDate and scheduledTerminationDate have been positioned as part of the InterestRatePayout class in the CDM instead of in GeneralTerms. /// public class GeneralTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new GeneralTermsMeta(); [JsonConstructor] public GeneralTerms(ReferenceInformation? referenceInformation, CreditIndexReferenceInformation? indexReferenceInformation, BasketReferenceInformation? basketReferenceInformation, IEnumerable additionalTerm, bool? substitution, bool? modifiedEquityDelivery) { ReferenceInformation = referenceInformation; IndexReferenceInformation = indexReferenceInformation; BasketReferenceInformation = basketReferenceInformation; AdditionalTerm = additionalTerm; Substitution = substitution; ModifiedEquityDelivery = modifiedEquityDelivery; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This attribute contains all the terms relevant to defining the reference entity and reference obligation(s). /// public ReferenceInformation? ReferenceInformation { get; } /// /// This attribute contains all the terms relevant to the underlying Index. /// public CreditIndexReferenceInformation? IndexReferenceInformation { get; } /// /// This attribute contains all the terms relevant to defining the Credit Default Swap Basket. /// public BasketReferenceInformation? BasketReferenceInformation { get; } /// /// This attribute is used for representing information contained in the Additional Terms field of the 2003 Master Credit Derivatives confirm. /// public IEnumerable AdditionalTerm { get; } /// /// Value of this attribute set to 'true' indicates that substitution is applicable. /// public bool? Substitution { get; } /// /// Value of this attribute set to 'true' indicates that modified equity delivery is applicable. /// public bool? ModifiedEquityDelivery { get; } } public class GracePeriodExtension : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new GracePeriodExtensionMeta(); [JsonConstructor] public GracePeriodExtension(bool applicable, Offset? gracePeriod) { Applicable = applicable; GracePeriod = gracePeriod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether the grace period extension provision is applicable. /// public bool Applicable { get; } /// /// The number of calendar or business days after any due date that the reference entity has to fulfil its obligations before a failure to pay credit event is deemed to have occurred. ISDA 2003 Term: Grace Period. /// public Offset? GracePeriod { get; } } public class Id : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new IdMeta(); [JsonConstructor] public Id(string lei) { Lei = lei; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string Lei { get; } } /// /// Attaches an identifier to a collection of objects, when those objects themselves can each be represented by an identifier. One use case is the representation of package transactions, where each component is a separate trade with its own identifier, and those trades are linked together as a package with its own identifier. The data type has been named generically rather than referring to 'packages' as it may have a number of other uses. /// public class IdentifiedList : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new IdentifiedListMeta(); [JsonConstructor] public IdentifiedList(Identifier listId, IEnumerable componentId, Price? price, _MetaFields? meta) { ListId = listId; ComponentId = componentId; Price = price; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The identifier for the list. In the case of a package transaction, this would be the package identifier. This attribute is mandatory to allow the list itself to be identified. /// public Identifier ListId { get; } /// /// Identifiers for each component of the list. Since the data type is used to link multiple identified objects together, at least 2 components are required in the list. Creating an identified list with only 1 identified component has been deemed unnecessary, because it would just create a redundant identifier. /// public IEnumerable ComponentId { get; } /// /// The price of the package. /// public Price? Price { get; } public _MetaFields? Meta { get; } } /// /// An abstract class to specify a product which terms are abstracted through reference data. /// public class IdentifiedProduct : AbstractRosettaModelObject, IIdentifiedProduct { private static readonly IRosettaMetaData metaData = new IdentifiedProductMeta(); [JsonConstructor] public IdentifiedProduct(ProductIdentifier productIdentifier) { ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ProductIdentifier ProductIdentifier { get; } } /// /// A class to specify a generic identifier, applicable to CDM artefacts such as executions, contracts, lifecycle events and legal documents. An issuer can be associated with the actual identifier value as a way to properly qualify it. /// public class Identifier : AbstractRosettaModelObject, IIdentifier { private static readonly IRosettaMetaData metaData = new IdentifierMeta(); [JsonConstructor] public Identifier(ReferenceWithMetaParty? issuerReference, FieldWithMetaString? issuer, IEnumerable assignedIdentifier, _MetaFields? meta) { IssuerReference = issuerReference; Issuer = issuer; AssignedIdentifier = assignedIdentifier; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public ReferenceWithMetaParty? IssuerReference { get; } /// public FieldWithMetaString? Issuer { get; } /// public IEnumerable AssignedIdentifier { get; } public _MetaFields? Meta { get; } } /// /// A class specifying the Independent Amount as the combination of a payer/receiver, a payment amount, a payment date and an associated payment calculation rule. /// public class IndependentAmount : AbstractRosettaModelObject, IPartyReferencePayerReceiver { private static readonly IRosettaMetaData metaData = new IndependentAmountMeta(); [JsonConstructor] public IndependentAmount(IEnumerable paymentDetail, ReferenceWithMetaParty payerPartyReference, ReferenceWithMetaAccount? payerAccountReference, ReferenceWithMetaParty receiverPartyReference, ReferenceWithMetaAccount? receiverAccountReference) { PaymentDetail = paymentDetail; PayerPartyReference = payerPartyReference; PayerAccountReference = payerAccountReference; ReceiverPartyReference = receiverPartyReference; ReceiverAccountReference = receiverAccountReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An attribute that specifies a payment as the combination of a payment amount, a payment date and an associated payment calculation rule. /// public IEnumerable PaymentDetail { get; } /// public ReferenceWithMetaParty PayerPartyReference { get; } /// public ReferenceWithMetaAccount? PayerAccountReference { get; } /// public ReferenceWithMetaParty ReceiverPartyReference { get; } /// public ReferenceWithMetaAccount? ReceiverAccountReference { get; } } /// /// Identifies an index by referencing a product identifier. /// public class Index : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new IndexMeta(); [JsonConstructor] public Index(IEnumerable productTaxonomy, IEnumerable productIdentifier) { ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// Defines the specification of the consequences of Index Events as defined by the 2002 ISDA Equity Derivatives Definitions. /// public class IndexAdjustmentEvents : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new IndexAdjustmentEventsMeta(); [JsonConstructor] public IndexAdjustmentEvents() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// A class defining information related to Index /// public class IndexReferenceInformation : AbstractRosettaModelObject, IIndexReferenceInformation { private static readonly IRosettaMetaData metaData = new IndexReferenceInformationMeta(); [JsonConstructor] public IndexReferenceInformation(FieldWithMetaString? indexName, IEnumerable indexId) { IndexName = indexName; IndexId = indexId; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public FieldWithMetaString? IndexName { get; } /// public IEnumerable IndexId { get; } } /// /// Defines the information needed to create a Index Transition Business Event. /// public class IndexTransitionInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new IndexTransitionInstructionMeta(); [JsonConstructor] public IndexTransitionInstruction(IEnumerable priceQuantity, LocalDate effectiveDate, Transfer? cashTransfer) { PriceQuantity = priceQuantity; EffectiveDate = effectiveDate; CashTransfer = cashTransfer; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies both new floating rate index and spread adjustment for each leg to be updated. The spread adjustment accounts for the difference between the old floating rate index relative to the new one. This spread amount is added to the existing spread to determine the new spread, which is applied from the specified effective date forward. In the case of the IBOR Fallback Rate Adjustments, the adjustment spread (also known as the Fallback Adjustment) accounts for two distinctions: i) the fact that the replacement Risk-Free Rate is an overnight rate while IBORs have term structures (e.g., 1, 3, 6-month LIBOR); and (ii) the historical spread differential between IBORs and their term equivalent Overnight Risk-Free Rate compounded rates. /// public IEnumerable PriceQuantity { get; } /// /// Specifies the effective date of the index transition event. This is first date on which the floating rate calculation will use the new floating rate index and adjusted spread in the floating rate calculation. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EffectiveDate { get; } /// /// Specifies the cash transfer that can optionally be tied to an index transition event. /// public Transfer? CashTransfer { get; } } public class Indx : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new IndxMeta(); [JsonConstructor] public Indx(Nm nm) { Nm = nm; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Nm Nm { get; } } /// /// A data to: specify the inflation rate. /// public class InflationRateSpecification : AbstractRosettaModelObject, IFloatingRateSpecification { private static readonly IRosettaMetaData metaData = new InflationRateSpecificationMeta(); [JsonConstructor] public InflationRateSpecification(Offset inflationLag, FieldWithMetaString indexSource, FieldWithMetaString mainPublication, FieldWithMetaInterpolationMethodEnum interpolationMethod, decimal? initialIndexLevel, bool fallbackBondApplicable, Enums.InflationCalculationMethod? calculationMethod, Enums.InflationCalculationStyle? calculationStyle, Enums.FinalPrincipalExchangeCalculation? finalPrincipalExchangeCalculation, Price? initialRate, Rounding? finalRateRounding, Enums.AveragingWeightingMethod? averagingMethod, Enums.NegativeInterestRateTreatment? negativeInterestRateTreatment, RateSchedule? floatingRateMultiplierSchedule, Enums.RateTreatment? rateTreatment, FloatingRateCalculationParameters? calculationParameters, FallbackRateParameters? fallbackRate, ReferenceWithMetaFloatingRateOption? rateOption, SpreadSchedule? spreadSchedule, StrikeSchedule? capRateSchedule, StrikeSchedule? floorRateSchedule, _MetaFields? meta) { InflationLag = inflationLag; IndexSource = indexSource; MainPublication = mainPublication; InterpolationMethod = interpolationMethod; InitialIndexLevel = initialIndexLevel; FallbackBondApplicable = fallbackBondApplicable; CalculationMethod = calculationMethod; CalculationStyle = calculationStyle; FinalPrincipalExchangeCalculation = finalPrincipalExchangeCalculation; InitialRate = initialRate; FinalRateRounding = finalRateRounding; AveragingMethod = averagingMethod; NegativeInterestRateTreatment = negativeInterestRateTreatment; FloatingRateMultiplierSchedule = floatingRateMultiplierSchedule; RateTreatment = rateTreatment; CalculationParameters = calculationParameters; FallbackRate = fallbackRate; RateOption = rateOption; SpreadSchedule = spreadSchedule; CapRateSchedule = capRateSchedule; FloorRateSchedule = floorRateSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An off-setting period from the payment date which determines the reference period for which the inflation index is observed. /// public Offset InflationLag { get; } /// /// The reference source such as Reuters or Bloomberg. FpML specifies indexSource to be of type rateSourcePageScheme, but without specifying actual values. /// public FieldWithMetaString IndexSource { get; } /// /// The current main publication source such as relevant web site or a government body. FpML specifies mainPublication to be of type mainPublicationSource, but without specifying actual values. /// public FieldWithMetaString MainPublication { get; } /// /// The method used when calculating the Inflation Index Level from multiple points. The most common is Linear. /// public FieldWithMetaInterpolationMethodEnum InterpolationMethod { get; } /// /// Initial known index level for the first calculation period. /// public decimal? InitialIndexLevel { get; } /// /// The applicability of a fallback bond as defined in the 2006 ISDA Inflation Derivatives Definitions, sections 1.3 and 1.8. /// public bool FallbackBondApplicable { get; } /// /// Indicates how to use the inflation index to calculate the payment (e.g. Ratio, Return, Spread). Added for Inflation Asset Swap /// [JsonConverter(typeof(StringEnumConverter))] public Enums.InflationCalculationMethod? CalculationMethod { get; } /// /// Indicates the style of how the inflation index calculates the payment (e.g. YearOnYear, ZeroCoupon). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.InflationCalculationStyle? CalculationStyle { get; } /// /// To be specified only for products that embed a redemption payment. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FinalPrincipalExchangeCalculation? FinalPrincipalExchangeCalculation { get; } /// public Price? InitialRate { get; } /// public Rounding? FinalRateRounding { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AveragingWeightingMethod? AveragingMethod { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NegativeInterestRateTreatment? NegativeInterestRateTreatment { get; } /// public RateSchedule? FloatingRateMultiplierSchedule { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RateTreatment? RateTreatment { get; } /// public FloatingRateCalculationParameters? CalculationParameters { get; } /// public FallbackRateParameters? FallbackRate { get; } public ReferenceWithMetaFloatingRateOption? RateOption { get; } /// public SpreadSchedule? SpreadSchedule { get; } /// public StrikeSchedule? CapRateSchedule { get; } /// public StrikeSchedule? FloorRateSchedule { get; } public _MetaFields? Meta { get; } } /// /// A class defining the source for a piece of information (e.g. a rate fix or an FX fixing). The attribute names have been adjusted from FpML to address the fact that the information is not limited to rates. /// public class InformationSource : AbstractRosettaModelObject, IInformationSource { private static readonly IRosettaMetaData metaData = new InformationSourceMeta(); [JsonConstructor] public InformationSource(FieldWithMetaInformationProviderEnum sourceProvider, FieldWithMetaString? sourcePage, string? sourcePageHeading) { SourceProvider = sourceProvider; SourcePage = sourcePage; SourcePageHeading = sourcePageHeading; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public FieldWithMetaInformationProviderEnum SourceProvider { get; } /// public FieldWithMetaString? SourcePage { get; } /// public string? SourcePageHeading { get; } } /// /// A CDM class which purpose is to specify the initial fixing date either alongside the FpML interest rate specification as an offset of another date, or alongside the credit derivative specification as an unadjusted date. /// public class InitialFixingDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InitialFixingDateMeta(); [JsonConstructor] public InitialFixingDate(RelativeDateOffset? relativeDateOffset, LocalDate? initialFixingDate) { RelativeDateOffset = relativeDateOffset; InitialFixingDateValue = initialFixingDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public RelativeDateOffset? RelativeDateOffset { get; } [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] [JsonProperty(PropertyName = "initialFixingDate")] public LocalDate? InitialFixingDateValue { get; } } /// /// Defines initial margin applied to a repo transaction. Initial margin is an agreed premium to the Purchase Price of a repo to determine the required Market Value of the collateral to be delivered on the Purchase Date. It reflects quality of the collateral. Its aim is to calculate the risk-adjusted or liquidation value of collateral. /// public class InitialMargin : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InitialMarginMeta(); [JsonConstructor] public InitialMargin(Enums.MarginType marginType, IEnumerable margin, Money? marginThreshold, Money? minimumTransferAmount) { MarginType = marginType; Margin = margin; MarginThreshold = marginThreshold; MinimumTransferAmount = minimumTransferAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An element defining the type of assets (cash or securities) specified to apply as margin to the repo transaction. See GMRA 2011 paragraph 2(h) for 'Cash Margin' and GMRA 2011 paragraph 2(cc) for 'Margin Securities'. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.MarginType MarginType { get; } /// /// Initial margin calculation for a collateral asset. Initial margin requirements may be specified for multiple pieces of collateral. /// public IEnumerable Margin { get; } /// /// An element defining a margin threshold which is the Net Exposure of a trade below which parties agree they will not call a margin from each other. /// public Money? MarginThreshold { get; } /// /// An element defining a minimum transfer amount which is the minimum margin call parties will make once the margin threshold (or margin ratio threshold / haircut threshold) has been exceeded. /// public Money? MinimumTransferAmount { get; } } /// /// Defines the initial margin calculation applicable to a single piece of collateral. /// public class InitialMarginCalculation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InitialMarginCalculationMeta(); [JsonConstructor] public InitialMarginCalculation(decimal? marginRatio, IEnumerable marginRatioThreshold, decimal? haircut, IEnumerable haircutThreshold) { MarginRatio = marginRatio; MarginRatioThreshold = marginRatioThreshold; Haircut = haircut; HaircutThreshold = haircutThreshold; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An element defining an initial margin expressed as a ratio of the Market Value of the collateral to the Purchase Price. A default value of initial margin ratio of 1.00 means there is no margin and thus no risk related with the collateral. See GMRA 2000 paragraph 2(z) and GMRA 2011 paragraph 2(bb). /// public decimal? MarginRatio { get; } /// /// An element defining a margin ratio threshold which is the value above (when it's lower than initial margin ratio) or below (when it's higher than initial margin ratio) which parties agree they will not call a margin from each other. /// public IEnumerable MarginRatioThreshold { get; } /// /// An element defining a haircut expressed as the percentage difference between the Market Value of the collateral and the Purchase Price of the repo and calculated as 100 multiplied by a ratio of the difference between the Market Value of the collateral and the Purchase Price of the repo to the Market Value of the collateral. Haircut is alternative way to adjust the value of collateral sold in a repurchase agreement to initial margin ratio. Because an initial margin is a percentage of the Purchase Price, while a haircut is a percentage of the Market Value of collateral, the arithmetic of initial margins and haircuts is slightly different. For example, an initial margin of 102% is not equivalent to a haircut of 2%, but to 1.961% (ie 100/102%). See GMRA 2011 paragraph 2(aa). /// public decimal? Haircut { get; } /// /// An element defining a haircut percentage threshold which is the value above (when it's lower than initial haircut) or below (when it's higher than initial haircut) which parties agree they will not call a margin from each other. /// public IEnumerable HaircutThreshold { get; } } /// /// Instruction to a function that will be used to perform a business event /// public class Instruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InstructionMeta(); [JsonConstructor] public Instruction(PrimitiveInstruction? primitiveInstruction, ReferenceWithMetaTradeState? before) { PrimitiveInstruction = primitiveInstruction; Before = before; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the primitive instructions that will be used to call primitive event functions. /// public PrimitiveInstruction? PrimitiveInstruction { get; } /// /// Specifies the trade state that will be acted on by the primitive event functions. /// public ReferenceWithMetaTradeState? Before { get; } } /// /// A class to specify the application of Interest Amount with respect to the Delivery Amount and the Return Amount. /// public class InterestAmountApplication : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InterestAmountApplicationMeta(); [JsonConstructor] public InterestAmountApplication(ReturnAmount returnAmount, DeliveryAmount deliveryAmount) { ReturnAmount = returnAmount; DeliveryAmount = deliveryAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The application of Interest Amount with respect the Return Amount. /// public ReturnAmount ReturnAmount { get; } /// /// The application of Interest Amount with respect the Delivery Amount. /// public DeliveryAmount DeliveryAmount { get; } } public class InterestRateCurve : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InterestRateCurveMeta(); [JsonConstructor] public InterestRateCurve(FieldWithMetaFloatingRateIndexEnum floatingRateIndex, Period tenor) { FloatingRateIndex = floatingRateIndex; Tenor = tenor; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public FieldWithMetaFloatingRateIndexEnum FloatingRateIndex { get; } public Period Tenor { get; } } /// /// A class to specify all of the terms necessary to define and calculate a cash flow based on a fixed, a floating or an inflation index rate. The interest rate payout can be applied to interest rate swaps and FRA (which both have two associated interest rate payouts), credit default swaps (to represent the fee leg when subject to periodic payments) and equity swaps (to represent the funding leg). The associated globalKey denotes the ability to associate a hash value to the InterestRatePayout instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class InterestRatePayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new InterestRatePayoutMeta(); [JsonConstructor] public InterestRatePayout(RateSpecification? rateSpecification, FieldWithMetaDayCountFractionEnum? dayCountFraction, CalculationPeriodDates? calculationPeriodDates, PaymentDates? paymentDates, AdjustableDate? paymentDate, bool? paymentDelay, ResetDates? resetDates, DiscountingMethod? discountingMethod, Enums.CompoundingMethod? compoundingMethod, CashflowRepresentation? cashflowRepresentation, StubPeriod? stubPeriod, BondReference? bondReference, string? fixedAmount, string? floatingAmount, Enums.SpreadCalculationMethod? spreadCalculationMethod, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { RateSpecification = rateSpecification; DayCountFraction = dayCountFraction; CalculationPeriodDates = calculationPeriodDates; PaymentDates = paymentDates; PaymentDate = paymentDate; PaymentDelay = paymentDelay; ResetDates = resetDates; DiscountingMethod = discountingMethod; CompoundingMethod = compoundingMethod; CashflowRepresentation = cashflowRepresentation; StubPeriod = stubPeriod; BondReference = bondReference; FixedAmount = fixedAmount; FloatingAmount = floatingAmount; SpreadCalculationMethod = spreadCalculationMethod; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The specification of the rate value(s) applicable to the contract using either a floating rate calculation, a single fixed rate, a fixed rate schedule, or an inflation rate calculation. /// public RateSpecification? RateSpecification { get; } /// /// The day count fraction. The cardinality has been relaxed when compared with the FpML interest rate swap for the purpose of accommodating standardized credit default swaps which DCF is not explicitly stated as part of the economic terms. The data rule InterestRatePayout_dayCountFraction requires that the DCF be stated for interest rate products. /// public FieldWithMetaDayCountFractionEnum? DayCountFraction { get; } /// /// The parameters used to generate the calculation period dates schedule, including the specification of any initial or final stub calculation periods. /// public CalculationPeriodDates? CalculationPeriodDates { get; } /// /// The payment date schedule, as defined by the parameters that are needed to specify it, either in a parametric way or by reference to another schedule of dates (e.g. the reset dates). /// public PaymentDates? PaymentDates { get; } /// /// The payment date, where only one date is specified, as for the FRA product. /// public AdjustableDate? PaymentDate { get; } /// /// Applicable to CDS on MBS to specify whether payment delays are applicable to the fixed Amount. RMBS typically have a payment delay of 5 days between the coupon date of the reference obligation and the payment date of the synthetic swap. CMBS do not, on the other hand, with both payment dates being on the 25th of each month. /// public bool? PaymentDelay { get; } /// /// The reset dates schedule, i.e. the dates on which the new observed index value is applied for each period and the interest rate hence begins to accrue. /// public ResetDates? ResetDates { get; } /// /// The parameters specifying any discounting conventions that may apply. This element must only be included if discounting applies. /// public DiscountingMethod? DiscountingMethod { get; } /// /// If one or more calculation period contributes to a single payment amount this element specifies whether compounding is applicable and, if so, what compounding method is to be used. This element must only be included when more than one calculation period contributes to a single payment amount. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CompoundingMethod? CompoundingMethod { get; } /// /// The cashflow representation of the swap stream. /// public CashflowRepresentation? CashflowRepresentation { get; } /// /// The stub calculation period amount parameters. This element must only be included if there is an initial or final stub calculation period. Even then, it must only be included if either the stub references a different floating rate tenor to the regular calculation periods, or if the stub is calculated as a linear interpolation of two different floating rate tenors, or if a specific stub rate or stub amount has been negotiated. /// public StubPeriod? StubPeriod { get; } /// /// Reference to a bond underlier to represent an asset swap or Condition Precedent Bond. /// public BondReference? BondReference { get; } /// /// Fixed Amount Calculation /// public string? FixedAmount { get; } /// /// Floating Amount Calculation /// public string? FloatingAmount { get; } /// /// Method by which spread is calculated. For example on an asset swap: 'ParPar' or 'Proceeds' may be the method indicated. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SpreadCalculationMethod? SpreadCalculationMethod { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// A class to specify the interest shortfall floating rate payment event. /// public class InterestShortFall : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InterestShortFallMeta(); [JsonConstructor] public InterestShortFall(Enums.InterestShortfallCap interestShortfallCap, bool compounding, FieldWithMetaFloatingRateIndexEnum? rateSource) { InterestShortfallCap = interestShortfallCap; Compounding = compounding; RateSource = rateSource; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the nature of the interest Shortfall cap (i.e. Fixed Cap or Variable Cap) in the case where it is applicable. ISDA 2003 Term: Interest Shortfall Cap. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.InterestShortfallCap InterestShortfallCap { get; } public bool Compounding { get; } /// /// The rate source in the case of a variable cap. /// public FieldWithMetaFloatingRateIndexEnum? RateSource { get; } } /// /// A data type that can be used to describe an inventory of securities. /// public class Inventory : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InventoryMeta(); [JsonConstructor] public Inventory(IEnumerable inventoryRecord) { InventoryRecord = inventoryRecord; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An array holding the list of inventory being described. Each element in the inventoryRecord array represents an individual piece of inventory i.e. a security. /// public IEnumerable InventoryRecord { get; } } /// /// An individual piece of inventory. This represents a single security. /// public class InventoryRecord : AbstractRosettaModelObject, IInventoryRecord { private static readonly IRosettaMetaData metaData = new InventoryRecordMeta(); [JsonConstructor] public InventoryRecord(AssignedIdentifier identifer, Security security) { Identifer = identifer; Security = security; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public AssignedIdentifier Identifer { get; } /// public Security Security { get; } } public class InvstmtDcsnPrsn : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new InvstmtDcsnPrsnMeta(); [JsonConstructor] public InvstmtDcsnPrsn(Prsn prsn) { Prsn = prsn; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Prsn Prsn { get; } } /// /// Represents a criteria used to specify eligible collateral issuers. /// public class IssuerCriteria : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new IssuerCriteriaMeta(); [JsonConstructor] public IssuerCriteria(IEnumerable issuerType, IEnumerable issuerCountryOfOrigin, IEnumerable issuerName, IEnumerable issuerAgencyRating, IEnumerable sovereignAgencyRating, bool? counterpartyOwnIssuePermitted) { IssuerType = issuerType; IssuerCountryOfOrigin = issuerCountryOfOrigin; IssuerName = issuerName; IssuerAgencyRating = issuerAgencyRating; SovereignAgencyRating = sovereignAgencyRating; CounterpartyOwnIssuePermitted = counterpartyOwnIssuePermitted; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a filter based on the type of entity issuing the asset. /// public IEnumerable IssuerType { get; } /// /// Represents a filter on the issuing entity country of origin based on the ISO Standard 3166, which is the same as filtering by eligible Sovereigns. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable IssuerCountryOfOrigin { get; } /// /// Specifies the issuing entity name or LEI. /// public IEnumerable IssuerName { get; } /// /// Represents an agency rating based on default risk and creditors claim in event of default associated with asset issuer. /// public IEnumerable IssuerAgencyRating { get; } /// /// Represents an agency rating based on default risk of the country of the issuer. /// public IEnumerable SovereignAgencyRating { get; } /// /// Represents a filter based on whether it is permitted for the underlying asset to be issued by the posting entity or part of their corporate family. /// public bool? CounterpartyOwnIssuePermitted { get; } } /// /// Knock In means option to exercise comes into existence. Knock Out means option to exercise goes out of existence. /// public class Knock : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new KnockMeta(); [JsonConstructor] public Knock(TriggerEvent? knockIn, TriggerEvent? knockOut) { KnockIn = knockIn; KnockOut = knockOut; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The knock in. /// public TriggerEvent? KnockIn { get; } /// /// The knock out. /// public TriggerEvent? KnockOut { get; } } /// /// The pricing period per calculation period if the pricing days do not wholly fall within the respective calculation period. /// public class Lag : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new LagMeta(); [JsonConstructor] public Lag(Offset lagDuration, Offset? firstObservationDateOffset) { LagDuration = lagDuration; FirstObservationDateOffset = firstObservationDateOffset; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the offset of the series of pricing dates relative to the calculation period. /// public Offset LagDuration { get; } /// /// Defines the offset of the series of pricing dates relative to the calculation period. /// public Offset? FirstObservationDateOffset { get; } } /// /// The specification of a legal agreement between two parties, being negotiated or having been executed. This includes the baseline information and the optional specialised elections /// public class LegalAgreement : AbstractRosettaModelObject, ILegalAgreementBase { private static readonly IRosettaMetaData metaData = new LegalAgreementMeta(); [JsonConstructor] public LegalAgreement(AgreementTerms? agreementTerms, IEnumerable relatedAgreements, UmbrellaAgreement? umbrellaAgreement, _MetaFields? meta, LocalDate? agreementDate, LocalDate? effectiveDate, IEnumerable identifier, LegalAgreementIdentification legalAgreementIdentification, IEnumerable contractualParty, IEnumerable otherParty, IEnumerable attachment) { AgreementTerms = agreementTerms; RelatedAgreements = relatedAgreements; UmbrellaAgreement = umbrellaAgreement; Meta = meta; AgreementDate = agreementDate; EffectiveDate = effectiveDate; Identifier = identifier; LegalAgreementIdentification = legalAgreementIdentification; ContractualParty = contractualParty; OtherParty = otherParty; Attachment = attachment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specification of the content of the legal agreement. /// public AgreementTerms? AgreementTerms { get; } /// /// Specifies the agreement(s) that govern the agreement, either as a reference to such agreements when specified as part of the CDM, or through identification of some of the key terms of those agreements, such as the type of agreement, the publisher, the vintage, the agreement identifier and the agreement date. /// public IEnumerable RelatedAgreements { get; } /// /// The determination of whether Umbrella Agreement terms are applicable (True) or Not Applicable (False). /// public UmbrellaAgreement? UmbrellaAgreement { get; } public _MetaFields? Meta { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AgreementDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// public IEnumerable Identifier { get; } /// public LegalAgreementIdentification LegalAgreementIdentification { get; } /// public IEnumerable ContractualParty { get; } /// public IEnumerable OtherParty { get; } /// public IEnumerable Attachment { get; } } /// /// Specifies the legal agreement baseline information, being negotiated or having been executed. It excludes specialized elections /// public class LegalAgreementBase : AbstractRosettaModelObject, ILegalAgreementBase { private static readonly IRosettaMetaData metaData = new LegalAgreementBaseMeta(); [JsonConstructor] public LegalAgreementBase(LocalDate? agreementDate, LocalDate? effectiveDate, IEnumerable identifier, LegalAgreementIdentification legalAgreementIdentification, IEnumerable contractualParty, IEnumerable otherParty, IEnumerable attachment) { AgreementDate = agreementDate; EffectiveDate = effectiveDate; Identifier = identifier; LegalAgreementIdentification = legalAgreementIdentification; ContractualParty = contractualParty; OtherParty = otherParty; Attachment = attachment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AgreementDate { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? EffectiveDate { get; } /// public IEnumerable Identifier { get; } /// public LegalAgreementIdentification LegalAgreementIdentification { get; } /// public IEnumerable ContractualParty { get; } /// public IEnumerable OtherParty { get; } /// public IEnumerable Attachment { get; } } /// /// Specifies the type of legal agreement, identified via a set of composable attributes: agreementName, publisher, governing law and version, e.g. ISDA 2013 Standard Credit Support Annex English Law. /// public class LegalAgreementIdentification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new LegalAgreementIdentificationMeta(); [JsonConstructor] public LegalAgreementIdentification(Enums.GoverningLaw? governingLaw, AgreementName agreementName, Enums.LegalAgreementPublisher? publisher, int? vintage) { GoverningLaw = governingLaw; AgreementName = agreementName; Publisher = publisher; Vintage = vintage; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The law governing the legal agreement, e.g. English Law, New York Law or Japanese Law. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.GoverningLaw? GoverningLaw { get; } /// /// The legal agreement name, e.g. Credit Support Annex for Variation Margin. /// public AgreementName AgreementName { get; } /// /// The legal agreement publisher, e.g. ISDA. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.LegalAgreementPublisher? Publisher { get; } /// /// In the case where successive definitions of the legal agreement have been developed, the vintage identification. This is typically (but not necessarily) done by referencing the year, e.g. 2013 in the case of the ISDA 2013 Standard Credit Support Annex. /// public int? Vintage { get; } } /// /// A class to specify a legal entity, with a required name and an optional entity identifier (such as the LEI). /// public class LegalEntity : AbstractRosettaModelObject, ILegalEntity { private static readonly IRosettaMetaData metaData = new LegalEntityMeta(); [JsonConstructor] public LegalEntity(IEnumerable entityId, FieldWithMetaString name, _MetaFields? meta) { EntityId = entityId; Name = name; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable EntityId { get; } /// public FieldWithMetaString Name { get; } public _MetaFields? Meta { get; } } public class LimitApplicable : AbstractRosettaModelObject, ILimitApplicable { private static readonly IRosettaMetaData metaData = new LimitApplicableMeta(); [JsonConstructor] public LimitApplicable(FieldWithMetaCreditLimitTypeEnum? limitType, int? clipSize, decimal? amountUtilized, CreditLimitUtilisation? utilization, decimal? amountRemaining, FieldWithMetaString? currency, Velocity? velocity) { LimitType = limitType; ClipSize = clipSize; AmountUtilized = amountUtilized; Utilization = utilization; AmountRemaining = amountRemaining; Currency = currency; Velocity = velocity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public FieldWithMetaCreditLimitTypeEnum? LimitType { get; } /// public int? ClipSize { get; } /// public decimal? AmountUtilized { get; } public CreditLimitUtilisation? Utilization { get; } /// public decimal? AmountRemaining { get; } /// public FieldWithMetaString? Currency { get; } public Velocity? Velocity { get; } } /// /// A class to represent the CDM attributes that are not part of the FpML standard. Once broader usage is confirmed, it is expected that those two classes can be collapsed. /// public class LimitApplicableExtended : AbstractRosettaModelObject, ILimitApplicable { private static readonly IRosettaMetaData metaData = new LimitApplicableExtendedMeta(); [JsonConstructor] public LimitApplicableExtended(FieldWithMetaLimitLevelEnum? limitLevel, decimal? limitAmount, decimal? limitImpactDueToTrade, FieldWithMetaCreditLimitTypeEnum? limitType, int? clipSize, decimal? amountUtilized, CreditLimitUtilisation? utilization, decimal? amountRemaining, FieldWithMetaString? currency, Velocity? velocity) { LimitLevel = limitLevel; LimitAmount = limitAmount; LimitImpactDueToTrade = limitImpactDueToTrade; LimitType = limitType; ClipSize = clipSize; AmountUtilized = amountUtilized; Utilization = utilization; AmountRemaining = amountRemaining; Currency = currency; Velocity = velocity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The level at which the limit is set: customer business, proprietary business or account level. This attribute is specified as a string as part of the CME clearing confirmation specification. /// public FieldWithMetaLimitLevelEnum? LimitLevel { get; } /// /// The total limit available for the limit level and limit type. While the attribute is of type integer in the CME schema, it has been specified to be of type number in the CDM to take into consideration java size limits as well as for consistency purposes with the way most monetary amounts are expressed. /// public decimal? LimitAmount { get; } /// /// The limit utilized by this specific trade. While the attribute is of type integer in the CME schema, it has been specified to be of type number in the CDM to take into consideration java size limits as well as for consistency purposes with the way most monetary amounts are expressed. /// public decimal? LimitImpactDueToTrade { get; } /// public FieldWithMetaCreditLimitTypeEnum? LimitType { get; } /// public int? ClipSize { get; } /// public decimal? AmountUtilized { get; } public CreditLimitUtilisation? Utilization { get; } /// public decimal? AmountRemaining { get; } /// public FieldWithMetaString? Currency { get; } public Velocity? Velocity { get; } } /// /// A class to provide lineage information across lifecycle events through a pointer or set of pointers into the event(s), contract(s) and, possibly, payout components that the event is dependent on or relates to. As an example, if an contractFormation event is corrected, the correction event will have a lineage into the initial event, which takes the form of a globalKey into that initial contract formation event. Two referencing mechanisms are provided as part of the CDM: either the globalKey, which corresponds to the hash value of the CDM class which is referred to, or a reference qualifier which is meant to provide support for the ingestion of xml documents with id/href mechanisms. The CDM recommends the use of the globalKey and provides a default implementation which is accessible in the generated code through org.isda.cdm.globalKey.GlobalKeyHashCalculator. If implementers want to use an alternative hashing mechanism, the API in which they need to plug it is com.rosetta.model.lib.HashFunction. /// public class Lineage : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new LineageMeta(); [JsonConstructor] public Lineage(IEnumerable tradeReference, IEnumerable eventReference, IEnumerable portfolioStateReference) { TradeReference = tradeReference; EventReference = eventReference; PortfolioStateReference = portfolioStateReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public IEnumerable TradeReference { get; } /// /// The reference to the instantiation of an Event object, either through a globalKey or an xml-derived id/href mechanism. The definition associated to the Lineage class provides more details with respect to those referencing approaches, their expected usage and available implementation. /// public IEnumerable EventReference { get; } /// /// The reference to the previous state of a Portfolio, in a chain of Events leading up to a build of that Portfolio as the holding of Product(s) in specific Quantity(ies). As part of the PortfolioState object, a pointer to the previous PortfolioState is provided through a Lineage object, together with pointer(s) to the Event or set of Events leading up to the current (new) state. /// public IEnumerable PortfolioStateReference { get; } } /// /// Specifies a filter based on an underlying corporate financial official listing defined at a stock exchange. /// public class ListingType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ListingTypeMeta(); [JsonConstructor] public ListingType(FieldWithMetaString? exchange, FieldWithMetaString? sector, Index? index) { Exchange = exchange; Sector = sector; Index = index; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a filter based on the Primary Stock Exchange facilitating the listing of companies, exchange of Stocks, Exchange traded Derivatives, Bonds, and other Securities expressed in ISO standard 10383. /// public FieldWithMetaString? Exchange { get; } /// /// Represents a filter based on an industry sector defined under a system for classifying industry types such as Global Industry Classification Standard (GICS) and North American Industry Classification System (NAICS) /// public FieldWithMetaString? Sector { get; } /// /// Represents a filter based on an index that measures a stock market, or a subset of a stock market. /// public Index? Index { get; } } /// /// Identifies a loan by referencing a product identifier and through an optional set of attributes. /// public class Loan : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new LoanMeta(); [JsonConstructor] public Loan(IEnumerable borrower, FieldWithMetaString? lien, FieldWithMetaString? facilityType, LocalDate? creditAgreementDate, FieldWithMetaString? tranche, IEnumerable productTaxonomy, IEnumerable productIdentifier) { Borrower = borrower; Lien = lien; FacilityType = facilityType; CreditAgreementDate = creditAgreementDate; Tranche = tranche; ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the borrower. There can be more than one borrower. It is meant to be used in the event that there is no Bloomberg Id or the Secured List isn't applicable. /// public IEnumerable Borrower { get; } /// /// Specifies the seniority level of the lien. /// public FieldWithMetaString? Lien { get; } /// /// Specifies the type of loan facility (letter of credit, revolving, ...). /// public FieldWithMetaString? FacilityType { get; } /// /// Specifies the credit agreement date is the closing date (the date where the agreement has been signed) for the loans in the credit agreement. Funding of the facilities occurs on (or sometimes a little after) the Credit Agreement date. This underlier attribute is used to help identify which of the company's outstanding loans are being referenced by knowing to which credit agreement it belongs. ISDA Standards Terms Supplement term: Date of Original Credit Agreement. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? CreditAgreementDate { get; } /// /// Denotes the loan tranche that is subject to the derivative transaction. It will typically be referenced as the Bloomberg tranche number. ISDA Standards Terms Supplement term: Bloomberg Tranche Number. /// public FieldWithMetaString? Tranche { get; } /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// A class to specify loan with a participation agreement whereby the buyer is capable of creating, or procuring the creation of, a contractual right in favour of the seller that provides the seller with recourse to the participation seller for a specified share in any payments due under the relevant loan which are received by the participation seller. ISDA 2003 Term: Direct Loan Participation. /// public class LoanParticipation : AbstractRosettaModelObject, IPCDeliverableObligationCharac { private static readonly IRosettaMetaData metaData = new LoanParticipationMeta(); [JsonConstructor] public LoanParticipation(string? qualifyingParticipationSeller, bool applicable, bool? partialCashSettlement) { QualifyingParticipationSeller = qualifyingParticipationSeller; Applicable = applicable; PartialCashSettlement = partialCashSettlement; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// If Direct Loan Participation is specified as a deliverable obligation characteristic, this specifies any requirements for the Qualifying Participation Seller. The requirements may be listed free-form. ISDA 2003 Term: Qualifying Participation Seller. /// public string? QualifyingParticipationSeller { get; } /// public bool Applicable { get; } /// public bool? PartialCashSettlement { get; } } /// /// Specifies a location identifier. An issuer and an identifier type can be associated with the actual identifier value as a way to properly qualify it. /// public class LocationIdentifier : AbstractRosettaModelObject, IIdentifier { private static readonly IRosettaMetaData metaData = new LocationIdentifierMeta(); [JsonConstructor] public LocationIdentifier(Enums.CommodityLocationIdentifierType? locationIdentifierType, ReferenceWithMetaParty? issuerReference, FieldWithMetaString? issuer, IEnumerable assignedIdentifier, _MetaFields? meta) { LocationIdentifierType = locationIdentifierType; IssuerReference = issuerReference; Issuer = issuer; AssignedIdentifier = assignedIdentifier; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the nature of a location identifier. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CommodityLocationIdentifierType? LocationIdentifierType { get; } /// public ReferenceWithMetaParty? IssuerReference { get; } /// public FieldWithMetaString? Issuer { get; } /// public IEnumerable AssignedIdentifier { get; } public _MetaFields? Meta { get; } } /// /// A class to specify the amount to be paid by the buyer of the option if the option is exercised prior to the Early Call Date (typically applicable to the convertible bond options). /// public class MakeWholeAmount : AbstractRosettaModelObject, ISwapCurveValuation { private static readonly IRosettaMetaData metaData = new MakeWholeAmountMeta(); [JsonConstructor] public MakeWholeAmount(Enums.InterpolationMethod? interpolationMethod, FieldWithMetaLocalDate earlyCallDate, Enums.FloatingRateIndex floatingRateIndex, Period? indexTenor, decimal spread, Enums.QuotationSide? side) { InterpolationMethod = interpolationMethod; EarlyCallDate = earlyCallDate; FloatingRateIndex = floatingRateIndex; IndexTenor = indexTenor; Spread = spread; Side = side; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The type of interpolation method that the calculation agent reserves the right to use. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.InterpolationMethod? InterpolationMethod { get; } /// /// Date prior to which the option buyer will have to pay a Make Whole Amount to the option seller if he/she exercises the option. /// public FieldWithMetaLocalDate EarlyCallDate { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndex FloatingRateIndex { get; } /// public Period? IndexTenor { get; } /// public decimal Spread { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuotationSide? Side { get; } } /// /// A data to: define an early termination provision for which exercise is mandatory. /// public class MandatoryEarlyTermination : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MandatoryEarlyTerminationMeta(); [JsonConstructor] public MandatoryEarlyTermination(AdjustableDate mandatoryEarlyTerminationDate, CalculationAgent calculationAgent, SettlementTerms cashSettlement, MandatoryEarlyTerminationAdjustedDates? mandatoryEarlyTerminationAdjustedDates, _MetaFields? meta) { MandatoryEarlyTerminationDate = mandatoryEarlyTerminationDate; CalculationAgent = calculationAgent; CashSettlement = cashSettlement; MandatoryEarlyTerminationAdjustedDates = mandatoryEarlyTerminationAdjustedDates; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The early termination date associated with a mandatory early termination of a swap. /// public AdjustableDate MandatoryEarlyTerminationDate { get; } /// /// The ISDA Calculation Agent responsible for performing duties associated with an optional early termination. /// public CalculationAgent CalculationAgent { get; } /// /// If specified, this means that cash settlement is applicable to the transaction and defines the parameters associated with the cash settlement procedure. If not specified, then physical settlement is applicable. /// public SettlementTerms CashSettlement { get; } /// /// The adjusted dates associated with a mandatory early termination provision. These dates have been adjusted for any applicable business day convention. /// public MandatoryEarlyTerminationAdjustedDates? MandatoryEarlyTerminationAdjustedDates { get; } public _MetaFields? Meta { get; } } /// /// A data defining: the adjusted dates associated with a mandatory early termination provision. /// public class MandatoryEarlyTerminationAdjustedDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MandatoryEarlyTerminationAdjustedDatesMeta(); [JsonConstructor] public MandatoryEarlyTerminationAdjustedDates(LocalDate adjustedEarlyTerminationDate, LocalDate adjustedCashSettlementValuationDate, LocalDate adjustedCashSettlementPaymentDate) { AdjustedEarlyTerminationDate = adjustedEarlyTerminationDate; AdjustedCashSettlementValuationDate = adjustedCashSettlementValuationDate; AdjustedCashSettlementPaymentDate = adjustedCashSettlementPaymentDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The early termination date that is applicable if an early termination provision is exercised. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedEarlyTerminationDate { get; } /// /// The date by which the cash settlement amount must be agreed. This date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedCashSettlementValuationDate { get; } /// /// The date on which the cash settlement amount is paid. This date should already be adjusted for any applicable business date convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate AdjustedCashSettlementPaymentDate { get; } } /// /// A class defining manual exercise, i.e. that the option buyer counterparty must give notice to the option seller of exercise. /// public class ManualExercise : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ManualExerciseMeta(); [JsonConstructor] public ManualExercise(ExerciseNotice? exerciseNotice, bool? fallbackExercise) { ExerciseNotice = exerciseNotice; FallbackExercise = fallbackExercise; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Definition of the party to whom notice of exercise should be given. /// public ExerciseNotice? ExerciseNotice { get; } /// /// If fallback exercise is specified then the notional amount of the underlying swap, not previously exercised under the swaption, will be automatically exercised at the expiration time on the expiration date if at such time the buyer is in-the-money, provided that the difference between the settlement rate and the fixed rate under the relevant underlying swap is not less than one tenth of a percentage point (0.10% or 0.001). The term in-the-money is assumed to have the meaning defined in the 2000 ISDA Definitions, Section 17.4. In-the-money. /// public bool? FallbackExercise { get; } } /// /// Represents common attributes required for Issuance and Response to a Margin Call action as a result of a demand for delivery or return of collateral determined under a legal agreement such as a credit support document or equivalent. /// public class MarginCallBase : AbstractRosettaModelObject, IMarginCallBase { private static readonly IRosettaMetaData metaData = new MarginCallBaseMeta(); [JsonConstructor] public MarginCallBase(MarginCallInstructionType instructionType, IEnumerable party, IEnumerable partyRole, Party? clearingBroker, Identifier? callIdentifier, AgreementName callAgreementType, Money? agreementMinimumTransferAmount, Money? agreementThreshold, Money? agreementRounding, Enums.RegMarginType regMarginType, Enums.RegIMRole? regIMRole, MarginCallExposure? baseCurrencyExposure, ReferenceWithMetaCollateralPortfolio? collateralPortfolio, CollateralBalance? independentAmountBalance) { InstructionType = instructionType; Party = party; PartyRole = partyRole; ClearingBroker = clearingBroker; CallIdentifier = callIdentifier; CallAgreementType = callAgreementType; AgreementMinimumTransferAmount = agreementMinimumTransferAmount; AgreementThreshold = agreementThreshold; AgreementRounding = agreementRounding; RegMarginType = regMarginType; RegIMRole = regIMRole; BaseCurrencyExposure = baseCurrencyExposure; CollateralPortfolio = collateralPortfolio; IndependentAmountBalance = independentAmountBalance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public MarginCallInstructionType InstructionType { get; } /// public IEnumerable Party { get; } /// public IEnumerable PartyRole { get; } /// public Party? ClearingBroker { get; } /// public Identifier? CallIdentifier { get; } /// public AgreementName CallAgreementType { get; } /// public Money? AgreementMinimumTransferAmount { get; } /// public Money? AgreementThreshold { get; } /// public Money? AgreementRounding { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegMarginType RegMarginType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegIMRole? RegIMRole { get; } /// public MarginCallExposure? BaseCurrencyExposure { get; } /// public ReferenceWithMetaCollateralPortfolio? CollateralPortfolio { get; } /// public CollateralBalance? IndependentAmountBalance { get; } } /// /// Represents attributes required for mark to market value or IM calculation value of the trade portfolio as recorded by the principle (in base currency). /// public class MarginCallExposure : AbstractRosettaModelObject, IMarginCallBase { private static readonly IRosettaMetaData metaData = new MarginCallExposureMeta(); [JsonConstructor] public MarginCallExposure(Exposure overallExposure, Exposure? simmIMExposure, Exposure? scheduleGridIMExposure, MarginCallInstructionType instructionType, IEnumerable party, IEnumerable partyRole, Party? clearingBroker, Identifier? callIdentifier, AgreementName callAgreementType, Money? agreementMinimumTransferAmount, Money? agreementThreshold, Money? agreementRounding, Enums.RegMarginType regMarginType, Enums.RegIMRole? regIMRole, MarginCallExposure? baseCurrencyExposure, ReferenceWithMetaCollateralPortfolio? collateralPortfolio, CollateralBalance? independentAmountBalance) { OverallExposure = overallExposure; SimmIMExposure = simmIMExposure; ScheduleGridIMExposure = scheduleGridIMExposure; InstructionType = instructionType; Party = party; PartyRole = partyRole; ClearingBroker = clearingBroker; CallIdentifier = callIdentifier; CallAgreementType = callAgreementType; AgreementMinimumTransferAmount = agreementMinimumTransferAmount; AgreementThreshold = agreementThreshold; AgreementRounding = agreementRounding; RegMarginType = regMarginType; RegIMRole = regIMRole; BaseCurrencyExposure = baseCurrencyExposure; CollateralPortfolio = collateralPortfolio; IndependentAmountBalance = independentAmountBalance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the whole overall mark to market value or IM calculation value of the trade portfolio as recorded by the principle (in base currency). /// public Exposure OverallExposure { get; } /// /// Represents Initial Margin (IM) exposure derived from ISDA SIMM calculation. /// public Exposure? SimmIMExposure { get; } /// /// Represents Initial Margin (IM) exposure derived from schedule or Grid calculation. /// public Exposure? ScheduleGridIMExposure { get; } /// public MarginCallInstructionType InstructionType { get; } /// public IEnumerable Party { get; } /// public IEnumerable PartyRole { get; } /// public Party? ClearingBroker { get; } /// public Identifier? CallIdentifier { get; } /// public AgreementName CallAgreementType { get; } /// public Money? AgreementMinimumTransferAmount { get; } /// public Money? AgreementThreshold { get; } /// public Money? AgreementRounding { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegMarginType RegMarginType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegIMRole? RegIMRole { get; } /// public MarginCallExposure? BaseCurrencyExposure { get; } /// public ReferenceWithMetaCollateralPortfolio? CollateralPortfolio { get; } /// public CollateralBalance? IndependentAmountBalance { get; } } /// /// Represents enumeration values to specify the call notification type, direction, specific action type. /// public class MarginCallInstructionType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MarginCallInstructionTypeMeta(); [JsonConstructor] public MarginCallInstructionType(Enums.CallType callType, bool? visibilityIndicator) { CallType = callType; VisibilityIndicator = visibilityIndicator; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates the status of the call message type, such as expected call, notification of a call or an actionable margin call. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CallType CallType { get; } /// /// Indicates the choice if the call instruction is visible or not to the other party. /// public bool? VisibilityIndicator { get; } } /// /// Represents common attributes required for a Margin Call Issuance under a legal agreement such as a credit support document or equivalent. /// public class MarginCallIssuance : AbstractRosettaModelObject, IMarginCallBase { private static readonly IRosettaMetaData metaData = new MarginCallIssuanceMeta(); [JsonConstructor] public MarginCallIssuance(Money callAmountInBaseCurrency, IEnumerable recallNonCashCollateralDescription, MarginCallInstructionType instructionType, IEnumerable party, IEnumerable partyRole, Party? clearingBroker, Identifier? callIdentifier, AgreementName callAgreementType, Money? agreementMinimumTransferAmount, Money? agreementThreshold, Money? agreementRounding, Enums.RegMarginType regMarginType, Enums.RegIMRole? regIMRole, MarginCallExposure? baseCurrencyExposure, ReferenceWithMetaCollateralPortfolio? collateralPortfolio, CollateralBalance? independentAmountBalance) { CallAmountInBaseCurrency = callAmountInBaseCurrency; RecallNonCashCollateralDescription = recallNonCashCollateralDescription; InstructionType = instructionType; Party = party; PartyRole = partyRole; ClearingBroker = clearingBroker; CallIdentifier = callIdentifier; CallAgreementType = callAgreementType; AgreementMinimumTransferAmount = agreementMinimumTransferAmount; AgreementThreshold = agreementThreshold; AgreementRounding = agreementRounding; RegMarginType = regMarginType; RegIMRole = regIMRole; BaseCurrencyExposure = baseCurrencyExposure; CollateralPortfolio = collateralPortfolio; IndependentAmountBalance = independentAmountBalance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the amount of margin being called for which accounts for margin calculation inclusive of exposure, independent amount,threshold,collateral balance, MTA, rounding increments (in base currency detailed in supporting collateral agreement). /// public Money CallAmountInBaseCurrency { get; } /// /// Specifies the details to describe or identify non-cash collateral eligible assets for recall purposes. /// public IEnumerable RecallNonCashCollateralDescription { get; } /// public MarginCallInstructionType InstructionType { get; } /// public IEnumerable Party { get; } /// public IEnumerable PartyRole { get; } /// public Party? ClearingBroker { get; } /// public Identifier? CallIdentifier { get; } /// public AgreementName CallAgreementType { get; } /// public Money? AgreementMinimumTransferAmount { get; } /// public Money? AgreementThreshold { get; } /// public Money? AgreementRounding { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegMarginType RegMarginType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegIMRole? RegIMRole { get; } /// public MarginCallExposure? BaseCurrencyExposure { get; } /// public ReferenceWithMetaCollateralPortfolio? CollateralPortfolio { get; } /// public CollateralBalance? IndependentAmountBalance { get; } } /// /// Represents common attributes required for a Margin Call Response under a legal agreement such as a credit support document or equivalent. /// public class MarginCallResponse : AbstractRosettaModelObject, IMarginCallBase { private static readonly IRosettaMetaData metaData = new MarginCallResponseMeta(); [JsonConstructor] public MarginCallResponse(IEnumerable marginCallResponseAction, Enums.MarginCallResponseType marginResponseType, Money agreedAmountBaseCurrency, MarginCallInstructionType instructionType, IEnumerable party, IEnumerable partyRole, Party? clearingBroker, Identifier? callIdentifier, AgreementName callAgreementType, Money? agreementMinimumTransferAmount, Money? agreementThreshold, Money? agreementRounding, Enums.RegMarginType regMarginType, Enums.RegIMRole? regIMRole, MarginCallExposure? baseCurrencyExposure, ReferenceWithMetaCollateralPortfolio? collateralPortfolio, CollateralBalance? independentAmountBalance) { MarginCallResponseAction = marginCallResponseAction; MarginResponseType = marginResponseType; AgreedAmountBaseCurrency = agreedAmountBaseCurrency; InstructionType = instructionType; Party = party; PartyRole = partyRole; ClearingBroker = clearingBroker; CallIdentifier = callIdentifier; CallAgreementType = callAgreementType; AgreementMinimumTransferAmount = agreementMinimumTransferAmount; AgreementThreshold = agreementThreshold; AgreementRounding = agreementRounding; RegMarginType = regMarginType; RegIMRole = regIMRole; BaseCurrencyExposure = baseCurrencyExposure; CollateralPortfolio = collateralPortfolio; IndependentAmountBalance = independentAmountBalance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the margin call action details, including collateral to be moved and direction. /// public IEnumerable MarginCallResponseAction { get; } /// /// Indicates the response type, such as, is the margin call response a 'full' 'part' agreement or 'dispute'. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.MarginCallResponseType MarginResponseType { get; } /// /// Indicates the amount that posting entity agrees to remit in response to margin call (in base currency). /// public Money AgreedAmountBaseCurrency { get; } /// public MarginCallInstructionType InstructionType { get; } /// public IEnumerable Party { get; } /// public IEnumerable PartyRole { get; } /// public Party? ClearingBroker { get; } /// public Identifier? CallIdentifier { get; } /// public AgreementName CallAgreementType { get; } /// public Money? AgreementMinimumTransferAmount { get; } /// public Money? AgreementThreshold { get; } /// public Money? AgreementRounding { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegMarginType RegMarginType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RegIMRole? RegIMRole { get; } /// public MarginCallExposure? BaseCurrencyExposure { get; } /// public ReferenceWithMetaCollateralPortfolio? CollateralPortfolio { get; } /// public CollateralBalance? IndependentAmountBalance { get; } } /// /// Specifies the margin call action details, including collateral to be moved and its direction. /// public class MarginCallResponseAction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MarginCallResponseActionMeta(); [JsonConstructor] public MarginCallResponseAction(IEnumerable collateralPositionComponent, Enums.MarginCallAction marginCallAction) { CollateralPositionComponent = collateralPositionComponent; MarginCallAction = marginCallAction; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the collateral to be moved and its direction. /// public IEnumerable CollateralPositionComponent { get; } /// /// Specifies the margin call action details, specified as either Delivery or Return. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.MarginCallAction MarginCallAction { get; } } /// /// Defines clauses that make up a Master Agreement /// public class MasterAgreementClause : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MasterAgreementClauseMeta(); [JsonConstructor] public MasterAgreementClause(Enums.MasterAgreementClauseIdentifier identifer, string? name, IEnumerable counterparty, IEnumerable otherParty, IEnumerable variant) { Identifer = identifer; Name = name; Counterparty = counterparty; OtherParty = otherParty; Variant = variant; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Unique identifier for the clause /// [JsonConverter(typeof(StringEnumConverter))] public Enums.MasterAgreementClauseIdentifier Identifer { get; } /// /// Optional textual description of the clause. /// public string? Name { get; } /// /// Optional counterparty role. This can be used where a clause needs to be assigned to a specific party on the agreement based upon their role i.e. Party A or Party B. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Counterparty { get; } /// /// Optional party. This can be required for umbrella agreements where a clause may need to be assigned to a specific party who may or may not be on the agreement. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable OtherParty { get; } /// /// Allows multiple variants to be defined for a clause. This needs to be an array as some clauses can specify different variants for different parties. At least one variant must be specified for a clause. /// public IEnumerable Variant { get; } } /// /// Sets the details for a specific variant associated to a clause in a Master Agreement /// public class MasterAgreementClauseVariant : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MasterAgreementClauseVariantMeta(); [JsonConstructor] public MasterAgreementClauseVariant(Enums.MasterAgreementVariantIdentifier identifier, string? name, IEnumerable counterparty, IEnumerable otherParty, IEnumerable variableSet) { Identifier = identifier; Name = name; Counterparty = counterparty; OtherParty = otherParty; VariableSet = variableSet; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Unique identifier for this variant /// [JsonConverter(typeof(StringEnumConverter))] public Enums.MasterAgreementVariantIdentifier Identifier { get; } /// /// Optional textual description of the variant. /// public string? Name { get; } /// /// Optional counterparty role. This can be used where a clause needs to assign a different variant to the different parties on the agreement based upon their role i.e. Party A or Party B. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Counterparty { get; } /// /// Optional party. This can be used where a clause needs to assign different variants to different parties who may or may not be on the agreement. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable OtherParty { get; } /// /// For some variants of some clauses additional details are required to work out what has been elected. This array can be used to define the name and value of these variables. Please refer to the agreement documentation for more details of the variables that are available for any clause. /// public IEnumerable VariableSet { get; } } /// /// The set of elections which specify a Master Agreement. /// public class MasterAgreementSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MasterAgreementScheduleMeta(); [JsonConstructor] public MasterAgreementSchedule(IEnumerable clause) { Clause = clause; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Clauses that have had elections made against them in this Master Agreement. There must be at least one clause defined in the agreement. /// public IEnumerable Clause { get; } } /// /// Defines a type where additional variables associated to clauses and their variants can be described. /// public class MasterAgreementVariableSet : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MasterAgreementVariableSetMeta(); [JsonConstructor] public MasterAgreementVariableSet(IEnumerable variableSet, string? name, string? value) { VariableSet = variableSet; Name = name; Value = value; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// For some variants a table of variables is required. To support this use case we need to be able to specify variables within variables. Including a variable set here gives us infinite nesting opportunities - realistically we are only ever expecting that a table would need to be defined for any particular clause, so we would expect two levels of nesting as a maximum i.e. variableSet->variableSet->name/value. /// public IEnumerable VariableSet { get; } /// /// The name of the variable /// public string? Name { get; } /// /// The value for this variable /// public string? Value { get; } } /// /// Legal agreement specification for General Terms and Elections that are applicable across multiple confirmations and are referenced by these confirmations. /// public class MasterConfirmationBase : AbstractRosettaModelObject, IMasterConfirmationBase { private static readonly IRosettaMetaData metaData = new MasterConfirmationBaseMeta(); [JsonConstructor] public MasterConfirmationBase() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// Defines a concrete measure as a number associated to a unit. It extends MeasureBase by requiring the value attribute to be present. A measure may be unit-less so the unit attribute is still optional. /// public class Measure : AbstractRosettaModelObject, IMeasureBase { private static readonly IRosettaMetaData metaData = new MeasureMeta(); [JsonConstructor] public Measure(decimal? value, UnitType? unit) { Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// Provides an abstract type to define a measure as a number associated to a unit. This type is abstract because all its attributes are optional. The types that extend it can specify further existence constraints. /// public class MeasureBase : AbstractRosettaModelObject, IMeasureBase { private static readonly IRosettaMetaData metaData = new MeasureBaseMeta(); [JsonConstructor] public MeasureBase(decimal? value, UnitType? unit) { Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// A set of measures, all in the same unit, where the values are defined through a schedule of steps. The initial value may be defined either as part of the steps, or using the single amount attribute. /// public class MeasureSchedule : AbstractRosettaModelObject, IMeasureSchedule, IMeasureBase { private static readonly IRosettaMetaData metaData = new MeasureScheduleMeta(); [JsonConstructor] public MeasureSchedule(IEnumerable datedValue, decimal? value, UnitType? unit) { DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// This class corresponds to the components of the FpML MessageHeader.model. /// public class MessageInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MessageInformationMeta(); [JsonConstructor] public MessageInformation(FieldWithMetaString messageId, FieldWithMetaString? sentBy, IEnumerable sentTo, IEnumerable copyTo) { MessageId = messageId; SentBy = sentBy; SentTo = sentTo; CopyTo = copyTo; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A unique identifier assigned to the message. /// public FieldWithMetaString MessageId { get; } /// /// The identifier for the originator of a message instance. /// public FieldWithMetaString? SentBy { get; } /// /// The identifier(s) for the recipient(s) of a message instance. /// public IEnumerable SentTo { get; } /// /// A unique identifier (within the specified coding scheme) giving the details of some party to whom a copy of this message will be sent for reference. /// public IEnumerable CopyTo { get; } } /// /// Defines a monetary amount in a specified currency. /// public class Money : AbstractRosettaModelObject, IQuantity { private static readonly IRosettaMetaData metaData = new MoneyMeta(); [JsonConstructor] public Money(_MetaFields? meta, Measure? multiplier, Frequency? frequency, IEnumerable datedValue, decimal? value, UnitType? unit) { Meta = meta; Multiplier = multiplier; Frequency = frequency; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public _MetaFields? Meta { get; } /// public Measure? Multiplier { get; } /// public Frequency? Frequency { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// The money bound is defined as a money amount and whether the bound is inclusive. /// public class MoneyBound : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MoneyBoundMeta(); [JsonConstructor] public MoneyBound(Money money, bool inclusive) { Money = money; Inclusive = inclusive; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The money amount to be used as the bound, e.g. 1,000 USD. /// public Money Money { get; } /// /// Whether the money amount bound is inclusive, e.g. for a lower bound, false would indicate greater than, whereas true would indicate greater than or equal to. /// public bool Inclusive { get; } } /// /// The money range defined as either a lower and upper money bound, or both. /// public class MoneyRange : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MoneyRangeMeta(); [JsonConstructor] public MoneyRange(MoneyBound? lowerBound, MoneyBound? upperBound) { LowerBound = lowerBound; UpperBound = upperBound; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The lower bound of a money range, e.g. greater than or equal to 1,000 USD. /// public MoneyBound? LowerBound { get; } /// /// The upper bound of a money range, e.g. less than 10,000 USD. /// public MoneyBound? UpperBound { get; } } /// /// Represetns a class to specify multiple credit notations alongside a conditional 'any' or 'all' qualifier. /// public class MultipleCreditNotations : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MultipleCreditNotationsMeta(); [JsonConstructor] public MultipleCreditNotations(Enums.Quantifier condition, IEnumerable creditNotation, Enums.CreditNotationMismatchResolution? mismatchResolution, Enums.CreditRatingAgency? referenceAgency) { Condition = condition; CreditNotation = creditNotation; MismatchResolution = mismatchResolution; ReferenceAgency = referenceAgency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An enumerated element, to qualify whether All or Any credit notation applies. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.Quantifier Condition { get; } /// /// At least two credit notations much be specified. /// public IEnumerable CreditNotation { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditNotationMismatchResolution? MismatchResolution { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditRatingAgency? ReferenceAgency { get; } } /// /// Represents a class to specify multiple credit debt types alongside a conditional 'any' or 'all' qualifier. /// public class MultipleDebtTypes : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new MultipleDebtTypesMeta(); [JsonConstructor] public MultipleDebtTypes(Enums.Quantifier condition, IEnumerable debtType) { Condition = condition; DebtType = debtType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An enumerated attribute, to qualify whether All or Any debt type applies. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.Quantifier Condition { get; } /// /// The type of debt, e.g. long term debt, deposit, ... FpML doesn't specific a scheme value, hence no enumeration is specified as part of the CDM. At least two debt types much be specified. /// public IEnumerable DebtType { get; } } /// /// A class defining multiple exercises. As defined in the 2000 ISDA Definitions, Section 12.4. Multiple Exercise, the buyer of the option has the right to exercise all or less than all the unexercised notional amount of the underlying swap on one or more days in the exercise period, but on any such day may not exercise less than the minimum notional amount or more than the maximum notional amount, and if an integral multiple amount is specified, the notional exercised must be equal to or, be an integral multiple of, the integral multiple amount. In FpML, MultipleExercise is built upon the PartialExercise.model. /// public class MultipleExercise : AbstractRosettaModelObject, IPartialExercise { private static readonly IRosettaMetaData metaData = new MultipleExerciseMeta(); [JsonConstructor] public MultipleExercise(decimal? maximumNotionalAmount, int? maximumNumberOfOptions, ReferenceWithMetaMoney notionaReference, decimal? integralMultipleAmount, decimal? minimumNotionalAmount, int? minimumNumberOfOptions) { MaximumNotionalAmount = maximumNotionalAmount; MaximumNumberOfOptions = maximumNumberOfOptions; NotionaReference = notionaReference; IntegralMultipleAmount = integralMultipleAmount; MinimumNotionalAmount = minimumNotionalAmount; MinimumNumberOfOptions = minimumNumberOfOptions; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The maximum notional amount that can be exercised on a given exercise date. /// public decimal? MaximumNotionalAmount { get; } /// /// The maximum number of options that can be exercised on a given exercise date. If the number is not specified, it means that the maximum number of options corresponds to the remaining unexercised options. /// public int? MaximumNumberOfOptions { get; } /// public ReferenceWithMetaMoney NotionaReference { get; } /// public decimal? IntegralMultipleAmount { get; } /// public decimal? MinimumNotionalAmount { get; } /// public int? MinimumNumberOfOptions { get; } } public class MultipleValuationDates : AbstractRosettaModelObject, ISingleValuationDate { private static readonly IRosettaMetaData metaData = new MultipleValuationDatesMeta(); [JsonConstructor] public MultipleValuationDates(int? businessDaysThereafter, int? numberValuationDates, int? businessDays) { BusinessDaysThereafter = businessDaysThereafter; NumberValuationDates = numberValuationDates; BusinessDays = businessDays; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of business days between successive valuation dates when multiple valuation dates are applicable for cash settlement. ISDA 2003 Term: Business Days thereafter. /// public int? BusinessDaysThereafter { get; } /// /// Where multiple valuation dates are specified as being applicable for cash settlement, this element specifies (a) the number of applicable valuation dates, and (b) the number of business days after satisfaction of all conditions to settlement when the first such valuation date occurs, and (c) the number of business days thereafter of each successive valuation date. ISDA 2003 Term: Multiple Valuation Dates. /// public int? NumberValuationDates { get; } /// public int? BusinessDays { get; } } /// /// A class to represent the attributes that are specific to a natural person. /// public class NaturalPerson : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NaturalPersonMeta(); [JsonConstructor] public NaturalPerson(IEnumerable personId, string? honorific, string? firstName, IEnumerable middleName, IEnumerable initial, string? surname, string? suffix, LocalDate? dateOfBirth, ContactInformation? contactInformation, IEnumerable personRole, _MetaFields? meta) { PersonId = personId; Honorific = honorific; FirstName = firstName; MiddleName = middleName; Initial = initial; Surname = surname; Suffix = suffix; DateOfBirth = dateOfBirth; ContactInformation = contactInformation; PersonRole = personRole; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The identifier associated with a person, e.g. the internal identification code. /// public IEnumerable PersonId { get; } /// /// An honorific title, such as Mr., Ms., Dr. etc. /// public string? Honorific { get; } /// /// The natural person's first name. It is optional in FpML. /// public string? FirstName { get; } /// /// The natural person's middle name(s). If a middle name is provided then an initial should be absent. /// public IEnumerable MiddleName { get; } /// /// The natural person's middle initial(s). If a middle initial is provided then a name should be absent. /// public IEnumerable Initial { get; } /// /// The natural person's surname. /// public string? Surname { get; } /// /// Name suffix, such as Jr., III, etc. /// public string? Suffix { get; } /// /// The natural person's date of birth. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? DateOfBirth { get; } /// /// The contact information for such person, when different from the contact information associated with the party. /// public ContactInformation? ContactInformation { get; } /// /// The role of the person(s) /// public IEnumerable PersonRole { get; } public _MetaFields? Meta { get; } } /// /// A class to specify the role(s) that natural person(s) may have in relation to the contract. /// public class NaturalPersonRole : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NaturalPersonRoleMeta(); [JsonConstructor] public NaturalPersonRole(ReferenceWithMetaNaturalPerson personReference, IEnumerable role) { PersonReference = personReference; Role = role; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A reference to the natural person to whom the role refers to. /// public ReferenceWithMetaNaturalPerson PersonReference { get; } /// /// FpML specifies a person role that is distinct from the party role. /// public IEnumerable Role { get; } } public class New : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NewMeta(); [JsonConstructor] public New(string txId, string exctgPty, string invstmtPtyInd, string submitgPty, Buyr buyr, Sellr sellr, OrdrTrnsmssn ordrTrnsmssn, Tx tx, FinInstrm finInstrm, InvstmtDcsnPrsn invstmtDcsnPrsn, ExctgPrsn exctgPrsn, AddtlAttrbts addtlAttrbts) { TxId = txId; ExctgPty = exctgPty; InvstmtPtyInd = invstmtPtyInd; SubmitgPty = submitgPty; Buyr = buyr; Sellr = sellr; OrdrTrnsmssn = ordrTrnsmssn; Tx = tx; FinInstrm = finInstrm; InvstmtDcsnPrsn = invstmtDcsnPrsn; ExctgPrsn = exctgPrsn; AddtlAttrbts = addtlAttrbts; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string TxId { get; } public string ExctgPty { get; } public string InvstmtPtyInd { get; } public string SubmitgPty { get; } public Buyr Buyr { get; } public Sellr Sellr { get; } public OrdrTrnsmssn OrdrTrnsmssn { get; } public Tx Tx { get; } public FinInstrm FinInstrm { get; } public InvstmtDcsnPrsn InvstmtDcsnPrsn { get; } public ExctgPrsn ExctgPrsn { get; } public AddtlAttrbts AddtlAttrbts { get; } } public class Nm : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NmMeta(); [JsonConstructor] public Nm(RefRate refRate, Term term) { RefRate = refRate; Term = term; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public RefRate RefRate { get; } public Term Term { get; } } /// /// Specifies a quantity as a non-negative number, which condition is enforced through a data rule that only applies to the extending class. /// public class NonNegativeQuantity : AbstractRosettaModelObject, IQuantity { private static readonly IRosettaMetaData metaData = new NonNegativeQuantityMeta(); [JsonConstructor] public NonNegativeQuantity(Measure? multiplier, Frequency? frequency, IEnumerable datedValue, decimal? value, UnitType? unit) { Multiplier = multiplier; Frequency = frequency; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public Measure? Multiplier { get; } /// public Frequency? Frequency { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } public class NonNegativeQuantitySchedule : AbstractRosettaModelObject, IQuantitySchedule { private static readonly IRosettaMetaData metaData = new NonNegativeQuantityScheduleMeta(); [JsonConstructor] public NonNegativeQuantitySchedule(Measure? multiplier, Frequency? frequency, IEnumerable datedValue, decimal? value, UnitType? unit) { Multiplier = multiplier; Frequency = frequency; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public Measure? Multiplier { get; } /// public Frequency? Frequency { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// A class defining a step date and non-negative step value pair. This step definitions are used to define varying rate or amount schedules, e.g. a notional amortisation or a step-up coupon schedule. /// public class NonNegativeStep : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NonNegativeStepMeta(); [JsonConstructor] public NonNegativeStep(LocalDate stepDate, decimal stepValue, _MetaFields? meta) { StepDate = stepDate; StepValue = stepValue; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date on which the associated stepValue becomes effective. This day may be subject to adjustment in accordance with a business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate StepDate { get; } /// /// The non-negative rate or amount which becomes effective on the associated stepDate. A rate of 5% would be represented as 0.05. /// public decimal StepValue { get; } public _MetaFields? Meta { get; } } /// /// A class to specify the ISDA 2003 Term: Not Domestic Currency. /// public class NotDomesticCurrency : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NotDomesticCurrencyMeta(); [JsonConstructor] public NotDomesticCurrency(bool applicable, FieldWithMetaString? currency) { Applicable = applicable; Currency = currency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether the Not Domestic Currency provision is applicable. /// public bool Applicable { get; } /// /// An explicit specification of the domestic currency. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public FieldWithMetaString? Currency { get; } } /// /// The number bound is defined as a number and whether the bound is inclusive. /// public class NumberBound : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NumberBoundMeta(); [JsonConstructor] public NumberBound(decimal number, bool inclusive) { Number = number; Inclusive = inclusive; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number to be used as the bound, e.g. 5. /// public decimal Number { get; } /// /// Whether the number bound is inclusive, e.g. for a lower bound, false would indicate greater than, whereas true would indicate greater than or equal to. /// public bool Inclusive { get; } } /// /// The number range defined as either a lower and upper number bound, or both. /// public class NumberRange : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new NumberRangeMeta(); [JsonConstructor] public NumberRange(NumberBound? lowerBound, NumberBound? upperBound) { LowerBound = lowerBound; UpperBound = upperBound; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The lower bound of a number range, e.g. greater than or equal to 5. /// public NumberBound? LowerBound { get; } /// /// The upper bound of a number range, e.g. less than 10. /// public NumberBound? UpperBound { get; } } /// /// A class to specify the underlying obligations of the reference entity on which protection is purchased or sold through the Credit Default Swap. /// public class Obligations : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObligationsMeta(); [JsonConstructor] public Obligations(Enums.ObligationCategory category, bool? notSubordinated, SpecifiedCurrency? specifiedCurrency, bool? notSovereignLender, NotDomesticCurrency? notDomesticCurrency, bool? notDomesticLaw, bool? listed, bool? notDomesticIssuance, bool? fullFaithAndCreditObLiability, bool? generalFundObligationLiability, bool? revenueObligationLiability, bool? notContingent, string? excluded, string? othReferenceEntityObligations, FieldWithMetaString? designatedPriority, bool? cashSettlementOnly, bool? deliveryOfCommitments, bool? continuity) { Category = category; NotSubordinated = notSubordinated; SpecifiedCurrency = specifiedCurrency; NotSovereignLender = notSovereignLender; NotDomesticCurrency = notDomesticCurrency; NotDomesticLaw = notDomesticLaw; Listed = listed; NotDomesticIssuance = notDomesticIssuance; FullFaithAndCreditObLiability = fullFaithAndCreditObLiability; GeneralFundObligationLiability = generalFundObligationLiability; RevenueObligationLiability = revenueObligationLiability; NotContingent = notContingent; Excluded = excluded; OthReferenceEntityObligations = othReferenceEntityObligations; DesignatedPriority = designatedPriority; CashSettlementOnly = cashSettlementOnly; DeliveryOfCommitments = deliveryOfCommitments; Continuity = continuity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Used in both obligations and deliverable obligations to represent a class or type of securities which apply. ISDA 2003 Term: Obligation Category/Deliverable Obligation Category. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ObligationCategory Category { get; } /// /// An obligation and deliverable obligation characteristic. An obligation that ranks at least equal with the most senior Reference Obligation in priority of payment or, if no Reference Obligation is specified in the related Confirmation, the obligations of the Reference Entity that are senior. ISDA 2003 Term: Not Subordinated. /// public bool? NotSubordinated { get; } /// /// An obligation and deliverable obligation characteristic. The currency or currencies in which an obligation or deliverable obligation must be payable. ISDA 2003 Term: Specified Currency. /// public SpecifiedCurrency? SpecifiedCurrency { get; } /// /// An obligation and deliverable obligation characteristic. Any obligation that is not primarily (majority) owed to a Sovereign or Supranational Organisation. ISDA 2003 Term: Not Sovereign Lender. /// public bool? NotSovereignLender { get; } /// /// An obligation and deliverable obligation characteristic. Any obligation that is payable in any currency other than the domestic currency. Domestic currency is either the currency so specified or, if no currency is specified, the currency of (a) the reference entity, if the reference entity is a sovereign, or (b) the jurisdiction in which the relevant reference entity is organised, if the reference entity is not a sovereign. ISDA 2003 Term: Not Domestic Currency. /// public NotDomesticCurrency? NotDomesticCurrency { get; } /// /// An obligation and deliverable obligation characteristic. If the reference entity is a Sovereign, this means any obligation that is not subject to the laws of the reference entity. If the reference entity is not a sovereign, this means any obligation that is not subject to the laws of the jurisdiction of the reference entity. ISDA 2003 Term: Not Domestic Law. /// public bool? NotDomesticLaw { get; } /// /// An obligation and deliverable obligation characteristic. Indicates whether or not the obligation is quoted, listed or ordinarily purchased and sold on an exchange. ISDA 2003 Term: Listed. /// public bool? Listed { get; } /// /// An obligation and deliverable obligation characteristic. Any obligation other than an obligation that was intended to be offered for sale primarily in the domestic market of the relevant Reference Entity. This specifies that the obligation must be an internationally recognised bond. ISDA 2003 Term: Not Domestic Issuance. /// public bool? NotDomesticIssuance { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published additional provisions for U.S. Municipal as Reference Entity. ISDA 2003 Term: Full Faith and Credit Obligation Liability. /// public bool? FullFaithAndCreditObLiability { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published additional provisions for U.S. Municipal as Reference Entity. ISDA 2003 Term: General Fund Obligation Liability. /// public bool? GeneralFundObligationLiability { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published additional provisions for U.S. Municipal as Reference Entity. ISDA 2003 Term: Revenue Obligation Liability. /// public bool? RevenueObligationLiability { get; } /// /// OTE: Only allowed as an obligation characteristic under ISDA Credit 1999. In essence Not Contingent means the repayment of principal cannot be dependent on a formula/index, i.e. to prevent the risk of being delivered an instrument that may never pay any element of principal, and to ensure that the obligation is interest bearing (on a regular schedule). ISDA 2003 Term: Not Contingent. /// public bool? NotContingent { get; } /// /// A free format string to specify any excluded obligations or deliverable obligations, as the case may be, of the reference entity or excluded types of obligations or deliverable obligations. ISDA 2003 Term: Excluded Obligations/Excluded Deliverable Obligations. /// public string? Excluded { get; } /// /// This element is used to specify any other obligations of a reference entity in both obligations and deliverable obligations. The obligations can be specified free-form. ISDA 2003 Term: Other Obligations of a Reference Entity. /// public string? OthReferenceEntityObligations { get; } /// /// Applies to Loan CDS, to indicate what lien level is appropriate for a deliverable obligation. Applies to European Loan CDS, to indicate the Ranking of the obligation. Example: a 2nd lien Loan CDS would imply that the deliverable obligations are 1st or 2nd lien loans. /// public FieldWithMetaString? DesignatedPriority { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published Standard Terms Supplement for use with CDS Transactions on Leveraged Loans. ISDA 2003 Term: Cash Settlement Only. /// public bool? CashSettlementOnly { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published Standard Terms Supplement for use with CDS Transactions on Leveraged Loans. ISDA 2003 Term: Delivery of Commitments. /// public bool? DeliveryOfCommitments { get; } /// /// An obligation and deliverable obligation characteristic. Defined in the ISDA published Standard Terms Supplement for use with CDS Transactions on Leveraged Loans. ISDA 2003 Term: Continuity. /// public bool? Continuity { get; } } /// /// Specifies the object to be observed for a price, it could be an asset or a reference. /// public class Observable : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservableMeta(); [JsonConstructor] public Observable(FieldWithMetaFloatingRateOption? rateOption, FieldWithMetaCommodity? commodity, IEnumerable productIdentifier, FieldWithMetaQuotedCurrencyPair? currencyPair, Enums.OptionReferenceType? optionReferenceType, _MetaFields? meta) { RateOption = rateOption; Commodity = commodity; ProductIdentifier = productIdentifier; CurrencyPair = currencyPair; OptionReferenceType = optionReferenceType; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a floating rate index and tenor. /// public FieldWithMetaFloatingRateOption? RateOption { get; } /// /// Identifies a commodity by referencing a product identifier. /// public FieldWithMetaCommodity? Commodity { get; } /// /// Comprises of an identifier and a source. The associated metadata key denotes the ability to associate a hash value to the ProductIdentifier instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public IEnumerable ProductIdentifier { get; } /// /// Describes the composition of a rate that has been quoted or is to be quoted, including the two currencies and the quotation relationship between the two currencies. /// public FieldWithMetaQuotedCurrencyPair? CurrencyPair { get; } /// /// The underlying contract which is referenced when determining the final settlement price of the instrument. Eg. Rolling Front Month Future; Spot etc. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.OptionReferenceType? OptionReferenceType { get; } public _MetaFields? Meta { get; } } /// /// Defines a single, numerical value that was observed in the marketplace. Observations of market data are made independently to business events or trade life-cycle events, so data instances of Observation can be created independently of any other model type, hence it is annotated as a root type. Observations will be broadly reused in many situations, so references to Observation are supported via the 'key' annotation. /// public class Observation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationMeta(); [JsonConstructor] public Observation(Price observedValue, ObservationIdentifier observationIdentifier, _MetaFields? meta) { ObservedValue = observedValue; ObservationIdentifier = observationIdentifier; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the observed value as a number. /// public Price ObservedValue { get; } /// /// Represents the observation was made i.e. how to uniquely identify the observed value among the population of all available market data. /// public ObservationIdentifier ObservationIdentifier { get; } public _MetaFields? Meta { get; } } /// /// Specifies a single date on which market observations take place and specifies optional associated weighting. /// public class ObservationDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationDateMeta(); [JsonConstructor] public ObservationDate(LocalDate? unadjustedDate, LocalDate? adjustedDate, decimal? weight, string? observationReference, _MetaFields? meta) { UnadjustedDate = unadjustedDate; AdjustedDate = adjustedDate; Weight = weight; ObservationReference = observationReference; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A date subject to adjustment. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedDate { get; } /// /// The date once the adjustment has been performed. (Note that this date may change if the business center holidays change). /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedDate { get; } /// /// Specifies the degree of importance of the observation. /// public decimal? Weight { get; } /// /// Specifies an identification key for the market observation. This attribute can be used as a reference to assign weights to a series of dates defined in a parametricSchedule. /// public string? ObservationReference { get; } public _MetaFields? Meta { get; } } /// /// Describes date details for a set of observation dates in parametric or non-parametric form. /// public class ObservationDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationDatesMeta(); [JsonConstructor] public ObservationDates(ObservationSchedule? observationSchedule, PeriodicDates? periodicSchedule, ParametricDates? parametricDates) { ObservationSchedule = observationSchedule; PeriodicSchedule = periodicSchedule; ParametricDates = parametricDates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a schedule of dates (non-parametric) on which market observations take place, and allows for the optional definition of weights where applicable. When no weight is specified, then weight of each date is assumed to be 1.0 /// public ObservationSchedule? ObservationSchedule { get; } /// /// Specifies the date range and frequency on which market observations take place. Weights can be assigned to dates in the schedule by assigning the weight and corresponding observationReference in the observationSchedule. /// public PeriodicDates? PeriodicSchedule { get; } /// /// Specifies parametric terms to determine which days within a given calculation period the price would be observed. Typically associated with Commodities. /// public ParametricDates? ParametricDates { get; } } /// /// Specifies the necessary information to create any observation event. /// public class ObservationEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationEventMeta(); [JsonConstructor] public ObservationEvent(CreditEvent? creditEvent, CorporateAction? corporateAction) { CreditEvent = creditEvent; CorporateAction = corporateAction; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the necessary information to create a credit event. /// public CreditEvent? CreditEvent { get; } /// /// Specifies the necessary information to create a corporate action. /// public CorporateAction? CorporateAction { get; } } /// /// Defines the parameters needed to uniquely identify a piece of data among the population of all available market data. /// public class ObservationIdentifier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationIdentifierMeta(); [JsonConstructor] public ObservationIdentifier(Observable observable, LocalDate observationDate, TimeZone? observationTime, InformationSource? informationSource, DeterminationMethodology? determinationMethodology) { Observable = observable; ObservationDate = observationDate; ObservationTime = observationTime; InformationSource = informationSource; DeterminationMethodology = determinationMethodology; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the asset or rate to which the observation relates. /// public Observable Observable { get; } /// /// Specifies the date value to use when resolving the market data. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate ObservationDate { get; } /// /// Represents the time and time-zone. /// public TimeZone? ObservationTime { get; } /// /// Represents where the market data published and should be observed. /// public InformationSource? InformationSource { get; } /// /// Specifies the method according to which an amount or a date is determined. /// public DeterminationMethodology? DeterminationMethodology { get; } } /// /// Specifies inputs needed to process an observation. /// public class ObservationInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationInstructionMeta(); [JsonConstructor] public ObservationInstruction(ObservationEvent observationEvent) { ObservationEvent = observationEvent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Contains all information related to an observation. /// public ObservationEvent ObservationEvent { get; } } /// /// Parameters on daily observed computed rates, specifically daily caps and floors. This type is used to represent modular computed rates in interestRatePayouts. /// public class ObservationParameters : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationParametersMeta(); [JsonConstructor] public ObservationParameters(decimal? observationCapRate, decimal? observationFloorRate) { ObservationCapRate = observationCapRate; ObservationFloorRate = observationFloorRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A daily observation cap rate. /// public decimal? ObservationCapRate { get; } /// /// A daily observation floor rate. /// public decimal? ObservationFloorRate { get; } } /// /// Specifies a single date on which market observations take place and specifies optional associated weighting. /// public class ObservationSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationScheduleMeta(); [JsonConstructor] public ObservationSchedule(IEnumerable observationDate, BusinessDayAdjustments? dateAdjustments) { ObservationDate = observationDate; DateAdjustments = dateAdjustments; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies an adjusted or unadjusted date for a market observation. /// public IEnumerable ObservationDate { get; } /// /// The business day convention and financial business centers used for adjusting the date if it would otherwise fall on a day that is not a business date in the specified business centers. /// public BusinessDayAdjustments? DateAdjustments { get; } } /// /// Parameters to describe the observation shift for a daily compounded or averaged floating rate. This type is used to represent modular computed rates in interestRatePayouts. /// public class ObservationShiftCalculation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationShiftCalculationMeta(); [JsonConstructor] public ObservationShiftCalculation(int? offsetDays, Enums.ObservationPeriodDates? calculationBase, BusinessCenters? additionalBusinessDays) { OffsetDays = offsetDays; CalculationBase = calculationBase; AdditionalBusinessDays = additionalBusinessDays; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of days of observation shift. /// public int? OffsetDays { get; } /// /// Whether the rate is calculated in advance, in arrears, or relative to a reset date. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ObservationPeriodDates? CalculationBase { get; } /// /// Any additional business days that be applicable. /// public BusinessCenters? AdditionalBusinessDays { get; } } /// /// The observation source can be composed of an curve and/or and information source. /// public class ObservationSource : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationSourceMeta(); [JsonConstructor] public ObservationSource(Curve? curve, InformationSource? informationSource) { Curve = curve; InformationSource = informationSource; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Curve? Curve { get; } public InformationSource? InformationSource { get; } } /// /// Class containing terms that are associated with observing a price/benchmark/index across either single or multiple observations. /// public class ObservationTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ObservationTermsMeta(); [JsonConstructor] public ObservationTerms(BusinessCenterTime? pricingTime, Enums.TimeType? pricingTimeType, FxSpotRateSource? informationSource, Rounding? precision, CalculationPeriodDates? calculationPeriodDates, Observable? observable, ObservationDates observationDates, int? numberOfObservationDates) { PricingTime = pricingTime; PricingTimeType = pricingTimeType; InformationSource = informationSource; Precision = precision; CalculationPeriodDates = calculationPeriodDates; Observable = observable; ObservationDates = observationDates; NumberOfObservationDates = numberOfObservationDates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines time in respect to a business calendar location that the price/benchmark/index is observed /// public BusinessCenterTime? PricingTime { get; } /// /// The enumerated values to specify points in the day when option exercise and valuation can occur. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TimeType? PricingTimeType { get; } /// /// The information source where a published or displayed market rate will be obtained, e.g. Telerate Page 3750. /// public FxSpotRateSource? InformationSource { get; } /// /// Defines rounding rules and precision to be used in the rounding of observations. /// public Rounding? Precision { get; } /// /// Defines parameters used to generate the calculation period dates schedule, including the specification of any initial or final stub calculation periods. A calculation period schedule consists of an optional initial stub calculation period, one or more regular calculation periods and an optional final stub calculation period. In the absence of any initial or final stub calculation periods, the regular part of the calculation period schedule is assumed to be between the effective date and the termination date. No implicit stubs are allowed, i.e. stubs must be explicitly specified using an appropriate combination of firstPeriodStartDate, firstRegularPeriodStartDate and lastRegularPeriodEndDate. /// public CalculationPeriodDates? CalculationPeriodDates { get; } /// /// Specifies the object to be observed for a price, it could be an asset or a reference. /// public Observable? Observable { get; } /// /// Describes date details for a set of observation dates in parametric or non-parametric form. /// public ObservationDates ObservationDates { get; } /// /// The number of observation dates between observation start date and observation end date. /// public int? NumberOfObservationDates { get; } } /// /// A class defining an offset used in calculating a new date relative to a reference date, e.g. calendar days, business days, commodity Business days, etc. /// public class Offset : AbstractRosettaModelObject, IOffset, IPeriod { private static readonly IRosettaMetaData metaData = new OffsetMeta(); [JsonConstructor] public Offset(Enums.DayType? dayType, int periodMultiplier, Enums.Period period, _MetaFields? meta) { DayType = dayType; PeriodMultiplier = periodMultiplier; PeriodValue = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType? DayType { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "period")] public Enums.Period PeriodValue { get; } public _MetaFields? Meta { get; } } /// /// Defines business day shifts for daily componded or averaged rates. This type is used for lookback and lockout rates. This type is used to represent modular computed rates in interestRatePayouts. /// public class OffsetCalculation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OffsetCalculationMeta(); [JsonConstructor] public OffsetCalculation(int? offsetDays) { OffsetDays = offsetDays; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of business days offset. /// public int? OffsetDays { get; } } /// /// A class to represent the applicable terms to qualify an option exercise: the option style (e.g. American style option), the exercise procedure (e.g. manual exercise) and the settlement terms (e.g. physical vs. cash). /// public class OptionExercise : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OptionExerciseMeta(); [JsonConstructor] public OptionExercise(OptionStyle optionStyle, OptionStrike? strike, ExerciseProcedure? exerciseProcedure) { OptionStyle = optionStyle; Strike = strike; ExerciseProcedure = exerciseProcedure; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The option exercise can be of American style, Bermuda style or European style. The FpML implementation makes use of a substitution group. /// public OptionStyle OptionStyle { get; } /// /// Specifies the strike of the option on credit default swap. /// public OptionStrike? Strike { get; } /// /// The set of parameters defining the procedure associated with the exercise, e.g. manual exercise. /// public ExerciseProcedure? ExerciseProcedure { get; } } /// /// Defines additional optional features that can be included in an option contract. /// public class OptionFeature : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OptionFeatureMeta(); [JsonConstructor] public OptionFeature(IEnumerable fxFeature, StrategyFeature? strategyFeature, AveragingCalculation? averagingFeature, Barrier? barrier, Knock? knock, PassThrough? passThrough) { FxFeature = fxFeature; StrategyFeature = strategyFeature; AveragingFeature = averagingFeature; Barrier = barrier; Knock = knock; PassThrough = passThrough; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Describes a quanto or composite FX feature. /// public IEnumerable FxFeature { get; } /// /// Defines a simple strategy feature. /// public StrategyFeature? StrategyFeature { get; } /// /// Defines an option feature in which an average market observation price is determined on valuation and compared to the strike to determine a settlement amount. /// public AveragingCalculation? AveragingFeature { get; } /// /// Specifies a barrier feature. /// public Barrier? Barrier { get; } /// /// Specifies a knock in or knock out feature. /// public Knock? Knock { get; } /// /// Specifies the rules for pass-through payments from the underlier, such as dividends. /// public PassThrough? PassThrough { get; } } /// /// The option payout specification terms. The associated globalKey denotes the ability to associate a hash value to the respective OptionPayout instantiation for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class OptionPayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new OptionPayoutMeta(); [JsonConstructor] public OptionPayout(BuyerSeller buyerSeller, Enums.OptionType? optionType, OptionFeature? feature, OptionExercise exerciseTerms, Product underlier, ObservationTerms? observationTerms, CalculationSchedule? schedule, AssetDeliveryInformation? delivery, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { BuyerSeller = buyerSeller; OptionType = optionType; Feature = feature; ExerciseTerms = exerciseTerms; Underlier = underlier; ObservationTerms = observationTerms; Schedule = schedule; Delivery = delivery; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public BuyerSeller BuyerSeller { get; } /// /// The type of option transaction. From a usage standpoint, put/call is the default option type, while payer/receiver indicator is used for options on index credit default swaps, consistently with the industry practice. Straddle is used for the case of straddle strategy, that combine a call and a put with the same strike. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.OptionType? OptionType { get; } /// /// The option feature, such as quanto, Asian, barrier, knock. /// public OptionFeature? Feature { get; } /// /// The terms for exercising the option, which include the option style (e.g. American style option), the exercise procedure (e.g. manual exercise) and the settlement terms (e.g. physical vs. cash). /// public OptionExercise ExerciseTerms { get; } /// /// The product underlying the option, which can be of any type including ContractualProduct or Security. /// public Product Underlier { get; } /// /// Class containing terms that are associated with observing a price/benchmark/index across either single or multple observations. To be used for option contracts that reference a benchmark price. /// public ObservationTerms? ObservationTerms { get; } /// /// Allows the full representation of a payout by defining a set of schedule periods. It supports standard schedule customization by expressing all the dates, quantities, and pricing data in a non-parametric way. /// public CalculationSchedule? Schedule { get; } /// /// Contains the information relative to the delivery of the asset. /// public AssetDeliveryInformation? Delivery { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// Defines the strike price of an option. /// public class OptionStrike : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OptionStrikeMeta(); [JsonConstructor] public OptionStrike(Price? strikePrice, ReferenceWithMetaFixedRateSpecification? strikeReference, ReferenceSwapCurve? referenceSwapCurve, AveragingStrikeFeature? averagingStrikeFeature) { StrikePrice = strikePrice; StrikeReference = strikeReference; ReferenceSwapCurve = referenceSwapCurve; AveragingStrikeFeature = averagingStrikeFeature; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the strike of an option in the form of a price that could be a cash price, interestRate, or other types. /// public Price? StrikePrice { get; } /// /// Defines the strike of an option in reference to the spread of the underlying swap (typical practice in the case of an option on a credit single name swaps). /// public ReferenceWithMetaFixedRateSpecification? StrikeReference { get; } /// /// Defines the strike of an option when expressed by reference to a swap curve (Typically the case for a convertible bond option). /// public ReferenceSwapCurve? ReferenceSwapCurve { get; } /// /// Defines an option strike that is calculated from an average of observed market prices. /// public AveragingStrikeFeature? AveragingStrikeFeature { get; } } /// /// The qualification of the option style: American, Bermuda or European. FpML implements those features as part of a substitution group. /// public class OptionStyle : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OptionStyleMeta(); [JsonConstructor] public OptionStyle(AmericanExercise? americanExercise, BermudaExercise? bermudaExercise, EuropeanExercise? europeanExercise) { AmericanExercise = americanExercise; BermudaExercise = bermudaExercise; EuropeanExercise = europeanExercise; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public AmericanExercise? AmericanExercise { get; } public BermudaExercise? BermudaExercise { get; } public EuropeanExercise? EuropeanExercise { get; } } /// /// A data defining: an early termination provision where either or both parties have the right to exercise. /// public class OptionalEarlyTermination : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OptionalEarlyTerminationMeta(); [JsonConstructor] public OptionalEarlyTermination(BuyerSeller? singlePartyOption, bool? mutualEarlyTermination, AmericanExercise? americanExercise, BermudaExercise? bermudaExercise, EuropeanExercise? europeanExercise, IEnumerable exerciseNotice, bool? followUpConfirmation, CalculationAgent? calculationAgent, SettlementTerms? cashSettlement, OptionalEarlyTerminationAdjustedDates? optionalEarlyTerminationAdjustedDates) { SinglePartyOption = singlePartyOption; MutualEarlyTermination = mutualEarlyTermination; AmericanExercise = americanExercise; BermudaExercise = bermudaExercise; EuropeanExercise = europeanExercise; ExerciseNotice = exerciseNotice; FollowUpConfirmation = followUpConfirmation; CalculationAgent = calculationAgent; CashSettlement = cashSettlement; OptionalEarlyTerminationAdjustedDates = optionalEarlyTerminationAdjustedDates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// If optional early termination is not available to both parties then this component specifies the buyer and seller of the option. In FpML, this attribute is of type SinglePsrtyOption, which actually consists of the BuyerSeller.model. /// public BuyerSeller? SinglePartyOption { get; } /// /// Used for specifying whether the Mutual Early Termination Right that is detailed in the Master Confirmation will apply. /// public bool? MutualEarlyTermination { get; } /// /// American exercise. FpML implementations consists in an exercise substitution group. /// public AmericanExercise? AmericanExercise { get; } /// /// Bermuda exercise. FpML implementations consists in an exercise substitution group. /// public BermudaExercise? BermudaExercise { get; } /// /// European exercise. FpML implementations consists in an exercise substitution group. /// public EuropeanExercise? EuropeanExercise { get; } /// /// Definition of the party to whom notice of exercise should be given. /// public IEnumerable ExerciseNotice { get; } /// /// A flag to indicate whether follow-up confirmation of exercise (written or electronic) is required following telephonic notice by the buyer to the seller or seller's agent. /// public bool? FollowUpConfirmation { get; } /// /// The ISDA Calculation Agent responsible for performing duties associated with an optional early termination. /// public CalculationAgent? CalculationAgent { get; } /// /// If specified, this means that cash settlement is applicable to the transaction and defines the parameters associated with the cash settlement procedure. If not specified, then physical settlement is applicable. /// public SettlementTerms? CashSettlement { get; } /// /// An early termination provision to terminate the trade at fair value where one or both parties have the right to decide on termination. /// public OptionalEarlyTerminationAdjustedDates? OptionalEarlyTerminationAdjustedDates { get; } } /// /// A data defining: the adjusted dates associated with an optional early termination provision. /// public class OptionalEarlyTerminationAdjustedDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OptionalEarlyTerminationAdjustedDatesMeta(); [JsonConstructor] public OptionalEarlyTerminationAdjustedDates(IEnumerable earlyTerminationEvent) { EarlyTerminationEvent = earlyTerminationEvent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The adjusted dates associated with an individual early termination date. /// public IEnumerable EarlyTerminationEvent { get; } } public class OrdrTrnsmssn : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OrdrTrnsmssnMeta(); [JsonConstructor] public OrdrTrnsmssn(string trnsmssnInd) { TrnsmssnInd = trnsmssnInd; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string TrnsmssnInd { get; } } /// /// A class for defining an agreement executed between parties. /// public class OtherAgreement : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OtherAgreementMeta(); [JsonConstructor] public OtherAgreement(FieldWithMetaString? identifier, FieldWithMetaString otherAgreementType, FieldWithMetaString? version, LocalDate? date) { Identifier = identifier; OtherAgreementType = otherAgreementType; Version = version; Date = date; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An identifier that has been created to identify the agreement. /// public FieldWithMetaString? Identifier { get; } /// /// The agreement executed between the parties and intended to govern product-specific derivatives transactions between those parties. /// public FieldWithMetaString OtherAgreementType { get; } /// /// The version of the agreement. /// public FieldWithMetaString? Version { get; } /// /// The date on which the agreement was signed. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? Date { get; } } /// /// A class to specify a related legal agreement. For example, ISDA 2016 Credit Support Annex for Initial Margin, paragraph 13, General Principles, (s): Other CSA and Japanese Law CSA (VM). | ISDA 2016 Credit Support Annex for Variation Margin, paragraph 13, (o): Other CSA. /// public class OtherAgreementTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OtherAgreementTermsMeta(); [JsonConstructor] public OtherAgreementTerms(bool isSpecified, string? legalDocument) { IsSpecified = isSpecified; LegalDocument = legalDocument; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The qualification of whether some other related agreement is specified (True) or not (False). /// public bool IsSpecified { get; } /// /// The specification of this other agreement, when the qualification is True. /// public string? LegalDocument { get; } } public class Othr : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new OthrMeta(); [JsonConstructor] public Othr(FinInstrmGnlAttrbts finInstrmGnlAttrbts, DerivInstrmAttrbts derivInstrmAttrbts, string id, SchmeNm schmeNm) { FinInstrmGnlAttrbts = finInstrmGnlAttrbts; DerivInstrmAttrbts = derivInstrmAttrbts; Id = id; SchmeNm = schmeNm; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public FinInstrmGnlAttrbts FinInstrmGnlAttrbts { get; } public DerivInstrmAttrbts DerivInstrmAttrbts { get; } public string Id { get; } public SchmeNm SchmeNm { get; } } /// /// A class to specify the Partial Cash Deliverable Obligation Characteristic. /// public class PCDeliverableObligationCharac : AbstractRosettaModelObject, IPCDeliverableObligationCharac { private static readonly IRosettaMetaData metaData = new PCDeliverableObligationCharacMeta(); [JsonConstructor] public PCDeliverableObligationCharac(bool applicable, bool? partialCashSettlement) { Applicable = applicable; PartialCashSettlement = partialCashSettlement; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public bool Applicable { get; } /// public bool? PartialCashSettlement { get; } } /// /// Defines rules for the dates on which the price will be determined. /// public class ParametricDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ParametricDatesMeta(); [JsonConstructor] public ParametricDates(Enums.DayType dayType, Enums.DayDistribution? dayDistribution, IEnumerable dayOfWeek, decimal? dayFrequency, Lag? lag, BusinessCenters businessCenters) { DayType = dayType; DayDistribution = dayDistribution; DayOfWeek = dayOfWeek; DayFrequency = dayFrequency; Lag = lag; BusinessCenters = businessCenters; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Denotes the enumerated values to specify the day type classification used in counting the number of days between two dates. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType DayType { get; } /// /// Denotes the method by which the pricing days are distributed across the pricing period. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayDistribution? DayDistribution { get; } /// /// Indicates the days of the week on which the price will be determined. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable DayOfWeek { get; } /// /// Defines the occurrence of the dayOfWeek within the pricing period on which pricing will take place, e.g. the 3rd Friday within each Calculation Period. If omitted, every dayOfWeek will be a pricing day. /// public decimal? DayFrequency { get; } /// /// The pricing period per calculation period if the pricing days do not wholly fall within the respective calculation period. /// public Lag? Lag { get; } /// /// The enumerated values to specify the business centers. /// public BusinessCenters BusinessCenters { get; } } /// /// A class defining partial exercise. As defined in the 2000 ISDA Definitions, Section 12.3 Partial Exercise, the buyer of the option may exercise all or less than all the notional amount of the underlying swap but may not be less than the minimum notional amount (if specified) and must be an integral multiple of the integral multiple amount if specified. /// public class PartialExercise : AbstractRosettaModelObject, IPartialExercise { private static readonly IRosettaMetaData metaData = new PartialExerciseMeta(); [JsonConstructor] public PartialExercise(ReferenceWithMetaMoney notionaReference, decimal? integralMultipleAmount, decimal? minimumNotionalAmount, int? minimumNumberOfOptions) { NotionaReference = notionaReference; IntegralMultipleAmount = integralMultipleAmount; MinimumNotionalAmount = minimumNotionalAmount; MinimumNumberOfOptions = minimumNumberOfOptions; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public ReferenceWithMetaMoney NotionaReference { get; } /// public decimal? IntegralMultipleAmount { get; } /// public decimal? MinimumNotionalAmount { get; } /// public int? MinimumNumberOfOptions { get; } } /// /// A class to specify a party, without a qualification as to whether this party is a legal entity or a natural person, although the model provides the ability to associate a person (or set of persons) to a party, which use case would imply that such party would be a legal entity (even if not formally specified as such). /// public class Party : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PartyMeta(); [JsonConstructor] public Party(IEnumerable partyId, FieldWithMetaString? name, IEnumerable businessUnit, IEnumerable person, IEnumerable personRole, Account? account, ContactInformation? contactInformation, _MetaFields? meta) { PartyId = partyId; Name = name; BusinessUnit = businessUnit; Person = person; PersonRole = personRole; Account = account; ContactInformation = contactInformation; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The identifier associated with a party, e.g. the 20 digits LEI code. /// public IEnumerable PartyId { get; } /// /// The party name. /// public FieldWithMetaString? Name { get; } /// /// Optional organization unit information used to describe the organization units (e.g. trading desks) involved in a transaction or business process, incl. the contact information (when relevant). /// public IEnumerable BusinessUnit { get; } /// /// The person(s) who might be associated with the party as part of the execution, contract or legal document. /// public IEnumerable Person { get; } /// /// The role of the person(s) /// public IEnumerable PersonRole { get; } /// /// The account that might be associated with the party. At most one account can be specified, as it is expected that this information is used in the context of a contract or legal document where only one account per party can be associated with such object. /// public Account? Account { get; } /// /// The postal/street address, telephone number, email address and/or web page. If the contact information is specific to the associated business unit(s) or person (s), it should be associated with those. /// public ContactInformation? ContactInformation { get; } public _MetaFields? Meta { get; } } /// /// Specifies instruction to change the party on a trade. This primitive instruction is used in a number of scenarios including: clearing, allocation and novation. The instrution must include a trade identifier, because a change of party effectively results in a different trade. /// public class PartyChangeInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PartyChangeInstructionMeta(); [JsonConstructor] public PartyChangeInstruction(Counterparty counterparty, AncillaryParty? ancillaryParty, PartyRole? partyRole, IEnumerable tradeId) { Counterparty = counterparty; AncillaryParty = ancillaryParty; PartyRole = partyRole; TradeId = tradeId; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The new counterparty who is stepping into the trade. The stepping out counterparty is inferred based on the counterparty role that is being updated. /// public Counterparty Counterparty { get; } /// /// Specifies an ancillary party to be added onto the new transaction, e.g. the original executing party in an allocation. /// public AncillaryParty? AncillaryParty { get; } /// /// Specifies an additional party roles to be added on to the new transaction. /// public PartyRole? PartyRole { get; } /// /// The identifier to be assigned to the new trade post change of party. /// public IEnumerable TradeId { get; } } /// /// A class to specify contact information within a party: address and, optionally, associated business unit and person. This class also supports the ISDA CSA representation as a single string, through the address attribute. /// public class PartyContactInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PartyContactInformationMeta(); [JsonConstructor] public PartyContactInformation(ReferenceWithMetaParty? partyReference, ContactInformation? contactInformation, IEnumerable businessUnit, IEnumerable person, string? additionalInformation) { PartyReference = partyReference; ContactInformation = contactInformation; BusinessUnit = businessUnit; Person = person; AdditionalInformation = additionalInformation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The reference to the party to which the contact information refers to. /// public ReferenceWithMetaParty? PartyReference { get; } /// /// The postal/street address, telephone number, email address and/or web page. If the contact information is specific to the associated business unit(s), it should be associated with those. /// public ContactInformation? ContactInformation { get; } /// /// Optional organization unit information used to describe the organization units (e.g. trading desks) involved in a transaction or business process, incl. the contact information (when relevant). /// public IEnumerable BusinessUnit { get; } /// /// Optional information about people involved in a transaction or business process. (These are employees of the party.) /// public IEnumerable Person { get; } /// /// Specification of special instructions of the relevant party. /// public string? AdditionalInformation { get; } } /// /// A class to specify a party-related, non-standardized data in a generic form. /// public class PartyCustomisedWorkflow : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PartyCustomisedWorkflowMeta(); [JsonConstructor] public PartyCustomisedWorkflow(ReferenceWithMetaParty? partyReference, string? partyName, IEnumerable customisedWorkflow) { PartyReference = partyReference; PartyName = partyName; CustomisedWorkflow = customisedWorkflow; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Reference to the party to which the workflow pertains to. /// public ReferenceWithMetaParty? PartyReference { get; } /// /// The party name to which the workflow pertains to. /// public string? PartyName { get; } /// /// Non-standardized data in a generic form. /// public IEnumerable CustomisedWorkflow { get; } } /// /// Comprises an identifier and a source. The associated metadata key denotes the ability to associate a hash value to the PartyIdentifier instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class PartyIdentifier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PartyIdentifierMeta(); [JsonConstructor] public PartyIdentifier(FieldWithMetaString identifier, Enums.PartyIdentifierType? identifierType, _MetaFields? meta) { Identifier = identifier; IdentifierType = identifierType; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Provides an identifier associated with a party. The identifier is unique within the public source specified in the source attribute. /// public FieldWithMetaString Identifier { get; } /// /// Defines the source of the identifier. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PartyIdentifierType? IdentifierType { get; } public _MetaFields? Meta { get; } } /// /// Specifies the parties responsible for making and receiving payments defined by this structure. /// public class PartyReferencePayerReceiver : AbstractRosettaModelObject, IPartyReferencePayerReceiver { private static readonly IRosettaMetaData metaData = new PartyReferencePayerReceiverMeta(); [JsonConstructor] public PartyReferencePayerReceiver(ReferenceWithMetaParty payerPartyReference, ReferenceWithMetaAccount? payerAccountReference, ReferenceWithMetaParty receiverPartyReference, ReferenceWithMetaAccount? receiverAccountReference) { PayerPartyReference = payerPartyReference; PayerAccountReference = payerAccountReference; ReceiverPartyReference = receiverPartyReference; ReceiverAccountReference = receiverAccountReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public ReferenceWithMetaParty PayerPartyReference { get; } /// public ReferenceWithMetaAccount? PayerAccountReference { get; } /// public ReferenceWithMetaParty ReceiverPartyReference { get; } /// public ReferenceWithMetaAccount? ReceiverAccountReference { get; } } /// /// A class to specify the role(s) that party(ies) may have in relation to the execution, contract or other legal agreement. /// public class PartyRole : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PartyRoleMeta(); [JsonConstructor] public PartyRole(ReferenceWithMetaParty partyReference, Enums.PartyRole role, ReferenceWithMetaParty? ownershipPartyReference) { PartyReference = partyReference; Role = role; OwnershipPartyReference = ownershipPartyReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A reference to the party to which the role refers to. /// public ReferenceWithMetaParty PartyReference { get; } /// /// The party role. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PartyRole Role { get; } /// /// A reference to the party that has ownership of this party role information. FpML specifies that For shared trade information, this attribute will reference the originator of the data (for example, an execution facility or clearing house). /// public ReferenceWithMetaParty? OwnershipPartyReference { get; } } /// /// Type which contains pass through payments. /// public class PassThrough : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PassThroughMeta(); [JsonConstructor] public PassThrough(IEnumerable passThroughItem) { PassThroughItem = passThroughItem; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// One to many pass through payment items. /// public IEnumerable PassThroughItem { get; } } /// /// Class to represent a single pass through payment. /// public class PassThroughItem : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PassThroughItemMeta(); [JsonConstructor] public PassThroughItem(PayerReceiver payerReceiver, decimal passThroughPercentage) { PayerReceiver = payerReceiver; PassThroughPercentage = passThroughPercentage; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This attribute doesn't exists in the FpML construct, which makes use of the PayerReceiver.model group. /// public PayerReceiver PayerReceiver { get; } /// /// Percentage of payments from the underlier which are passed through. /// public decimal PassThroughPercentage { get; } } /// /// Specifies the parties responsible for making and receiving payments defined by this structure. /// public class PayerReceiver : AbstractRosettaModelObject, IPayerReceiver { private static readonly IRosettaMetaData metaData = new PayerReceiverMeta(); [JsonConstructor] public PayerReceiver(Enums.CounterpartyRole payer, Enums.CounterpartyRole receiver) { Payer = payer; Receiver = receiver; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Payer { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole Receiver { get; } } /// /// A data defining: the adjusted payment date and associated calculation period parameters required to calculate the actual or projected payment amount. This data forms: part of the cashflow representation of a swap stream. /// public class PaymentCalculationPeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PaymentCalculationPeriodMeta(); [JsonConstructor] public PaymentCalculationPeriod(LocalDate? unadjustedPaymentDate, LocalDate? adjustedPaymentDate, IEnumerable calculationPeriod, Money? fixedPaymentAmount, decimal? discountFactor, Money? forecastPaymentAmount, Money? presentValueAmount, _MetaFields? meta) { UnadjustedPaymentDate = unadjustedPaymentDate; AdjustedPaymentDate = adjustedPaymentDate; CalculationPeriod = calculationPeriod; FixedPaymentAmount = fixedPaymentAmount; DiscountFactor = discountFactor; ForecastPaymentAmount = forecastPaymentAmount; PresentValueAmount = presentValueAmount; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The unadjusted payment date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? UnadjustedPaymentDate { get; } /// /// The adjusted payment date. This date should already be adjusted for any applicable business day convention. This component is not intended for use in trade confirmation but may be specified to allow the fee structure to also serve as a cashflow type component. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedPaymentDate { get; } /// /// The parameters used in the calculation of a fixed or floating rate calculation period amount. A list of calculation period elements may be ordered in the document by ascending start date. An FpML document which contains an unordered list of calculation periods is still regarded as a conformant document. /// public IEnumerable CalculationPeriod { get; } /// /// A known fixed payment amount. /// public Money? FixedPaymentAmount { get; } /// /// A decimal value representing the discount factor used to calculate the present value of cash flow. /// public decimal? DiscountFactor { get; } /// /// A monetary amount representing the forecast of the future value of the payment. /// public Money? ForecastPaymentAmount { get; } /// /// A monetary amount representing the present value of the forecast payment. /// public Money? PresentValueAmount { get; } public _MetaFields? Meta { get; } } /// /// The payment dates when specified as relative to a set of dates specified somewhere else in the instance document/transaction, e.g. the valuation dates as typically the case for equity swaps, or when specified as a calculation period schedule. /// public class PaymentDateSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PaymentDateScheduleMeta(); [JsonConstructor] public PaymentDateSchedule(IEnumerable interimPaymentDates, AdjustableOrRelativeDate? finalPaymentDate) { InterimPaymentDates = interimPaymentDates; FinalPaymentDate = finalPaymentDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public IEnumerable InterimPaymentDates { get; } /// /// The last payment when specified as an adjustable or relative date, as in the FpML total return construct. /// public AdjustableOrRelativeDate? FinalPaymentDate { get; } } /// /// Specifies the parameters to generate the payment date schedule, either through a parametric representation or by reference to specified dates. /// public class PaymentDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PaymentDatesMeta(); [JsonConstructor] public PaymentDates(Frequency? paymentFrequency, LocalDate? firstPaymentDate, LocalDate? lastRegularPaymentDate, PaymentDateSchedule? paymentDateSchedule, Enums.PayRelativeTo? payRelativeTo, Offset? paymentDaysOffset, BusinessDayAdjustments? paymentDatesAdjustments, _MetaFields? meta) { PaymentFrequency = paymentFrequency; FirstPaymentDate = firstPaymentDate; LastRegularPaymentDate = lastRegularPaymentDate; PaymentDateSchedule = paymentDateSchedule; PayRelativeTo = payRelativeTo; PaymentDaysOffset = paymentDaysOffset; PaymentDatesAdjustments = paymentDatesAdjustments; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The frequency at which regular payment dates occur. If the payment frequency is equal to the frequency defined in the calculation period dates component then one calculation period contributes to each payment amount. If the payment frequency is less frequent than the frequency defined in the calculation period dates component then more than one calculation period will contribute to the payment amount. A payment frequency more frequent than the calculation period frequency or one that is not a multiple of the calculation period frequency is invalid. If the payment frequency is of value T (term), the period is defined by the effectiveDate and the terminationDate. /// public Frequency? PaymentFrequency { get; } /// /// The first unadjusted payment date. This day may be subject to adjustment in accordance with any business day convention specified in paymentDatesAdjustments. This element must only be included if there is an initial stub. This date will normally correspond to an unadjusted calculation period start or end date. This is true even if early or delayed payment is specified to be applicable since the actual first payment date will be the specified number of days before or after the applicable adjusted calculation period start or end date with the resulting payment date then being adjusted in accordance with any business day convention specified in paymentDatesAdjustments. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? FirstPaymentDate { get; } /// /// The last regular payment date when specified as a date, as in the FpML interest rate construct. FpML specifies that this date may be subject to adjustment in accordance with any business day convention specified in the paymentDatesAdjustments attribute. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? LastRegularPaymentDate { get; } /// /// The payment dates when specified as relative to a set of dates specified somewhere else in the instance document/transaction, e.g. the valuation dates as typically the case for equity swaps, or when specified as a calculation period schedule. /// public PaymentDateSchedule? PaymentDateSchedule { get; } /// /// Specifies whether the payments occur relative to each adjusted calculation period start date or end date, each reset date, valuation date or the last pricing date. Calculation period start date means relative to the start of the first calculation period contributing to a given payment. Similarly, calculation period end date means the end of the last calculation period contributing to a given payment. The valuation date is applicable for Brazilian-CDI and equity swaps. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PayRelativeTo? PayRelativeTo { get; } /// /// If early payment or delayed payment is required, specifies the number of days offset that the payment occurs relative to what would otherwise be the unadjusted payment date. The offset can be specified in terms of either calendar or business days. Even in the case of a calendar days offset, the resulting payment date, adjusted for the specified calendar days offset, will still be adjusted in accordance with the specified payment dates adjustments. This element should only be included if early or delayed payment is applicable, i.e. if the periodMultiplier element value is not equal to zero. An early payment would be indicated by a negative periodMultiplier element value and a delayed payment (or payment lag) would be indicated by a positive periodMultiplier element value. /// public Offset? PaymentDaysOffset { get; } /// /// The definition of the business day convention and financial business centers used for adjusting the payment date if it would otherwise fall on a day that is not a business day in the specified business center. /// public BusinessDayAdjustments? PaymentDatesAdjustments { get; } public _MetaFields? Meta { get; } } public class PaymentDetail : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PaymentDetailMeta(); [JsonConstructor] public PaymentDetail(AdjustableOrRelativeDate? paymentDate, PaymentRule paymentRule, Money? paymentAmount, _MetaFields? meta) { PaymentDate = paymentDate; PaymentRule = paymentRule; PaymentAmount = paymentAmount; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public AdjustableOrRelativeDate? PaymentDate { get; } /// /// The calculation rule. /// public PaymentRule PaymentRule { get; } /// /// A fixed payment amount. /// public Money? PaymentAmount { get; } public _MetaFields? Meta { get; } } /// /// This class corresponds to the FpML PaymentDiscounting.model group for representing the discounting elements that can be associated with a payment. /// public class PaymentDiscounting : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PaymentDiscountingMeta(); [JsonConstructor] public PaymentDiscounting(decimal? discountFactor, Money? presentValueAmount) { DiscountFactor = discountFactor; PresentValueAmount = presentValueAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The value representing the discount factor used to calculate the present value of the cash flow. /// public decimal? DiscountFactor { get; } /// /// The amount representing the present value of the forecast payment. /// public Money? PresentValueAmount { get; } } /// /// A class defining the payment calculation rule. As of FpML 5.10, percentage rule is the only calculation rule that has been specified as part of the standard. /// public class PaymentRule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PaymentRuleMeta(); [JsonConstructor] public PaymentRule(PercentageRule? percentageRule) { PercentageRule = percentageRule; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This attribute is not present as part of the FpML construct, as the payment rule is specialised by means of runtime type extension through the xsi:type. /// public PercentageRule? PercentageRule { get; } } /// /// A class to represent the set of future cashflow methodologies in the form of specific payout class(es) that can be associated for the purpose of specifying a financial product. For example, two interest rate payouts can be combined to specify an interest rate swap, or one interest rate payout can be combined with a credit default payout to specify a credit default swap. /// public class Payout : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PayoutMeta(); [JsonConstructor] public Payout(IEnumerable interestRatePayout, CreditDefaultPayout? creditDefaultPayout, IEnumerable optionPayout, IEnumerable commodityPayout, IEnumerable forwardPayout, IEnumerable fixedPricePayout, IEnumerable securityPayout, IEnumerable cashflow, IEnumerable performancePayout, IEnumerable assetPayout, _MetaFields? meta) { InterestRatePayout = interestRatePayout; CreditDefaultPayout = creditDefaultPayout; OptionPayout = optionPayout; CommodityPayout = commodityPayout; ForwardPayout = forwardPayout; FixedPricePayout = fixedPricePayout; SecurityPayout = securityPayout; Cashflow = cashflow; PerformancePayout = performancePayout; AssetPayout = assetPayout; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// All of the terms necessary to define and calculate a cash flow based on a fixed, a floating or an inflation index rate. The interest rate payout can be applied to interest rate swaps and FRA (which both have two associated interest rate payouts), credit default swaps (to represent the fee leg when subject to periodic payments) and equity swaps (to represent the funding leg). /// public IEnumerable InterestRatePayout { get; } /// /// The credit default payout, which provides the details necessary for determining when a credit payout will be triggered as well as the parameters for calculating the payout and the settlement terms. /// public CreditDefaultPayout? CreditDefaultPayout { get; } /// /// The option payout. /// public IEnumerable OptionPayout { get; } /// /// Defines the payout for the floating leg of a Commodity Swap. /// public IEnumerable CommodityPayout { get; } /// /// Represents a forward settling payout. The 'Underlier' attribute captures the underlying payout, which is settled according to the 'SettlementTerms' attribute. Both FX Spot and FX Forward should use this component. /// public IEnumerable ForwardPayout { get; } /// /// Defines a payout in which one or more payouts are defined as a fixed price. /// public IEnumerable FixedPricePayout { get; } /// /// The security payout when the product involves some form of securities, such as collateral in a securities financing transaction /// public IEnumerable SecurityPayout { get; } /// /// A cashflow between the parties to the trade. For interest rate and equity products, this corresponds to the FpML additionalPayment element. For credit default swaps, this corresponds to the FpML initialPayment element and the singlePayment element of the fee leg. For option products, it represents the FpML premium element. /// public IEnumerable Cashflow { get; } /// /// The performance payout, which encompasses the equity price returns, dividend returns, volatility return, variance return and correlation provisions. /// public IEnumerable PerformancePayout { get; } /// /// The security payout when the product involves some form of securities, such as collateral in a securities financing transaction /// public IEnumerable AssetPayout { get; } public _MetaFields? Meta { get; } } /// /// Base class that all payout types should extend. Use case is that some validation rules may need to apply across all payout types, for which the data rule can be written at the base class level /// public class PayoutBase : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new PayoutBaseMeta(); [JsonConstructor] public PayoutBase(PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// A class defining a content model for a calculation rule defined as percentage of the notional amount. /// public class PercentageRule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PercentageRuleMeta(); [JsonConstructor] public PercentageRule(decimal paymentPercent, ReferenceWithMetaMoney notionalAmountReference) { PaymentPercent = paymentPercent; NotionalAmountReference = notionalAmountReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A percentage of the notional amount. /// public decimal PaymentPercent { get; } /// /// A reference to the notional amount. /// public ReferenceWithMetaMoney NotionalAmountReference { get; } } /// /// Contains the necessary specifications for all performance payouts, encompassing equity return, dividend, variance, volatility and correlation products. /// public class PerformancePayout : AbstractRosettaModelObject, IPayoutBase { private static readonly IRosettaMetaData metaData = new PerformancePayoutMeta(); [JsonConstructor] public PerformancePayout(ObservationTerms? observationTerms, ValuationDates valuationDates, PaymentDates paymentDates, Product? underlier, IEnumerable fxFeature, ReturnTerms returnTerms, _MetaFields? meta, PayerReceiver payerReceiver, ResolvablePriceQuantity? priceQuantity, PrincipalPayments? principalPayment, SettlementTerms? settlementTerms) { ObservationTerms = observationTerms; ValuationDates = valuationDates; PaymentDates = paymentDates; Underlier = underlier; FxFeature = fxFeature; ReturnTerms = returnTerms; Meta = meta; PayerReceiver = payerReceiver; PriceQuantity = priceQuantity; PrincipalPayment = principalPayment; SettlementTerms = settlementTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines how and when a performance type option or performance type swap is to be observed. /// public ObservationTerms? ObservationTerms { get; } /// /// Defines how and when a performance type option or performance type swap is to be valued, including both interim and final valuation. /// public ValuationDates ValuationDates { get; } /// /// Defines the payment date schedule, as defined by the parameters that are needed to specify it, either in a parametric way or by reference to another schedule of dates (e.g. the valuation dates). /// public PaymentDates PaymentDates { get; } /// /// Identifies the underlying product that is referenced for pricing of the applicable leg in a swap. Referenced in the '2018 ISDA CDM Equity Confirmation for Security Equity Swap' as Security. /// public Product? Underlier { get; } /// /// Defines quanto or composite FX features that are included in the swap leg. /// public IEnumerable FxFeature { get; } /// /// Specifies the type of return of a performance payout. /// public ReturnTerms ReturnTerms { get; } public _MetaFields? Meta { get; } /// public PayerReceiver PayerReceiver { get; } /// public ResolvablePriceQuantity? PriceQuantity { get; } /// public PrincipalPayments? PrincipalPayment { get; } /// public SettlementTerms? SettlementTerms { get; } } /// /// Defines how and when a performance type option or performance type swap is to be valued. /// public class PerformanceValuationDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PerformanceValuationDatesMeta(); [JsonConstructor] public PerformanceValuationDates(Enums.DeterminationMethod determinationMethod, AdjustableRelativeOrPeriodicDates? valuationDates, AdjustableOrRelativeDate? valuationDate, BusinessCenterTime? valuationTime, Enums.TimeType? valuationTimeType, _MetaFields? meta) { DeterminationMethod = determinationMethod; ValuationDates = valuationDates; ValuationDate = valuationDate; ValuationTime = valuationTime; ValuationTimeType = valuationTimeType; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the method according to which an amount or a date is determined. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod DeterminationMethod { get; } /// /// 2018 ISDA CDM Equity Confirmation for Security Equity Swap: Pricing Date /// public AdjustableRelativeOrPeriodicDates? ValuationDates { get; } /// /// 2018 ISDA CDM Equity Confirmation for Security Equity Swap: Pricing Date /// public AdjustableOrRelativeDate? ValuationDate { get; } /// /// The specific time of day at which the calculation agent values the underlying. The SpecificTime is the only case when the valuationTime (time + business center location e.g. 10:00:00 USNY) should be provided. You should be able to provide just the valuationTime without valuationTimeType, which infer that this is a specific time. /// public BusinessCenterTime? ValuationTime { get; } /// /// The time of day at which the calculation agent values the underlying, for example the official closing time of the exchange. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TimeType? ValuationTimeType { get; } public _MetaFields? Meta { get; } } /// /// A class to define recurring periods or time offsets. /// public class Period : AbstractRosettaModelObject, IPeriod { private static readonly IRosettaMetaData metaData = new PeriodMeta(); [JsonConstructor] public Period(int periodMultiplier, Enums.Period period, _MetaFields? meta) { PeriodMultiplier = periodMultiplier; PeriodValue = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "period")] public Enums.Period PeriodValue { get; } public _MetaFields? Meta { get; } } /// /// Indicator to specify if the period bound is defined as a period and whether the bound is inclusive. /// public class PeriodBound : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PeriodBoundMeta(); [JsonConstructor] public PeriodBound(Period period, bool inclusive) { Period = period; Inclusive = inclusive; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the period is to be used as the bound, e.g. 5Y. /// public Period Period { get; } /// /// Specifies whether the period bound is inclusive, e.g. for a lower bound, false would indicate greater than, whereas true would indicate greater than or equal to. /// public bool Inclusive { get; } } /// /// Indicates The period range defined as either a lower and upper period bound, or both. /// public class PeriodRange : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PeriodRangeMeta(); [JsonConstructor] public PeriodRange(PeriodBound? lowerBound, PeriodBound? upperBound) { LowerBound = lowerBound; UpperBound = upperBound; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the lower bound of a period range, e.g. greater than or equal to 5Y. /// public PeriodBound? LowerBound { get; } /// /// Specifies the upper bound of a period range, e.g. less than to 10Y. /// public PeriodBound? UpperBound { get; } } /// /// A class for specifying a calculation period schedule. /// public class PeriodicDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PeriodicDatesMeta(); [JsonConstructor] public PeriodicDates(AdjustableOrRelativeDate? startDate, AdjustableOrRelativeDate? endDate, CalculationPeriodFrequency? periodFrequency, BusinessDayAdjustments? periodDatesAdjustments, Enums.DayType? dayType) { StartDate = startDate; EndDate = endDate; PeriodFrequency = periodFrequency; PeriodDatesAdjustments = periodDatesAdjustments; DayType = dayType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The start date of the calculation period. FpML specifies that for interest rate swaps this date must only be specified if it is not equal to the effective date. It is always specified in the case of equity swaps and credit default swaps with periodic payments. This date may be subject to adjustment in accordance with a business day convention. /// public AdjustableOrRelativeDate? StartDate { get; } /// /// The end date of the calculation period. FpML specifies that for interest rate swaps this date must only be specified if it is not equal to the termination date. It is always specified in the case of equity swaps with periodic payments. This date may be subject to adjustment in accordance with a business day convention. /// public AdjustableOrRelativeDate? EndDate { get; } /// /// The frequency at which calculation period end dates occur with the regular part of the calculation period schedule and their roll date convention. /// public CalculationPeriodFrequency? PeriodFrequency { get; } /// /// The specification of the business day convention and financial business centers used for adjusting any calculation period date if it would otherwise fall on a day that is not a business day in the specified business center. /// public BusinessDayAdjustments? PeriodDatesAdjustments { get; } /// /// Denotes the enumerated values to specify the day type classification used in counting the number of days between two dates. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType? DayType { get; } } /// /// Comprises an identifier and a source. The associated metadata key denotes the ability to associate a hash value to the PersonIdentifier instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class PersonIdentifier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PersonIdentifierMeta(); [JsonConstructor] public PersonIdentifier(FieldWithMetaString identifier, Enums.PersonIdentifierType? identifierType, FieldWithMetaString? country, _MetaFields? meta) { Identifier = identifier; IdentifierType = identifierType; Country = country; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Provides an identifier associated with a person. The identifier is unique within the public source specified in the source attribute. /// public FieldWithMetaString Identifier { get; } /// /// Defines the source of the identifier. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PersonIdentifierType? IdentifierType { get; } /// /// The ISO 3166 standard code for the country issuing the identifier. /// public FieldWithMetaString? Country { get; } public _MetaFields? Meta { get; } } public class PhysicalSettlementPeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PhysicalSettlementPeriodMeta(); [JsonConstructor] public PhysicalSettlementPeriod(bool? businessDaysNotSpecified, int? businessDays, int? maximumBusinessDays) { BusinessDaysNotSpecified = businessDaysNotSpecified; BusinessDays = businessDays; MaximumBusinessDays = maximumBusinessDays; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An explicit indication that a number of business days are not specified and therefore ISDA fallback provisions should apply. /// public bool? BusinessDaysNotSpecified { get; } /// /// A number of business days. Its precise meaning is dependant on the context in which this element is used. ISDA 2003 Term: Business Day. /// public int? BusinessDays { get; } /// /// A maximum number of business days. Its precise meaning is dependant on the context in which this element is used. Intended to be used to limit a particular ISDA fallback provision. /// public int? MaximumBusinessDays { get; } } /// /// Specifies Physical Settlement Terms characteristics for the settlement of a Credit Default Swap or Option. /// public class PhysicalSettlementTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PhysicalSettlementTermsMeta(); [JsonConstructor] public PhysicalSettlementTerms(bool? clearedPhysicalSettlement, Enums.AncillaryRole? predeterminedClearingOrganizationParty, PhysicalSettlementPeriod? physicalSettlementPeriod, DeliverableObligations? deliverableObligations, bool? escrow, bool? sixtyBusinessDaySettlementCap, _MetaFields? meta) { ClearedPhysicalSettlement = clearedPhysicalSettlement; PredeterminedClearingOrganizationParty = predeterminedClearingOrganizationParty; PhysicalSettlementPeriod = physicalSettlementPeriod; DeliverableObligations = deliverableObligations; Escrow = escrow; SixtyBusinessDaySettlementCap = sixtyBusinessDaySettlementCap; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies whether the swap resulting from physical settlement of the swaption transaction will clear through a clearing house. The meaning of Cleared Physical Settlement is defined in the 2006 ISDA Definitions, Section 15.2 (published in Supplement number 28). /// public bool? ClearedPhysicalSettlement { get; } /// /// Specifies the clearing organization (CCP, DCO) to which the trade should be cleared. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.AncillaryRole? PredeterminedClearingOrganizationParty { get; } /// /// The number of business days used in the determination of the physical settlement date. The physical settlement date is this number of business days after all applicable conditions to settlement are satisfied. If a number of business days is not specified fallback provisions apply for determining the number of business days. If Section 8.5/8.6 of the 1999/2003 ISDA Definitions are to apply the businessDaysNotSpecified element should be included. If a specified number of business days are to apply these should be specified in the businessDays element. If Section 8.5/8.6 of the 1999/2003 ISDA Definitions are to apply but capped at a maximum number of business days then the maximum number should be specified in the maximumBusinessDays element. ISDA 2003 Term: Physical Settlement Period. /// public PhysicalSettlementPeriod? PhysicalSettlementPeriod { get; } /// /// This element contains all the ISDA terms relevant to defining the deliverable obligations. /// public DeliverableObligations? DeliverableObligations { get; } /// /// If this element is specified and set to 'true', indicates that physical settlement must take place through the use of an escrow agent. (For Canadian counterparties this is always 'Not Applicable'. ISDA 2003 Term: Escrow. /// public bool? Escrow { get; } /// /// If this element is specified and set to 'true', for a transaction documented under the 2003 ISDA Credit Derivatives Definitions, has the effect of incorporating the language set forth below into the confirmation. The section references are to the 2003 ISDA Credit Derivatives Definitions. Notwithstanding Section 1.7 or any provisions of Sections 9.9 or 9.10 to the contrary, but without prejudice to Section 9.3 and (where applicable) Sections 9.4, 9.5 and 9.6, if the Termination Date has not occurred on or prior to the date that is 60 Business Days following the Physical Settlement Date, such 60th Business Day shall be deemed to be the Termination Date with respect to this Transaction except in relation to any portion of the Transaction (an 'Affected Portion') in respect of which: (1) a valid notice of Buy-in Price has been delivered that is effective fewer than three Business Days prior to such 60th Business Day, in which case the Termination Date for that Affected Portion shall be the third Business Day following the date on which such notice is effective; or (2) Buyer has purchased but not Delivered Deliverable Obligations validly specified by Seller pursuant to Section 9.10(b), in which case the Termination Date for that Affected Portion shall be the tenth Business Day following the date on which Seller validly specified such Deliverable Obligations to Buyer. /// public bool? SixtyBusinessDaySettlementCap { get; } public _MetaFields? Meta { get; } } /// /// A Portfolio represents an aggregation of multiple Positions, by describing the parameters that this Portfolio should be aggregated based on. The resulting PortfolioState is calculated using these aggregation parameters as inputs, by aggregating all the Events that are relevant to this Portfolio. The concept of Portfolio works at all levels in the model: from the highest for a given LegalEntity for instance, to the lowest to account for security substitutions in a secutity financing transaction. As such, Portfolio can be used either above or below the Contract level. /// public class Portfolio : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PortfolioMeta(); [JsonConstructor] public Portfolio(AggregationParameters aggregationParameters, PortfolioState portfolioState) { AggregationParameters = aggregationParameters; PortfolioState = portfolioState; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Describes the portfolio by describing how to aggregate all its relevant Events. /// public AggregationParameters AggregationParameters { get; } /// /// Describes the state of the Portfolio as a list of Positions resulting from the aggregation. /// public PortfolioState PortfolioState { get; } } /// /// State-full representation of a Portfolio that describes all the positions held at a given time, in various states which can be either traded, settled, etc., with lineage information to the previous state /// public class PortfolioState : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PortfolioStateMeta(); [JsonConstructor] public PortfolioState(IEnumerable positions, Lineage lineage, _MetaFields? meta) { Positions = positions; Lineage = lineage; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The list of positions, each containing a Quantity and a Product. /// public IEnumerable Positions { get; } /// /// Pointer to the previous PortfolioState and new Event(s) leading to the current (new) state. Previous PortfolioState in the Lineage can be Null in case this is the start of the chain of Events. /// public Lineage Lineage { get; } public _MetaFields? Meta { get; } } /// /// A Position describes how much of a given Product is being held and constitutes the atomic element of a Portfolio. /// public class Position : AbstractRosettaModelObject, IPosition { private static readonly IRosettaMetaData metaData = new PositionMeta(); [JsonConstructor] public Position(IEnumerable priceQuantity, Product product, Money? cashBalance, ReferenceWithMetaTradeState? tradeReference) { PriceQuantity = priceQuantity; Product = product; CashBalance = cashBalance; TradeReference = tradeReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable PriceQuantity { get; } /// public Product Product { get; } /// public Money? CashBalance { get; } /// public ReferenceWithMetaTradeState? TradeReference { get; } } /// /// Defines a position identifier as a special case of the generic identifier type, that also includes the position identifier class. /// public class PositionIdentifier : AbstractRosettaModelObject, IIdentifier { private static readonly IRosettaMetaData metaData = new PositionIdentifierMeta(); [JsonConstructor] public PositionIdentifier(Enums.TradeIdentifierType? identifierType, ReferenceWithMetaParty? issuerReference, FieldWithMetaString? issuer, IEnumerable assignedIdentifier, _MetaFields? meta) { IdentifierType = identifierType; IssuerReference = issuerReference; Issuer = issuer; AssignedIdentifier = assignedIdentifier; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The enumerated classification of the identifier. Optional as a position identifier may be party-specific, in which case it may not correspond to any established classification. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TradeIdentifierType? IdentifierType { get; } /// public ReferenceWithMetaParty? IssuerReference { get; } /// public FieldWithMetaString? Issuer { get; } /// public IEnumerable AssignedIdentifier { get; } public _MetaFields? Meta { get; } } /// /// This class corresponds to the FpML Premium.model group for representing the option premium when expressed in a way other than an amount. /// public class PremiumExpression : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PremiumExpressionMeta(); [JsonConstructor] public PremiumExpression(Enums.PremiumType? premiumType, Money? pricePerOption, decimal? percentageOfNotional) { PremiumType = premiumType; PricePerOption = pricePerOption; PercentageOfNotional = percentageOfNotional; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Forward start premium type /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PremiumType? PremiumType { get; } /// /// The amount of premium to be paid expressed as a function of the number of options. /// public Money? PricePerOption { get; } /// /// The amount of premium to be paid expressed as a percentage of the notional value of the transaction. A percentage of 5% would be expressed as 0.05. /// public decimal? PercentageOfNotional { get; } } public class Pric : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PricMeta(); [JsonConstructor] public Pric(Pric pric, string bsisPts) { PricValue = pric; BsisPts = bsisPts; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; [JsonProperty(PropertyName = "pric")] public Pric PricValue { get; } public string BsisPts { get; } } /// /// Specifies a price as a single value to be associated to a financial product. This data type extends PriceSchedule and requires that only the amount value exists. /// public class Price : AbstractRosettaModelObject, IPriceSchedule { private static readonly IRosettaMetaData metaData = new PriceMeta(); [JsonConstructor] public Price(UnitType? perUnitOf, Enums.PriceType priceType, Enums.PriceExpression? priceExpression, PriceComposite? composite, Enums.ArithmeticOperation? arithmeticOperator, CashPrice? cashPrice, IEnumerable datedValue, decimal? value, UnitType? unit) { PerUnitOf = perUnitOf; PriceType = priceType; PriceExpression = priceExpression; Composite = composite; ArithmeticOperator = arithmeticOperator; CashPrice = cashPrice; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public UnitType? PerUnitOf { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceType PriceType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceExpression? PriceExpression { get; } /// public PriceComposite? Composite { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ArithmeticOperation? ArithmeticOperator { get; } /// public CashPrice? CashPrice { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// Defines the inputs required to calculate a price as a simple composite of 2 other values. The inputs consist of 2 numbers and a simple arithmetic operator. This generic data type applies to a variety of use cases where a price is obtained by simple composition, e.g. dirty = clean + accrued (Bond), forward rate = spot rate + forward point (FX) etc. /// public class PriceComposite : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PriceCompositeMeta(); [JsonConstructor] public PriceComposite(decimal baseValue, decimal operand, Enums.ArithmeticOperation arithmeticOperator, Enums.PriceOperand? operandType) { BaseValue = baseValue; Operand = operand; ArithmeticOperator = arithmeticOperator; OperandType = operandType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The 1st value in the arithmetic operation, which may be non-commutative in some cases: Subtract, Divide). This 1st operand is called 'baseValue' as it refers to the price anchor in the arithmetic operation: e.g. the clean price (Bond) or the spot rate (FX). /// public decimal BaseValue { get; } /// /// The 2nd value in the arithmetic operation, which may be non-commutative in some cases: Subtract, Divide). The 2nd operand is called 'operand' to distinguish it from the 1st one which is the price anchor. /// public decimal Operand { get; } /// /// Specifies the arithmetic operator via an enumeration. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ArithmeticOperation ArithmeticOperator { get; } /// /// Optionally qualifies the type of operand: e.g. accrued or forward point. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceOperand? OperandType { get; } } /// /// Defines a settlement as an exchange between two parties of a specified quantity of an asset (the quantity) against a specified quantity of another asset (the price). The settlement is optional and can be either cash or physical. In the case of non-cash products, the settlement of the price/quantity would not be specified here and instead would be delegated to the product mechanics, as parameterised by the price/quantity values. /// public class PriceQuantity : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PriceQuantityMeta(); [JsonConstructor] public PriceQuantity(IEnumerable price, IEnumerable quantity, Observable? observable, BuyerSeller? buyerSeller, SettlementTerms? settlementTerms, AdjustableOrRelativeDate? effectiveDate, _MetaFields? meta) { Price = price; Quantity = quantity; Observable = observable; BuyerSeller = buyerSeller; SettlementTerms = settlementTerms; EffectiveDate = effectiveDate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a price to be used for trade amounts and other purposes. /// public IEnumerable Price { get; } /// /// Specifies a quantity to be associated with an event, for example a trade amount. /// public IEnumerable Quantity { get; } /// /// Specifies the object to be observed for a price, it could be an asset or a reference. The cardinality is optional as some quantity / price cases have no observable (e.g. a notional and a fixed rate in a given currency). /// public Observable? Observable { get; } /// /// Defines the direction of the exchange. The convention is that the buyer receives the quantity / pays the price, whereas the seller receives the price / pays the quantity. Attribute is optional in case the price/quantity settlement is defined as part of the product mechanics. /// public BuyerSeller? BuyerSeller { get; } /// /// Whether the settlement is cash or physical and the corresponding terms. Attribute is optional in case the price/quantity settlement is defined as part of the product mechanics. /// public SettlementTerms? SettlementTerms { get; } /// /// Specifies the date at which the price and quantity become effective. This day may be subject to adjustment in accordance with a business day convention, or could be specified as relative to a trade date, for instance. Optional cardinality, as the effective date is usually specified in the product definition, so it may only need to be specified as part of the PriceQuantity in an increase/decrease scenario for an existing trade. /// public AdjustableOrRelativeDate? EffectiveDate { get; } public _MetaFields? Meta { get; } } public class PriceReturnTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PriceReturnTermsMeta(); [JsonConstructor] public PriceReturnTerms(PriceSchedule? valuationPriceInitial, PriceSchedule? valuationPriceFinal, Enums.ReturnType returnType, decimal? conversionFactor, string? performance) { ValuationPriceInitial = valuationPriceInitial; ValuationPriceFinal = valuationPriceFinal; ReturnType = returnType; ConversionFactor = conversionFactor; Performance = performance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the initial valuation price(s) of the underlier. This price can be expressed either as an actual amount/currency, as a determination method, or by reference to another value specified in the swap document. /// public PriceSchedule? ValuationPriceInitial { get; } /// /// 2018 ISDA CDM Equity Confirmation for Security Equity Swap: Final Price | Specifies the final valuation price of the underlier. This price can be expressed either as an actual amount/currency, as a determination method, or by reference to another value specified in the swap document. /// public PriceSchedule? ValuationPriceFinal { get; } /// /// The type of return associated with the equity swap. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ReturnType ReturnType { get; } /// /// Defines the conversion applied if the quantity unit on contract is different from unit on referenced underlier. /// public decimal? ConversionFactor { get; } /// /// Performance calculation, in accordance with Part 1 Section 12 of the 2018 ISDA CDM Equity Confirmation for Security Equity Swap, Para 75. 'Equity Performance'. Cumulative performance is used as a notional multiplier factor on both legs of an Equity Swap. /// public string? Performance { get; } } /// /// Specifies the price of a financial instrument in a trade as a schedule of measures. A price generically expresses the value of an exchange as a ratio: it measures the amount of one thing needed to be exchanged for 1 unit of another thing (e.g. cash in a specific currency in exchange for a bond or share). This generic representation can be used to support any type of financial price beyond just cash price: e.g. an interest rate, a foreign exchange rate, etc. This data type is generically based on a schedule and can also be used to represent a price as a single value. /// public class PriceSchedule : AbstractRosettaModelObject, IPriceSchedule, IMeasureSchedule { private static readonly IRosettaMetaData metaData = new PriceScheduleMeta(); [JsonConstructor] public PriceSchedule(UnitType? perUnitOf, Enums.PriceType priceType, Enums.PriceExpression? priceExpression, PriceComposite? composite, Enums.ArithmeticOperation? arithmeticOperator, CashPrice? cashPrice, IEnumerable datedValue, decimal? value, UnitType? unit) { PerUnitOf = perUnitOf; PriceType = priceType; PriceExpression = priceExpression; Composite = composite; ArithmeticOperator = arithmeticOperator; CashPrice = cashPrice; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public UnitType? PerUnitOf { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceType PriceType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceExpression? PriceExpression { get; } /// public PriceComposite? Composite { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ArithmeticOperation? ArithmeticOperator { get; } /// public CashPrice? CashPrice { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// Specifies a publication that provides the commodity price, including, where applicable, the details of where in the publication the price is published. /// public class PriceSource : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PriceSourceMeta(); [JsonConstructor] public PriceSource(FieldWithMetaString pricePublisher, string? priceSourceLocation, string? priceSourceHeading, LocalTime? priceSourceTime) { PricePublisher = pricePublisher; PriceSourceLocation = priceSourceLocation; PriceSourceHeading = priceSourceHeading; PriceSourceTime = priceSourceTime; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines a publication in which the price can be found. (e.g Gas Daily, Platts Bloomberg. Commodity publishers can be found at this URL: http://www.fpml.org/coding-scheme/commodity-information-provider> /// public FieldWithMetaString PricePublisher { get; } /// /// Specifies the location of the price which may be a specific page, electornic screen name, or a code (e.g. a RIC code) where the price can be found. /// public string? PriceSourceLocation { get; } /// /// Specifies the heading or field name for the price on a given page or screen, where applicable. /// public string? PriceSourceHeading { get; } /// /// Specifies the time at which the price should be observed. /// public LocalTime? PriceSourceTime { get; } } /// /// A data defining: the parameters used to get a price quote to replace the settlement rate option that is disrupted. /// public class PriceSourceDisruption : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PriceSourceDisruptionMeta(); [JsonConstructor] public PriceSourceDisruption(FallbackReferencePrice fallbackReferencePrice) { FallbackReferencePrice = fallbackReferencePrice; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The method, prioritised by the order it is listed in this element, to get a replacement rate for the disrupted settlement rate option. /// public FallbackReferencePrice FallbackReferencePrice { get; } } /// /// Specifies specific dates or parametric rules for the dates on which the price will be determined /// public class PricingDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PricingDatesMeta(); [JsonConstructor] public PricingDates(IEnumerable specifiedDates, ParametricDates? parametricDates) { SpecifiedDates = specifiedDates; ParametricDates = parametricDates; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines specified dates on which the price will be determined. /// public IEnumerable SpecifiedDates { get; } /// /// Defines rules for the dates on which the price will be determined. /// public ParametricDates? ParametricDates { get; } } /// /// A Primitive Instruction describes the inputs required to pass into the corresponding PrimitiveEvent function. /// public class PrimitiveInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PrimitiveInstructionMeta(); [JsonConstructor] public PrimitiveInstruction(ContractFormationInstruction? contractFormation, ExecutionInstruction? execution, ExerciseInstruction? exercise, PartyChangeInstruction? partyChange, QuantityChangeInstruction? quantityChange, ResetInstruction? reset, SplitInstruction? split, TermsChangeInstruction? termsChange, TransferInstruction? transfer, IndexTransitionInstruction? indexTransition, StockSplitInstruction? stockSplit, ObservationInstruction? observation) { ContractFormation = contractFormation; Execution = execution; Exercise = exercise; PartyChange = partyChange; QuantityChange = quantityChange; Reset = reset; Split = split; TermsChange = termsChange; Transfer = transfer; IndexTransition = indexTransition; StockSplit = stockSplit; Observation = observation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies instructions describing an contract formation primitive event. /// public ContractFormationInstruction? ContractFormation { get; } /// /// Specifies instructions describing an execution primitive event. /// public ExecutionInstruction? Execution { get; } /// /// Specifies instructions describing an exercise primitive event. /// public ExerciseInstruction? Exercise { get; } /// /// Specifies instructions describing a party change primitive event. /// public PartyChangeInstruction? PartyChange { get; } /// /// Specifies instructions describing an quantity change primitive event. /// public QuantityChangeInstruction? QuantityChange { get; } /// /// Specifies instructions describing a reset event. /// public ResetInstruction? Reset { get; } /// /// Specifies instructions to split a trade into multiple branches. /// public SplitInstruction? Split { get; } /// /// Specifies instructions describing a terms change primitive event. /// public TermsChangeInstruction? TermsChange { get; } /// /// Specifies instructions describing a transfer primitive event. /// public TransferInstruction? Transfer { get; } /// /// Specifies inputs needed to process a Index Transition business event. /// public IndexTransitionInstruction? IndexTransition { get; } /// /// Specifies inputs needed to process a Stock Split business event. /// public StockSplitInstruction? StockSplit { get; } /// /// Specifies inputs needed to process an observation. /// public ObservationInstruction? Observation { get; } } /// /// Any kind of principal payments when the amount is known and thus fixed. /// public class PrincipalPayment : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PrincipalPaymentMeta(); [JsonConstructor] public PrincipalPayment(AdjustableDate? principalPaymentDate, PayerReceiver? payerReceiver, Money? principalAmount, decimal? discountFactor, Money? presentValuePrincipalAmount, _MetaFields? meta) { PrincipalPaymentDate = principalPaymentDate; PayerReceiver = payerReceiver; PrincipalAmount = principalAmount; DiscountFactor = discountFactor; PresentValuePrincipalAmount = presentValuePrincipalAmount; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The date where the PrincipalPayment shall be settled. /// public AdjustableDate? PrincipalPaymentDate { get; } /// /// Specifies the parties responsible for making and receiving payments defined by this structure. /// public PayerReceiver? PayerReceiver { get; } /// /// When known at the time the transaction is made, the cash amount to be paid. /// public Money? PrincipalAmount { get; } /// /// The value representing the discount factor used to calculate the present value of the principal payment amount. /// public decimal? DiscountFactor { get; } /// /// The amount representing the present value of the principal payment. /// public Money? PresentValuePrincipalAmount { get; } public _MetaFields? Meta { get; } } /// /// Describe dates schedules for Principal Exchanges and related role of the parties when known. /// public class PrincipalPaymentSchedule : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PrincipalPaymentScheduleMeta(); [JsonConstructor] public PrincipalPaymentSchedule(PrincipalPayment? initialPrincipalPayment, AdjustableRelativeOrPeriodicDates? intermediatePrincipalPayment, PrincipalPayment? finalPrincipalPayment) { InitialPrincipalPayment = initialPrincipalPayment; IntermediatePrincipalPayment = intermediatePrincipalPayment; FinalPrincipalPayment = finalPrincipalPayment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Principal Payment made at Trade inception. /// public PrincipalPayment? InitialPrincipalPayment { get; } /// /// Principal Payment as part of the Trade lifecycle e.g. as part of notional reset adjustements in a Cross Currency Swap with a varying notional leg. /// public AdjustableRelativeOrPeriodicDates? IntermediatePrincipalPayment { get; } /// /// Principal Payment at Trade maturity /// public PrincipalPayment? FinalPrincipalPayment { get; } } /// /// A class defining which principal exchanges occur for the stream. /// public class PrincipalPayments : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PrincipalPaymentsMeta(); [JsonConstructor] public PrincipalPayments(bool initialPayment, bool finalPayment, bool intermediatePayment, IEnumerable varyingLegNotionalCurrency, PrincipalPaymentSchedule? principalPaymentSchedule, _MetaFields? meta) { InitialPayment = initialPayment; FinalPayment = finalPayment; IntermediatePayment = intermediatePayment; VaryingLegNotionalCurrency = varyingLegNotionalCurrency; PrincipalPaymentSchedule = principalPaymentSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A true/false flag to indicate whether there is an initial exchange of principal on the effective date. /// public bool InitialPayment { get; } /// /// A true/false flag to indicate whether there is a final exchange of principal on the termination date. /// public bool FinalPayment { get; } /// /// A true/false flag to indicate whether there are intermediate or interim exchanges of principal during the term of the swap. /// public bool IntermediatePayment { get; } /// /// Indicate the Payout legs which nominal amount may vary in regards of FX Fixing dates as determined in the product terms. /// public IEnumerable VaryingLegNotionalCurrency { get; } /// /// Describe dates schedules for Principal Exchanges and related role of the parties when known. /// public PrincipalPaymentSchedule? PrincipalPaymentSchedule { get; } public _MetaFields? Meta { get; } } /// /// Defines the product that is the subject of a tradable product definition, an underlying product definition, a physical exercise, a position, or other purposes. /// public class Product : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ProductMeta(); [JsonConstructor] public Product(ContractualProduct? contractualProduct, Index? index, Loan? loan, AssetPool? assetPool, ForeignExchange? foreignExchange, ReferenceWithMetaCommodity? commodity, Security? security, Basket? basket, _MetaFields? meta) { ContractualProduct = contractualProduct; Index = index; Loan = loan; AssetPool = assetPool; ForeignExchange = foreignExchange; Commodity = commodity; Security = security; Basket = basket; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the contractual product's economic terms, product identifier, and product taxonomy. /// public ContractualProduct? ContractualProduct { get; } /// /// Identifies an index by referencing a product identifier. /// public Index? Index { get; } /// /// Identifies a loan by referencing a product identifier and an optional set of attributes. /// public Loan? Loan { get; } /// /// Identifies an asset pool product for defining pool of assets backing an asset backed security. /// public AssetPool? AssetPool { get; } /// /// Defines a foreign exchange spot or forward transaction. /// public ForeignExchange? ForeignExchange { get; } /// /// Identifies a commodity by referencing a product identifier. /// public ReferenceWithMetaCommodity? Commodity { get; } /// /// Identifies a security by referencing a product identifier and a security type, plus an optional set of attributes. /// public Security? Security { get; } /// /// Identifies a custom basket by referencing a product identifier and its constituents. /// public Basket? Basket { get; } public _MetaFields? Meta { get; } } /// /// Serves as an abstract class to specify a product using a productIdentifier. /// public class ProductBase : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new ProductBaseMeta(); [JsonConstructor] public ProductBase(IEnumerable productTaxonomy, IEnumerable productIdentifier) { ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// Comprises an identifier and a source. The associated metadata key denotes the ability to associate a hash value to the ProductIdentifier instantiations for the purpose of model cross-referencing, in support of functionality such as the event effect and the lineage. /// public class ProductIdentifier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ProductIdentifierMeta(); [JsonConstructor] public ProductIdentifier(FieldWithMetaString identifier, Enums.ProductIdType source, _MetaFields? meta) { Identifier = identifier; Source = source; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Provides an identifier associated with a specific product. The identifier is unique within the public source specified in the source attribute. /// public FieldWithMetaString Identifier { get; } /// /// Defines the source of the identifier. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ProductIdType Source { get; } public _MetaFields? Meta { get; } } /// /// Specifies the product taxonomy, which is composed of a taxonomy value and a taxonomy source. /// public class ProductTaxonomy : AbstractRosettaModelObject, ITaxonomy { private static readonly IRosettaMetaData metaData = new ProductTaxonomyMeta(); [JsonConstructor] public ProductTaxonomy(FieldWithMetaAssetClassEnum? primaryAssetClass, IEnumerable secondaryAssetClass, string? productQualifier, Enums.TaxonomySource? source, TaxonomyValue? value) { PrimaryAssetClass = primaryAssetClass; SecondaryAssetClass = secondaryAssetClass; ProductQualifier = productQualifier; Source = source; Value = value; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Classifies the most important risk class of the trade. /// public FieldWithMetaAssetClassEnum? PrimaryAssetClass { get; } /// /// Classifies additional risk classes of the trade, if any. /// public IEnumerable SecondaryAssetClass { get; } /// /// Derived from the product payout features using a CDM product qualification function that determines the product type based on the product payout features. /// public string? ProductQualifier { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TaxonomySource? Source { get; } /// public TaxonomyValue? Value { get; } } /// /// A class to specify the terms for calculating a payout to protect the buyer of the swap in the case of a qualified credit event. These terms include the applicable credit events, the reference obligation, and in the case of a CDS on mortgage-backed securities, the floatingAmountEvents. /// public class ProtectionTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ProtectionTermsMeta(); [JsonConstructor] public ProtectionTerms(CreditEvents? creditEvents, Obligations? obligations, FloatingAmountEvents? floatingAmountEvents, _MetaFields? meta) { CreditEvents = creditEvents; Obligations = obligations; FloatingAmountEvents = floatingAmountEvents; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the applicable Credit Events that would trigger a settlement, as specified in the related Confirmation and defined in the ISDA 2014 Credit Definition article IV section 4.1. /// public CreditEvents? CreditEvents { get; } /// /// The underlying obligations of the reference entity on which you are buying or selling protection. The credit events Failure to Pay, Obligation Acceleration, Obligation Default, Restructuring, Repudiation/Moratorium are defined with respect to these obligations. /// public Obligations? Obligations { get; } /// /// This element contains the ISDA terms relating to the floating rate payment events and the implied additional fixed payments, applicable to the credit derivatives transactions on mortgage-backed securities with pay-as-you-go or physical settlement. /// public FloatingAmountEvents? FloatingAmountEvents { get; } public _MetaFields? Meta { get; } } public class Prsn : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PrsnMeta(); [JsonConstructor] public Prsn(string ctryOfBrnch, Othr othr) { CtryOfBrnch = ctryOfBrnch; Othr = othr; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string CtryOfBrnch { get; } public Othr Othr { get; } } public class PubliclyAvailableInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new PubliclyAvailableInformationMeta(); [JsonConstructor] public PubliclyAvailableInformation(bool? standardPublicSources, IEnumerable publicSource, int? specifiedNumber) { StandardPublicSources = standardPublicSources; PublicSource = publicSource; SpecifiedNumber = specifiedNumber; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// If this element is specified and set to 'true', indicates that ISDA defined Standard Public Sources are applicable. /// public bool? StandardPublicSources { get; } /// /// A public information source, e.g. a particular newspaper or electronic news service, that may publish relevant information used in the determination of whether or not a credit event has occurred. ISDA 2003 Term: Public Source. /// public IEnumerable PublicSource { get; } /// /// The minimum number of the specified public information sources that must publish information that reasonably confirms that a credit event has occurred. The market convention is two. ISDA 2003 Term: Specified Number. /// public int? SpecifiedNumber { get; } } public class Qty : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new QtyMeta(); [JsonConstructor] public Qty(string unit) { Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string Unit { get; } } /// /// Specifies a quantity as a single value to be associated to a financial product, for example a transfer amount resulting from a trade. This data type extends QuantitySchedule and requires that only the single amount value exists. /// public class Quantity : AbstractRosettaModelObject, IQuantity, IQuantitySchedule { private static readonly IRosettaMetaData metaData = new QuantityMeta(); [JsonConstructor] public Quantity(Measure? multiplier, Frequency? frequency, IEnumerable datedValue, decimal? value, UnitType? unit) { Multiplier = multiplier; Frequency = frequency; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public Measure? Multiplier { get; } /// public Frequency? Frequency { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// Instructions required to create a Quantity Change Primitive Event, which can be either an increase, a decrease or a replacement. An increase adds a new trade lot to the original trade, whereas a decrease subtracts from an existing trade lot's quantity. A replacement updates the quantity of an existing trade lot to the new value. /// public class QuantityChangeInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new QuantityChangeInstructionMeta(); [JsonConstructor] public QuantityChangeInstruction(IEnumerable change, Enums.QuantityChangeDirection direction, IEnumerable lotIdentifier) { Change = change; Direction = direction; LotIdentifier = lotIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Quantity by which the trade is being increased, decreased or replaced, and the price at which such quantity change is agreed. The quantity change should always be specified as a positive number, with the direction (increase/decrease/replacement) being specified by the direction enumeration. A fee can also be associated to the quantity change by specifying a Price component of type CashPrice, including the corresponding settlement date and direction. /// public IEnumerable Change { get; } /// /// Direction of the quantity change specified as either an increase, decrease or replacement. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuantityChangeDirection Direction { get; } /// /// Identifier for the new lot (in case of increase) or for the existing lot to be changed(in case of decrease or replacement). This optional attribute is mandatory in case of a decrease or replacement if the initial trade state contains multiple trade lots. /// public IEnumerable LotIdentifier { get; } } /// /// Class to specify a mechanism for a quantity to be set as a multiplier to another (reference) quantity, based on a price observation. At the moment this class only supports FX or Equity-linked notional and re-uses existing building blocks for those 2 cases, until such time when component can be made more generic. This captures the case of resetting cross-currency swaps and resetting equity swaps. /// public class QuantityMultiplier : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new QuantityMultiplierMeta(); [JsonConstructor] public QuantityMultiplier(FxLinkedNotionalSchedule? fxLinkedNotionalSchedule, decimal? multiplierValue) { FxLinkedNotionalSchedule = fxLinkedNotionalSchedule; MultiplierValue = multiplierValue; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Multiplier specified as an FX-linked schedule, e.g. for a resetting cross-currency swap.. /// public FxLinkedNotionalSchedule? FxLinkedNotionalSchedule { get; } public decimal? MultiplierValue { get; } } /// /// Specifies a quantity schedule to be associated to a financial product to represent a trade amount. This data type extends MeasureSchedule with several unit or multiplier attributes that are used to define financial quantities. This data type is generically based on a schedule and can also be used to represent a quantity as a single value. /// public class QuantitySchedule : AbstractRosettaModelObject, IQuantitySchedule, IMeasureSchedule { private static readonly IRosettaMetaData metaData = new QuantityScheduleMeta(); [JsonConstructor] public QuantitySchedule(Measure? multiplier, Frequency? frequency, IEnumerable datedValue, decimal? value, UnitType? unit) { Multiplier = multiplier; Frequency = frequency; DatedValue = datedValue; Value = value; Unit = unit; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public Measure? Multiplier { get; } /// public Frequency? Frequency { get; } /// public IEnumerable DatedValue { get; } /// public decimal? Value { get; } /// public UnitType? Unit { get; } } /// /// Determines the currency rate that the seller of the equity amounts will apply at each valuation date for converting the respective amounts into a currency that is different from the currency denomination of the underlier. /// public class Quanto : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new QuantoMeta(); [JsonConstructor] public Quanto(IEnumerable fxRate, FxSpotRateSource? fxSpotRateSource, BusinessCenterTime? fixingTime) { FxRate = fxRate; FxSpotRateSource = fxSpotRateSource; FixingTime = fixingTime; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a currency conversion rate. /// public IEnumerable FxRate { get; } /// /// Specifies the methodology (reference source and, optionally, fixing time) to be used for determining a currency conversion rate. /// public FxSpotRateSource? FxSpotRateSource { get; } /// /// The time at which the spot currency exchange rate will be observed. It is specified as a time in a business day calendar location, e.g. 11:00am London time. /// public BusinessCenterTime? FixingTime { get; } } /// /// Represents a class to allow specification of different types of Quasi Government collateral. /// public class QuasiGovernmentIssuerType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new QuasiGovernmentIssuerTypeMeta(); [JsonConstructor] public QuasiGovernmentIssuerType(bool sovereignEntity, bool? sovereignRecourse) { SovereignEntity = sovereignEntity; SovereignRecourse = sovereignRecourse; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// True if sovereign entity (e.g. not separate legal personality from sovereign) or false if non-sovereign entity (e.g. separate legal personality from sovereign). /// public bool SovereignEntity { get; } /// /// Applies to non-sovereign entity (e.g. separate legal personality from sovereign). True if entity has recourse to sovereign (e.g. debt guaranteed by government). False if entity does not have recourse to sovereign. /// public bool? SovereignRecourse { get; } } /// /// A class that describes the composition of a rate that has been quoted or is to be quoted. This includes the two currencies and the quotation relationship between the two currencies and is used as a building block throughout the FX specification. /// public class QuotedCurrencyPair : AbstractRosettaModelObject, IQuotedCurrencyPair { private static readonly IRosettaMetaData metaData = new QuotedCurrencyPairMeta(); [JsonConstructor] public QuotedCurrencyPair(FieldWithMetaString currency1, FieldWithMetaString currency2, Enums.QuoteBasis quoteBasis) { Currency1 = currency1; Currency2 = currency2; QuoteBasis = quoteBasis; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public FieldWithMetaString Currency1 { get; } /// public FieldWithMetaString Currency2 { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuoteBasis QuoteBasis { get; } } /// /// A class defining parameters associated with an individual observation or fixing. This class forms part of the cashflow representation of a stream. /// public class RateObservation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RateObservationMeta(); [JsonConstructor] public RateObservation(LocalDate? resetDate, LocalDate? adjustedFixingDate, decimal? observedRate, decimal? treatedRate, int? observationWeight, ReferenceWithMetaRateObservation? rateReference, decimal? forecastRate, decimal? treatedForecastRate, _MetaFields? meta) { ResetDate = resetDate; AdjustedFixingDate = adjustedFixingDate; ObservedRate = observedRate; TreatedRate = treatedRate; ObservationWeight = observationWeight; RateReference = rateReference; ForecastRate = forecastRate; TreatedForecastRate = treatedForecastRate; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The reset date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? ResetDate { get; } /// /// The adjusted fixing date, i.e. the actual date the rate is observed. The date should already be adjusted for any applicable business day convention. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedFixingDate { get; } /// /// The actual observed rate before any required rate treatment is applied, e.g. before converting a rate quoted on a discount basis to an equivalent yield. An observed rate of 5% would be represented as 0.05. /// public decimal? ObservedRate { get; } /// /// The observed rate after any required rate treatment is applied. A treated rate of 5% would be represented as 0.05. /// public decimal? TreatedRate { get; } /// /// The number of days weighting to be associated with the rate observation, i.e. the number of days such rate is in effect. This is applicable in the case of a weighted average method of calculation where more than one reset date is established for a single calculation period. /// public int? ObservationWeight { get; } /// /// A pointer style reference to a floating rate component defined as part of a stub calculation period amount component. It is only required when it is necessary to distinguish two rate observations for the same fixing date which could occur when linear interpolation of two different rates occurs for a stub calculation period. /// public ReferenceWithMetaRateObservation? RateReference { get; } /// /// The value representing the forecast rate used to calculate the forecast future value of the accrual period.A value of 1% should be represented as 0.01. /// public decimal? ForecastRate { get; } /// /// The value representing the forecast rate after applying rate treatment rules. A value of 1% should be represented as 0.01. /// public decimal? TreatedForecastRate { get; } public _MetaFields? Meta { get; } } /// /// A class defining a schedule of rates or amounts in terms of an initial value and then a series of step date and value pairs. On each step date the rate or amount changes to the new step value. The series of step date and value pairs are optional. If not specified, this implies that the initial value remains unchanged over time. /// public class RateSchedule : AbstractRosettaModelObject, IRateSchedule { private static readonly IRosettaMetaData metaData = new RateScheduleMeta(); [JsonConstructor] public RateSchedule(ReferenceWithMetaPriceSchedule price) { Price = price; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public ReferenceWithMetaPriceSchedule Price { get; } } /// /// A class to specify the fixed interest rate, floating interest rate or inflation rate. /// public class RateSpecification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RateSpecificationMeta(); [JsonConstructor] public RateSpecification(FixedRateSpecification? fixedRate, FloatingRateSpecification? floatingRate, InflationRateSpecification? inflationRate) { FixedRate = fixedRate; FloatingRate = floatingRate; InflationRate = inflationRate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The fixed rate or fixed rate specification expressed as explicit fixed rates and dates. /// public FixedRateSpecification? FixedRate { get; } /// /// The floating interest rate specification, which includes the definition of the floating rate index. the tenor, the initial value, and, when applicable, the spread, the rounding convention, the averaging method and the negative interest rate treatment. /// public FloatingRateSpecification? FloatingRate { get; } /// /// An inflation rate calculation definition. /// public InflationRateSpecification? InflationRate { get; } } public class RefRate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RefRateMeta(); [JsonConstructor] public RefRate(string indx, string nm) { Indx = indx; Nm = nm; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string Indx { get; } public string Nm { get; } } /// /// A class to describe an institution (party) identified by means of a coding scheme and an optional name. /// public class ReferenceBank : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferenceBankMeta(); [JsonConstructor] public ReferenceBank(FieldWithMetaString referenceBankId, string? referenceBankName) { ReferenceBankId = referenceBankId; ReferenceBankName = referenceBankName; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An institution (party) identifier, e.g. a bank identifier code (BIC). FpML specifies a referenceBankIdScheme. /// public FieldWithMetaString ReferenceBankId { get; } /// /// The name of the institution (party). A free format string. FpML does not define usage rules for the element. /// public string? ReferenceBankName { get; } } /// /// A class defining the list of reference institutions polled for relevant rates or prices when determining the cash settlement amount for a product where cash settlement is applicable. /// public class ReferenceBanks : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferenceBanksMeta(); [JsonConstructor] public ReferenceBanks(IEnumerable referenceBank) { ReferenceBank = referenceBank; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An institution (party) identified by means of a coding scheme and an optional name. /// public IEnumerable ReferenceBank { get; } } /// /// A class specifying the Credit Default Swap Reference Information. /// public class ReferenceInformation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferenceInformationMeta(); [JsonConstructor] public ReferenceInformation(LegalEntity referenceEntity, IEnumerable referenceObligation, bool? noReferenceObligation, bool? unknownReferenceObligation, bool? allGuarantees, Price? referencePrice, bool? referencePolicy, bool? securedList) { ReferenceEntity = referenceEntity; ReferenceObligation = referenceObligation; NoReferenceObligation = noReferenceObligation; UnknownReferenceObligation = unknownReferenceObligation; AllGuarantees = allGuarantees; ReferencePrice = referencePrice; ReferencePolicy = referencePolicy; SecuredList = securedList; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The corporate or sovereign entity which is subject to the swap transaction and any successor that assumes all or substantially all of its contractual and other obligations. Reference Entities cannot be senior or subordinated. It is the obligations of the Reference Entities that can be senior or subordinated. ISDA 2014 Credit definitions article II section 2.1: `Reference Entity` means the entity specified as such in the related Confirmation. /// public LegalEntity ReferenceEntity { get; } /// /// The Reference Obligation is a financial instrument that is either issued or guaranteed by the reference entity. It serves to clarify the precise reference entity protection is being offered upon, and its legal position with regard to other related firms (parents/subsidiaries). Furthermore the Reference Obligation is ALWAYS deliverable and establishes the Pari Passu ranking (as the deliverable bonds must rank equal to the reference obligation). ISDA 2003 Term: Reference Obligation. /// public IEnumerable ReferenceObligation { get; } /// /// Used to indicate that there is no Reference Obligation associated with this Credit Default Swap and that there will never be one. /// public bool? NoReferenceObligation { get; } /// /// Used to indicate that the Reference obligation associated with the Credit Default Swap is currently not known. This is not valid for Legal Confirmation purposes, but is valid for earlier stages in the trade life cycle (e.g. Broker Confirmation). /// public bool? UnknownReferenceObligation { get; } /// /// Indicates whether an obligation of the Reference Entity, guaranteed by the Reference Entity on behalf of a non-Affiliate, is to be considered an Obligation for the purpose of the transaction. It will be considered an obligation if allGuarantees is applicable (true) and not if allGuarantees is inapplicable (false). ISDA 2003 Term: All Guarantees. /// public bool? AllGuarantees { get; } /// /// Used to determine (a) for physically settled trades, the Physical Settlement Amount, which equals the Floating Rate Payer Calculation Amount times the Reference Price and (b) for cash settled trades, the Cash Settlement Amount, which equals the greater of (i) the difference between the Reference Price and the Final Price and (ii) zero. ISDA 2003 Term: Reference Price. /// public Price? ReferencePrice { get; } /// /// Applicable to the transactions on mortgage-backed security, which can make use of a reference policy. Presence of the element with value set to 'true' indicates that the reference policy is applicable; absence implies that it is not. /// public bool? ReferencePolicy { get; } /// /// With respect to any day, the list of Syndicated Secured Obligations of the Designated Priority of the Reference Entity published by Markit Group Limited or any successor thereto appointed by the Specified Dealers (the 'Secured List Publisher') on or most recently before such day, which list is currently available at [http://www.markit.com]. ISDA 2003 Term: Relevant Secured List. /// public bool? SecuredList { get; } } /// /// A class to specify the reference obligation that is associated with a credit derivative instrument. /// public class ReferenceObligation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferenceObligationMeta(); [JsonConstructor] public ReferenceObligation(Security? security, Loan? loan, LegalEntity? primaryObligor, ReferenceWithMetaLegalEntity? primaryObligorReference, LegalEntity? guarantor, string? guarantorReference, bool? standardReferenceObligation) { Security = security; Loan = loan; PrimaryObligor = primaryObligor; PrimaryObligorReference = primaryObligorReference; Guarantor = guarantor; GuarantorReference = guarantorReference; StandardReferenceObligation = standardReferenceObligation; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the underlying asset when it is a security, such as a bond or convertible bond. The security data type requires one or more productIdentifiers, specificaiton of the security type (e.g. debt), and includes optional attributes to specify a debt class, such as asset-backed, as well as seniority. /// public Security? Security { get; } /// /// Identifies the underlying asset when it is a loan. /// public Loan? Loan { get; } /// /// The entity primarily responsible for repaying debt to a creditor as a result of borrowing or issuing bonds. ISDA 2003 Term: Primary Obligor. /// public LegalEntity? PrimaryObligor { get; } /// /// A pointer style reference to a reference entity defined elsewhere in the document. Used when the reference entity is the primary obligor. /// public ReferenceWithMetaLegalEntity? PrimaryObligorReference { get; } /// /// The party that guarantees by way of a contractual arrangement to pay the debts of an obligor if the obligor is unable to make the required payments itself. ISDA 2003 Term: Guarantor. /// public LegalEntity? Guarantor { get; } /// /// A pointer style reference to a reference entity defined elsewhere in the document. Used when the reference entity is the guarantor. /// public string? GuarantorReference { get; } /// /// Indicates if the reference obligation is a Standard Reference Obligation. ISDA 2014 Term: Standard Reference Obligation. /// public bool? StandardReferenceObligation { get; } } public class ReferencePair : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferencePairMeta(); [JsonConstructor] public ReferencePair(LegalEntity referenceEntity, ReferenceObligation? referenceObligation, bool? noReferenceObligation, FieldWithMetaEntityTypeEnum entityType) { ReferenceEntity = referenceEntity; ReferenceObligation = referenceObligation; NoReferenceObligation = noReferenceObligation; EntityType = entityType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The corporate or sovereign entity on which you are buying or selling protection and any successor that assumes all or substantially all of its contractual and other obligations. It is vital to use the correct legal name of the entity and to be careful not to choose a subsidiary if you really want to trade protection on a parent company. Please note, Reference Entities cannot be senior or subordinated. It is the obligations of the Reference Entities that can be senior or subordinated. ISDA 2003 Term: Reference Entity. /// public LegalEntity ReferenceEntity { get; } /// /// The Reference Obligation is a financial instrument that is either issued or guaranteed by the reference entity. It serves to clarify the precise reference entity protection is being offered upon, and its legal position with regard to other related firms (parents/subsidiaries). Furthermore the Reference Obligation is ALWAYS deliverable and establishes the Pari Passu ranking (as the deliverable bonds must rank equal to the reference obligation). ISDA 2003 Term: Reference Obligation. /// public ReferenceObligation? ReferenceObligation { get; } /// /// Used to indicate that there is no Reference Obligation associated with this Credit Default Swap and that there will never be one. /// public bool? NoReferenceObligation { get; } /// /// Defines the reference entity types corresponding to a list of types in the ISDA First to Default documentation. /// public FieldWithMetaEntityTypeEnum EntityType { get; } } /// /// This type contains all the reference pool items to define the reference entity and reference obligation(s) in the basket. /// public class ReferencePool : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferencePoolMeta(); [JsonConstructor] public ReferencePool(IEnumerable referencePoolItem) { ReferencePoolItem = referencePoolItem; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// This type contains all the constituent weight and reference information. /// public IEnumerable ReferencePoolItem { get; } } /// /// This type contains all the constituent weight and reference information. /// public class ReferencePoolItem : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferencePoolItemMeta(); [JsonConstructor] public ReferencePoolItem(ConstituentWeight? constituentWeight, ReferencePair referencePair, ReferenceWithMetaProtectionTerms? protectionTermsReference, ReferenceWithMetaCashSettlementTerms? cashSettlementTermsReference, ReferenceWithMetaPhysicalSettlementTerms? physicalSettlementTermsReference) { ConstituentWeight = constituentWeight; ReferencePair = referencePair; ProtectionTermsReference = protectionTermsReference; CashSettlementTermsReference = cashSettlementTermsReference; PhysicalSettlementTermsReference = physicalSettlementTermsReference; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Describes the weight of each of the constituents within the basket. If not provided, it is assumed to be equal weighted. /// public ConstituentWeight? ConstituentWeight { get; } public ReferencePair ReferencePair { get; } /// /// Reference to the documentation terms applicable to this item. /// public ReferenceWithMetaProtectionTerms? ProtectionTermsReference { get; } /// /// Reference to the cash settlement terms applicable to this item. /// public ReferenceWithMetaCashSettlementTerms? CashSettlementTermsReference { get; } /// /// Reference to the physical settlement terms applicable to this item. /// public ReferenceWithMetaPhysicalSettlementTerms? PhysicalSettlementTermsReference { get; } } /// /// A complex type used to specify the option and convertible bond option strike when expressed in reference to a swap curve. /// public class ReferenceSwapCurve : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReferenceSwapCurveMeta(); [JsonConstructor] public ReferenceSwapCurve(SwapCurveValuation swapUnwindValue, MakeWholeAmount? makeWholeAmount) { SwapUnwindValue = swapUnwindValue; MakeWholeAmount = makeWholeAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public SwapCurveValuation SwapUnwindValue { get; } /// /// Amount to be paid by the buyer of the option if the option is exercised prior to the Early Call Date. (The market practice in the convertible bond option space being that the buyer should be penalised if he/she exercises the option early on.) /// public MakeWholeAmount? MakeWholeAmount { get; } } /// /// Represents a class to allow specification of different type of Regional government collateral. /// public class RegionalGovernmentIssuerType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RegionalGovernmentIssuerTypeMeta(); [JsonConstructor] public RegionalGovernmentIssuerType(bool sovereignRecourse) { SovereignRecourse = sovereignRecourse; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Applies to regional governments, local authorities or municipals. True if entity has recourse to sovereign (e.g. debt guaranteed by government). False if entity does not have recourse to sovereign. /// public bool SovereignRecourse { get; } } public class RelatedParty : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RelatedPartyMeta(); [JsonConstructor] public RelatedParty(ReferenceWithMetaParty partyReference, ReferenceWithMetaAccount? accountReference, Enums.PartyRole role) { PartyReference = partyReference; AccountReference = accountReference; Role = role; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Reference to a party. /// public ReferenceWithMetaParty PartyReference { get; } /// /// Reference to an account. /// public ReferenceWithMetaAccount? AccountReference { get; } /// /// The category of the relationship. The related party performs the role specified in this field for the base party. For example, if the role is ,Guarantor, the related party acts as a guarantor for the base party. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PartyRole Role { get; } } /// /// A class defining a date (referred to as the derived date) as a relative offset from another date (referred to as the anchor date). If the anchor date is itself an adjustable date then the offset is assumed to be calculated from the adjusted anchor date. A number of different scenarios can be supported, namely; 1) the derived date may simply be a number of calendar periods (days, weeks, months or years) preceding or following the anchor date; 2) the unadjusted derived date may be a number of calendar periods (days, weeks, months or years) preceding or following the anchor date with the resulting unadjusted derived date subject to adjustment in accordance with a specified business day convention, i.e. the derived date must fall on a good business day; 3) the derived date may be a number of business days preceding or following the anchor date. Note that the businessDayConvention specifies any required adjustment to the unadjusted derived date. A negative or positive value in the periodMultiplier indicates whether the unadjusted derived precedes or follows the anchor date. The businessDayConvention should contain a value NONE if the day type element contains a value of Business (since specifying a negative or positive business days offset would already guarantee that the derived date would fall on a good business day in the specified business centers). /// public class RelativeDateOffset : AbstractRosettaModelObject, IRelativeDateOffset, IOffset { private static readonly IRosettaMetaData metaData = new RelativeDateOffsetMeta(); [JsonConstructor] public RelativeDateOffset(Enums.BusinessDayConvention businessDayConvention, BusinessCenters? businessCenters, ReferenceWithMetaBusinessCenters? businessCentersReference, BasicReferenceWithMetaLocalDate? dateRelativeTo, LocalDate? adjustedDate, Enums.DayType? dayType, int periodMultiplier, Enums.Period period, _MetaFields? meta) { BusinessDayConvention = businessDayConvention; BusinessCenters = businessCenters; BusinessCentersReference = businessCentersReference; DateRelativeTo = dateRelativeTo; AdjustedDate = adjustedDate; DayType = dayType; PeriodMultiplier = periodMultiplier; PeriodValue = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention BusinessDayConvention { get; } public BusinessCenters? BusinessCenters { get; } /// public ReferenceWithMetaBusinessCenters? BusinessCentersReference { get; } /// public BasicReferenceWithMetaLocalDate? DateRelativeTo { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType? DayType { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "period")] public Enums.Period PeriodValue { get; } public _MetaFields? Meta { get; } } /// /// A class describing a set of dates defined as relative to another set of dates. /// public class RelativeDates : AbstractRosettaModelObject, IRelativeDateOffset { private static readonly IRosettaMetaData metaData = new RelativeDatesMeta(); [JsonConstructor] public RelativeDates(int? periodSkip, DateRange? scheduleBounds, Enums.BusinessDayConvention businessDayConvention, BusinessCenters? businessCenters, ReferenceWithMetaBusinessCenters? businessCentersReference, BasicReferenceWithMetaLocalDate? dateRelativeTo, LocalDate? adjustedDate, Enums.DayType? dayType, int periodMultiplier, Enums.Period period, _MetaFields? meta) { PeriodSkip = periodSkip; ScheduleBounds = scheduleBounds; BusinessDayConvention = businessDayConvention; BusinessCenters = businessCenters; BusinessCentersReference = businessCentersReference; DateRelativeTo = dateRelativeTo; AdjustedDate = adjustedDate; DayType = dayType; PeriodMultiplier = periodMultiplier; PeriodValue = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of periods in the referenced date schedule that are between each date in the relative date schedule. Thus a skip of 2 would mean that dates are relative to every second date in the referenced schedule. If present this should have a value greater than 1. /// public int? PeriodSkip { get; } /// /// The first and last dates of a schedule. This can be used to restrict the range of values in a reference series of dates. /// public DateRange? ScheduleBounds { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.BusinessDayConvention BusinessDayConvention { get; } public BusinessCenters? BusinessCenters { get; } /// public ReferenceWithMetaBusinessCenters? BusinessCentersReference { get; } /// public BasicReferenceWithMetaLocalDate? DateRelativeTo { get; } /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? AdjustedDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DayType? DayType { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "period")] public Enums.Period PeriodValue { get; } public _MetaFields? Meta { get; } } /// /// Bond price relative to a benchmark, as in a convertible bond. /// public class RelativePrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RelativePriceMeta(); [JsonConstructor] public RelativePrice(decimal spread, IEnumerable bondEquityModel) { Spread = spread; BondEquityModel = bondEquityModel; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The spread to a benchmark. /// public decimal Spread { get; } /// /// Bond equity model for convertible bonds. /// public IEnumerable BondEquityModel { get; } } public class Representations : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RepresentationsMeta(); [JsonConstructor] public Representations() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// Defines the reset value or fixing value produced in cashflow calculations, during the life-cycle of a financial instrument. The reset process defined in Create_Reset function joins product definition details with observations to compute the reset value. /// public class Reset : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ResetMeta(); [JsonConstructor] public Reset(Price resetValue, LocalDate resetDate, LocalDate? rateRecordDate, IEnumerable observations, AveragingCalculation? averagingMethodology, _MetaFields? meta) { ResetValue = resetValue; ResetDate = resetDate; RateRecordDate = rateRecordDate; Observations = observations; AveragingMethodology = averagingMethodology; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the reset or fixing value. The fixing value could be a cash price, interest rate, or other value. /// public Price ResetValue { get; } /// /// Specifies the date on which the reset occurred. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate ResetDate { get; } /// /// Specifies the 'Rate Record Day' for a Fallback rate. Fallback rate fixing processes typically set the fixing rate in arrears, i.e., the Fallback Rate corresponding to a Rate Record Date is set at the end of the interest accural period. When this applies, Reset->resetDate occurs at the end of the interest period, and the Reset->rateRecordDate occurs near the start of the interest period. The Reset->rateRecordDate and Reset->observations->observationIdentifier->observationDate will differ if a Fallback rate is unavailable on the Rate Record Date, and the latest previous available rate is used as the observation. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? RateRecordDate { get; } /// /// Represents an audit of the observations used to produce the reset value. If multiple observations were necessary to produce the reset value, the aggregation method should be defined on the payout. /// public IEnumerable Observations { get; } /// /// Identifies the aggregation method to use in the case where multiple observations are used to compute the reset value and the method is not defined in a payout. /// public AveragingCalculation? AveragingMethodology { get; } public _MetaFields? Meta { get; } } /// /// A data defining: the parameters used to generate the reset dates schedule and associated fixing dates. The reset dates are the dates on which the new index value (which is observed on the fixing date) is applied for each period and on which the interest rate hence begins to accrue. /// public class ResetDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ResetDatesMeta(); [JsonConstructor] public ResetDates(ReferenceWithMetaCalculationPeriodDates? calculationPeriodDatesReference, Enums.ResetRelativeTo? resetRelativeTo, InitialFixingDate? initialFixingDate, RelativeDateOffset? fixingDates, AdjustableDate? finalFixingDate, Offset? rateCutOffDaysOffset, ResetFrequency? resetFrequency, BusinessDayAdjustments? resetDatesAdjustments, _MetaFields? meta) { CalculationPeriodDatesReference = calculationPeriodDatesReference; ResetRelativeTo = resetRelativeTo; InitialFixingDate = initialFixingDate; FixingDates = fixingDates; FinalFixingDate = finalFixingDate; RateCutOffDaysOffset = rateCutOffDaysOffset; ResetFrequency = resetFrequency; ResetDatesAdjustments = resetDatesAdjustments; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A pointer style reference to the associated calculation period dates component defined elsewhere in the document. /// public ReferenceWithMetaCalculationPeriodDates? CalculationPeriodDatesReference { get; } /// /// Specifies whether the reset dates are determined with respect to each adjusted calculation period start date or adjusted calculation period end date. If the reset frequency is specified as daily this element must not be included. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ResetRelativeTo? ResetRelativeTo { get; } /// /// The initial fixing date. /// public InitialFixingDate? InitialFixingDate { get; } /// /// The fixing dates are the dates on which the index values are observed. The fixing dates are specified by reference to the reset date through business days offset and an associated set of financial business centers. Normally these offset calculation rules will be those specified in the ISDA definition for the relevant floating rate index (ISDA's Floating Rate Option). However, non-standard offset calculation rules may apply for a trade if mutually agreed by the principal parties to the transaction. /// public RelativeDateOffset? FixingDates { get; } /// /// This attribute is not part of the FpML ResetDate, and has been added as part of the CDM to support the credit derivatives final fixing date. /// public AdjustableDate? FinalFixingDate { get; } /// /// Specifies the number of business days before the period end date when the rate cut-off date is assumed to apply. The financial business centers associated with determining the rate cut-off date are those specified in the reset dates adjustments. The rate cut-off number of days must be a negative integer (a value of zero would imply no rate cut off applies in which case the rateCutOffDaysOffset element should not be included). The relevant rate for each reset date in the period from, and including, a rate cut-off date to, but excluding, the next applicable period end date (or, in the case of the last calculation period, the termination date) will (solely for purposes of calculating the floating amount payable on the next applicable payment date) be deemed to be the relevant rate in effect on that rate cut-off date. For example, if rate cut-off days for a daily averaging deal is -2 business days, then the refix rate applied on (period end date - 2 days) will also be applied as the reset on (period end date - 1 day), i.e. the actual number of reset dates remains the same but from the rate cut-off date until the period end date, the same refix rate is applied. Note that in the case of several calculation periods contributing to a single payment, the rate cut-off is assumed only to apply to the final calculation period contributing to that payment. The day type associated with the offset must imply a business days offset. /// public Offset? RateCutOffDaysOffset { get; } /// /// The frequency at which the reset dates occur. In the case of a weekly reset frequency, also specifies the day of the week that the reset occurs. If the reset frequency is greater than the calculation period frequency then this implies that more than one reset is established for each calculation period and some form of rate averaging is applicable. /// public ResetFrequency? ResetFrequency { get; } /// /// The definition of the business day convention and financial business centers used for adjusting the reset date if it would otherwise fall on a day that is not a business day in the specified business center. /// public BusinessDayAdjustments? ResetDatesAdjustments { get; } public _MetaFields? Meta { get; } } /// /// A class defining the reset frequency. In the case of a weekly reset, also specifies the day of the week that the reset occurs. If the reset frequency is greater than the calculation period frequency the this implies that more or more reset dates is established for each calculation period and some form of rate averaging is applicable. The specific averaging method of calculation is specified in FloatingRateCalculation. In case the reset frequency is of value T (term), the period is defined by the swap/swapStream/calculationPerioDates/effectiveDate and the swap/swapStream/calculationPerioDates/terminationDate. /// public class ResetFrequency : AbstractRosettaModelObject, IFrequency { private static readonly IRosettaMetaData metaData = new ResetFrequencyMeta(); [JsonConstructor] public ResetFrequency(Enums.WeeklyRollConvention? weeklyRollConvention, int periodMultiplier, Enums.PeriodExtended period, _MetaFields? meta) { WeeklyRollConvention = weeklyRollConvention; PeriodMultiplier = periodMultiplier; Period = period; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The day of the week on which a weekly reset date occurs. This element must be included if the reset frequency is defined as weekly and not otherwise. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.WeeklyRollConvention? WeeklyRollConvention { get; } /// public int PeriodMultiplier { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PeriodExtended Period { get; } public _MetaFields? Meta { get; } } /// /// Defines the information needed to create a Reset Business Event. /// public class ResetInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ResetInstructionMeta(); [JsonConstructor] public ResetInstruction(ReferenceWithMetaPayout payout, LocalDate? rateRecordDate, LocalDate resetDate) { Payout = payout; RateRecordDate = rateRecordDate; ResetDate = resetDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public ReferenceWithMetaPayout Payout { get; } /// /// Specifies the 'Rate Record Day' for a Fallback rate. Fallback rate fixing processes typically set the fixing rate in arrears, i.e., the Fallback Rate corresponding to a Rate Record Date is set at the end of the interest accural period. When this applies, Reset->resetDate occurs at the end of the interest period, and the Reset->rateRecordDate occurs near the start of the interest period. The Reset->rateRecordDate and Reset->observations->observationIdentifier->observationDate will differ if a Fallback rate is unavailable on the Rate Record Date, and the latest previous available rate is used as the observation. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? RateRecordDate { get; } /// /// Specifies the date on which the reset is occuring. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate ResetDate { get; } } /// /// Generic class to specify the quantity for different payout legs in a contractual product, when that quantity can vary across payout legs or across time. A resolvable quantity can always be resolved into a single quantity from the quantity notation which has a corresponding asset identifier. In addition to the base case, where quantity is directly specified as a number as part of the quantity notation, the other use cases are: (i) quantity based on some pre-defined schedule (eg amortising notional), (ii) quantity based on some pre-defined events (eg resetting cross-currency notional), or quantity set as reference to another quantity (eg equity notional as no. securities x price). /// public class ResolvablePriceQuantity : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ResolvablePriceQuantityMeta(); [JsonConstructor] public ResolvablePriceQuantity(Quantity? resolvedQuantity, ReferenceWithMetaNonNegativeQuantitySchedule? quantitySchedule, ReferenceWithMetaResolvablePriceQuantity? quantityReference, QuantityMultiplier? quantityMultiplier, bool? reset, FutureValueAmount? futureValueNotional, IEnumerable priceSchedule, _MetaFields? meta) { ResolvedQuantity = resolvedQuantity; QuantitySchedule = quantitySchedule; QuantityReference = quantityReference; QuantityMultiplier = quantityMultiplier; Reset = reset; FutureValueNotional = futureValueNotional; PriceSchedule = priceSchedule; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A product's quantity as a single, non-negative amount. When specified as part of a product definition, this quantity attribute would not be set. Instead it is specified on the quantity notation along with an asset identifier matching this payout's asset identifier. This allows the quantity to be resolved for a payout leg, which can then be specified here for convenience during data processing. There needs to be at least one resolvable quantity across payout legs of a product to define an anchor that other payout quantities can refer to. This attribute is ignored when mapping existing FpML messages. /// public Quantity? ResolvedQuantity { get; } /// /// A payout's quantity specified as a schedule, which may also contain a single value if that quantity is constant. There can only be a single quantity schedule applicable to a payout: e.g. the notional for an interest rate leg. The quantity must be specified outside of the payout in a PriceQuantity object and only referenced inside the payout using an address. /// public ReferenceWithMetaNonNegativeQuantitySchedule? QuantitySchedule { get; } /// /// Reference quantity when resolvable quantity is defined as relative to another (resolvable) quantity. A resolvable quantity needs to contain either an absolute quantity or a reference to another (resolvable) quantity. This requirement is captured by a choice rule on the class. /// public ReferenceWithMetaResolvablePriceQuantity? QuantityReference { get; } /// /// Quantity multiplier is specified on top of a reference quantity and is used as a multiplying factor when resolving the quantity. A quantity multiplier can only exist when the resolvable quantity specifies a reference quantity. /// public QuantityMultiplier? QuantityMultiplier { get; } /// /// Whether the quantity is resettable /// public bool? Reset { get; } /// /// The future value notional is specific to BRL CDI swaps, and is specified alongside the notional amount. The value is calculated as follows: Future Value Notional = Notional Amount * (1 + Fixed Rate) ^ (Fixed Rate Day Count Fraction). The currency should always match that expressed in the notional schedule. The value date should match the adjusted termination date. /// public FutureValueAmount? FutureValueNotional { get; } /// /// A payout's price specified as a schedule, which may also contain a single value if that price is constant. There may be multiple prices specified for a single payout: e.g. a floating interest rate leg may specify a spread, a cap and/or floor and a multiplier. The price must be specified outside of the payout in a PriceQuantity object and only referenced inside the payout using an address. /// public IEnumerable PriceSchedule { get; } public _MetaFields? Meta { get; } } /// /// Describes the resource that contains the media representation of a business event (i.e used for stating the Publicly Available Information). For example, can describe a file or a URL that represents the event. This type is an extended version of a type defined by RIXML (www.rixml.org). Rosetta restricts the FpML implementation by not providing the ability to associated a document in hexadecimalBinary or base64Binary until such time that actual use cases will come up. /// public class Resource : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ResourceMeta(); [JsonConstructor] public Resource(FieldWithMetaString resourceId, FieldWithMetaResourceTypeEnum? resourceType, FieldWithMetaString? language, decimal? sizeInBytes, ResourceLength? length, FieldWithMetaString? mimeType, string? name, string? comments, string? stringValue, string? url) { ResourceId = resourceId; ResourceType = resourceType; Language = language; SizeInBytes = sizeInBytes; Length = length; MimeType = mimeType; Name = name; Comments = comments; String = stringValue; Url = url; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The unique identifier of the resource within the event. FpML specifies this element of type resourceIdScheme but with no specified value. /// public FieldWithMetaString ResourceId { get; } /// /// A description of the type of the resource, e.g. a confirmation. /// public FieldWithMetaResourceTypeEnum? ResourceType { get; } /// /// Indicates the language of the resource, described using the ISO 639-2/T Code. /// public FieldWithMetaString? Language { get; } /// /// Indicates the size of the resource in bytes. It could be used by the end user to estimate the download time and storage needs. /// public decimal? SizeInBytes { get; } /// /// Indicates the length of the resource. For example, if the resource were a PDF file, the length would be in pages. /// public ResourceLength? Length { get; } /// /// Indicates the type of media used to store the content. mimeType is used to determine the software product(s) that can read the content. MIME Types are described in RFC 2046. /// public FieldWithMetaString? MimeType { get; } /// /// The name of the resource. It is specified as a NormalizedString in FpML. /// public string? Name { get; } /// /// Any additional comments that are deemed necessary. For example, which software version is required to open the document? Or, how does this resource relate to the others for this event? /// public string? Comments { get; } /// /// Provides extra information as string. In case the extra information is in XML format, a CDATA section must be placed around the source message to prevent its interpretation as XML content. /// public string? String { get; } /// /// Indicates where the resource can be found, as a URL that references the information on a web server accessible to the message recipient. /// public string? Url { get; } } /// /// A class to indicate the length of the resource. /// public class ResourceLength : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ResourceLengthMeta(); [JsonConstructor] public ResourceLength(Enums.LengthUnit lengthUnit, decimal lengthValue) { LengthUnit = lengthUnit; LengthValue = lengthValue; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The length unit of the resource. For example, pages (pdf, text documents) or time (audio, video files). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.LengthUnit LengthUnit { get; } /// /// The length value of the resource. /// public decimal LengthValue { get; } } public class Restructuring : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RestructuringMeta(); [JsonConstructor] public Restructuring(bool applicable, FieldWithMetaRestructuringEnum? restructuringType, bool? multipleHolderObligation, bool? multipleCreditEventNotices) { Applicable = applicable; RestructuringType = restructuringType; MultipleHolderObligation = multipleHolderObligation; MultipleCreditEventNotices = multipleCreditEventNotices; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether the restructuring provision is applicable. /// public bool Applicable { get; } /// /// Specifies the type of restructuring that is applicable. /// public FieldWithMetaRestructuringEnum? RestructuringType { get; } /// /// In relation to a restructuring credit event, unless multiple holder obligation is not specified restructurings are limited to multiple holder obligations. A multiple holder obligation means an obligation that is held by more than three holders that are not affiliates of each other and where at least two thirds of the holders must agree to the event that constitutes the restructuring credit event. ISDA 2003 Term: Multiple Holder Obligation. /// public bool? MultipleHolderObligation { get; } /// /// Presence of this element and value set to 'true' indicates that Section 3.9 of the 2003 Credit Derivatives Definitions shall apply. Absence of this element indicates that Section 3.9 shall not apply. NOTE: Not allowed under ISDA Credit 1999. /// public bool? MultipleCreditEventNotices { get; } } /// /// A class to specify the application of Interest Amount with respect the Return Amount. /// public class ReturnAmount : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReturnAmountMeta(); [JsonConstructor] public ReturnAmount(bool? includesDefaultLanguage, string? customElection) { IncludesDefaultLanguage = includesDefaultLanguage; CustomElection = customElection; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Default language is included when True, and excluded when False. /// public bool? IncludesDefaultLanguage { get; } /// /// Custom election that might be specified by the parties to the agreement. /// public string? CustomElection { get; } } /// /// Specifies the information required to create the return of a Security Finance Transaction. /// public class ReturnInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReturnInstructionMeta(); [JsonConstructor] public ReturnInstruction(IEnumerable quantity) { Quantity = quantity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the quantity of shares and cash to be returned in a partial return event. /// public IEnumerable Quantity { get; } } /// /// Specifies the type of return of a performance payout. /// public class ReturnTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ReturnTermsMeta(); [JsonConstructor] public ReturnTerms(PriceReturnTerms? priceReturnTerms, DividendReturnTerms? dividendReturnTerms, VarianceReturnTerms? varianceReturnTerms, VolatilityReturnTerms? volatilityReturnTerms, CorrelationReturnTerms? correlationReturnTerms) { PriceReturnTerms = priceReturnTerms; DividendReturnTerms = dividendReturnTerms; VarianceReturnTerms = varianceReturnTerms; VolatilityReturnTerms = volatilityReturnTerms; CorrelationReturnTerms = correlationReturnTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Return terms based upon the underlier's observed price. /// public PriceReturnTerms? PriceReturnTerms { get; } /// /// Return terms based upon dividend payments associated to the underlier. /// public DividendReturnTerms? DividendReturnTerms { get; } /// /// Return terms based upon the observed variance of the underlier's price. /// public VarianceReturnTerms? VarianceReturnTerms { get; } /// /// Return terms based upon the observed volatility of the underlier's price. /// public VolatilityReturnTerms? VolatilityReturnTerms { get; } /// /// Return terms based upon the observed correlation between the components of the underlying basket. /// public CorrelationReturnTerms? CorrelationReturnTerms { get; } } /// /// Contains all common elements in variance, volatility and correlation return Terms. /// public class ReturnTermsBase : AbstractRosettaModelObject, IReturnTermsBase { private static readonly IRosettaMetaData metaData = new ReturnTermsBaseMeta(); [JsonConstructor] public ReturnTermsBase(ValuationTerms valuationTerms, int? annualizationFactor, DividendApplicability? dividendApplicability, EquityUnderlierProvisions? equityUnderlierProvisions, bool? sharePriceDividendAdjustment, int expectedN, decimal? initialLevel, Enums.DeterminationMethod? initialLevelSource, bool? meanAdjustment, string? performance) { ValuationTerms = valuationTerms; AnnualizationFactor = annualizationFactor; DividendApplicability = dividendApplicability; EquityUnderlierProvisions = equityUnderlierProvisions; SharePriceDividendAdjustment = sharePriceDividendAdjustment; ExpectedN = expectedN; InitialLevel = initialLevel; InitialLevelSource = initialLevelSource; MeanAdjustment = meanAdjustment; Performance = performance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public ValuationTerms ValuationTerms { get; } /// public int? AnnualizationFactor { get; } /// public DividendApplicability? DividendApplicability { get; } /// public EquityUnderlierProvisions? EquityUnderlierProvisions { get; } /// public bool? SharePriceDividendAdjustment { get; } /// public int ExpectedN { get; } /// public decimal? InitialLevel { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? InitialLevelSource { get; } /// public bool? MeanAdjustment { get; } /// public string? Performance { get; } } /// /// Used in conjunction with an exchange-based pricing source. Identifies a way in which the futures contracts referenced will roll between periods. /// public class RollFeature : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RollFeatureMeta(); [JsonConstructor] public RollFeature(Enums.RollSourceCalendar? rollSourceCalendar, Offset? deliveryDateRollConvention) { RollSourceCalendar = rollSourceCalendar; DeliveryDateRollConvention = deliveryDateRollConvention; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Used in conjunction with an exchange-based pricing source. Identifies a date source calendar from which the pricing dates and thus roll to the next contract will be based off (e.g. pricing is based on the NYMEX WTI First Nearby Futures Contract, if Future is chosen, the pricing will roll to the next futures contract on expiration, if ListedOption is chosen, the pricing will roll to the next futures contract on the Option expiration date which is three business days before the expiration of the NYMEX WTI futures contract.) Omitting this element will result in the default behavior expected with the pricing source described within the commodity element. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RollSourceCalendar? RollSourceCalendar { get; } /// /// Specifies, for a Commodity Transaction that references a delivery date for a listed future, the day on which the specified future will roll to the next nearby month prior to the expiration of the referenced future. If the future will not roll at all - i.e. the price will be taken from the expiring contract, 0 should be specified here. If the future will roll to the next nearby on the last trading day - i.e. the price will be taken from the next nearby on the last trading day, then 1 should be specified and so on. /// public Offset? DeliveryDateRollConvention { get; } } /// /// Defines rounding rules and precision to be used in the rounding of a number. /// public class Rounding : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new RoundingMeta(); [JsonConstructor] public Rounding(Enums.RoundingDirection roundingDirection, int? precision) { RoundingDirection = roundingDirection; Precision = precision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the rounding rounding rule as up, down, or nearest. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RoundingDirection RoundingDirection { get; } /// /// Specifies the rounding precision in terms of a number of decimal places when the number is evaluated in decimal form (not percentage), e.g. 0.09876543 rounded to the nearest 5 decimal places is 0.0987654. /// public int? Precision { get; } } /// /// A class defining a schedule of rates or amounts in terms of an initial value and then a series of step date and value pairs. On each step date the rate or amount changes to the new step value. The series of step date and value pairs are optional. If not specified, this implies that the initial value remains unchanged over time. /// public class Schedule : AbstractRosettaModelObject, ISchedule { private static readonly IRosettaMetaData metaData = new ScheduleMeta(); [JsonConstructor] public Schedule(decimal value, IEnumerable datedValue) { Value = value; DatedValue = datedValue; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public decimal Value { get; } /// public IEnumerable DatedValue { get; } } /// /// A class that defines the period of a schedule. The period contains a set of start and end dates, quantities, fixing, and pricing data. /// public class SchedulePeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SchedulePeriodMeta(); [JsonConstructor] public SchedulePeriod(DateRange calculationPeriod, LocalDate paymentDate, DateRange fixingPeriod, CalculationScheduleDeliveryPeriods? deliveryPeriod) { CalculationPeriod = calculationPeriod; PaymentDate = paymentDate; FixingPeriod = fixingPeriod; DeliveryPeriod = deliveryPeriod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Period for which the payment is generated. /// public DateRange CalculationPeriod { get; } /// /// Adjusted payment date. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate PaymentDate { get; } /// /// Period over which the underlying price is observed. /// public DateRange FixingPeriod { get; } /// /// Period and time profile over which the delivery takes place. /// public CalculationScheduleDeliveryPeriods? DeliveryPeriod { get; } } public class ScheduledTransfer : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ScheduledTransferMeta(); [JsonConstructor] public ScheduledTransfer(Enums.ScheduledTransfer transferType, Enums.CorporateActionType? corporateActionTransferType) { TransferType = transferType; CorporateActionTransferType = corporateActionTransferType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a transfer created from a scheduled or contingent event on a contract, e.g. Exercise, Performance, Credit Event /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ScheduledTransfer TransferType { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.CorporateActionType? CorporateActionTransferType { get; } } public class SchmeNm : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SchmeNmMeta(); [JsonConstructor] public SchmeNm(string prtry) { Prtry = prtry; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string Prtry { get; } } /// /// Identifies a security by referencing a product identifier and by specifying the sector. /// public class Security : AbstractRosettaModelObject, IProductBase { private static readonly IRosettaMetaData metaData = new SecurityMeta(); [JsonConstructor] public Security(Enums.SecurityType securityType, DebtType? debtType, Enums.EquityType? equityType, Enums.FundProductType? fundType, EconomicTerms? economicTerms, IEnumerable productTaxonomy, IEnumerable productIdentifier) { SecurityType = securityType; DebtType = debtType; EquityType = equityType; FundType = fundType; EconomicTerms = economicTerms; ProductTaxonomy = productTaxonomy; ProductIdentifier = productIdentifier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Identifies the type of security using an enumerated list. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SecurityType SecurityType { get; } /// /// Identifies the type of debt and selected debt economics. /// public DebtType? DebtType { get; } /// /// Identifies the type of equity. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.EquityType? EquityType { get; } /// /// Identifies the type of fund. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FundProductType? FundType { get; } /// /// The economic terms associated with a contractual product, i.e. the set of features that are price-forming. /// public EconomicTerms? EconomicTerms { get; } /// public IEnumerable ProductTaxonomy { get; } /// public IEnumerable ProductIdentifier { get; } } /// /// The set of elections which specify a Security Agremeent /// public class SecurityAgreementElections : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SecurityAgreementElectionsMeta(); [JsonConstructor] public SecurityAgreementElections() { } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; } /// /// Terms defining a security leg in a securities financing transaction, which can either be the near leg or the far leg and is closely modelled onto the nearLeg and farLeg types in FpML /// public class SecurityLeg : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SecurityLegMeta(); [JsonConstructor] public SecurityLeg(BuyerSeller buyerSeller, AdjustableOrRelativeDate settlementDate, Money? settlementAmount, string? settlementCurrency, ExchangeRate? fxRate, AdjustableOrRelativeDate? deliveryDate, Enums.DeliveryMethod deliveryMethod, _MetaFields? meta) { BuyerSeller = buyerSeller; SettlementDate = settlementDate; SettlementAmount = settlementAmount; SettlementCurrency = settlementCurrency; FxRate = fxRate; DeliveryDate = deliveryDate; DeliveryMethod = deliveryMethod; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Whether the leg is a buyer or seller of security /// public BuyerSeller BuyerSeller { get; } /// /// Settlement or Payment Date for the security leg /// public AdjustableOrRelativeDate SettlementDate { get; } /// /// Settlement amount for the security leg /// public Money? SettlementAmount { get; } /// /// Settlement Currency for use where the Settlement Amount cannot be known in advance. /// public string? SettlementCurrency { get; } /// /// FX rate in case when cash settlement amount is in a different currency to the security. /// public ExchangeRate? FxRate { get; } /// /// Delivery Date for the transaction. Delivery Date can be populated when it is not equal to the Settlement Date. /// public AdjustableOrRelativeDate? DeliveryDate { get; } /// /// Specifies a delivery method for the security transaction. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeliveryMethod DeliveryMethod { get; } public _MetaFields? Meta { get; } } /// /// Specifies the information required for inclusion in a securities lending billing invoice. /// public class SecurityLendingInvoice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SecurityLendingInvoiceMeta(); [JsonConstructor] public SecurityLendingInvoice(Party sendingParty, Party receivingParty, LocalDate billingStartDate, LocalDate billingEndDate, IEnumerable billingRecord, IEnumerable billingSummary, _MetaFields? meta) { SendingParty = sendingParty; ReceivingParty = receivingParty; BillingStartDate = billingStartDate; BillingEndDate = billingEndDate; BillingRecord = billingRecord; BillingSummary = billingSummary; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The party issuing the invoice /// public Party SendingParty { get; } /// /// The party receiving the invoice /// public Party ReceivingParty { get; } /// /// The starting date of the period described by this invoice /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate BillingStartDate { get; } /// /// The ending date of the period described by this invoice /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate BillingEndDate { get; } /// /// The billing records contained within the invoice /// public IEnumerable BillingRecord { get; } /// /// The billing summaries contained within the invoice /// public IEnumerable BillingSummary { get; } public _MetaFields? Meta { get; } } /// /// A locate is an approval from a broker that needs to be obtained prior to effecting a short sale in an equity security. Similar to security availability, a borrower can request a single or multiple securities, but at least one must be requested. /// public class SecurityLocate : AbstractRosettaModelObject, IAvailableInventory { private static readonly IRosettaMetaData metaData = new SecurityLocateMeta(); [JsonConstructor] public SecurityLocate(MessageInformation? messageInformation, IEnumerable party, IEnumerable partyRole, IEnumerable availableInventoryRecord) { MessageInformation = messageInformation; Party = party; PartyRole = partyRole; AvailableInventoryRecord = availableInventoryRecord; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public MessageInformation? MessageInformation { get; } /// public IEnumerable Party { get; } /// public IEnumerable PartyRole { get; } /// public IEnumerable AvailableInventoryRecord { get; } } /// /// Security payout specification in case the product payout involves some form of security collateral, as in a securities financing transaction. /// public class SecurityPayout : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SecurityPayoutMeta(); [JsonConstructor] public SecurityPayout(IEnumerable securityLeg, InitialMargin? initialMargin, Enums.RepoDuration? repoDuration, IEnumerable securityValuation, _MetaFields? meta) { SecurityLeg = securityLeg; InitialMargin = initialMargin; RepoDuration = repoDuration; SecurityValuation = securityValuation; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Each SecurityLeg represent a buy/sell at different dates, typically 1 near leg and 1 far leg in a securities financing transaction. /// public IEnumerable SecurityLeg { get; } /// /// RepoDurationEnum. /// public InitialMargin? InitialMargin { get; } /// /// A duration code for the repo transaction. This defines a type of a repo transaction with fixed duration. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RepoDuration? RepoDuration { get; } /// /// The underlying securities and their valuation for the security leg. /// public IEnumerable SecurityValuation { get; } public _MetaFields? Meta { get; } } /// /// Terms defining the security valuation method as part of a security leg in a securities fianncing transaction and closely modelled onto the CollateralValuation type in FpML. /// public class SecurityValuation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SecurityValuationMeta(); [JsonConstructor] public SecurityValuation(SecurityValuationModel securityValuationModel, Security underlier) { SecurityValuationModel = securityValuationModel; Underlier = underlier; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The security valuation model choice, based on either a nominal amount or a number of units. /// public SecurityValuationModel SecurityValuationModel { get; } /// /// The underlying security of the security leg. /// public Security Underlier { get; } } /// /// The security valuation model choice, which can either be based on nominal amount as for a bond, or on the number of contract units as for equity. /// public class SecurityValuationModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SecurityValuationModelMeta(); [JsonConstructor] public SecurityValuationModel(BondValuationModel? bondValuationModel, UnitContractValuationModel? unitContractValuationModel) { BondValuationModel = bondValuationModel; UnitContractValuationModel = unitContractValuationModel; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The valuation model when the security is a bond. /// public BondValuationModel? BondValuationModel { get; } /// /// The valuation model when the security is a unit contract like equity. /// public UnitContractValuationModel? UnitContractValuationModel { get; } } public class Sellr : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SellrMeta(); [JsonConstructor] public Sellr(AcctOwnr acctOwnr) { AcctOwnr = acctOwnr; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public AcctOwnr AcctOwnr { get; } } /// /// A class to specify the Relevant Settled Entity Matrix. /// public class SettledEntityMatrix : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SettledEntityMatrixMeta(); [JsonConstructor] public SettledEntityMatrix(FieldWithMetaSettledEntityMatrixSourceEnum matrixSource, LocalDate? publicationDate) { MatrixSource = matrixSource; PublicationDate = publicationDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Relevant settled entity matrix source. /// public FieldWithMetaSettledEntityMatrixSourceEnum MatrixSource { get; } /// /// Specifies the publication date of the applicable version of the matrix. When this element is omitted, the Standard Terms Supplement defines rules for which version of the matrix is applicable. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? PublicationDate { get; } } /// /// A base class to be extended by the SettlementTerms class. /// public class SettlementBase : AbstractRosettaModelObject, ISettlementBase { private static readonly IRosettaMetaData metaData = new SettlementBaseMeta(); [JsonConstructor] public SettlementBase(Enums.SettlementType settlementType, Enums.TransferSettlement? transferSettlementType, FieldWithMetaString? settlementCurrency, SettlementDate? settlementDate, Enums.SettlementCentre? settlementCentre, SettlementProvision? settlementProvision, Enums.StandardSettlementStyle? standardSettlementStyle, _MetaFields? meta) { SettlementType = settlementType; TransferSettlementType = transferSettlementType; SettlementCurrency = settlementCurrency; SettlementDate = settlementDate; SettlementCentre = settlementCentre; SettlementProvision = settlementProvision; StandardSettlementStyle = standardSettlementStyle; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SettlementType SettlementType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TransferSettlement? TransferSettlementType { get; } /// public FieldWithMetaString? SettlementCurrency { get; } /// public SettlementDate? SettlementDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SettlementCentre? SettlementCentre { get; } /// public SettlementProvision? SettlementProvision { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.StandardSettlementStyle? StandardSettlementStyle { get; } public _MetaFields? Meta { get; } } /// /// A data defining the settlement date(s) for cash or physical settlement as either a set of explicit dates, together with applicable adjustments, or as a date relative to some other (anchor) date, or as any date in a range of contiguous business days. This data type provides a level of abstraction on top of the different legacy methods used to specify a settlement / payment date, which vary across product types, asset classes and delivery types. /// public class SettlementDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SettlementDateMeta(); [JsonConstructor] public SettlementDate(AdjustableOrAdjustedOrRelativeDate? adjustableOrRelativeDate, LocalDate? valueDate, AdjustableDates? adjustableDates, BusinessDateRange? businessDateRange, int? cashSettlementBusinessDays, bool? paymentDelay, _MetaFields? meta) { AdjustableOrRelativeDate = adjustableOrRelativeDate; ValueDate = valueDate; AdjustableDates = adjustableDates; BusinessDateRange = businessDateRange; CashSettlementBusinessDays = cashSettlementBusinessDays; PaymentDelay = paymentDelay; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A single settlement date subject to adjustment or specified as relative to another date (e.g. the trade date). This attribute was formerly part of 'SettlementTerms', which is now being harmonised to include a common 'SettlementDate', as inherited from 'SettlementBase'. /// public AdjustableOrAdjustedOrRelativeDate? AdjustableOrRelativeDate { get; } /// /// The settlement date for a forward settling product. For Foreign Exchange contracts, this represents a common settlement date between both currency legs. To specify different settlement dates for each currency leg, see the ForeignExchange class. This attribute was formerly part of 'SettlementTerms', which is now being harmonised to include a common 'SettlementDate', as inherited from 'SettlementBase'. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? ValueDate { get; } /// /// A series of dates that shall be subject to adjustment if they would otherwise fall on a day that is not a business day in the specified business centers, together with the convention for adjusting the date. This attributes was formerly part of 'CashSettlementPaymentDate' as included into 'OptionCashSettlement' (which is now merged into a unique 'CashSettlementTerms' data type. /// public AdjustableDates? AdjustableDates { get; } /// /// A range of contiguous business days. This attribute is meant to be merged with the 'settlementDate' at some future point once we refactor 'Date' to use a single complex type across the model. This attributes was formerly part of 'CashSettlementPaymentDate', as included into 'OptionCashSettlement' (which is now merged into a unique 'CashSettlementTerms' data type. /// public BusinessDateRange? BusinessDateRange { get; } /// /// The number of business days used in the determination of the cash settlement payment date. If a cash settlement amount is specified, the cash settlement payment date will be this number of business days following the calculation of the final price. If a cash settlement amount is not specified, the cash settlement payment date will be this number of business days after all conditions to settlement are satisfied. ISDA 2003 Term: Cash Settlement Date. This attribute was formerly part of 'CashSettlementTerms' as used for credit event settlement, which now includes a common 'SettlementDate' attribute. /// public int? CashSettlementBusinessDays { get; } /// /// Applicable to CDS on MBS to specify whether payment delays are applicable to the fixed Amount. RMBS typically have a payment delay of 5 days between the coupon date of the reference obligation and the payment date of the synthetic swap. CMBS do not, on the other hand, with both payment dates being on the 25th of each month. /// public bool? PaymentDelay { get; } public _MetaFields? Meta { get; } } /// /// Defines the origin to the transfer as a reference for lineage purposes, whether it originated from trade level settlement terms or from payment terms on an economic payout. /// public class SettlementOrigin : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SettlementOriginMeta(); [JsonConstructor] public SettlementOrigin(ReferenceWithMetaCommodityPayout? commodityPayout, ReferenceWithMetaCreditDefaultPayout? creditDefaultPayout, ReferenceWithMetaForwardPayout? forwardPayout, ReferenceWithMetaInterestRatePayout? interestRatePayout, ReferenceWithMetaOptionPayout? optionPayout, ReferenceWithMetaAssetPayout? assetPayout, ReferenceWithMetaSettlementTerms? settlementTerms, ReferenceWithMetaPerformancePayout? performancePayout, ReferenceWithMetaFixedPricePayout? fixedPricePayout) { CommodityPayout = commodityPayout; CreditDefaultPayout = creditDefaultPayout; ForwardPayout = forwardPayout; InterestRatePayout = interestRatePayout; OptionPayout = optionPayout; AssetPayout = assetPayout; SettlementTerms = settlementTerms; PerformancePayout = performancePayout; FixedPricePayout = fixedPricePayout; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents a reference to an Commodity Payout. /// public ReferenceWithMetaCommodityPayout? CommodityPayout { get; } /// /// Represents a reference to a Credit Default Payout. /// public ReferenceWithMetaCreditDefaultPayout? CreditDefaultPayout { get; } /// /// Represents a reference to a Forward Payout. /// public ReferenceWithMetaForwardPayout? ForwardPayout { get; } /// /// Represents a reference to an Interest Rate Payout. /// public ReferenceWithMetaInterestRatePayout? InterestRatePayout { get; } /// /// Represents a reference to an Option Payout. /// public ReferenceWithMetaOptionPayout? OptionPayout { get; } /// /// Represents a reference to an Asset Payout. /// public ReferenceWithMetaAssetPayout? AssetPayout { get; } /// /// Represents a reference to settlement terms, which may have been specified at execution. /// public ReferenceWithMetaSettlementTerms? SettlementTerms { get; } /// /// Represents a reference to a Performance Payout. /// public ReferenceWithMetaPerformancePayout? PerformancePayout { get; } /// /// Represents a reference to a Fixed Price Payout /// public ReferenceWithMetaFixedPricePayout? FixedPricePayout { get; } } /// /// Defines parameters that regulate a settlement, for instance whether this settlement should be netted with other ones or broken-down into smaller amounts. /// public class SettlementProvision : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SettlementProvisionMeta(); [JsonConstructor] public SettlementProvision(ShapingProvision? shapingProvisions) { ShapingProvisions = shapingProvisions; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the parameters that are necessary to 'shape' a settlement, i.e. break it down into smaller amounts. /// public ShapingProvision? ShapingProvisions { get; } } /// /// Defines the settlement rate option to use for fixing in case of cash settlement. Currently only applicable to foreign exchange fixing in case of cross-currency settlement. /// public class SettlementRateOption : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SettlementRateOptionMeta(); [JsonConstructor] public SettlementRateOption(FieldWithMetaSettlementRateOptionEnum settlementRateOption, PriceSourceDisruption? priceSourceDisruption) { SettlementRateOptionValue = settlementRateOption; PriceSourceDisruption = priceSourceDisruption; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The rate source for the conversion to the settlement currency. This source is specified through a scheme that reflects the terms of the Annex A to the 1998 FX and Currency Option Definitions. /// [JsonProperty(PropertyName = "settlementRateOption")] public FieldWithMetaSettlementRateOptionEnum SettlementRateOptionValue { get; } /// /// An attribute defining the parameters to get a new quote when a settlement rate option is disrupted. /// public PriceSourceDisruption? PriceSourceDisruption { get; } } /// /// Specifies the settlement terms, which can either be cash, physical, or fx-based cash-settlement. This class can be used for the settlement of options and forwards, cash transactions (e.g. securities or foreign exchange), or in case of credit event. /// public class SettlementTerms : AbstractRosettaModelObject, ISettlementBase { private static readonly IRosettaMetaData metaData = new SettlementTermsMeta(); [JsonConstructor] public SettlementTerms(IEnumerable cashSettlementTerms, PhysicalSettlementTerms? physicalSettlementTerms, Enums.SettlementType settlementType, Enums.TransferSettlement? transferSettlementType, FieldWithMetaString? settlementCurrency, SettlementDate? settlementDate, Enums.SettlementCentre? settlementCentre, SettlementProvision? settlementProvision, Enums.StandardSettlementStyle? standardSettlementStyle, _MetaFields? meta) { CashSettlementTerms = cashSettlementTerms; PhysicalSettlementTerms = physicalSettlementTerms; SettlementType = settlementType; TransferSettlementType = transferSettlementType; SettlementCurrency = settlementCurrency; SettlementDate = settlementDate; SettlementCentre = settlementCentre; SettlementProvision = settlementProvision; StandardSettlementStyle = standardSettlementStyle; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the parameters associated with the cash settlement procedure. /// public IEnumerable CashSettlementTerms { get; } /// /// Specifies the physical settlement terms which apply to the transaction. /// public PhysicalSettlementTerms? PhysicalSettlementTerms { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SettlementType SettlementType { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TransferSettlement? TransferSettlementType { get; } /// public FieldWithMetaString? SettlementCurrency { get; } /// public SettlementDate? SettlementDate { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.SettlementCentre? SettlementCentre { get; } /// public SettlementProvision? SettlementProvision { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.StandardSettlementStyle? StandardSettlementStyle { get; } public _MetaFields? Meta { get; } } /// /// Defines the applicable settlement limits that may require a settlement to be 'shaped', i.e. broken-down into smaller amounts. /// public class ShapingProvision : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ShapingProvisionMeta(); [JsonConstructor] public ShapingProvision(IEnumerable shapeSchedule) { ShapeSchedule = shapeSchedule; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines applicable settlement limits in each currency. /// public IEnumerable ShapeSchedule { get; } } /// /// A class to specify the number of business days after satisfaction of all conditions to settlement. /// public class SingleValuationDate : AbstractRosettaModelObject, ISingleValuationDate { private static readonly IRosettaMetaData metaData = new SingleValuationDateMeta(); [JsonConstructor] public SingleValuationDate(int? businessDays) { BusinessDays = businessDays; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public int? BusinessDays { get; } } public class Sngl : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SnglMeta(); [JsonConstructor] public Sngl(string isin, Indx indx) { Isin = isin; Indx = indx; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string Isin { get; } public Indx Indx { get; } } /// /// Represents a class to allow specification of different types of special purpose vehicle (SPV) collateral. /// public class SpecialPurposeVehicleIssuerType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SpecialPurposeVehicleIssuerTypeMeta(); [JsonConstructor] public SpecialPurposeVehicleIssuerType(Enums.CreditRisk? creditRisk) { CreditRisk = creditRisk; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates tranched or untranched credit risk. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CreditRisk? CreditRisk { get; } } public class SpecifiedCurrency : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SpecifiedCurrencyMeta(); [JsonConstructor] public SpecifiedCurrency(bool applicable, FieldWithMetaString? currency) { Applicable = applicable; Currency = currency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether the specified currency provision is applicable. /// public bool Applicable { get; } /// /// The currency in which the specified currency is denominated. The list of valid currencies is not presently positioned as an enumeration as part of the CDM because that scope is limited to the values specified by ISDA and FpML. As a result, implementers have to make reference to the relevant standard, such as the ISO 4217 standard for currency codes. /// public FieldWithMetaString? Currency { get; } } /// /// Specifies instructions for a split, consisting of a breakdown of instructions to be applied to each branch of the split. This instruction can be used to duplicate a trade, as in a clearing scenario, or to split a trade into smaller quantities (in which case each breakdown instruction needs to include a quantity change), as in an allocation. /// public class SplitInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SplitInstructionMeta(); [JsonConstructor] public SplitInstruction(IEnumerable breakdown) { Breakdown = breakdown; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Each split breakdown specifies the set of primitive instructions to be applied to a single branch of that split. N split breakdowns result in N output trades, which include the original trade. Instructions for how to handle the original trade (e.g. if it must be closed) must be specified in one of the breakdowns. /// public IEnumerable Breakdown { get; } } /// /// Adds an optional spread type element to the Schedule to identify a long or short spread value. /// public class SpreadSchedule : AbstractRosettaModelObject, IRateSchedule { private static readonly IRosettaMetaData metaData = new SpreadScheduleMeta(); [JsonConstructor] public SpreadSchedule(FieldWithMetaSpreadScheduleTypeEnum? spreadScheduleType, ReferenceWithMetaPriceSchedule price) { SpreadScheduleType = spreadScheduleType; Price = price; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An element which purpose is to identify a long or short spread value. /// public FieldWithMetaSpreadScheduleTypeEnum? SpreadScheduleType { get; } /// public ReferenceWithMetaPriceSchedule Price { get; } } /// /// Defines the state of a trade at a point in the Trade's life cycle. Trades have many state dimensions, all of which are represented here. For example, states useful for position keeping are represented alongside those needed for regulatory reporting. /// public class State : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StateMeta(); [JsonConstructor] public State(ClosedState? closedState, Enums.PositionStatus? positionState) { ClosedState = closedState; PositionState = positionState; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the qualification of what led to the trade's closure alongside the dates on which this closure took effect. /// public ClosedState? ClosedState { get; } /// /// Identifies the state of the position, to distinguish if just executed, formed, already settled, closed, etc. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PositionStatus? PositionState { get; } } /// /// Data required to perform a stock split business event. /// public class StockSplitInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StockSplitInstructionMeta(); [JsonConstructor] public StockSplitInstruction(decimal adjustmentRatio, LocalDate effectiveDate) { AdjustmentRatio = adjustmentRatio; EffectiveDate = effectiveDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number that denotes the cumulative quantity of post-split shares issued to shareholders versus the quantity of pre-split shares previously issued to shareholders. This number will be multiplied by existing shares in an equity derivative contract or other positions to determine the post-split number of shares. With regard to any reference to price, the pre-split reference price will be divided by this number to determine the post-split reference price. /// public decimal AdjustmentRatio { get; } /// /// The effective date of the stock split, also known as the ex-date. This is the date on which the additional shares are paid to the shareholders, or in the case of a reverse stock split, the number shares held by each shareholder is proportionally reduced. Equity derivative transactions can be amended in firms' internal systems on such date. In most markets, the listed stock price is reduced (or increased for a reverse stock split) to account for the split on the same date, but in some markets the price adjustment occurs on a later date. In either case, equity derivative transactions should be amended on the date that the stocks are paid to the shareholders (or consolidated). /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate EffectiveDate { get; } } /// /// A class for defining option strategy features. /// public class StrategyFeature : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StrategyFeatureMeta(); [JsonConstructor] public StrategyFeature(StrikeSpread? strikeSpread, CalendarSpread? calendarSpread) { StrikeSpread = strikeSpread; CalendarSpread = calendarSpread; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Definition of the upper strike in a strike spread. /// public StrikeSpread? StrikeSpread { get; } /// /// Definition of the later expiration date in a calendar spread. /// public CalendarSpread? CalendarSpread { get; } } /// /// A class describing a single cap or floor rate. /// public class Strike : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StrikeMeta(); [JsonConstructor] public Strike(decimal strikeRate, Enums.PayerReceiver? buyer, Enums.PayerReceiver? seller, _MetaFields? meta) { StrikeRate = strikeRate; Buyer = buyer; Seller = seller; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The rate for a cap or floor. /// public decimal StrikeRate { get; } /// /// The buyer of the option. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PayerReceiver? Buyer { get; } /// /// The party that has sold. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PayerReceiver? Seller { get; } public _MetaFields? Meta { get; } } /// /// A class describing a schedule of cap or floor rates. /// public class StrikeSchedule : AbstractRosettaModelObject, IRateSchedule { private static readonly IRosettaMetaData metaData = new StrikeScheduleMeta(); [JsonConstructor] public StrikeSchedule(Enums.PayerReceiver? buyer, Enums.PayerReceiver? seller, ReferenceWithMetaPriceSchedule price) { Buyer = buyer; Seller = seller; Price = price; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The buyer of the option. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PayerReceiver? Buyer { get; } /// /// The party that has sold. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PayerReceiver? Seller { get; } /// public ReferenceWithMetaPriceSchedule Price { get; } } /// /// A class for defining a strike spread feature. /// public class StrikeSpread : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StrikeSpreadMeta(); [JsonConstructor] public StrikeSpread(OptionStrike upperStrike, decimal upperStrikeNumberOfOptions) { UpperStrike = upperStrike; UpperStrikeNumberOfOptions = upperStrikeNumberOfOptions; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Upper strike in a strike spread. /// public OptionStrike UpperStrike { get; } /// /// Number of options at the upper strike price in a strike spread. /// public decimal UpperStrikeNumberOfOptions { get; } } /// /// A data defining: how the initial or final stub calculation period amounts is calculated. For example, the rate to be applied to the initial or final stub calculation period may be the linear interpolation of two different tenors for the floating rate index specified in the calculation period amount component, e.g. A two month stub period may used the linear interpolation of a one month and three month floating rate. The different rate tenors would be specified in this component. Note that a maximum of two rate tenors can be specified. If a stub period uses a single index tenor and this is the same as that specified in the calculation period amount component then the initial stub or final stub component, as the case may be, must not be included. /// public class StubCalculationPeriodAmount : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StubCalculationPeriodAmountMeta(); [JsonConstructor] public StubCalculationPeriodAmount(ReferenceWithMetaCalculationPeriodDates calculationPeriodDatesReference, StubValue? initialStub, StubValue? finalStub) { CalculationPeriodDatesReference = calculationPeriodDatesReference; InitialStub = initialStub; FinalStub = finalStub; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A pointer style reference to the associated calculation period dates component defined elsewhere in the document. /// public ReferenceWithMetaCalculationPeriodDates CalculationPeriodDatesReference { get; } /// /// Specifies how the initial stub amount is calculated. A single floating rate tenor different to that used for the regular part of the calculation periods schedule may be specified, or two floating tenors may be specified. If two floating rate tenors are specified then Linear Interpolation (in accordance with the 2000 ISDA Definitions, Section 8.3. Interpolation) is assumed to apply. Alternatively, an actual known stub rate or stub amount may be specified. /// public StubValue? InitialStub { get; } /// /// Specifies how the final stub amount is calculated. A single floating rate tenor different to that used for the regular part of the calculation periods schedule may be specified, or two floating tenors may be specified. If two floating rate tenors are specified then Linear Interpolation (in accordance with the 2000 ISDA Definitions, Section 8.3. Interpolation) is assumed to apply. Alternatively, an actual known stub rate or stub amount may be specified. /// public StubValue? FinalStub { get; } } /// /// A class defining a floating rate. /// public class StubFloatingRate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StubFloatingRateMeta(); [JsonConstructor] public StubFloatingRate(Enums.FloatingRateIndex floatingRateIndex, Period? indexTenor, Schedule? floatingRateMultiplierSchedule, IEnumerable spreadSchedule, Enums.RateTreatment? rateTreatment, IEnumerable capRateSchedule, IEnumerable floorRateSchedule) { FloatingRateIndex = floatingRateIndex; IndexTenor = indexTenor; FloatingRateMultiplierSchedule = floatingRateMultiplierSchedule; SpreadSchedule = spreadSchedule; RateTreatment = rateTreatment; CapRateSchedule = capRateSchedule; FloorRateSchedule = floorRateSchedule; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The floating rate index. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndex FloatingRateIndex { get; } /// /// The ISDA Designated Maturity, i.e. the tenor of the floating rate. /// public Period? IndexTenor { get; } /// /// A rate multiplier or multiplier schedule to apply to the floating rate. A multiplier schedule is expressed as explicit multipliers and dates. In the case of a schedule, the step dates may be subject to adjustment in accordance with any adjustments specified in the calculationPeriodDatesAdjustments. The multiplier can be a positive or negative decimal. This element should only be included if the multiplier is not equal to 1 (one) for the term of the stream. /// public Schedule? FloatingRateMultiplierSchedule { get; } /// /// The ISDA Spread or a Spread schedule expressed as explicit spreads and dates. In the case of a schedule, the step dates may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. The spread is a per annum rate, expressed as a decimal. For purposes of determining a calculation period amount, if positive the spread will be added to the floating rate and if negative the spread will be subtracted from the floating rate. A positive 10 basis point (0.1%) spread would be represented as 0.001. /// public IEnumerable SpreadSchedule { get; } /// /// The specification of any rate conversion which needs to be applied to the observed rate before being used in any calculations. The two common conversions are for securities quoted on a bank discount basis which will need to be converted to either a Money Market Yield or Bond Equivalent Yield. See the Annex to the 2000 ISDA Definitions, Section 7.3. Certain General Definitions Relating to Floating Rate Options, paragraphs (g) and (h) for definitions of these terms. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.RateTreatment? RateTreatment { get; } /// /// The cap rate or cap rate schedule, if any, which applies to the floating rate. The cap rate (strike) is only required where the floating rate on a swap stream is capped at a certain level. A cap rate schedule is expressed as explicit cap rates and dates and the step dates may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. The cap rate is assumed to be exclusive of any spread and is a per annum rate, expressed as a decimal. A cap rate of 5% would be represented as 0.05. /// public IEnumerable CapRateSchedule { get; } /// /// The floor rate or floor rate schedule, if any, which applies to the floating rate. The floor rate (strike) is only required where the floating rate on a swap stream is floored at a certain strike level. A floor rate schedule is expressed as explicit floor rates and dates and the step dates may be subject to adjustment in accordance with any adjustments specified in calculationPeriodDatesAdjustments. The floor rate is assumed to be exclusive of any spread and is a per annum rate, expressed as a decimal. A floor rate of 5% would be represented as 0.05. /// public IEnumerable FloorRateSchedule { get; } } /// /// A class defining how the initial or final stub calculation period amounts is calculated. For example, the rate to be applied to the initial or final stub calculation period may be the linear interpolation of two different tenors for the floating rate index specified in the calculation period amount component, e.g. A two month stub period may used the linear interpolation of a one month and three month floating rate. The different rate tenors would be specified in this component. Note that a maximum of two rate tenors can be specified. If a stub period uses a single index tenor and this is the same as that specified in the calculation period amount component then the initial stub or final stub component, as the case may be, must not be included. /// public class StubPeriod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StubPeriodMeta(); [JsonConstructor] public StubPeriod(ReferenceWithMetaCalculationPeriodDates calculationPeriodDatesReference, StubValue? initialStub, StubValue? finalStub) { CalculationPeriodDatesReference = calculationPeriodDatesReference; InitialStub = initialStub; FinalStub = finalStub; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A pointer style reference to the associated calculation period dates component defined elsewhere in the document. /// public ReferenceWithMetaCalculationPeriodDates CalculationPeriodDatesReference { get; } /// /// Specifies how the initial stub amount is calculated. A single floating rate tenor different to that used for the regular part of the calculation periods schedule may be specified, or two floating tenors may be specified. If two floating rate tenors are specified then Linear Interpolation (in accordance with the 2000 ISDA Definitions, Section 8.3. Interpolation) is assumed to apply. Alternatively, an actual known stub rate or stub amount may be specified. /// public StubValue? InitialStub { get; } /// /// Specifies how the final stub amount is calculated. A single floating rate tenor different to that used for the regular part of the calculation periods schedule may be specified, or two floating tenors may be specified. If two floating rate tenors are specified then Linear Interpolation (in accordance with the 2000 ISDA Definitions, Section 8.3. Interpolation) is assumed to apply. Alternatively, an actual known stub rate or stub amount may be specified. /// public StubValue? FinalStub { get; } } /// /// A type defining how a stub calculation period amount is calculated. A single floating rate tenor different to that used for the regular part of the calculation periods schedule may be specified, or two floating rate tenors many be specified. If two floating rate tenors are specified then Linear Interpolation (in accordance with the 2000 ISDA Definitions, Section 8.3 Interpolation) is assumed to apply. Alternatively, an actual known stub rate or stub amount may be specified. /// public class StubValue : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new StubValueMeta(); [JsonConstructor] public StubValue(IEnumerable floatingRate, decimal? stubRate, Money? stubAmount) { FloatingRate = floatingRate; StubRate = stubRate; StubAmount = stubAmount; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The rates to be applied to the initial or final stub may be the linear interpolation of two different rates. While the majority of the time, the rate indices will be the same as that specified in the stream and only the tenor itself will be different, it is possible to specift two different rates. For example, a 2 month stub period may use the linear interpolation of a 1 month and 3 month rate. The different rates would be specified in this component. Note that a maximum of two rates can be specified. If a stub period uses the same floating rate index, including tenor, as the regular calculation periods then this should not be specified again within this component, i.e. the stub calculation period amount component may not need to be specified even if there is an initial or final stub period. If a stub period uses a different floating rate index compared to the regular calculation periods then this should be specified within this component. If specified here, they are likely to have id attributes, allowing them to be referenced from within the cashflows component. /// public IEnumerable FloatingRate { get; } /// /// An actual rate to apply for the initial or final stub period may have been agreed between the principal parties (in a similar way to how an initial rate may have been agreed for the first regular period). If an actual stub rate has been agreed then it would be included in this component. It will be a per annum rate, expressed as a decimal. A stub rate of 5% would be represented as 0.05. /// public decimal? StubRate { get; } /// /// An actual amount to apply for the initial or final stub period may have been agreed between the two parties. If an actual stub amount has been agreed then it would be included in this component. /// public Money? StubAmount { get; } } /// /// Defines collateral substitution provisions such as how many and with how much notice are substitutions allowed. /// public class SubstitutionProvisions : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SubstitutionProvisionsMeta(); [JsonConstructor] public SubstitutionProvisions(int? numberOfSubstitutionsAllowed, Period? noticeDeadlinePeriod, ZonedDateTime? noticeDeadlineDateTime) { NumberOfSubstitutionsAllowed = numberOfSubstitutionsAllowed; NoticeDeadlinePeriod = noticeDeadlinePeriod; NoticeDeadlineDateTime = noticeDeadlineDateTime; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies if 1 or more substitutions are allowed. /// public int? NumberOfSubstitutionsAllowed { get; } /// /// Defines the min period for notify of a substitution. /// public Period? NoticeDeadlinePeriod { get; } /// /// A specific date and time for the notice deadline /// public ZonedDateTime? NoticeDeadlineDateTime { get; } } /// /// A class to specify a valuation swap curve, which is used as part of the strike construct for the bond and convertible bond options. /// public class SwapCurveValuation : AbstractRosettaModelObject, ISwapCurveValuation { private static readonly IRosettaMetaData metaData = new SwapCurveValuationMeta(); [JsonConstructor] public SwapCurveValuation(Enums.FloatingRateIndex floatingRateIndex, Period? indexTenor, decimal spread, Enums.QuotationSide? side) { FloatingRateIndex = floatingRateIndex; IndexTenor = indexTenor; Spread = spread; Side = side; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndex FloatingRateIndex { get; } /// public Period? IndexTenor { get; } /// public decimal Spread { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuotationSide? Side { get; } } public class Swp : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SwpMeta(); [JsonConstructor] public Swp(SwpIn swpIn, SwpOut swpOut) { SwpIn = swpIn; SwpOut = swpOut; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public SwpIn SwpIn { get; } public SwpOut SwpOut { get; } } public class SwpIn : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SwpInMeta(); [JsonConstructor] public SwpIn(Sngl sngl) { Sngl = sngl; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Sngl Sngl { get; } } public class SwpOut : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new SwpOutMeta(); [JsonConstructor] public SwpOut(Sngl sngl) { Sngl = sngl; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Sngl Sngl { get; } } /// /// Defines the taxonomy of an object by combining a taxonomy source (i.e. the rules to classify the object) and a value (i.e. the output of those rules on the object). /// public class Taxonomy : AbstractRosettaModelObject, ITaxonomy { private static readonly IRosettaMetaData metaData = new TaxonomyMeta(); [JsonConstructor] public Taxonomy(Enums.TaxonomySource? source, TaxonomyValue? value) { Source = source; Value = value; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TaxonomySource? Source { get; } /// public TaxonomyValue? Value { get; } } public class TaxonomyClassification : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TaxonomyClassificationMeta(); [JsonConstructor] public TaxonomyClassification(string? className, string value, string? description, int? ordinal) { ClassName = className; Value = value; Description = description; Ordinal = ordinal; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The name defined by the classification system for a specific attribute in the taxonomy /// public string? ClassName { get; } /// /// The value set by the taxonomy that is specific to the className attribute. /// public string Value { get; } /// /// A description of the class. /// public string? Description { get; } /// /// In the case of multi-layered hierarchical classification systems such as commodity classification, the layer the value and className occupy in the classification hierarchy, where 1 represents the top-layer. /// public int? Ordinal { get; } } /// /// Defines a taxonomy value as either a simple string or a more granular expression with class names and values for each class. /// public class TaxonomyValue : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TaxonomyValueMeta(); [JsonConstructor] public TaxonomyValue(FieldWithMetaString? name, IEnumerable classification) { Name = name; Classification = classification; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the taxonomy value as a simple string, which may be associated to an external scheme. /// public FieldWithMetaString? Name { get; } /// /// Specifies the taxonomy value as a set of class names and values for each class. /// public IEnumerable Classification { get; } } /// /// A class to specify a telephone number as a type of phone number (e.g. work, personal, ...) alongside with the actual number. /// public class TelephoneNumber : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TelephoneNumberMeta(); [JsonConstructor] public TelephoneNumber(Enums.TelephoneType? telephoneNumberType, string number) { TelephoneNumberType = telephoneNumberType; Number = number; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The type of telephone number, e.g. work, mobile. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TelephoneType? TelephoneNumberType { get; } /// /// The actual telephone number. /// public string Number { get; } } public class Term : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TermMeta(); [JsonConstructor] public Term(string unit, string val) { Unit = unit; Val = val; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public string Unit { get; } public string Val { get; } } /// /// A class for defining option provisions. /// public class TerminationProvision : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TerminationProvisionMeta(); [JsonConstructor] public TerminationProvision(CancelableProvision? cancelableProvision, EarlyTerminationProvision? earlyTerminationProvision, EvergreenProvision? evergreenProvision, ExtendibleProvision? extendibleProvision) { CancelableProvision = cancelableProvision; EarlyTerminationProvision = earlyTerminationProvision; EvergreenProvision = evergreenProvision; ExtendibleProvision = extendibleProvision; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A provision that allows the specification of an embedded option within a swap giving the buyer of the option the right to terminate the swap, in whole or in part, on the early termination date. /// public CancelableProvision? CancelableProvision { get; } /// /// Parameters specifying provisions relating to the optional and mandatory early termination of a swap transaction. /// public EarlyTerminationProvision? EarlyTerminationProvision { get; } /// /// A data defining: the right of a party to exercise an Evergreen option /// public EvergreenProvision? EvergreenProvision { get; } /// /// A provision that allows the specification of an embedded option with a swap giving the buyer of the option the right to extend the swap, in whole or in part, to the extended termination date. /// public ExtendibleProvision? ExtendibleProvision { get; } } /// /// Specifies instructions for terms change consisting of the new transaction terms, and the renegotiation fee. /// public class TermsChangeInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TermsChangeInstructionMeta(); [JsonConstructor] public TermsChangeInstruction(Product? product, IEnumerable ancillaryParty, Enums.NotionalAdjustment? adjustment) { Product = product; AncillaryParty = ancillaryParty; Adjustment = adjustment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// product to be changed /// public Product? Product { get; } /// /// ancillary party to be changed /// public IEnumerable AncillaryParty { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.NotionalAdjustment? Adjustment { get; } } /// /// The time alongside with the timezone location information. This class makes use of the FpML TimezoneLocation construct. /// public class TimeZone : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TimeZoneMeta(); [JsonConstructor] public TimeZone(LocalTime time, FieldWithMetaString? location) { Time = time; Location = location; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The observation time. /// public LocalTime Time { get; } /// /// FpML specifies the timezoneLocationScheme by reference to the Time Zone Database (a.k.a. tz database) maintained by IANA, the Internet Assigned Numbers Authority. /// public FieldWithMetaString? Location { get; } } /// /// Definition of a product as ready to be traded, i.e. included in an execution or contract, by associating a specific price and quantity to this product plus an (optional) mechanism for any potential future quantity adjustment. /// public class TradableProduct : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TradableProductMeta(); [JsonConstructor] public TradableProduct(Product product, IEnumerable tradeLot, IEnumerable counterparty, IEnumerable ancillaryParty, Enums.NotionalAdjustment? adjustment) { Product = product; TradeLot = tradeLot; Counterparty = counterparty; AncillaryParty = ancillaryParty; Adjustment = adjustment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The underlying product to be included in a contract or execution. /// public Product Product { get; } /// /// Specifies the price, quantity and effective date of each trade lot, when the same product may be traded multiple times in different lots with the same counterparty. In a trade increase, a new trade lot is added to the list, with the corresponding effective date. In a trade decrease, the existing trade lot(s) are decreased of the corresponding quantity (and an unwind fee may have to be settled). The multiple cardinality and the ability to increase existing trades is used for Equity Swaps in particular. /// public IEnumerable TradeLot { get; } /// /// Specifies the parties which are the two counterparties to the transaction. The product is agnostic to the actual parties to the transaction, with the party references abstracted away from the product definition and replaced by the counterparty enum (e.g. CounterpartyEnum values Party1 or Party2). The counterparty enum can then be positioned in the product (e.g. to specify which counterparty is the payer, receiver etc) and this counterparties attribute, which is positioned outside of the product definition, allows the counterparty enum to be associated with an actual party reference. /// public IEnumerable Counterparty { get; } /// /// Specifies the parties with ancillary roles in the transaction. The product is agnostic to the actual parties involved in the transaction, with the party references abstracted away from the product definition and replaced by the AncillaryRoleEnum. The AncillaryRoleEnum can then be positioned in the product and this AncillaryParty type, which is positioned outside of the product definition, allows the AncillaryRoleEnum to be associated with an actual party reference. /// public IEnumerable AncillaryParty { get; } /// /// Specifies the conditions that govern the adjustment to the quantity of a product being traded: e.g. execution, portfolio rebalancing etc. It is typically used in the context of Equity Swaps. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.NotionalAdjustment? Adjustment { get; } } /// /// Defines the output of a financial transaction between parties - a Business Event. A Trade impacts the financial position (i.e. the balance sheet) of involved parties. /// public class Trade : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TradeMeta(); [JsonConstructor] public Trade(IEnumerable tradeIdentifier, FieldWithMetaLocalDate tradeDate, FieldWithMetaTimeZone? tradeTime, TradableProduct tradableProduct, IEnumerable party, IEnumerable partyRole, ExecutionDetails? executionDetails, ContractDetails? contractDetails, LocalDate? clearedDate, Collateral? collateral, IEnumerable account, _MetaFields? meta) { TradeIdentifier = tradeIdentifier; TradeDate = tradeDate; TradeTime = tradeTime; TradableProduct = tradableProduct; Party = party; PartyRole = partyRole; ExecutionDetails = executionDetails; ContractDetails = contractDetails; ClearedDate = clearedDate; Collateral = collateral; Account = account; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the identifier(s) that uniquely identify a trade for an identity issuer. A trade can include multiple identifiers, for example a trade that is reportable to both the CFTC and ESMA, and then has an associated USI (Unique Swap Identifier) UTI (Unique Trade Identifier). /// public IEnumerable TradeIdentifier { get; } /// /// Specifies the date which the trade was agreed. /// public FieldWithMetaLocalDate TradeDate { get; } /// /// Denotes the trade time and timezone as agreed by the parties to the trade. /// public FieldWithMetaTimeZone? TradeTime { get; } /// /// Represents the financial instrument The corresponding FpML construct is the product abstract element and the associated substitution group. /// public TradableProduct TradableProduct { get; } /// /// Represents the parties to the trade. The cardinality is optional to address the case where the trade is defined within a BusinessEvent data type, in which case the party is specified in BusinessEvent. /// public IEnumerable Party { get; } /// /// Represents the role each specified party takes in the trade. further to the principal roles, payer and receiver. /// public IEnumerable PartyRole { get; } /// /// Represents information specific to trades that arose from executions. /// public ExecutionDetails? ExecutionDetails { get; } /// /// Represents information specific to trades involving contractual products. /// public ContractDetails? ContractDetails { get; } /// /// Specifies the date on which a trade is cleared (novated) through a central counterparty clearing service. /// [JsonConverter(typeof(Rosetta.Lib.LocalDateConverter))] public LocalDate? ClearedDate { get; } /// /// Represents the collateral obligations of a party. /// public Collateral? Collateral { get; } /// /// Represents a party's granular account information, which may be used in subsequent internal processing. /// public IEnumerable Account { get; } public _MetaFields? Meta { get; } } /// /// Defines a trade identifier as a special case of the generic identifier type, that also includes the trade identifier class. /// public class TradeIdentifier : AbstractRosettaModelObject, IIdentifier { private static readonly IRosettaMetaData metaData = new TradeIdentifierMeta(); [JsonConstructor] public TradeIdentifier(Enums.TradeIdentifierType? identifierType, ReferenceWithMetaParty? issuerReference, FieldWithMetaString? issuer, IEnumerable assignedIdentifier, _MetaFields? meta) { IdentifierType = identifierType; IssuerReference = issuerReference; Issuer = issuer; AssignedIdentifier = assignedIdentifier; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The enumerated classification of the identifier. Optional as a trade identifier may be party-specific, in which case it may not correspond to any established classification. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TradeIdentifierType? IdentifierType { get; } /// public ReferenceWithMetaParty? IssuerReference { get; } /// public FieldWithMetaString? Issuer { get; } /// public IEnumerable AssignedIdentifier { get; } public _MetaFields? Meta { get; } } /// /// Specifies the price and quantity of a trade lot, where the same product could be traded multiple times with the same counterparty but in different lots (at a different date, in a different quantity and at a different price). One trade lot combined with a product definition specifies the entire economics of a trade. The lifecycle mechanics of each such trade lot (e.g. cashflow payments) is independent of the other lots. /// public class TradeLot : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TradeLotMeta(); [JsonConstructor] public TradeLot(IEnumerable lotIdentifier, IEnumerable priceQuantity) { LotIdentifier = lotIdentifier; PriceQuantity = priceQuantity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies one or more identifiers for the lot, if any. /// public IEnumerable LotIdentifier { get; } /// /// Specifies the settlement characteristics of a trade lot: price, quantity, observable (optionally) and the settlement terms. This attribute has a multiple cardinality to allow to specify the price, quantity and observable of different legs in a single, composite product (e.g. a Swap). /// public IEnumerable PriceQuantity { get; } } /// /// The attributes that are specific for consensus based pricing reporting. /// public class TradePricingReport : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TradePricingReportMeta(); [JsonConstructor] public TradePricingReport(Trade trade, TimeZone pricingTime, Enums.FloatingRateIndex? discountingIndex) { Trade = trade; PricingTime = pricingTime; DiscountingIndex = discountingIndex; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the cosensus based pricing parameters on a trade basis. /// public Trade Trade { get; } /// /// The regional exchange close time for the underlying contract,including time zone, at which the trades should be priced. This provides an indication for which regional snapshot should be used for pricing primarily for Global markets where there are multiple regional close times. /// public TimeZone PricingTime { get; } /// /// It specifies the interest payable on collateral delivered under a CSA covering the trade. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FloatingRateIndex? DiscountingIndex { get; } } /// /// Defines the fundamental financial information that can be changed by a Primitive Event and by extension any business or life-cycle event. Each TradeState specifies where a Trade is in its life-cycle. TradeState is a root type and as such, can be created independently to any other CDM data type, but can also be used as part of the CDM Event Model. /// public class TradeState : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TradeStateMeta(); [JsonConstructor] public TradeState(Trade trade, State? state, IEnumerable resetHistory, IEnumerable transferHistory, IEnumerable observationHistory, IEnumerable valuationHistory, _MetaFields? meta) { Trade = trade; State = state; ResetHistory = resetHistory; TransferHistory = transferHistory; ObservationHistory = observationHistory; ValuationHistory = valuationHistory; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the Trade that has been effected by a business or life-cycle event. /// public Trade Trade { get; } /// /// Represents the State of the Trade through its life-cycle. /// public State? State { get; } /// /// Represents the updated Trade attributes which can change as the result of a reset event. Only the changed values are captured, leaving the remaining data attributes empty. See Create_Reset function for further details on how TradeState is used in the Reset event. The TradeState data type is used to maintain backwards compatibility with the current Reset mechanism. /// public IEnumerable ResetHistory { get; } /// /// Represents the updated Trade attributes which can change as the result of a transfer event. /// public IEnumerable TransferHistory { get; } /// /// Represents the observed events related to a particular product or process, such as credit events or corporate actions. /// public IEnumerable ObservationHistory { get; } public IEnumerable ValuationHistory { get; } public _MetaFields? Meta { get; } } /// /// The class to represent a CDS Tranche. /// public class Tranche : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TrancheMeta(); [JsonConstructor] public Tranche(decimal attachmentPoint, decimal exhaustionPoint, bool? incurredRecoveryApplicable) { AttachmentPoint = attachmentPoint; ExhaustionPoint = exhaustionPoint; IncurredRecoveryApplicable = incurredRecoveryApplicable; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Lower bound percentage of the loss that the Tranche can endure, expressed as a decimal. An attachment point of 5% would be represented as 0.05. The difference between Attachment and Exhaustion points is called the width of the Tranche. /// public decimal AttachmentPoint { get; } /// /// Upper bound percentage of the loss that the Tranche can endure, expressed as a decimal. An exhaustion point of 5% would be represented as 0.05. The difference between Attachment and Exhaustion points is call the width of the Tranche. /// public decimal ExhaustionPoint { get; } /// /// Outstanding Swap Notional Amount is defined at any time on any day, as the greater of: (a) Zero; If Incurred Recovery Amount Applicable: (b) The Original Swap Notional Amount minus the sum of all Incurred Loss Amounts and all Incurred Recovery Amounts (if any) determined under this Confirmation at or prior to such time.Incurred Recovery Amount not populated: (b) The Original Swap Notional Amount minus the sum of all Incurred Loss Amounts determined under this Confirmation at or prior to such time. /// public bool? IncurredRecoveryApplicable { get; } } /// /// A class to represent the transacted price attributes that are positioned as part of the FpML FeeLeg. /// public class TransactedPrice : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TransactedPriceMeta(); [JsonConstructor] public TransactedPrice(decimal? marketFixedRate, decimal? initialPoints, decimal? marketPrice, Enums.QuotationStyle? quotationStyle) { MarketFixedRate = marketFixedRate; InitialPoints = initialPoints; MarketPrice = marketPrice; QuotationStyle = quotationStyle; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// An optional element that only has meaning in a credit index trade. This element contains the credit spread ('fair value') at which the trade was executed. Unlike the fixedRate of an index, the marketFixedRate varies over the life of the index depending on market conditions. The marketFixedRate is the price of the index as quoted by trading desks. /// public decimal? MarketFixedRate { get; } /// /// An optional element that contains the up-front points expressed as a percentage of the notional. An initialPoints value of 5% would be represented as 0.05. The initialPoints element is an alternative to marketFixedRate in quoting the traded level of a trade. When initialPoints is used, the traded level is the sum of fixedRate and initialPoints. The initialPoints is one of the items that are factored into the initialPayment calculation and is payable by the Buyer to the Seller. Note that initialPoints and marketFixedRate may both be present in the same document when both implied values are desired. /// public decimal? InitialPoints { get; } /// /// An optional element that only has meaning in a credit index trade. This element contains the price at which the trade was executed and is used instead of marketFixedRate on credit trades on certain indicies which are quoted using a price rather than a spread. /// public decimal? MarketPrice { get; } /// /// An optional element that contains the up-front points expressed as a percentage of the notional. An initialPoints value of 5% would be represented as 0.05. The initialPoints element is an alternative to marketFixedRate in quoting the traded level of a trade. When initialPoints is used, the traded level is the sum of fixedRate and initialPoints. The initialPoints is one of the items that are factored into the initialPayment calculation and is payable by the Buyer to the Seller. Note that initialPoints and marketFixedRate may both be present in the same document when both implied values are desired. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuotationStyle? QuotationStyle { get; } } /// /// Additional specification for the extraordinary events that may affect a trade and the related contractual rights and obligation of the parties when this happens. Such terms are typically required to extend the economics terms, for the purpose of producing the final legal contractual form of the Transaction. /// public class TransactionAdditionalTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TransactionAdditionalTermsMeta(); [JsonConstructor] public TransactionAdditionalTerms(EquityAdditionalTerms? equityAdditionalTerms, FxAdditionalTerms? foreignExchangeAdditionalTerms, string? commoditiesAdditionalTerms, string? creditAdditionalTerms, string? interestRateAdditionalTerms, string? digitalAssetAdditionalTerms) { EquityAdditionalTerms = equityAdditionalTerms; ForeignExchangeAdditionalTerms = foreignExchangeAdditionalTerms; CommoditiesAdditionalTerms = commoditiesAdditionalTerms; CreditAdditionalTerms = creditAdditionalTerms; InterestRateAdditionalTerms = interestRateAdditionalTerms; DigitalAssetAdditionalTerms = digitalAssetAdditionalTerms; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public EquityAdditionalTerms? EquityAdditionalTerms { get; } public FxAdditionalTerms? ForeignExchangeAdditionalTerms { get; } public string? CommoditiesAdditionalTerms { get; } public string? CreditAdditionalTerms { get; } public string? InterestRateAdditionalTerms { get; } public string? DigitalAssetAdditionalTerms { get; } } /// /// Defines the movement of cash, securities or commodities between two parties on a date. /// public class Transfer : AbstractRosettaModelObject, ITransferBase { private static readonly IRosettaMetaData metaData = new TransferMeta(); [JsonConstructor] public Transfer(SettlementOrigin? settlementOrigin, Reset? resetOrigin, TransferExpression transferExpression, IEnumerable identifier, NonNegativeQuantity quantity, Observable? observable, PartyReferencePayerReceiver payerReceiver, AdjustableOrAdjustedOrRelativeDate settlementDate) { SettlementOrigin = settlementOrigin; ResetOrigin = resetOrigin; TransferExpression = transferExpression; Identifier = identifier; Quantity = quantity; Observable = observable; PayerReceiver = payerReceiver; SettlementDate = settlementDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the origin to the transfer as a reference for lineage purposes, whether it originated from trade level settlement terms or from payment terms on an economic payout. /// public SettlementOrigin? SettlementOrigin { get; } /// /// Represents the reset and observation values that were used to determine the transfer amount. /// public Reset? ResetOrigin { get; } /// /// Specifies a transfer expression (cash price, performance amount, scheduled payment amount, etc.) to define the nature of the transfer amount and its source. /// public TransferExpression TransferExpression { get; } /// public IEnumerable Identifier { get; } /// public NonNegativeQuantity Quantity { get; } /// public Observable? Observable { get; } /// public PartyReferencePayerReceiver PayerReceiver { get; } /// public AdjustableOrAdjustedOrRelativeDate SettlementDate { get; } } public class TransferBase : AbstractRosettaModelObject, ITransferBase { private static readonly IRosettaMetaData metaData = new TransferBaseMeta(); [JsonConstructor] public TransferBase(IEnumerable identifier, NonNegativeQuantity quantity, Observable? observable, PartyReferencePayerReceiver payerReceiver, AdjustableOrAdjustedOrRelativeDate settlementDate) { Identifier = identifier; Quantity = quantity; Observable = observable; PayerReceiver = payerReceiver; SettlementDate = settlementDate; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// public IEnumerable Identifier { get; } /// public NonNegativeQuantity Quantity { get; } /// public Observable? Observable { get; } /// public PartyReferencePayerReceiver PayerReceiver { get; } /// public AdjustableOrAdjustedOrRelativeDate SettlementDate { get; } } /// /// Specifies a transfer expression (cash price, performance amount, scheduled payment amount, etc.) to define the nature of the transfer amount and its source. /// public class TransferExpression : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TransferExpressionMeta(); [JsonConstructor] public TransferExpression(Enums.FeeType? priceTransfer, ScheduledTransfer? scheduledTransfer) { PriceTransfer = priceTransfer; ScheduledTransfer = scheduledTransfer; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies a transfer amount exchanged as a price or fee for entering into a Business Event, e.g. Premium, Termination fee, Novation fee. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FeeType? PriceTransfer { get; } /// /// Specifies a transfer created from a scheduled or contingent event on a contract, e.g. Exercise, Performance, Credit Event /// public ScheduledTransfer? ScheduledTransfer { get; } } /// /// Defines the payout on which to create a Transfer along with all necessary resets. /// public class TransferInstruction : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TransferInstructionMeta(); [JsonConstructor] public TransferInstruction(IEnumerable transferState) { TransferState = transferState; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the terms and state of a transfers. /// public IEnumerable TransferState { get; } } /// /// Defines the fundamental financial information associated with a Transfer event. Each TransferState specifies where a Transfer is in its life-cycle. TransferState is a root type and as such, can be created independently to any other CDM data type, but can also be used as part of the CDM Event Model. /// public class TransferState : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TransferStateMeta(); [JsonConstructor] public TransferState(Transfer transfer, Enums.TransferStatus? transferStatus, _MetaFields? meta) { Transfer = transfer; TransferStatus = transferStatus; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Represents the Transfer that has been effected by a business or life-cycle event. /// public Transfer Transfer { get; } /// /// Represents the State of the Transfer through its life-cycle. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TransferStatus? TransferStatus { get; } public _MetaFields? Meta { get; } } /// /// Trigger point at which feature is effective. /// public class Trigger : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TriggerMeta(); [JsonConstructor] public Trigger(decimal? level, decimal? levelPercentage, CreditEvents? creditEvents, ReferenceWithMetaCreditEvents? creditEventsReference, Enums.TriggerType? triggerType, Enums.TriggerTimeType? triggerTimeType) { Level = level; LevelPercentage = levelPercentage; CreditEvents = creditEvents; CreditEventsReference = creditEventsReference; TriggerType = triggerType; TriggerTimeType = triggerTimeType; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The trigger level. /// public decimal? Level { get; } /// /// The trigger level percentage. /// public decimal? LevelPercentage { get; } public CreditEvents? CreditEvents { get; } public ReferenceWithMetaCreditEvents? CreditEventsReference { get; } /// /// The Triggering condition. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TriggerType? TriggerType { get; } /// /// The valuation time type of knock condition. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.TriggerTimeType? TriggerTimeType { get; } } /// /// Observation point for trigger. /// public class TriggerEvent : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TriggerEventMeta(); [JsonConstructor] public TriggerEvent(IEnumerable schedule, DateList? triggerDates, Trigger trigger, FeaturePayment? featurePayment) { Schedule = schedule; TriggerDates = triggerDates; Trigger = trigger; FeaturePayment = featurePayment; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// A derivative schedule. /// public IEnumerable Schedule { get; } /// /// The trigger Dates. /// public DateList? TriggerDates { get; } /// /// The trigger level /// public Trigger Trigger { get; } /// /// The feature payment, i.e. the payment made following trigger occurrence. /// public FeaturePayment? FeaturePayment { get; } } public class Tx : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new TxMeta(); [JsonConstructor] public Tx(New newTx, string tradDt, string tradgCpcty, Qty qty, Pric pric, string tradVn, string ctryOfBrnch) { NewTx = newTx; TradDt = tradDt; TradgCpcty = tradgCpcty; Qty = qty; Pric = pric; TradVn = tradVn; CtryOfBrnch = ctryOfBrnch; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public New NewTx { get; } public string TradDt { get; } public string TradgCpcty { get; } public Qty Qty { get; } public Pric Pric { get; } public string TradVn { get; } public string CtryOfBrnch { get; } } /// /// A class to specify a set of legal entities which are part of a legal agreement beyond the two contracting parties to that agreement. This data representation reflects the ISDA Create representation. /// public class UmbrellaAgreement : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new UmbrellaAgreementMeta(); [JsonConstructor] public UmbrellaAgreement(bool isApplicable, string? language, IEnumerable parties) { IsApplicable = isApplicable; Language = language; Parties = parties; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The determination of whether Umbrella Agreement terms are Applicable (True), or Not Applicable (False) /// public bool IsApplicable { get; } /// /// The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement. /// public string? Language { get; } /// /// Underlying principals to the umbrella agreement. /// public IEnumerable Parties { get; } } /// /// A class to specify the legal entities that are part of the umbrella agreement. /// public class UmbrellaAgreementEntity : AbstractRosettaModelObject, ILegalEntity { private static readonly IRosettaMetaData metaData = new UmbrellaAgreementEntityMeta(); [JsonConstructor] public UmbrellaAgreementEntity(string? terms, IEnumerable entityId, FieldWithMetaString name, _MetaFields? meta) { Terms = terms; EntityId = entityId; Name = name; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The terms that might be associated with each party to the umbrella agreement. /// public string? Terms { get; } /// public IEnumerable EntityId { get; } /// public FieldWithMetaString Name { get; } public _MetaFields? Meta { get; } } /// /// Where parties describe any substitution terms. /// public class UnderlierSubstitutionProvision : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new UnderlierSubstitutionProvisionMeta(); [JsonConstructor] public UnderlierSubstitutionProvision(IEnumerable whoMaySubstitute, IEnumerable substitutionBeSpokeTerms, IEnumerable substitutionTriggerEvents, Enums.CounterpartyRole? disputingParty) { WhoMaySubstitute = whoMaySubstitute; SubstitutionBeSpokeTerms = substitutionBeSpokeTerms; SubstitutionTriggerEvents = substitutionTriggerEvents; DisputingParty = disputingParty; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Designates which Counterparty to the transaction who has the right to trigger a substitution or to provide related determination e.g. for instance to qualify the effectiveness of an Event which may be a trigger for substitution, determine the replacement Share to substitute, etc. ; cardinality of this object is 2, in case parties jointly have this role. /// [JsonConverter(typeof(StringEnumConverter))] public IEnumerable WhoMaySubstitute { get; } /// /// Where parties describe any substitution terms e.g. for instance the election criteria for an Asset to be eligible as the Substitute Asset to the prior Affected Asset in terms of sector of activity, currency, market capitalisation, liquidity, volatility, or any additional features that parties would agree to take into considerations, etc. /// public IEnumerable SubstitutionBeSpokeTerms { get; } /// /// Where the parties may optionnally explictly specify the list of Events to be considered as a trigger for a Substitution. /// public IEnumerable SubstitutionTriggerEvents { get; } /// /// Where the party who is not granted with the substitution role at least has a right to dispute the determination given by the counterparty with such role. As an example, a given PartyA is the unique Counterparty with the Role of WhoMaySubstitute, yet PartyB could be Disputing Party in regard of such Role. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CounterpartyRole? DisputingParty { get; } } public class UndrlygInstrm : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new UndrlygInstrmMeta(); [JsonConstructor] public UndrlygInstrm(Swp swp) { Swp = swp; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public Swp Swp { get; } } /// /// Unit contract model for security valuation, e.g. for equity, modelled onto UnitContract.model in FpML. /// public class UnitContractValuationModel : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new UnitContractValuationModelMeta(); [JsonConstructor] public UnitContractValuationModel(Quantity numberOfUnits, Money unitPrice) { NumberOfUnits = numberOfUnits; UnitPrice = unitPrice; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The number of units (index or securities). /// public Quantity NumberOfUnits { get; } /// /// The price of each unit. /// public Money UnitPrice { get; } } /// /// Defines the unit to be used for price, quantity, or other purposes /// public class UnitType : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new UnitTypeMeta(); [JsonConstructor] public UnitType(Enums.CapacityUnit? capacityUnit, Enums.WeatherUnit? weatherUnit, Enums.FinancialUnit? financialUnit, FieldWithMetaString? currency) { CapacityUnit = capacityUnit; WeatherUnit = weatherUnit; FinancialUnit = financialUnit; Currency = currency; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Provides an enumerated value for a capacity unit, generally used in the context of defining quantities for commodities. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.CapacityUnit? CapacityUnit { get; } /// /// Provides an enumerated values for a weather unit, generally used in the context of defining quantities for commodities. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.WeatherUnit? WeatherUnit { get; } /// /// Provides an enumerated value for financial units, generally used in the context of defining quantities for securities. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FinancialUnit? FinancialUnit { get; } /// /// Defines the currency to be used as a unit for a price, quantity, or other purpose. /// public FieldWithMetaString? Currency { get; } } /// /// Defines the value of an investment, asset, or security /// public class Valuation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationMeta(); [JsonConstructor] public Valuation(Money amount, ZonedDateTime timestamp, Enums.ValuationType? method, Enums.ValuationSource? source, decimal? delta, Enums.PriceTiming? valuationTiming, Price? priceComponent) { Amount = amount; Timestamp = timestamp; Method = method; Source = source; Delta = delta; ValuationTiming = valuationTiming; PriceComponent = priceComponent; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Current value of the outstanding contract /// public Money Amount { get; } /// /// Date and time of the last valuation marked to market, provided by the central counterparty (CCP) or calculated using the current or last available market price of the inputs. /// public ZonedDateTime Timestamp { get; } /// /// Method used for the valuation of the transaction by the valuation party. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ValuationType? Method { get; } /// /// Source of the valuation of the transaction by the valuation party. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.ValuationSource? Source { get; } /// /// The ratio of the change in the price of a derivative transaction to the change in the price of the underlying. This field is applicable only to options and swaptions. /// public decimal? Delta { get; } /// /// Denotes when the valuation was sourced during a business day. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.PriceTiming? ValuationTiming { get; } /// /// Denotes the price used to compute the valuation. /// public Price? PriceComponent { get; } } /// /// A single object that represents the different methods to specify a valuation date, as used for cash settlement. The Single / Multiple ValuationDate is used for the determination of recovery in a credit event, the RelativeDateOffset is used for cash-settled option, and FxFixingDate is used for cross-currency settlement. /// public class ValuationDate : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationDateMeta(); [JsonConstructor] public ValuationDate(SingleValuationDate? singleValuationDate, MultipleValuationDates? multipleValuationDates, RelativeDateOffset? valuationDate, FxFixingDate? fxFixingDate, AdjustableDates? fxFixingSchedule) { SingleValuationDate = singleValuationDate; MultipleValuationDates = multipleValuationDates; ValuationDateValue = valuationDate; FxFixingDate = fxFixingDate; FxFixingSchedule = fxFixingSchedule; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Where single valuation date is specified as being applicable for cash settlement, this element specifies the number of business days after satisfaction of all conditions to settlement when such valuation date occurs. ISDA 2003 Term: Single Valuation Date. /// public SingleValuationDate? SingleValuationDate { get; } /// /// Where multiple valuation dates are specified as being applicable for cash settlement, this element specifies (a) the number of applicable valuation dates, and (b) the number of business days after satisfaction of all conditions to settlement when the first such valuation date occurs, and (c) the number of business days thereafter of each successive valuation date. ISDA 2003 Term: Multiple Valuation Dates. /// public MultipleValuationDates? MultipleValuationDates { get; } /// /// The date on which the cash settlement amount will be determined according to the cash settlement method if the parties have not otherwise been able to agree the cash settlement amount. This attribute was formerly part of 'OptionCashSettlement', which is now being harmonised into a common 'CashSettlementTerms' that includes a 'ValuationDate'. /// [JsonProperty(PropertyName = "valuationDate")] public RelativeDateOffset? ValuationDateValue { get; } /// /// The date on which the currency rate will be determined for the purpose of specifying the amount in deliverable currency. This attribute was formerly part of 'NonDeliverableSettlement', which is now being harmonised into a common 'CashSettlementTerms' that includes a 'ValuationDate'. /// public FxFixingDate? FxFixingDate { get; } /// /// The date, when expressed as a schedule of date(s), on which the currency rate will be determined for the purpose of specifying the amount in deliverable currency. This attribute was formerly part of 'NonDeliverableSettlement', which is now being harmonised into a common 'CashSettlementTerms' that includes a 'ValuationDate'. /// public AdjustableDates? FxFixingSchedule { get; } } /// /// Defines how and when a performance type option or performance type swap is to be valued, including initial, interim and final valuation dates. /// public class ValuationDates : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationDatesMeta(); [JsonConstructor] public ValuationDates(PerformanceValuationDates? valuationDatesInitial, PerformanceValuationDates? valuationDatesInterim, PerformanceValuationDates valuationDatesFinal) { ValuationDatesInitial = valuationDatesInitial; ValuationDatesInterim = valuationDatesInterim; ValuationDatesFinal = valuationDatesFinal; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Specifies the initial valuation dates of the underlyer. /// public PerformanceValuationDates? ValuationDatesInitial { get; } /// /// Specifies the interim valuation dates of the underlyer. /// public PerformanceValuationDates? ValuationDatesInterim { get; } /// /// Specifies the final valuation dates of the underlyer. /// public PerformanceValuationDates ValuationDatesFinal { get; } } /// /// Specifies the parameters required to obtain a valuation, including the source, quotation method (bid, mid etc.) and any applicable quotation amount. /// public class ValuationMethod : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationMethodMeta(); [JsonConstructor] public ValuationMethod(ValuationSource valuationSource, Enums.QuotationRateType? quotationMethod, Enums.ValuationMethod? valuationMethod, Money? quotationAmount, Money? minimumQuotationAmount, CashCollateralValuationMethod? cashCollateralValuationMethod) { ValuationSource = valuationSource; QuotationMethod = quotationMethod; ValuationMethodValue = valuationMethod; QuotationAmount = quotationAmount; MinimumQuotationAmount = minimumQuotationAmount; CashCollateralValuationMethod = cashCollateralValuationMethod; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The source for obtaining a valuation. This may come from some information source (e.g. Reuters), from a rate option fixing (e.g. FX fixing for cross-currency settlement), or from a set of reference banks. This is a mandatory attribute as the valuation method relies on one of those sources to be specified. /// public ValuationSource ValuationSource { get; } /// /// The type of price quotations to be requested from dealers when determining the market value of the reference obligation for purposes of cash settlement, or which rate quote is to be observed for a fixing. For example, Bid, Offer, Mid-market or Exercising Party Pays. ISDA 2003 Term: Quotation Method. The meaning of Exercising Party Pays is defined in the 2000 ISDA Definitions, Section 17.2. Certain Definitions Relating to Cash Settlement, paragraph (j). /// [JsonConverter(typeof(StringEnumConverter))] public Enums.QuotationRateType? QuotationMethod { get; } /// /// The ISDA defined methodology for determining the final price of the reference obligation for purposes of cash settlement. (ISDA 2003 Term: Valuation Method). For example, Market, Highest etc. /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty(PropertyName = "valuationMethod")] public Enums.ValuationMethod? ValuationMethodValue { get; } /// /// In the determination of a cash settlement amount, if weighted average quotations are to be obtained, the quotation amount specifies an upper limit to the outstanding principal balance of the reference obligation for which the quote should be obtained. If not specified, the ISDA definitions provide for a fallback amount equal to the floating rate payer calculation amount. ISDA 2003 Term: Quotation Amount. /// public Money? QuotationAmount { get; } /// /// In the determination of a cash settlement amount, if weighted average quotations are to be obtained, the minimum quotation amount specifies a minimum intended threshold amount of outstanding principal balance of the reference obligation for which the quote should be obtained. If not specified, the ISDA definitions provide for a fallback amount of the lower of either USD 1,000,000 (or its equivalent in the relevant obligation currency) or the quotation amount. ISDA 2003 Term: Minimum Quotation Amount. /// public Money? MinimumQuotationAmount { get; } /// /// Specifies the parameters representing several mid-market valuation and replacement value methods. /// public CashCollateralValuationMethod? CashCollateralValuationMethod { get; } } /// /// Specifies how long to wait to get a quote from a settlement rate option upon a price source disruption. /// public class ValuationPostponement : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationPostponementMeta(); [JsonConstructor] public ValuationPostponement(int maximumDaysOfPostponement) { MaximumDaysOfPostponement = maximumDaysOfPostponement; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The maximum number of days to wait for a quote from the disrupted settlement rate option before proceeding to the next method. /// public int MaximumDaysOfPostponement { get; } } /// /// A class describing the method for obtaining a settlement rate, specified through either an information source (page), a settlement rate option (fixing) or by using quotes from reference banks. /// public class ValuationSource : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationSourceMeta(); [JsonConstructor] public ValuationSource(ReferenceWithMetaQuotedCurrencyPair? quotedCurrencyPair, FxSpotRateSource? informationSource, SettlementRateOption? settlementRateOption, ReferenceBanks? referenceBanks, AncillaryEntity? dealerOrCCP) { QuotedCurrencyPair = quotedCurrencyPair; InformationSource = informationSource; SettlementRateOption = settlementRateOption; ReferenceBanks = referenceBanks; DealerOrCCP = dealerOrCCP; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Defines the two currencies for an FX trade and the quotation relationship between the two currencies. This attribute was formerly part of 'fxSettlementTerms', which is now being harmonised into a common 'CashSettlementTerms' that includes a 'ValuationDate'. /// public ReferenceWithMetaQuotedCurrencyPair? QuotedCurrencyPair { get; } /// /// The information source where a published or displayed market rate will be obtained, e.g. Telerate Page 3750. /// public FxSpotRateSource? InformationSource { get; } /// /// The rate option to use for the fixing. Currently only applicable to foreign exchange fixing in case of cross-currency settlement. /// public SettlementRateOption? SettlementRateOption { get; } /// /// A container for a set of reference institutions that may be called upon to provide rate quotations as part of the method to determine the applicable cash settlement amount. If institutions are not specified, it is assumed that reference institutions will be agreed between the parties on the exercise date, or in the case of swap transaction to which mandatory early termination is applicable, the cash settlement valuation date. /// public ReferenceBanks? ReferenceBanks { get; } /// /// Holds an identifier for the reference entity that is agreed by both parties as a basis for cash settlement calculations. This could be a dealer from whom quotations are obtained by the calculation agent on the reference obligation for purposes of cash settlement in a credit event. ISDA 2003 Term: Dealer. This could be the clearing organization (CCP, DCO) to which the trade should be cleared, as applicable for cash-settled swaptions. /// public AncillaryEntity? DealerOrCCP { get; } } public class ValuationTerms : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new ValuationTermsMeta(); [JsonConstructor] public ValuationTerms(bool? futuresPriceValuation, bool? optionsPriceValuation, int? numberOfValuationDates, AdjustableRelativeOrPeriodicDates? dividendValuationDates, Enums.FPVFinalPriceElectionFallback? fPVFinalPriceElectionFallback, bool? multipleExchangeIndexAnnexFallback, bool? componentSecurityIndexAnnexFallback) { FuturesPriceValuation = futuresPriceValuation; OptionsPriceValuation = optionsPriceValuation; NumberOfValuationDates = numberOfValuationDates; DividendValuationDates = dividendValuationDates; FPVFinalPriceElectionFallback = fPVFinalPriceElectionFallback; MultipleExchangeIndexAnnexFallback = multipleExchangeIndexAnnexFallback; ComponentSecurityIndexAnnexFallback = componentSecurityIndexAnnexFallback; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The official settlement price as announced by the related exchange is applicable, in accordance with the ISDA 2002 definitions. /// public bool? FuturesPriceValuation { get; } /// /// The official settlement price as announced by the related exchange is applicable, in accordance with the ISDA 2002 definitions /// public bool? OptionsPriceValuation { get; } /// /// The number of valuation dates between valuation start date and valuation end date. /// public int? NumberOfValuationDates { get; } /// /// Specifies the dividend valuation dates of the swap. /// public AdjustableRelativeOrPeriodicDates? DividendValuationDates { get; } /// /// Specifies the fallback provisions for Hedging Party in the determination of the Final Price. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.FPVFinalPriceElectionFallback? FPVFinalPriceElectionFallback { get; } /// /// For an index option transaction, a flag to indicate whether a relevant Multiple Exchange Index Annex is applicable to the transaction. This annex defines additional provisions which are applicable where an index is comprised of component securities that are traded on multiple exchanges. /// public bool? MultipleExchangeIndexAnnexFallback { get; } /// /// For an index option transaction, a flag to indicate whether a relevant Component Security Index Annex is applicable to the transaction. /// public bool? ComponentSecurityIndexAnnexFallback { get; } } public class VarianceCapFloor : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new VarianceCapFloorMeta(); [JsonConstructor] public VarianceCapFloor(bool varianceCap, decimal? unadjustedVarianceCap, BoundedVariance? boundedVariance) { VarianceCap = varianceCap; UnadjustedVarianceCap = unadjustedVarianceCap; BoundedVariance = boundedVariance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// If present and true, then variance cap is applicable. /// public bool VarianceCap { get; } /// /// For use when varianceCap is applicable. Contains the scaling factor of the Variance Cap that can differ on a trade-by-trade basis in the European market. For example, a Variance Cap of 2.5^2 x Variance Strike Price has an unadjustedVarianceCap of 2.5. /// public decimal? UnadjustedVarianceCap { get; } /// /// Conditions which bound variance. The contract specifies one or more boundary levels. These levels are expressed as prices for confirmation purposes Underlyer price must be equal to or higher than Lower Barrier is known as Up Conditional Swap Underlyer price must be equal to or lower than Upper Barrier is known as Down Conditional Swap Underlyer price must be equal to or higher than Lower Barrier and must be equal to or lower than Upper Barrier is known as Barrier Conditional Swap. /// public BoundedVariance? BoundedVariance { get; } } public class VarianceReturnTerms : AbstractRosettaModelObject, IReturnTermsBase { private static readonly IRosettaMetaData metaData = new VarianceReturnTermsMeta(); [JsonConstructor] public VarianceReturnTerms(Price? varianceStrikePrice, Price? volatilityStrikePrice, VarianceCapFloor? varianceCapFloor, VolatilityCapFloor? volatilityCapFloor, NonNegativeQuantitySchedule? vegaNotionalAmount, Observable? exchangeTradedContractNearest, ValuationTerms valuationTerms, int? annualizationFactor, DividendApplicability? dividendApplicability, EquityUnderlierProvisions? equityUnderlierProvisions, bool? sharePriceDividendAdjustment, int expectedN, decimal? initialLevel, Enums.DeterminationMethod? initialLevelSource, bool? meanAdjustment, string? performance) { VarianceStrikePrice = varianceStrikePrice; VolatilityStrikePrice = volatilityStrikePrice; VarianceCapFloor = varianceCapFloor; VolatilityCapFloor = volatilityCapFloor; VegaNotionalAmount = vegaNotionalAmount; ExchangeTradedContractNearest = exchangeTradedContractNearest; ValuationTerms = valuationTerms; AnnualizationFactor = annualizationFactor; DividendApplicability = dividendApplicability; EquityUnderlierProvisions = equityUnderlierProvisions; SharePriceDividendAdjustment = sharePriceDividendAdjustment; ExpectedN = expectedN; InitialLevel = initialLevel; InitialLevelSource = initialLevelSource; MeanAdjustment = meanAdjustment; Performance = performance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Variance Strike Price in accordance with the ISDA 2011 Equity Derivatives Definitions. /// public Price? VarianceStrikePrice { get; } /// /// Volatility Strike Price in accordance with the ISDA 2011 Equity Derivatives Definitions. /// public Price? VolatilityStrikePrice { get; } /// /// Contains possible barriers for variance products, both variance-based and underlier price based /// public VarianceCapFloor? VarianceCapFloor { get; } /// /// Contains containing volatility-based barriers /// public VolatilityCapFloor? VolatilityCapFloor { get; } /// /// Vega Notional represents the approximate gain/loss at maturity for a 1% difference between RVol (realised vol) and KVol (strike vol). It does not necessarily represent the Vega Risk of the trade. /// public NonNegativeQuantitySchedule? VegaNotionalAmount { get; } /// /// Specification of the exchange traded contract nearest. /// public Observable? ExchangeTradedContractNearest { get; } /// public ValuationTerms ValuationTerms { get; } /// public int? AnnualizationFactor { get; } /// public DividendApplicability? DividendApplicability { get; } /// public EquityUnderlierProvisions? EquityUnderlierProvisions { get; } /// public bool? SharePriceDividendAdjustment { get; } /// public int ExpectedN { get; } /// public decimal? InitialLevel { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? InitialLevelSource { get; } /// public bool? MeanAdjustment { get; } /// public string? Performance { get; } } public class Velocity : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new VelocityMeta(); [JsonConstructor] public Velocity(int? periodMultiplier, Enums.PeriodTime? period) { PeriodMultiplier = periodMultiplier; Period = period; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public int? PeriodMultiplier { get; } [JsonConverter(typeof(StringEnumConverter))] public Enums.PeriodTime? Period { get; } } /// /// Contains volatility-based barriers. Volatility Cap needs to be specified in accordance with the ISDA 2011 Equity Derivatives Definitions. /// public class VolatilityCapFloor : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new VolatilityCapFloorMeta(); [JsonConstructor] public VolatilityCapFloor(bool applicable, decimal? totalVolatilityCap, decimal? volatilityCapFactor) { Applicable = applicable; TotalVolatilityCap = totalVolatilityCap; VolatilityCapFactor = volatilityCapFactor; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Indicates whether the volatility cap is applicable in accordance with the ISDA 2011 Equity Derivatives Definitions. Setting the element 'applicable' to 'False' - means No Volatility Cap and no 'totalVolatilityCap' or 'volatilityCapFactor' should be provided. Setting the element 'applicable' to 'True' - means Volatility Cap election, then 'totalVolatilityCap' or 'volatilityCapFactor' should be provided, otherwise it defaults to volatilityCapFactor=2.5. /// public bool Applicable { get; } /// /// Volatility Cap Amount in accordance with the ISDA 2011 Equity Derivatives Definitions. This means the Volatility Cap Amount election is a number. /// public decimal? TotalVolatilityCap { get; } /// /// Volatility Cap Amount in accordance with the ISDA 2011 Equity Derivatives Definitions. The Calculated VolCapAmt can be optionally provided. /// public decimal? VolatilityCapFactor { get; } } public class VolatilityReturnTerms : AbstractRosettaModelObject, IReturnTermsBase { private static readonly IRosettaMetaData metaData = new VolatilityReturnTermsMeta(); [JsonConstructor] public VolatilityReturnTerms(Price volatilityStrikePrice, VolatilityCapFloor? volatilityCapFloor, Observable? exchangeTradedContractNearest, ValuationTerms valuationTerms, int? annualizationFactor, DividendApplicability? dividendApplicability, EquityUnderlierProvisions? equityUnderlierProvisions, bool? sharePriceDividendAdjustment, int expectedN, decimal? initialLevel, Enums.DeterminationMethod? initialLevelSource, bool? meanAdjustment, string? performance) { VolatilityStrikePrice = volatilityStrikePrice; VolatilityCapFloor = volatilityCapFloor; ExchangeTradedContractNearest = exchangeTradedContractNearest; ValuationTerms = valuationTerms; AnnualizationFactor = annualizationFactor; DividendApplicability = dividendApplicability; EquityUnderlierProvisions = equityUnderlierProvisions; SharePriceDividendAdjustment = sharePriceDividendAdjustment; ExpectedN = expectedN; InitialLevel = initialLevel; InitialLevelSource = initialLevelSource; MeanAdjustment = meanAdjustment; Performance = performance; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Volatility Strike Price in accordance with the ISDA 2011 Equity Derivatives Definitions. /// public Price VolatilityStrikePrice { get; } /// /// Contains volatility-based barriers /// public VolatilityCapFloor? VolatilityCapFloor { get; } /// /// Specification of the exchange traded contract nearest. /// public Observable? ExchangeTradedContractNearest { get; } /// public ValuationTerms ValuationTerms { get; } /// public int? AnnualizationFactor { get; } /// public DividendApplicability? DividendApplicability { get; } /// public EquityUnderlierProvisions? EquityUnderlierProvisions { get; } /// public bool? SharePriceDividendAdjustment { get; } /// public int ExpectedN { get; } /// public decimal? InitialLevel { get; } /// [JsonConverter(typeof(StringEnumConverter))] public Enums.DeterminationMethod? InitialLevelSource { get; } /// public bool? MeanAdjustment { get; } /// public string? Performance { get; } } /// /// A single weighted averaging observation. /// public class WeightedAveragingObservation : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new WeightedAveragingObservationMeta(); [JsonConstructor] public WeightedAveragingObservation(ZonedDateTime? dateTime, int? observationNumber, decimal weight) { DateTime = dateTime; ObservationNumber = observationNumber; Weight = weight; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Observation date time, which should be used when literal observation dates are required. The CDM specifies that the zoned date time is to be expressed in accordance with ISO 8601, either as UTC as an offset to UTC. /// public ZonedDateTime? DateTime { get; } /// /// Observation number, which should be unique, within a series generated by a date schedule. /// public int? ObservationNumber { get; } /// /// Observation weight, which is used as a multiplier for the observation value. /// public decimal Weight { get; } } /// /// A collection of workflow steps which together makeup an entire workflow sequence. /// public class Workflow : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new WorkflowMeta(); [JsonConstructor] public Workflow(IEnumerable steps) { Steps = steps; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; public IEnumerable Steps { get; } } /// /// A class to specify workflow information, which is conceptually applicable to all lifecycle events. /// public class WorkflowState : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new WorkflowStateMeta(); [JsonConstructor] public WorkflowState(Enums.WorkflowStatus workflowStatus, string? comment, IEnumerable partyCustomisedWorkflow, Enums.WarehouseIdentity? warehouseIdentity) { WorkflowStatus = workflowStatus; Comment = comment; PartyCustomisedWorkflow = partyCustomisedWorkflow; WarehouseIdentity = warehouseIdentity; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// The workflow status indicator, e.g. Accepted, Rejected, ... /// [JsonConverter(typeof(StringEnumConverter))] public Enums.WorkflowStatus WorkflowStatus { get; } /// /// A comment field to be associated with the workflow, e.g. to specify why a transaction event was rejected by a party. /// public string? Comment { get; } /// /// Workflow data that is specific to certain market participants and is expressed as part of the CDM in a very generic manner, which can be party-specific. The initial use cases have been derived from the CME clearing and the DTCC TIW submissions. /// public IEnumerable PartyCustomisedWorkflow { get; } /// /// The identity of the warehouse, if any, that is executing that workflow step. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.WarehouseIdentity? WarehouseIdentity { get; } } /// /// A workflow step represents the state of a business event. The workflow step contains a reference to a previous WorkflowStep in order to preserve lineage. A workflow step is accepted if it contains a business event, proposed if proposedEvent is present and is rejected if the rejected flag is set. /// public class WorkflowStep : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new WorkflowStepMeta(); [JsonConstructor] public WorkflowStep(BusinessEvent? businessEvent, CounterpartyPositionBusinessEvent? counterpartyPositionBusinessEvent, EventInstruction? proposedEvent, bool? rejected, IEnumerable approval, ReferenceWithMetaWorkflowStep? previousWorkflowStep, EventInstruction? nextEvent, MessageInformation? messageInformation, IEnumerable timestamp, IEnumerable eventIdentifier, Enums.Action? action, IEnumerable party, IEnumerable account, Lineage? lineage, CreditLimitInformation? creditLimitInformation, WorkflowState? workflowState, _MetaFields? meta) { BusinessEvent = businessEvent; CounterpartyPositionBusinessEvent = counterpartyPositionBusinessEvent; ProposedEvent = proposedEvent; Rejected = rejected; Approval = approval; PreviousWorkflowStep = previousWorkflowStep; NextEvent = nextEvent; MessageInformation = messageInformation; Timestamp = timestamp; EventIdentifier = eventIdentifier; Action = action; Party = party; Account = account; Lineage = lineage; CreditLimitInformation = creditLimitInformation; WorkflowState = workflowState; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Life cycle event for the step. The businessEvent is optional when a proposedEvent or rejection are present. /// public BusinessEvent? BusinessEvent { get; } /// /// Documents the life cycle event for a position. /// public CounterpartyPositionBusinessEvent? CounterpartyPositionBusinessEvent { get; } /// /// The proposed event for a workflow step. The proposedEvent is optional when the businessEvent or rejection are present /// public EventInstruction? ProposedEvent { get; } /// /// Flags this step as rejected. /// public bool? Rejected { get; } /// /// Optional party approvals for the current workflow step. A workflow step can have any number of parties associated to it, thus this object is represented as a list. All parties that are expected to provide approval should have an item in this list that references them. /// public IEnumerable Approval { get; } /// /// Optional previous workflow step that provides lineage to workflow steps that precedes it. /// public ReferenceWithMetaWorkflowStep? PreviousWorkflowStep { get; } /// /// The intended next event can be specified, even if the instructions are not known yet. /// public EventInstruction? NextEvent { get; } /// /// Contains all information pertaining the FpML messaging header /// public MessageInformation? MessageInformation { get; } /// /// The set of timestamp(s) associated with the event as a collection of [dateTime, qualifier]. /// public IEnumerable Timestamp { get; } /// /// The identifier(s) that uniquely identify a lifecycle event. The unbounded cardinality is meant to provide the ability to associate identifiers that are issued by distinct parties. As an example, each of the parties to the event may choose to associate their own identifiers to the event. /// public IEnumerable EventIdentifier { get; } /// /// Specifies whether the event is a new, a correction or a cancellation. /// [JsonConverter(typeof(StringEnumConverter))] public Enums.Action? Action { get; } /// /// The specification of the event parties. This attribute is optional, as not applicable to certain events (e.g. most of the observations). /// public IEnumerable Party { get; } /// /// Optional account information that could be associated to the event. /// public IEnumerable Account { get; } /// /// The lineage attribute provides a linkage among lifecycle events through the globalKey hash value. One example is when a given lifecycle event is being corrected or cancelled. In such case, each subsequent event will have lineage into the prior version of that event. The second broad use case is when an event has a dependency upon either another event (e.g. the regular payment associated with a fix/float swap will have a lineage into the reset event, which will in turn have a lineage into the observation event for the floating rate and the contract) or a contract (e.g. the exercise of an option has a lineage into that option). /// public Lineage? Lineage { get; } public CreditLimitInformation? CreditLimitInformation { get; } /// /// The event workflow information, i.e. the workflow status, the associated comment and the partyCustomisedWorkflow which purpose is to provide the ability to associate custom workflow information to the CDM. /// public WorkflowState? WorkflowState { get; } public _MetaFields? Meta { get; } } /// /// Party approvals associated to the current WorkflowStep. /// public class WorkflowStepApproval : AbstractRosettaModelObject { private static readonly IRosettaMetaData metaData = new WorkflowStepApprovalMeta(); [JsonConstructor] public WorkflowStepApproval(bool approved, ReferenceWithMetaParty party, string? rejectedReason, EventTimestamp timestamp, _MetaFields? meta) { Approved = approved; Party = party; RejectedReason = rejectedReason; Timestamp = timestamp; Meta = meta; } /// [JsonIgnore] public override IRosettaMetaData MetaData => metaData; /// /// Flag denoting whether the workflow step is approved or not /// public bool Approved { get; } /// /// Reference to the Party who is approving/rejecting this workflow step /// public ReferenceWithMetaParty Party { get; } /// /// Optional reason for rejecting the workflow step /// public string? RejectedReason { get; } /// /// Timestamp of the approval /// public EventTimestamp Timestamp { get; } public _MetaFields? Meta { get; } } }