Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ART Phase 3 - release #3070

Closed
Closed
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
package com.regnosys.cdm.example;

import cdm.base.datetime.AdjustableDates;
import cdm.base.math.NonNegativeQuantitySchedule;
import cdm.base.math.UnitType;
import cdm.base.math.metafields.FieldWithMetaNonNegativeQuantitySchedule;
import cdm.base.math.metafields.ReferenceWithMetaNonNegativeQuantitySchedule;
import cdm.base.staticdata.asset.common.Index;
import cdm.base.staticdata.identifier.AssignedIdentifier;
import cdm.base.staticdata.party.*;
import cdm.base.staticdata.party.metafields.ReferenceWithMetaParty;
import cdm.event.common.Trade;
import cdm.event.common.TradeIdentifier;
import cdm.observable.asset.*;
import cdm.observable.asset.metafields.FieldWithMetaPriceSchedule;
import cdm.product.asset.ForeignExchange;
import cdm.product.common.settlement.*;
import cdm.product.template.*;
import cdm.product.common.settlement.Cashflow;
import cdm.product.common.settlement.PriceQuantity;
import cdm.product.common.settlement.ResolvablePriceQuantity;
import cdm.product.template.NonTransferableProduct;
import cdm.product.template.TradeLot;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.regnosys.rosetta.common.hashing.GlobalKeyProcessStep;
import com.regnosys.rosetta.common.hashing.NonNullHashCollector;
Expand Down Expand Up @@ -73,23 +73,23 @@ private Trade createFxSwapContractExample() {

PriceQuantity priceQuantity = createPriceQuantity(currency1Str, quantity1, currency2Str, quantity2, rate);

Product underlier = createForeignExchangeUnderlier(
createExchangeCurrency(CounterpartyRoleEnum.PARTY_1, CounterpartyRoleEnum.PARTY_2),
createExchangeCurrency(CounterpartyRoleEnum.PARTY_2, CounterpartyRoleEnum.PARTY_1));
// Product underlier = createForeignExchangeUnderlier(
// createExchangeCurrency(CounterpartyRoleEnum.PARTY_1, CounterpartyRoleEnum.PARTY_2),
// createExchangeCurrency(CounterpartyRoleEnum.PARTY_2, CounterpartyRoleEnum.PARTY_1));

Date settlementDate = of(2001, 10, 25);

Date tradeDate = of(2001, 10, 23);

ContractualProduct contractualProduct = createContractualProduct(underlier, settlementDate);
// ContractualProduct contractualProduct = createContractualProduct(underlier, settlementDate);

TradeIdentifier citi123 = createIdentifier("CITI123", "http://www.citi.com/fx/trade-id", party1);
TradeIdentifier barc987 = createIdentifier("BARC987", "http://www.barclays.com/fx/trade-id", party2);

List<TradeIdentifier> identifiers = List.of(citi123, barc987);
List<Party> parties = List.of(party1, party2);

return createFxSwapContract(identifiers, parties, priceQuantity, contractualProduct, tradeDate, party1, party2);
return createFxSwapContract(identifiers, parties, priceQuantity, null, tradeDate, party1, party2);
}

