💰 BizTransaction Resource

The investment transaction processing engine of the 7G platform

BizTransaction is the immutable ledger for all investment movements. Handles deposits (cash→units), redemptions (units→cash), transfers (account-to-account), conversions (investment-to-investment), allotments, and quantity adjustments. Every transaction immediately updates Account Holdings.

8
Endpoints
7
Transaction Types
Permanent
Records
Real-time
Processing

Usage Notes

When

  • Process investment operations (deposits, redemptions, transfers, conversions)
  • Query transaction history for reconciliation and reporting
  • Execute quantity adjustments and position corrections

Requirements

  • Valid Bearer token with transaction permissions
  • Active Account and Investment records with valid pricing

Notes

  • All transactions are immutable - corrections require offsetting transactions
  • Transfer and Conversion operations create TWO linked BizTransaction records
  • ExternalBizTransactionId provides idempotency for integration failures
  • TransactionDate uses DateOnly format (YYYY-MM-DD), not DateTime

Available Endpoints

Query Operations

GET Get Transactions Filtering with 15 parameters and FilterField dot operators

Core Transaction Types

POST Deposit Cash → investment units conversion
POST Redemption Investment units → cash conversion
POST Transfer Account-to-account investment movement
POST Conversion Product-to-product investment conversion

Specialized Operations

POST Allotment Distribution-driven allocations (see Distribution workflow)
POST AdjustQuantity Relative quantity changes (±)
POST SetQuantity Absolute quantity replacement

Core Data Transfer Objects

BizTransaction operations use 7 specialized DTOs (106 total properties) tailored to each transaction type's unique requirements:

