package contract import ( "time" "github.com/google/uuid" ) type CreateExpenseRequest struct { Receiver string `json:"receiver" validate:"required"` TransactionDate string `json:"transaction_date" validate:"required"` CodeNumber string `json:"code_number" validate:"required"` OutletID string `json:"outlet_id" validate:"required"` Description *string `json:"description,omitempty"` Tax float64 `json:"tax"` Total float64 `json:"total" validate:"required"` Items []CreateExpenseItemRequest `json:"items" validate:"required"` } type CreateExpenseItemRequest struct { ChartOfAccountID string `json:"chart_of_account_id" validate:"required"` Item string `json:"item" validate:"required"` Description *string `json:"description,omitempty"` Amount float64 `json:"amount" validate:"required"` } 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"` 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 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"` Description *string `json:"description"` Tax float64 `json:"tax"` Total float64 `json:"total"` Reserved1 *string `json:"reserved1,omitempty"` 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 ListExpenseRequest struct { Page int `json:"page" validate:"min=1"` Limit int `json:"limit" validate:"min=1,max=100"` Search string `json:"search,omitempty"` OutletID string `json:"outlet_id,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"` }