Tidy up imports
[contractdashboard.git] / heuristics / dateHeuristics.php
blob:a/heuristics/dateHeuristics.php -> blob:b/heuristics/dateHeuristics.php
- long contract period (number of weeks/days?) <?php
- Reported late  
- 45 days? A late contract is a dodgy contract except maybe for variations?  
   
  //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];
  }
   
  ?>