### Humane Transaction Flow ```graphql enum UserInsights { Transactions Scheduling } type DateTimeWhereOperator { _gt_: DateTime _lt_: DateTime } type TransactionWhere { transactionDate: DateTimeWhereOperator } enum RollUp { Day Week Month Quarter Year } type DateTimeGroupBy { rollup: RollUp } enum TransactionCategory { Entertainment Health Utilities } type TransactionCategoryInsights { transactionCategory: TransactionCategory percentage: Float! total: Float! count: Int } type Income { categories: [TransactionCategoryInsights] total: Float } type Expense { categories: [TransactionCategoryInsights] total: Float } type MonthsSummary { currencySymbol: String month: String income: Income expense: Expense saving: Float } type WeeksSummary { currencySymbol: String week: String income: Income expense: Expense saving: Float } union TransactionsSummaryRollup = MonthsSummary | WeeksSummary type TransactionsSummaryResponse { income expense ... on MonthsSummary { month } ... on WeeksSummary { week } } # User Current Insights type UserCurrentInsightTrend { name: String! value: String! } type UserCurrentInsights { insight: UserInsights! value: String! trends: [UserCurrentInsightTrend!]! } type Query { userCurrentInsights(orderBy: UserInsightOrderBy): [UserCurrentInsights!]! transactionsSummary(groupBy: TransactionGroupBy, where: TransactionWhere): TransactionsSummaryResponse } ``` ### Questions 1. Insights Screen is a broad one (May be it need another sprint to better design GraphQL based on possible scenarios). Not just thinking in terms of Transaction Flow 2. Why to use total prefix everywhere? 3. need explanation for TransactionOrderBy fields ```graphql # enums enum OrderBy { asc desc } enum UserInsights { Transactions Scheduling } enum PaymentFlow { Expenses Income } enum Chart { PieChart LineChart DonutChart } type Pagination { limit: Int offset: Date } type Rollup { Week Month Year } type DateTimeGroupBy { rollup: Rollup } type DateTimeWhereOperator { _gt: DateTime _lt: DateTime } # User Current Insights type UserCurrentInsights { insight: UserInsights! value: String! } # Transactions Summary Timeline type TransactionsSummaryTimelineGroupBy { transactionDate: DateTimeGroupBy } type TransactionsSummaryTimelineWhere { transactionDate: DateTimeWhereOperator } type TransactionsSummaryTimeline { totalExpense: Float! totalIncome: Float! totalSavings: Float! transactionDate: EnhancedDateTime! } # Transactions Category Summary enum TransactionCategory { Entertainment Health Utilities Salary } type TransactionsCategorySummaryWhere { transactionDate: DateTimeWhereOperator } type TransactionCategorySummaryData { paymentFlow: PaymentFlow! transactionCategory: TransactionCategory! totalPercentage: Float! totalAmount: Float! } type TransactionsCategorySummary { categories: [TransactionCategorySummaryData!]! totalAmount: Float! } # Transactions enum PaymentStatus { PAID UNPAID } enum TransactionType { WaterBill PhoneBill } type TransactionsOrderBy { transactionId: OrderBy! transactionCategory: OrderBy! transactionType: OrderBy! amount: OrderBy! transactionDate: OrderBy! paymentStatus: OrderBy! } type TransactionsGroupBy { transactionDate: DateTimeGroupBy } type TransactionsWhere { transactionDate: DateTimeWhereOperator } type TransactionDocument { documentUrl: String! } type Transaction { transactionId: ID! transactionCategory: TransactionCategory! transactionType: TransactionType! amount: Float! transactionDate: DateTime paymentDueDate: Date paymentPaidDate: Date paymentStatus: PaymentStatus transactionDocuments: [TransactionDocument!]! } type Query { userCurrentInsights(orderBy: UserInsightOrderBy): [UserCurrentInsights!]! transactionsSummaryTimeline(pagination: Pagination, groupBy: TransactionsSummaryTimelineGroupBy, where: TransactionSummaryTimelineWhere): [TransactionsSummaryTimeline]! transactionsCategorySummary(pagination: Pagination, where: TransactionsCategorySummaryWhere): TransactionsCategorySummary! transactions(pagination: Pagination, orderBy: TransactionsOrderBy, groupBy: TransactionsGroupBy, where: TransactionsWhere): [Transaction!]! } ```