public record EquityAwardPoolUnits(
public class EquityAwardPool {
public string Id { get; set; }
public IssuerId IssuerId { get; set; }
public decimal ApprovedUnits { get; set; }
public EquityAwardTransactionId[] SummarizedTransactions { get; set; }
public decimal GetSize() => Units.Approved;
public class EquityAwardPoolSummaryBucket {
public string Id { get; set; }
public EquityAwardPoolUnits SummaryUnits { get; set; }
public class EquityAwardPoolSummary {
public EquityAwardPoolSummaryId Id { get; set; }
public IssuerId IssuerId { get; set; }
public EquityAwardPoolSummaryBucket[] SummaryUnits { get; set; }
public DateTime? LastSummariedTransactionDate { get; set; }
, EquityAwardTransaction transaction
if(await tracker.IsSummarized(Id, transaction.Id)){
if(transaction.Type == "Granted"){
Apply(new EquityAwardPoolUnitsSummaryChanged(Id, IssuerId, Units, NewUnits, transactionDetails))
var poolId = new EquityAwardPoolId(10);
var summaryId = new EquityAwardPoolSummaryId(poolId.Value);
public interface IEquityPoolTransactionSummaryTracker
Task<bool> IsSummarized(EquityAwardPoolId poolId, EquityAwardTransactionId transactionId);
public class EquityAwardPlan {
public string Id { get; set; }
public string? PoolId { get; set; }
public class EquityAwardTransaction {
public string Id { get; set; }
public IssuerId IssuerId { get; set; }
public string EquityAwardPoolId { get; set; }
public string EquityAWardPlanId { get; set; }
public DateTime Date { get; set; }
public string InstrumentType { get; set; }
public string? InstrumentId { get; set; }
public string TransactionType { get; set; }
public string GrantId { get; set; }
public UnitsTranche[] Units { get; set; }
public Dictionary<string, string> Properties { get; set ; }
public class UnitsTranche {
public decimal Units { get; set; }
public string TrancheId { get; set; }