Tidy up imports
[contractdashboard.git] / heuristics / valueHeuristics.php
blob:a/heuristics/valueHeuristics.php -> blob:b/heuristics/valueHeuristics.php
--- a/heuristics/valueHeuristics.php
+++ b/heuristics/valueHeuristics.php
@@ -1,10 +1,61 @@
+<?php
 
-        - large contract value
-          - chi-square test for outliers / standard dev from mean/median
-          - percent of total contracts for supplier/agency
+/*  - large contract value
+  - standard dev from mean/median
+  - percent of total contracts for supplier/agency */
+$heuristics["VALUE_LARGE_CONTRACT_OVERALL"] = Array(
+    "description" => "unusual value for time of year");
 
+function VALUE_LARGE_CONTRACT_OVERALL($cn) {
+    $averageContractPeriod = getAverageContractPeriod();
+    $diff = strtotime($cn['contractStart']) - strtotime($cn['publishDate']);
+    $days = intval($diff / 24);
+    return ($days > 45 ? 1 : 0);
+}
 
-        - peculiar value
-        - Just under 80k, amplified if other contracts with same supplier are just under
-    - unusual variation amount
-        - absolute value; large reductions as well as large increases
+/*  - peculiar value
+  - Just under 80k, amplified if other contracts with same supplier are just under
+ */
+$heuristics["VALUE_NEAR_THRESHOLD"] = Array(
+    "description" => "unusual value for time of year");
+/*
+  - unusual variation amount - absolute value; large reductions as well as large increases
+ */
+$heuristics["VALUE_LARGE_VARIATION"] = Array(
+    "description" => "unusual value for time of year");
+
+function VALUE_LARGE_VARIATION($cn) {
+    $averageContractPeriod = getAverageContractPeriod();
+    $diff = strtotime($cn['contractStart']) - strtotime($cn['publishDate']);
+    $days = intval($diff / 24);
+    return ($days > 45 ? 1 : 0);
+}
+
+/*   - unusual value for time of year
+  - compare to all other records in last 2 weeks
+  - ie. many large contracts in june so takes more to standout */
+$heuristics["VALUE_HIGH_FOR_MONTH"] = Array(
+    "description" => "unusual value for time of year"
+);
+
+function VALUE_HIGH_FOR_MONTH($cn, $monthAsInt) {
+    $averageContractPeriod = getAverageContractPeriod();
+    $diff = strtotime($cn['contractStart']) - strtotime($cn['publishDate']);
+    $days = intval($diff / 24);
+    return ($days > 45 ? 1 : 0);
+}
+
+$monthlyValueAverage = Array();
+
+function getAgencyTransactions($agencyName) {
+    global $agencyTransactions;
+    if (!$agencyTransactions[$agencyName]) {
+        $query = 'select count(*) from contractnotice where agencyName = "' . $agencyName . '"';
+        $result = $conn->query($query);
+        $r = $result->fetch(PDO::FETCH_BOTH);
+        $agencyTransactions[$agencyName] = $r[0];
+    }
+    return $agencyTransactions[$agencyName];
+}
+
+?>