Merge branch 'master' of ssh://apples.lambdacomplex.org/git/contractdashboard
[contractdashboard.git] / heuristics / dateHeuristics.php
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
 
//long contract period (number of weeks/days?)
$heuristics["DATE_LONG_CONTRACT_PERIOD"] = Array(
    "description" => "long contract period (number of weeks/days?)"
);
 
function DATE_LONG_CONTRACT_PERIOD($cn) {
    $averageContractPeriod = getAverageContractPeriod();
    $stddevContractPeriod = getstddevContractPeriod();
    $diff = strtotime($cn['contractEnd']) - strtotime($cn['contractStart']);
    $days = intval($diff / (60 * 60 * 24));
    $value = abs($days - $averageContractPeriod) / $stddevContractPeriod;
    return Array(
        "heuristic_value" => $value,
        "raw_value" => $days,
        "mean" => $averageContractPeriod,
        "stddev" => $stddevContractPeriod
    );
}
 
$averageContractPeriod;
 
function getAverageContractPeriod() {
    global $averageContractPeriod, $stddevContractPeriod;
    if (!$averageContractPeriod) {
        getStddevAverageContractPeriod();
    }
    return $averageContractPeriod;
}
 
$stddevContractPeriod;
 
function getstddevContractPeriod() {
    global $averageContractPeriod, $stddevContractPeriod;
    if (!$stddevContractPeriod) {
        getStddevAverageContractPeriod();
    }
    return $stddevContractPeriod;
}
 
function getStddevAverageContractPeriod() {
    global $averageContractPeriod, $stddevContractPeriod,$conn;
    $query = 'select AVG("contractEnd"-"contractStart"),stddev("contractEnd"-"contractStart") from contractnotice';
    $result = $conn->query($query);
             databaseError($conn->errorInfo());
    $r = $result->fetch(PDO::FETCH_BOTH);
 
    $averageContractPeriod = $r[0];
    $stddevContractPeriod = $r[1];
}
 
//Reported late, 45 days? A late contract is a dodgy contract except maybe for variations?
$heuristics["DATE_REPORTED_LATE"] = Array(
    "description" => "Reported late, 45 days?"
);
 
function DATE_REPORTED_LATE($cn) {
    $averageDaysLate = getAverageDaysLate();
    $stddevDaysLate = getStddevDaysLate();
    $diff = strtotime($cn['publishDate']) - strtotime($cn['contractStart']);
    $days = intval($diff / (60 * 60 * 24));
    if ($days <= 0) {
        $value = 0;
    } else {
        // +1 demerit for exceeding 45 day requirement
        $value = (abs($days - $averageDaysLate) / $stddevDaysLate) + ($days < 45 ? 0 : 1);
    }
    return Array(
        "heuristic_value" => $value,
        "raw_value" => $days,
        "mean" => $averageDaysLate,
        "stddev" => $stddevDaysLate
    );
}
 
$averageDaysLate;
 
function getAverageDaysLate() {
    global $averageDaysLate;
    if (!$averageDaysLate) {
        getDaysLate();
    }
    return $averageDaysLate;
}
 
$stddevDaysLate;
 
function getStddevDaysLate() {
    global $stddevDaysLate;
    if (!$stddevDaysLate) {
        getDaysLate();
    }
    return $stddevDaysLate;
}
 
function getDaysLate() {
 
    global $averageDaysLate, $stddevDaysLate,$conn;
 
    $query = 'select AVG(extract (day from "publishDate"-"contractStart")), STDDEV(extract (day from "publishDate"-"contractStart")) from contractnotice';
    $result = $conn->query($query);
          databaseError($conn->errorInfo());
    $r = $result->fetch(PDO::FETCH_BOTH);
 
    $averageDaysLate = $r[0];
    $stddevDaysLate = $r[1];
}
 
?>