--- a/heuristics/dateHeuristics.php +++ b/heuristics/dateHeuristics.php @@ -1,4 +1,92 @@ - - long contract period (number of weeks/days?) - - Reported late - - 45 days? A late contract is a dodgy contract except maybe for variations? - + "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; + if (!$averageContractPeriod) { + $query = "select AVG(dateDiff(contractEnd,contractStart)) from contractnotice"; + $result = mysql_query($query); + $r = mysql_fetch_array($result, MYSQL_BOTH); + $averageContractPeriod = $r[0]; + } + return $averageContractPeriod; +} +$stddevContractPeriod; +function getstddevContractPeriod() +{ + global $stddevContractPeriod; + if (!$stddevContractPeriod) { + $query = "select STDDEV(dateDiff(contractEnd,contractStart)) from contractnotice"; + $result = mysql_query($query); + $r = mysql_fetch_array($result, MYSQL_BOTH); + $stddevContractPeriod = $r[0]; + } + return $stddevContractPeriod; +} +//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) { + $query = "select AVG(dateDiff(publishDate,contractStart)) from contractnotice"; + $result = mysql_query($query); + $r = mysql_fetch_array($result, MYSQL_BOTH); + $averageDaysLate = $r[0]; + } + return $averageDaysLate; +} +$stddevDaysLate; +function getStddevDaysLate() +{ + global $stddevDaysLate; + if (!$stddevDaysLate) { + $query = "select STDDEV(dateDiff(publishDate,contractStart)) from contractnotice"; + $result = mysql_query($query); + $r = mysql_fetch_array($result, MYSQL_BOTH); + $stddevDaysLate = $r[0]; + } + return $stddevDaysLate; +} +?>