import { Amount } from '../../../commonStateTypes/amount'; import { FetchStateAndError, ID } from '../../../commonStateTypes/common'; export interface InvoicingOverviewPeriod { month: number; year: number; } export interface InvoicingOverviewKPIs { activeCustomers: number; activeSubscriptions: number; arr: Amount; churnRate: number; mrr: Amount; ltv?: number; netRevenueRetention?: number; } export interface InvoicingRevenueDataPoint { month: string; revenue: Amount; arr?: Amount; } export interface InvoicingMRRDataPoint { month: string; mrr: Amount; churned?: number; expansion?: number; monthNum?: number; net?: number; new?: number; startMrr?: Amount; year?: number; } export interface InvoicingChurnDataPoint { month: string; rate: number; churned?: number; subscribers?: number; } export interface InvoicingPlanRevenuePoint { mrr: Amount; pct: number; planID: ID; } export interface InvoicingDashboardSummary { customerMovement: { churned: number; netChange: number; new: number; paused: number; reactivated: number; resumed: number; totalActive: number; totalActiveValue: Amount; }; failedPayments: { amount: Amount; count: number; }; grossRevenueRetention: { churn: Amount; contraction: Amount; grr: number; retainedArr: Amount; startingArr: Amount; }; mrrMovement: { churned: number; expansions: number; netChange: number; newSubscriptions: number; }; netRevenueRetention: { churn: Amount; contraction: Amount; endingArr: Amount; expansionArr: Amount; nrr: number; startingArr: Amount; }; outstanding: Amount; pastDueInvoices: { amount: Amount; count: number; }; upcomingInvoices: { amount: Amount; count: number; }; /** Period-over-period change in outstanding balance, e.g. -6.7. */ outstandingChangePct?: number; } export interface InvoicingOverviewData { churn: InvoicingChurnDataPoint[]; mrr: InvoicingMRRDataPoint[]; planRevenue: InvoicingPlanRevenuePoint[]; revenue: InvoicingRevenueDataPoint[]; kpis?: InvoicingOverviewKPIs; summary?: InvoicingDashboardSummary; } /** Independent fetch state for each of the six overview API calls. */ export interface InvoicingOverviewFetchStates { churnFetchState: FetchStateAndError; kpisFetchState: FetchStateAndError; mrrFetchState: FetchStateAndError; planRevenueFetchState: FetchStateAndError; revenueFetchState: FetchStateAndError; summaryFetchState: FetchStateAndError; } export interface InvoicingOverviewState extends InvoicingOverviewData, InvoicingOverviewFetchStates { period?: InvoicingOverviewPeriod; }