144 lines
7.3 KiB
Markdown
144 lines
7.3 KiB
Markdown
# goodcalc
|
|
--
|
|
import "."
|
|
|
|
Package goodcalc is a good balance calculator The logic of the calculation is
|
|
based on the excel calculator. The simple steps can be found inside the
|
|
MatrixBerechnung.ods file inside this repository.
|
|
|
|
## Usage
|
|
|
|
#### type Aspect
|
|
|
|
```go
|
|
type Aspect struct {
|
|
No string `json:"no"`
|
|
Weight float32 `json:"weight"`
|
|
ValuationPoints int `json:"valuation_points"`
|
|
}
|
|
```
|
|
|
|
Aspect does contain the valuation of the company.
|
|
|
|
#### type Matrix
|
|
|
|
```go
|
|
type Matrix struct {
|
|
MaxPoints int `json:"max_points"`
|
|
MaxValuationPoints int `json:"max_valuation_points"` // 10
|
|
MaxNegValuationPoints int `json:"max_neg_valuation_points"` // -200
|
|
NegPointsFactor int `json:"neg_points_factor"` // 50
|
|
Stakeholders []*Stakeholder `json:"stakeholders"`
|
|
Calculation *MatrixCalc `json:"calculation"`
|
|
}
|
|
```
|
|
|
|
Matrix contains the stakeholders and the maximal allowed points of the
|
|
calculation. The calculation is pretty simple. Inside each aspect
|
|
ValuationPoints can be defined. Over the maximal possible points the
|
|
balancePoints are calculated.
|
|
|
|
It is possible to define different weights on different layers (stakeholder,
|
|
theme and aspect). This type does not contain any businesslogic of the version
|
|
of the matrix.
|
|
|
|
#### func (*Matrix) BalancePoints
|
|
|
|
```go
|
|
func (m *Matrix) BalancePoints() int
|
|
```
|
|
BalancePoints calculates the ecogood points for the matrix
|
|
|
|
#### func (*Matrix) String
|
|
|
|
```go
|
|
func (m *Matrix) String() string
|
|
```
|
|
|
|
#### type MatrixCalc
|
|
|
|
```go
|
|
type MatrixCalc struct {
|
|
SumCalcWeight float32 `json:"sum_calc_weight"`
|
|
WeightFactor float32 `json:"weight_factor"`
|
|
}
|
|
```
|
|
|
|
MatrixCalc contains calculated values
|
|
|
|
#### type NegativeAspect
|
|
|
|
```go
|
|
type NegativeAspect struct {
|
|
Aspect
|
|
}
|
|
```
|
|
|
|
NegativeAspect has the same fields like Aspect. But the business logic requieres
|
|
a different handling.
|
|
|
|
#### type Stakeholder
|
|
|
|
```go
|
|
type Stakeholder struct {
|
|
No string `json:"no"`
|
|
Weight float32 `json:"weight"`
|
|
Themes []*Theme `json:"themes"`
|
|
}
|
|
```
|
|
|
|
Stakeholder can define a weight, which is calculated to all containing themes.
|
|
No is the id like in the excel For example A for Suppliers
|
|
|
|
#### func (*Stakeholder) String
|
|
|
|
```go
|
|
func (s *Stakeholder) String() string
|
|
```
|
|
|
|
#### type Theme
|
|
|
|
```go
|
|
type Theme struct {
|
|
No string `json:"no"`
|
|
Weight float32 `json:"weight"`
|
|
Aspects []Aspect `json:"aspects"`
|
|
NegativeAspects []NegativeAspect `json:"negative_aspects"`
|
|
Calc *ThemeCalc `json:"calculation"`
|
|
}
|
|
```
|
|
|
|
Theme is the basic element of the matrix. No defines the id of the excel
|
|
balance. A1 for Human dignity in the supply chain
|
|
|
|
#### func (*Theme) String
|
|
|
|
```go
|
|
func (t *Theme) String() string
|
|
```
|
|
|
|
#### type ThemeCalc
|
|
|
|
```go
|
|
type ThemeCalc struct {
|
|
CalcWeight float32 `json:"calc_weight"`
|
|
WeightFactor float32 `json:"weight_factor"`
|
|
MaxBalancePoints float32 `json:"max_points"`
|
|
NrPositiveAspects int `json:"nr_positive_aspects"`
|
|
ValuationPoints int `json:"valuation_points"`
|
|
MaxValuationPoints int `json:"max_valuation_points"`
|
|
EstPercentage float32 `json:"est_percentage"`
|
|
BalancePoints float32 `json:"balance_points"`
|
|
NegativeValuationPoints int `json:"negative_valuation_points"`
|
|
NegativeBlancePoints float32 `json:"negative_blance_points"`
|
|
}
|
|
```
|
|
|
|
ThemeCalc contains the different calculation steps.
|
|
|
|
#### func (*ThemeCalc) String
|
|
|
|
```go
|
|
func (tc *ThemeCalc) String() string
|
|
```
|