BizTransactionDepositDTO Deposit POST endpoint (21 properties) Cash deposit processing with entry fee calculations, cheque payment details, account/investment identifiers (including SecurityCode), payment method, and transaction date for settlement
public class BizTransactionDepositDTO
{
    public decimal Amount { get; set; }
    public string? Comment { get; set; }
    public string? ChequeAccountNumber { get; set; }
    public string? ChequeBankName { get; set; }
    public string? ChequeBSB { get; set; }
    public string? ChequeChequeNo { get; set; }
    public string? ChequeDrawer { get; set; }
    public decimal? EntryFeeAmount { get; set; }
    public decimal? EntryFeePercentage { get; set; }
    public decimal? EntryFeeDiscountPercentage { get; set; }
    public decimal? EntryFeeOverridePercentage { get; set; }
    public int? AccountID { get; set; }
    public string? ExternalAccountId { get; set; }
    public string? ExternalBizTransactionId { get; set; }
    public int InvestmentID { get; set; }
    public string? ExternalInvestmentId { get; set; }
    public string? SecurityCode { get; set; }
    public int? ProductID { get; set; } = 0;
    public string? ExternalProductId { get; set; }
    public int PaymentMethodID { get; set; }
    public DateOnly TransactionDate { get; set; }
}
BizTransactionRedemptionDTO Redemption POST endpoint (16 properties) Investment unit liquidation with flexible quantity/amount specification, exit fee calculations, redemption reason classification, optional price override, and account/investment identification
public class BizTransactionRedemptionDTO
{
    public int? ProductID { get; set; }
    public string? ExternalProductId { get; set; }
    public decimal? Amount { get; set; }
    public decimal? OverridePrice { get; set; }
    public string? Comment { get; set; }
    public int AccountID { get; set; }
    public string? ExternalAccountId { get; set; }
    public decimal ExitFeeAmount { get; set; }
    public decimal ExitFeePercent { get; set; }
    public string? ExternalBizTransactionId { get; set; }
    public int InvestmentID { get; set; }
    public string? ExternalInvestmentId { get; set; }
    public string? SecurityCode { get; set; }
    public decimal? Quantity { get; set; }
    public int ReasonID { get; set; }
    public DateOnly TransactionDate { get; set; }
}
BizTransactionTransferDTO Transfer POST endpoint (19 properties) Account-to-account investment movement with from/to account pattern, separate comments and external IDs, quantity specification, pricing method, and beneficial ownership flag. Creates TWO linked transactions
public class BizTransactionTransferDTO
{
    public decimal? Price { get; set; }
    public decimal? Quantity { get; set; }
    public string? PriceMethod { get; set; }
    public bool NoChangeOfBeneficialOwner { get; set; }
    public int InvestmentID { get; set; }
    public string? ExternalInvestmentId { get; set; }
    public string? SecurityCode { get; set; }
    public int? FromAccountID { get; set; } = 0;
    public string? FromExternalAccountId { get; set; }
    public string? FromComment { get; set; }
    public string? FromExternalBizTransactionId { get; set; }
    public int? ToAccountID { get; set; } = 0;
    public string? ToExternalAccountId { get; set; }
    public string? ToComment { get; set; }
    public string? ToExternalBizTransactionId { get; set; }
    public DateOnly TransactionDate { get; set; }
    public int? ProductID { get; set; } = 0;
    public string? ExternalProductId { get; set; }
}
BizTransactionConversionDTO Conversion POST endpoint (19 properties) Investment-to-investment switching with from/to investment pattern, conversion factor and method, and separate comments and external IDs. Creates TWO linked transactions
public class BizTransactionConversionDTO
{
    public decimal? Amount { get; set; }
    public decimal? ConversionFactor { get; set; }
    public int? ConversionMethodID { get; set; }
    public int? AccountID { get; set; }
    public string? ExternalAccountId { get; set; }
    public string? FromComment { get; set; }
    public string? FromExternalBizTransactionId { get; set; }
    public int FromInvestmentID { get; set; }
    public string? FromExternalInvestmentId { get; set; }
    public string? FromSecurityCode { get; set; }
    public decimal? Quantity { get; set; }
    public string? ToComment { get; set; }
    public string? ToExternalBizTransactionId { get; set; }
    public int ToInvestmentID { get; set; }
    public string? ToExternalInvestmentId { get; set; }
    public string? ToSecurityCode { get; set; }
    public DateOnly TransactionDate { get; set; }
    public int? ProductID { get; set; } = 0;
    public string? ExternalProductId { get; set; }
}
BizTransactionAllotmentDTO Allotment POST endpoint (15 properties) Distribution-driven unit allocation linking to originating deposit, with amount/quantity specification, price override capability, and Distribution workflow integration for dividend reinvestment and corporate actions
public class BizTransactionAllotmentDTO
{
    public int ProductID { get; set; }
    public string? ExternalProductId { get; set; }
    public string? ExternalBizTransactionId { get; set; }
    public decimal? Amount { get; set; }
    public decimal? Quantity { get; set; }
    public decimal? OverridePrice { get; set; }
    public string? Comment { get; set; }
    public int? AccountID { get; set; } = 0;
    public string? ExternalAccountId { get; set; }
    public DateOnly TransactionDate { get; set; }
    public int InvestmentID { get; set; }
    public string? ExternalInvestmentId { get; set; }
    public string? SecurityCode { get; set; }
    public long? DepositBizTransactionID { get; set; }
    public string? DepositExternalBizTransactionID { get; set; }
}
BizTransactionAdjustQuantityDTO AdjustQuantity POST endpoint (13 properties) Relative quantity modifications with adjustment type classification, flexible quantity/amount specification, comment field for audit trails, and account/investment identification for balance adjustments
public class BizTransactionAdjustQuantityDTO
{
    public string AdjustmentType { get; set; }
    public decimal? Quantity { get; set; }
    public decimal? Amount { get; set; }
    public string? Comment { get; set; }
    public DateOnly TransactionDate { get; set; }
    public int? AccountID { get; set; }
    public string? ExternalAccountId { get; set; }
    public string? ExternalBizTransactionId { get; set; }
    public int InvestmentID { get; set; }
    public string? ExternalInvestmentId { get; set; }
    public string? SecurityCode { get; set; }
    public int ProductID { get; set; }
    public string? ExternalProductId { get; set; }
}
BizTransactionSetQuantityDTO SetQuantity POST endpoint (11 properties) Absolute quantity replacement setting exact balance values for reconciliation, data migration, and error correction. Requires quantity value, comment for audit trail, and account/investment identification
public class BizTransactionSetQuantityDTO
{
    public decimal Quantity { get; set; }
    public string? Comment { get; set; }
    public int? AccountID { get; set; }
    public string? ExternalAccountId { get; set; }
    public string? ExternalBizTransactionId { get; set; }
    public int InvestmentID { get; set; }
    public string? ExternalInvestmentId { get; set; }
    public string? SecurityCode { get; set; }
    public int? ProductID { get; set; }
    public string? ExternalProductId { get; set; }
    public DateOnly TransactionDate { get; set; }
}

Filter Data Transfer Objects

GET endpoint uses a filter class to bind query parameters. This is a request-only structure for filtering and pagination.

