/** * @dev Types for PnL calculations */ import { ContractsVersion } from "src/contracts/types"; import { BorrowingFee, GetBorrowingFeeContext, TradingFeesSubContext } from "../fees"; import { GetPairBorrowingFeeV2Context } from "../fees/borrowingV2"; import { GetPairFundingFeeContext } from "../fees/fundingFees"; import { TradeFeesData, LiquidationParams } from "../types"; /** * @dev Result of trade value calculation */ export type TradeValueResult = { tradeValue: number; pnlPercent: number; pnlCollateral: number; totalFees: number; }; /** * @dev Detailed fee breakdown */ export type FeeBreakdown = { borrowingV1: number; borrowingV2: number; funding: number; closing: number; opening?: number; total: number; }; /** * @dev Price impact breakdown for v10 */ export type PriceImpactBreakdown = { fixedSpread: number; skewImpact: number; cumulVolImpact: number; total: number; priceAfterImpact: number; }; /** * @dev Comprehensive PnL result with all details */ export type ComprehensivePnlResult = { pnlPercent: number; pnlCollateral: number; impactPnlPercent: number; impactPnlCollateral: number; priceImpact: { percent: number; collateral: number; }; tradeValue: number; uPnlCollateral: number; uPnlPercent: number; realizedPnlCollateral: number; realizedPnlPercent: number; fees: FeeBreakdown; isLiquidated: boolean; isProfitable: boolean; }; /** * @dev Context for comprehensive PnL calculations with nested sub-contexts */ export type GetComprehensivePnlContext = { core: { currentBlock: number; currentTimestamp: number; collateralPriceUsd: number; contractsVersion: ContractsVersion; }; borrowingV1?: GetBorrowingFeeContext; borrowingV2?: GetPairBorrowingFeeV2Context; funding?: GetPairFundingFeeContext; trading: TradingFeesSubContext; tradeData?: { tradeFeesData: TradeFeesData; liquidationParams: LiquidationParams; initialAccFees?: BorrowingFee.InitialAccFees; }; };