private PriceQuantity createPriceQuantity(String currency1Str, long quantity1, String currency2Str, long quantity2, double rate) {
Expand Down Expand Up @@ -125,10 +125,10 @@ private PriceQuantity createPriceQuantity(String currency1Str, long quantity1, S
.setValue(BigDecimal.valueOf(quantity2))
.setUnit(UnitType.builder()
.setCurrencyValue(currency2Str))))
.setObservable(Observable.builder()
.setIndex(Index.builder()
.setForeignExchangeRate(ForeignExchangeRate.builder()
.setQuotedCurrencyPair(QuotedCurrencyPair.builder()
.setObservableValue(Observable.builder()
.setIndexValue(Index.builder()
.setForeignExchangeRateIndex(ForeignExchangeRateIndex.builder()
.setQuotedCurrencyPairValue(QuotedCurrencyPair.builder()
.setCurrency1Value(currency1Str)
.setCurrency2Value(currency2Str)
.setQuoteBasis(QuoteBasisEnum.CURRENCY_2_PER_CURRENCY_1)))))
Expand All @@ -138,37 +138,36 @@ private PriceQuantity createPriceQuantity(String currency1Str, long quantity1, S
private Trade createFxSwapContract(List<TradeIdentifier> identifiers,
List<Party> parties,
PriceQuantity priceQuantity,
ContractualProduct contractualProduct,
NonTransferableProduct product,
Date tradeDate,
Party party1,
Party party2) {
Trade trade = Trade.builder()
.addTradeIdentifier(identifiers)
.setTradableProduct(TradableProduct.builder()
.addCounterparty(Counterparty.builder()
.setPartyReferenceValue(party1)
.setRole(CounterpartyRoleEnum.PARTY_1))
.addCounterparty(Counterparty.builder()
.setPartyReferenceValue(party2)
.setRole(CounterpartyRoleEnum.PARTY_2))
.addTradeLot(TradeLot.builder()
.addPriceQuantity(priceQuantity))
.setProduct(Product.builder().setContractualProduct(contractualProduct)))
.addCounterparty(Counterparty.builder()
.setPartyReferenceValue(party1)
.setRole(CounterpartyRoleEnum.PARTY_1))
.addCounterparty(Counterparty.builder()
.setPartyReferenceValue(party2)
.setRole(CounterpartyRoleEnum.PARTY_2))
.addTradeLot(TradeLot.builder()
.addPriceQuantity(priceQuantity))
.setProduct(product)
.addParty(parties)
.setTradeDate(FieldWithMetaDate.builder().setValue(tradeDate).build())
.build();

return addGlobalKey(Trade.class, trade);
}

private Product createForeignExchangeUnderlier(Cashflow exchangedCurrency1, Cashflow exchangedCurrency2) {
return Product.builder()
.setForeignExchange(ForeignExchange.builder()
.setExchangedCurrency1(exchangedCurrency1)
.setExchangedCurrency2(exchangedCurrency2)
.build())
.build();
}
// private Product createForeignExchangeUnderlier(Cashflow exchangedCurrency1, Cashflow exchangedCurrency2) {
// return Product.builder()
// .setForeignExchange(ForeignExchange.builder()
// .setExchangedCurrency1(exchangedCurrency1)
// .setExchangedCurrency2(exchangedCurrency2)
// .build())
// .build();
// }

private Cashflow createExchangeCurrency(CounterpartyRoleEnum payer, CounterpartyRoleEnum receiver) {
return Cashflow.builder()
Expand All @@ -184,36 +183,36 @@ private Cashflow createExchangeCurrency(CounterpartyRoleEnum payer, Counterparty
}


private ContractualProduct createContractualProduct(Product underlier, Date settlementDate) {
return ContractualProduct.builder()
.setEconomicTerms(EconomicTerms.builder()
.setPayout(Payout.builder()
.addForwardPayout(ForwardPayout.builder()
.setSettlementTerms(SettlementTerms.builder()
.setSettlementDate(SettlementDate.builder()
.setAdjustableDates(AdjustableDates.builder()
.addAdjustedDateValue(settlementDate))))
.setUnderlier(underlier)))
.build());
}
// private ContractualProduct createContractualProduct(Product underlier, Date settlementDate) {
// return ContractualProduct.builder()
// .setEconomicTerms(EconomicTerms.builder()
// .setPayout(Payout.builder()
// .addForwardPayout(ForwardPayout.builder()
// .setSettlementTerms(SettlementTerms.builder()
// .setSettlementDate(SettlementDate.builder()
// .setAdjustableDates(AdjustableDates.builder()
// .addAdjustedDateValue(settlementDate))))
// .setUnderlier(underlier)))
// .build());
// }

private Party createParty(String partyId, String scheme) {
return Party.builder().addPartyId(PartyIdentifier.builder()
.setIdentifierValue(partyId)
.setMeta(MetaFields.builder().setScheme(scheme).build())
.build())
.build())
.build();
}

private TradeIdentifier createIdentifier(String identifier, String scheme, Party issuer) {
return TradeIdentifier.builder().addAssignedIdentifier(
AssignedIdentifier.builder().setIdentifier(
FieldWithMetaString.builder().setValue(identifier)
.setMeta(MetaFields.builder()
.setScheme(scheme)
.build())
AssignedIdentifier.builder().setIdentifier(
FieldWithMetaString.builder().setValue(identifier)
.setMeta(MetaFields.builder()
.setScheme(scheme)
.build())
.build())
.build())
.build())
.setIssuerReference(ReferenceWithMetaParty.builder()
.setGlobalReference(getGlobalReference(issuer))
.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
import cdm.base.staticdata.asset.rates.FloatingRateIndexEnum;
import cdm.base.staticdata.party.CounterpartyRoleEnum;
import cdm.base.staticdata.party.PayerReceiver;
import cdm.observable.asset.FloatingRateOption;
import cdm.observable.asset.FloatingRateIndex;
import cdm.observable.asset.Index;
import cdm.observable.asset.Price;
import cdm.observable.asset.PriceTypeEnum;
import cdm.observable.asset.metafields.ReferenceWithMetaPriceSchedule;
Expand Down Expand Up @@ -75,12 +76,13 @@ public static InterestRatePayout getFloatingRatePayout() {
.setPeriod(PeriodExtendedEnum.M)))

.setRateSpecification(RateSpecification.builder()
.setFloatingRate(FloatingRateSpecification.builder()
.setRateOptionValue(FloatingRateOption.builder()
.setFloatingRateIndexValue(FloatingRateIndexEnum.EUR_LIBOR_BBA)
.setIndexTenor(Period.builder()
.setPeriod(PeriodEnum.M)
.setPeriodMultiplier(6)))))
.setFloatingRateSpecification(FloatingRateSpecification.builder()
.setRateOptionValue(Index.builder()
.setFloatingRateIndex(FloatingRateIndex.builder()
.setFloatingRateIndexValue(FloatingRateIndexEnum.EUR_LIBOR_BBA)
.setIndexTenor(Period.builder()
.setPeriod(PeriodEnum.M)
.setPeriodMultiplier(6))))))

.setPayerReceiver(PayerReceiver.builder()
.setPayer(CounterpartyRoleEnum.PARTY_1)
Expand Down Expand Up @@ -129,7 +131,7 @@ public static InterestRatePayout getFixedRatePayout(BigDecimal fixedRate) {
.build())
.build())
.setRateSpecification(RateSpecification.builder()
.setFixedRate(FixedRateSpecification.builder()
.setFixedRateSpecification(FixedRateSpecification.builder()
.setRateSchedule(RateSchedule.builder()
.setPrice(ReferenceWithMetaPriceSchedule.builder()
.setReference(Reference.builder()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.regnosys.cdm.example;

import cdm.product.template.ContractualProduct;
import cdm.product.template.EconomicTerms;
import cdm.product.template.NonTransferableProduct;
import cdm.product.template.Payout;
import cdm.product.template.meta.EconomicTermsMeta;
import com.google.inject.Inject;
Expand Down Expand Up @@ -30,7 +30,7 @@ public class Qualification extends AbstractExample {
public void example() {
// Build an ContractualProduct containing an EconomicTerms with two InterestRatePayouts (e.g. an IRS).
//
var contractualProduct = ContractualProduct.builder()
var nonTransferableProduct = NonTransferableProduct.builder()
.setEconomicTerms(EconomicTerms.builder()
.setPayout(Payout.builder()
.addInterestRatePayout(getFixedRatePayout(BigDecimal.valueOf(0.05)))
Expand All @@ -45,7 +45,7 @@ public void example() {

// Use the QualifyResultsExtractor helper to easily make use of qualification results
//
var qualificationResult = new QualifyResultsExtractor<>(qualifyFunctions, contractualProduct.getEconomicTerms())
var qualificationResult = new QualifyResultsExtractor<>(qualifyFunctions, nonTransferableProduct.getEconomicTerms())
.getOnlySuccessResult()
.map(QualifyResult::getName)
.orElse("Failed to qualify");
Expand All @@ -57,7 +57,7 @@ public void example() {
// Stamp the qualification value in the correct location using the qualification handler
//
EconomicTermsQualificationHandler qualificationHandler = new EconomicTermsQualificationHandler();
var contractualProductBuilder = contractualProduct.toBuilder();
var contractualProductBuilder = nonTransferableProduct.toBuilder();
qualificationHandler.setQualifier(contractualProductBuilder, qualificationResult);
assertThat(qualificationHandler.getQualifier(contractualProductBuilder), is("InterestRate_IRSwap_FixedFloat"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,16 @@
import cdm.base.math.NonNegativeQuantitySchedule;
import cdm.base.math.UnitType;
import cdm.base.math.metafields.FieldWithMetaNonNegativeQuantitySchedule;
import cdm.base.staticdata.asset.common.*;
import cdm.base.staticdata.identifier.AssignedIdentifier;
import cdm.base.staticdata.party.*;
import cdm.base.staticdata.party.metafields.ReferenceWithMetaParty;
import cdm.event.common.*;
import cdm.legaldocumentation.common.ClosedState;
import cdm.observable.asset.Money;
import cdm.observable.asset.Observable;
import cdm.observable.asset.Price;
import cdm.observable.asset.PriceTypeEnum;
import cdm.observable.asset.metafields.FieldWithMetaPriceSchedule;
import cdm.product.common.settlement.*;
import cdm.product.template.Product;
import cdm.product.template.TradableProduct;
import cdm.product.template.TradeLot;
import com.regnosys.rosetta.common.hashing.GlobalKeyProcessStep;
import com.regnosys.rosetta.common.hashing.NonNullHashCollector;
Expand Down Expand Up @@ -70,11 +66,10 @@ public TradeState getTradeState(int tradeId, LocalDate tradeDate, String cusip,
.setExecutionVenue(LegalEntity.builder().setName(FieldWithMetaString.builder().setValue("Tradeweb").build()).build()))
.addTradeIdentifier(getIdentifier("tradeId" + tradeId, executingBrokerParty.getMeta().getExternalKey()))
.setTradeDate(FieldWithMetaDate.builder().setValue(Date.of(tradeDate)).build())
.setTradableProduct(TradableProduct.builder()
.setProduct(getProduct(cusip))
.addTradeLot(TradeLot.builder()
.addPriceQuantity(getPriceQuantity(quantity, cusip, cleanPrice, tradedCurrency,
getSettlementTerms(settlementDate, dirtyPrice, quantity, tradedCurrency)))))
// .setProduct(getProduct(cusip))
.addTradeLot(TradeLot.builder()
.addPriceQuantity(getPriceQuantity(quantity, cusip, cleanPrice, tradedCurrency,
getSettlementTerms(settlementDate, dirtyPrice, quantity, tradedCurrency))))
.addParty(clientParty)
.addParty(executingBrokerParty)
.addParty(counterpartyBrokerParty)
Expand Down Expand Up @@ -146,23 +141,23 @@ private PriceQuantity getPriceQuantity(double notional, String productIdentifier
.setValue(BigDecimal.valueOf(notional))
.setUnit(UnitType.builder()
.setCurrencyValue(tradedCurrency))))
.setObservable(Observable.builder()
.addProductIdentifierValue(ProductIdentifier.builder()
.setIdentifierValue(productIdentifier)
.setSource(ProductIdTypeEnum.CUSIP)))
.setSettlementTerms(settlementTerms)
// .setObservable(Observable.builder()
// .addProductIdentifierValue(ProductIdentifier.builder()
// .setIdentifierValue(productIdentifier)
// .setSource(ProductIdTypeEnum.CUSIP)))
// .setSettlementTerms(settlementTerms)
.build();
}

private Product getProduct(String productId) {
return Product.builder()
.setSecurity(Security.builder()
.addIdentifier(AssetIdentifier.builder()
.setIdentifierValue(productId)
.setIdentifierType(AssetIdTypeEnum.CUSIP))
.setSecurityType(SecurityTypeEnum.DEBT))
.build();
}
// private Product getProduct(String productId) {
// return Product.builder()
// .setSecurity(Security.builder()
// .addIdentifier(AssetIdentifier.builder()
// .setIdentifierValue(productId)
// .setIdentifierType(AssetIdTypeEnum.CUSIP))
// .setSecurityType(SecurityTypeEnum.DEBT))
// .build();
// }

private SettlementTerms getSettlementTerms(LocalDate settlementDate, double dirtyPrice, long quantity, String settlementCurrency) {
return SettlementTerms.builder()
Expand Down
Loading
Loading