--- a/heuristics/dateHeuristics.php +++ b/heuristics/dateHeuristics.php @@ -1,1 +1,110 @@ + "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]; +} + +?>