BizTransactionFilter GET /BizTransaction 16 properties: 3 direct lookups (ProductID, ExternalProductId, Status) + 10 FilterField with dot operators (AccountNumber, InvestmentID, ExternalInvestmentId, SecurityCode, BizTransactionID, ExternalBizTransactionId, BizTransactionTypeID, AccountID, ExternalAccountId, TransactionDate) + 3 special (ShowClosing, PageNumber, PageSize). SecurityCode is the third investment identifier - see IDs & External References.
public class BizTransactionFilter
{
    public int? ProductID { get; set; }
    public string? ExternalProductId { get; set; }
    public FilterField<string?> AccountNumber { get; set; } = new FilterField<string?>();
    public FilterField<int?> InvestmentID { get; set; } = new FilterField<int?>();
    public FilterField<string?> ExternalInvestmentId { get; set; } = new FilterField<string?>();
    public FilterField<string?> SecurityCode { get; set; } = new FilterField<string?>();
    public string? Status { get; set; }
    public FilterField<long?> BizTransactionID { get; set; } = new FilterField<long?>();
    public FilterField<string?> ExternalBizTransactionId { get; set; } = new FilterField<string?>();
    public FilterField<int?> BizTransactionTypeID { get; set; } = new FilterField<int?>();
    public FilterField<int?> AccountID { get; set; } = new FilterField<int?>();
    public FilterField<string?> ExternalAccountId { get; set; } = new FilterField<string?>();
    public FilterField<DateOnly?> TransactionDate { get; set; } = new FilterField<DateOnly?>();
    public bool ShowClosing { get; set; }
    public int PageSize { get; set; } = 100;
    public int PageNumber { get; set; } = 1;
}

Business Rules & Constraints

Transaction Lifecycle & Immutability

  • Every transaction creates permanent BizTransaction records for tracking and reporting
  • Transaction workflow follows: Creation → Validation → Processing → Settlement → Final Status tracking
  • Once created, BizTransaction records cannot be deleted - only marked as RolledBack with compensating transactions
  • ExternalBizTransactionId provides idempotency key preventing duplicate transaction creation during integration failures

Dual-Transaction Patterns

  • Transfer operations: Create TWO BizTransaction records - from-account reduction and to-account increase, both within same investment class
  • Conversion operations: Create TWO BizTransaction records - from-investment redemption and to-investment deposit, both within same account
  • Dual-transaction responses return arrays containing both BizTransaction records for workflow visibility

Validation & Dependencies

  • TransactionDate Required: All 7 POST operations require valid TransactionDate (DateOnly format YYYY-MM-DD, not DateTime)
  • Service-layer validation applies business logic including account balance sufficiency, investment status, pricing availability, and business day enforcement
  • All transactions require valid BizEntity → Account → Investment → Product reference chain with active status verification
  • Investment must have active InvestmentPrice records for TransactionDate to enable pricing calculations
  • Transfer transactions validate source/destination account eligibility, ownership, and cross-entity authorization
  • Allotment transactions integrate with Distribution workflow and can link to originating deposit via depositBizTransactionID

Processing & Holdings Integration

  • Deposit/Redemption support both unit-based (quantity) and dollar-based (amount) processing with automatic conversion using InvestmentPrice
  • Entry fee calculations support four modes: fixed amount, percentage of deposit, discount on percentage, or override for promotional offers
  • Pricing integration supports current market prices, historical prices for backdated transactions, or manual override for special circumstances
  • All successful transactions immediately update Account Holdings balances with atomic quantity and value adjustments
  • Every transaction generates events that update account holdings and transaction history
  • See Report resource for transaction reporting and Holdings endpoint for balance verification

🔗 Transaction Workflow Integration

BizTransaction serves as the central transaction processing engine for the 7G ecosystem, with multiple upstream workflow resources triggering transaction creation and downstream resources consuming transaction data for reporting and balance verification.

📢

BizEvent Transaction Coordination

BizEvent notices trigger automatic BizTransaction creation when events transition from Pending to Processing state.

💸

Distribution Allotment Workflow

Distribution operations automatically create BizTransaction Allotment records for dividend reinvestment and distribution allocations.

💳

Payment Settlement Integration

PaymentDetail records enable Deposit and Redemption transaction settlement with validated bank accounts and payment routing.

📊

Holdings & Reporting Integration

Transactions atomically update Account Holdings balances and generate events for holdings tracking and reporting.