--- a/heuristics/dateHeuristics.php +++ b/heuristics/dateHeuristics.php @@ -1,1 +1,102 @@ + "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; + $query = "select AVG(dateDiff(contractEnd,contractStart)),stddev(dateDiff(contractEnd,contractStart)) from contractnotice"; + $result = mysql_query($query); + $r = mysql_fetch_array($result, MYSQL_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; + + $query = "select AVG(dateDiff(publishDate,contractStart)), STDDEV(dateDiff(publishDate,contractStart)) from contractnotice"; + $result = mysql_query($query); + $r = mysql_fetch_array($result, MYSQL_BOTH); + $averageDaysLate = $r[0]; + $stddevDaysLate = $r[1]; + +} +?>