package models import ( "time" "github.com/google/uuid" ) type Expense struct { ID uuid.UUID `json:"id"` OrganizationID uuid.UUID `json:"organization_id"` OutletID uuid.UUID `json:"outlet_id"` Receiver string `json:"receiver"` TransactionDate time.Time `json:"transaction_date"` CodeNumber string `json:"code_number"` Status string `json:"status"` Description *string `json:"description"` Tax float64 `json:"tax"` Total float64 `json:"total"` Reserved1 *string `json:"reserved1"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ExpenseItem struct { ID uuid.UUID `json:"id"` ExpenseID uuid.UUID `json:"expense_id"` ChartOfAccountID uuid.UUID `json:"chart_of_account_id"` Item string `json:"item"` Description *string `json:"description"` Amount float64 `json:"amount"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ExpenseResponse struct { ID uuid.UUID `json:"id"` OrganizationID uuid.UUID `json:"organization_id"` OutletID uuid.UUID `json:"outlet_id"` Receiver string `json:"receiver"` TransactionDate time.Time `json:"transaction_date"` CodeNumber string `json:"code_number"` Status string `json:"status"` Description *string `json:"description"` Tax float64 `json:"tax"` Total float64 `json:"total"` Reserved1 *string `json:"reserved1"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Items []ExpenseItemResponse `json:"items,omitempty"` } type ExpenseItemResponse struct { ID uuid.UUID `json:"id"` ExpenseID uuid.UUID `json:"expense_id"` ChartOfAccountID uuid.UUID `json:"chart_of_account_id"` ChartOfAccountName string `json:"chart_of_account_name,omitempty"` Item string `json:"item"` Description *string `json:"description"` Amount float64 `json:"amount"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type CreateExpenseRequest struct { Receiver string `json:"receiver"` TransactionDate string `json:"transaction_date"` CodeNumber string `json:"code_number"` OutletID string `json:"outlet_id"` Status *string `json:"status,omitempty"` Description *string `json:"description"` Tax float64 `json:"tax"` Total float64 `json:"total"` Items []CreateExpenseItemRequest `json:"items"` } type CreateExpenseItemRequest struct { ChartOfAccountID string `json:"chart_of_account_id"` Item string `json:"item"` Description *string `json:"description,omitempty"` Amount float64 `json:"amount"` } type UpdateExpenseRequest struct { Receiver *string `json:"receiver,omitempty"` TransactionDate *string `json:"transaction_date,omitempty"` CodeNumber *string `json:"code_number,omitempty"` OutletID *string `json:"outlet_id,omitempty"` Status *string `json:"status,omitempty"` Description *string `json:"description,omitempty"` Tax *float64 `json:"tax,omitempty"` Total *float64 `json:"total,omitempty"` Reserved1 *string `json:"reserved1,omitempty"` Items []UpdateExpenseItemRequest `json:"items,omitempty"` } type UpdateExpenseItemRequest struct { ChartOfAccountID *string `json:"chart_of_account_id,omitempty"` Item *string `json:"item,omitempty"` Description *string `json:"description,omitempty"` Amount *float64 `json:"amount,omitempty"` } type ListExpenseRequest struct { Page int `json:"page"` Limit int `json:"limit"` Search string `json:"search,omitempty"` OutletID string `json:"outlet_id,omitempty"` Status string `json:"status,omitempty"` StartDate string `json:"start_date,omitempty"` EndDate string `json:"end_date,omitempty"` } type ListExpenseResponse struct { Expenses []*ExpenseResponse `json:"expenses"` TotalCount int `json:"total_count"` Page int `json:"page"` Limit int `json:"limit"` TotalPages int `json:"total_pages"` } type ExpenseAnalyticsRequest struct { OrganizationID uuid.UUID `json:"organization_id"` OutletID *uuid.UUID `json:"outlet_id,omitempty"` DateFrom time.Time `json:"date_from"` DateTo time.Time `json:"date_to"` GroupBy string `json:"group_by"` } type ExpenseAnalyticsResponse struct { OrganizationID uuid.UUID `json:"organization_id"` OutletID *uuid.UUID `json:"outlet_id,omitempty"` DateFrom time.Time `json:"date_from"` DateTo time.Time `json:"date_to"` GroupBy string `json:"group_by"` Summary ExpenseAnalyticsSummary `json:"summary"` Data []ExpenseAnalyticsData `json:"data"` CategoryData []ExpenseAnalyticsCategoryData `json:"category_data"` ItemData []ExpenseAnalyticsItemData `json:"item_data"` } type ExpenseAnalyticsSummary struct { TotalExpenses float64 `json:"total_expenses"` TotalExpenseCount int64 `json:"total_expense_count"` TotalTax float64 `json:"total_tax"` AverageExpenseValue float64 `json:"average_expense_value"` TotalCategories int64 `json:"total_categories"` TotalItems int64 `json:"total_items"` } type ExpenseAnalyticsData struct { Date time.Time `json:"date"` Expenses float64 `json:"expenses"` ExpenseCount int64 `json:"expense_count"` Tax float64 `json:"tax"` Items int64 `json:"items"` Categories int64 `json:"categories"` } type ExpenseAnalyticsCategoryData struct { ChartOfAccountID uuid.UUID `json:"chart_of_account_id"` ChartOfAccountName string `json:"chart_of_account_name"` TotalAmount float64 `json:"total_amount"` ExpenseCount int64 `json:"expense_count"` ItemCount int64 `json:"item_count"` } type ExpenseAnalyticsItemData struct { Item string `json:"item"` TotalAmount float64 `json:"total_amount"` ExpenseCount int64 `json:"expense_count"` ItemCount int64 `json:"item_count"` }