EvaluationStateDto.java
package com.tdmconsult.ete.evaluation;
import static com.tdmconsult.ete.transactions.TradeTransaction.TransactionType.BUY;
import static com.tdmconsult.ete.transactions.TradeTransaction.TransactionType.SPLIT_BUY;
import com.tdmconsult.ete.configuration.EnumRegistryConfiguration.EnumValue;
import com.tdmconsult.ete.masterdata.SecurityDto;
import com.tdmconsult.ete.utils.JsonCurrencyAmountCents;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.experimental.Accessors;
import org.jspecify.annotations.Nullable;
@Data
@Accessors(chain = true)
public class EvaluationStateDto {
@Nullable
private SecurityDto security;
private int fiscalYearT0;
private int fiscalYearT1;
private boolean requiresEoyProcessing;
@Nullable
private String buySellPhrase;
@Nullable
private String profitLossPhrase;
@Nullable
private String eoyEvaluationPhrase;
private long totalQuantity;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal marketValue;
@Data
@Accessors(chain = true)
public static class RateDto {
@JsonCurrencyAmountCents
@Nullable
private BigDecimal value;
@Nullable
private LocalDate date;
@Nullable
private String type;
}
@Nullable
private RateDto evaluationRateT0;
@Nullable
private RateDto evaluationRateT1;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluationTotalAmountT0;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluationTotalAmountT1;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluationTotalDeltaT0;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluationTotalDeltaT1;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal totalBuyInFiscalYear;
@Nullable
@JsonCurrencyAmountCents
private BigDecimal totalSellInFiscalYear;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal totalProfitInFiscalYear;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal totalLossInFiscalYear;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal eoyDepreciationHr;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal eoyDepreciation;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal eoyAppreciationHr;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal eoyAppreciation;
private List<LineItem> items = new ArrayList<>();
@Data
@Accessors(chain = true)
public static class LineItem {
@Nullable
private String publicId;
@Nullable
private LocalDate tradingDate;
@Nullable
private EnumValue transactionType;
private long quantity;
@Nullable
private Long remainingQuantityT0;
@Nullable
private Long remainingQuantityT1;
public boolean isTopUp() {
return transactionType != null
&& (transactionType.name().equals(BUY.name()) || transactionType.name().equals(SPLIT_BUY.name()));
}
@JsonCurrencyAmountCents
@Nullable
private BigDecimal price;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal principleAmount;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal totalCost;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluatedAmountT0;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluatedAmountT1;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluationDeltaT0;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal evaluationDeltaT1;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal realizedPl;
private List<BucketChange> bucketChanges = new ArrayList<>();
}
@Data
@Accessors(chain = true)
public static class BucketChange {
@Nullable
private String sourceTransactionPublicId;
@Nullable
private String sourceDescription;
private long quantityBefore;
private long quantityAfter;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal otherChangeAmount;
@JsonCurrencyAmountCents
@Nullable
private BigDecimal ourChangeAmount;
}
}