140 lines
4.4 KiB
Go
140 lines
4.4 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
type GLAccountType string
|
|
|
|
const (
|
|
GLRevenue GLAccountType = "revenue"
|
|
GLCOGS GLAccountType = "cogs"
|
|
GLOpex GLAccountType = "opex"
|
|
GLCapex GLAccountType = "capex"
|
|
GLHeadcount GLAccountType = "headcount"
|
|
)
|
|
|
|
type BudgetVersion string
|
|
|
|
const (
|
|
VersionOriginal BudgetVersion = "original"
|
|
VersionForecast1 BudgetVersion = "forecast_1"
|
|
VersionForecast2 BudgetVersion = "forecast_2"
|
|
)
|
|
|
|
type Department struct {
|
|
ID int `json:"id"`
|
|
Code string `json:"code"`
|
|
Name string `json:"name"`
|
|
CostCenter string `json:"cost_center"`
|
|
}
|
|
|
|
type GLAccount struct {
|
|
ID int `json:"id"`
|
|
Code string `json:"code"`
|
|
Description string `json:"description"`
|
|
Type GLAccountType `json:"type"`
|
|
FavourHigh bool `json:"favour_high"`
|
|
}
|
|
|
|
type Budget struct {
|
|
ID int `json:"id"`
|
|
FiscalYear int `json:"fiscal_year"`
|
|
FiscalPeriod int `json:"fiscal_period"`
|
|
Version BudgetVersion `json:"version"`
|
|
DepartmentID int `json:"department_id"`
|
|
GLAccountID int `json:"gl_account_id"`
|
|
Amount float64 `json:"amount"`
|
|
Currency string `json:"currency"`
|
|
Notes string `json:"notes,omitempty"`
|
|
CreatedBy string `json:"created_by"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type CreateBudgetRequest struct {
|
|
FiscalYear int `json:"fiscal_year"`
|
|
FiscalPeriod int `json:"fiscal_period"`
|
|
Version BudgetVersion `json:"version"`
|
|
DepartmentID int `json:"department_id"`
|
|
GLAccountID int `json:"gl_account_id"`
|
|
Amount float64 `json:"amount"`
|
|
Currency string `json:"currency"`
|
|
Notes string `json:"notes"`
|
|
CreatedBy string `json:"created_by"`
|
|
}
|
|
|
|
type Actual struct {
|
|
ID int `json:"id"`
|
|
FiscalYear int `json:"fiscal_year"`
|
|
FiscalPeriod int `json:"fiscal_period"`
|
|
DepartmentID int `json:"department_id"`
|
|
GLAccountID int `json:"gl_account_id"`
|
|
GLCode string `json:"gl_code"`
|
|
Amount float64 `json:"amount"`
|
|
Currency string `json:"currency"`
|
|
Source string `json:"source"`
|
|
IngestedAt time.Time `json:"ingested_at"`
|
|
}
|
|
|
|
type IngestActualsRequest struct {
|
|
FiscalYear int `json:"fiscal_year"`
|
|
FiscalPeriod int `json:"fiscal_period"`
|
|
DeptCode string `json:"dept_code"`
|
|
GLCode string `json:"gl_code"`
|
|
Amount float64 `json:"amount"`
|
|
Currency string `json:"currency"`
|
|
Source string `json:"source"`
|
|
}
|
|
|
|
type VarianceStatus string
|
|
|
|
const (
|
|
StatusFavourable VarianceStatus = "favourable"
|
|
StatusUnfavourable VarianceStatus = "unfavourable"
|
|
StatusOnBudget VarianceStatus = "on_budget"
|
|
)
|
|
|
|
type VarianceLine struct {
|
|
GLCode string `json:"gl_code"`
|
|
GLDescription string `json:"gl_description"`
|
|
GLType GLAccountType `json:"gl_type"`
|
|
Budget float64 `json:"budget"`
|
|
Actual float64 `json:"actual"`
|
|
VarianceAbs float64 `json:"variance_abs"`
|
|
VariancePct *float64 `json:"variance_pct"`
|
|
Status VarianceStatus `json:"status"`
|
|
Currency string `json:"currency"`
|
|
}
|
|
|
|
type VarianceReport struct {
|
|
Department string `json:"department"`
|
|
FiscalYear int `json:"fiscal_year"`
|
|
FiscalPeriod int `json:"fiscal_period"`
|
|
Version BudgetVersion `json:"version"`
|
|
Currency string `json:"currency"`
|
|
Lines []VarianceLine `json:"lines"`
|
|
TotalBudget float64 `json:"total_budget"`
|
|
TotalActual float64 `json:"total_actual"`
|
|
TotalVariance float64 `json:"total_variance"`
|
|
VariancePct *float64 `json:"total_variance_pct"`
|
|
}
|
|
|
|
type AlertThreshold struct {
|
|
GLCode string `json:"gl_code"`
|
|
Description string `json:"description"`
|
|
Budget float64 `json:"budget"`
|
|
Actual float64 `json:"actual"`
|
|
VariancePct float64 `json:"variance_pct"`
|
|
Status VarianceStatus `json:"status"`
|
|
Department string `json:"department"`
|
|
}
|
|
|
|
// BudgetRow is used internally by the variance service
|
|
type BudgetRow struct {
|
|
GLCode string
|
|
GLDescription string
|
|
GLType GLAccountType
|
|
FavourHigh bool
|
|
Amount float64
|
|
Currency string
|
|
}
|