-
Notifications
You must be signed in to change notification settings - Fork 0
/
environmentalproc.go
70 lines (55 loc) · 1.57 KB
/
environmentalproc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
type Threshold float64
const (
EIAName = "Valutazione di Impatto Ambientale (VIA) statale"
ScreeningName = "Verifica di assoggettabilità a VIA (screening)"
EIAThreshold = 10.00
ScreeningThreshold = 1.00
ElevatedEIAThreshold = 20.00
ElevatedScreeningThreshold = 10.00
)
type EnvironmentalProcedure interface {
Name() string
ApplicableThreshold() float64
IsApplicable() bool
}
type EIARequirements struct {
project *Project
}
func NewEIA(p *Project) *EIARequirements {
return &EIARequirements{project: p}
}
func (e *EIARequirements) Name() string {
return EIAName
}
func (e *EIARequirements) ApplicableThreshold() float64 {
if e.project.CanElevateThresholds() {
return ElevatedEIAThreshold
}
return EIAThreshold
}
func (e *EIARequirements) IsApplicable() bool {
return e.project.capacityMW >= e.ApplicableThreshold()
}
type ScreeningRequirements struct {
project *Project
}
func NewScreening(p *Project) *ScreeningRequirements {
return &ScreeningRequirements{project: p}
}
func (e *ScreeningRequirements) Name() string {
return ScreeningName
}
func (e *ScreeningRequirements) ApplicableThreshold() float64 {
refThreshold := ScreeningThreshold
if e.project.CanElevateThresholds() {
refThreshold = ElevatedScreeningThreshold
}
if e.project.screeningGuidelinesConditions.ShouldHalveThreshold() != NotApplicable {
refThreshold *= 0.5
}
return refThreshold
}
func (e *ScreeningRequirements) IsApplicable() bool {
return e.project.capacityMW >= e.ApplicableThreshold()
}