Przeglądaj źródła

Added stat-tree samplespec

Samson Mutunga 3 lat temu
rodzic
commit
7c681153d3
1 zmienionych plików z 248 dodań i 0 usunięć
  1. 248 0
      spec/stat-tree-report-builder-spec.txt

+ 248 - 0
spec/stat-tree-report-builder-spec.txt

@@ -0,0 +1,248 @@
+
+	clause
+		model
+		label
+		question
+		answer
+		clause_text
+		position_index // for rendering, no logical consequence
+
+			EXAMPLE:
+
+				MODEL | QUESTION / LABEL | ANSWER | CLAUSE_TEXT
+
+Client	Active patient?	YES	(is_active_patient IS TRUE)
+Client	Active patient?	NO	(is_active_patient IS FALSE)
+Client	MCP assigned?	YES	(mcp_pro_id IS NOT NULL)
+Client	MCP assigned?	NO	(mcp_pro_id IS NULL)
+Client	Future MCP appointment?	YES	()
+Client	Future MCP appointment?	NO	()
+Client	MCB Primary?	YES	()
+Client	MCB Primary?	NO	()
+Client	Has active RM device?	YES	()
+Client	Has active RM device?	NO	()
+Client	Active device type?	Weight	()
+Client	Active device type?	BP	()
+Client	Active device type?	Weight ONLY	()
+Client	Active device type?	BP ONLY	()
+Client	Active device type?	Weight + BP	()
+Client	Type 2 Diabetic	-	()
+
+			WORK:::::::::::::::
+
+				- FRONTEND: paste a tsv into a textarea and see it as a table.
+				- BACKEND PHP: take in a tsv, foreach over and spit it back as a JSON.
+
+	stat_tree
+		name
+		model
+		slug
+		max_line_length
+		last_refreshed_at
+		tsv_text_for_lines
+
+			EXAMPLE tsv_text_for_lines:
+
+Active patient? YES
+	MCP assigned? YES
+		MCB Primary? NO
+			Has active RM device? YES
+	MCP assigned? NO
+		MCB Primary? YES
+Active patient? NO
+	MCB Primary? YES
+		Has active RM device? YES
+		Has active RM device? NO
+	MCB Primary? NO
+		Has active RM device? YES
+		Has active RM device? NO
+	Has active RM device? YES
+	Has active RM device? NO
+
+	stat_tree_line
+		stat_tree_id
+		tree_order_position_index
+		last_refresh_count
+		tsv_text_for_report_columns
+
+			EXAMPLE tsv_text_for_report_columns:
+
+				LABEL | DISPLAY_KEY | DISPLAY_FUNCTION | RECORD_ROUTE_NAME
+
+	stat_tree_line_clause
+		stat_tree_line_id
+		clause_id
+		clause_label
+		position_index
+
+	stat_tree_line_report_column
+		stat_tree_line_id
+		label
+		position_index
+		display_key // if super simple
+		display_function // if custom on model
+		record_route_name
+
+------------------------------------------------------------------------------------------------
+
+	api/clause/replaceAll
+		tsvText
+
+			LOGIC:
+
+				delete all lines
+				foreach line, create record
+
+	api/statTree/create
+		name
+		table
+		slug
+
+			LOGIC:
+
+				confirm no duplicate
+				create statTree
+
+	api/statTree/delete
+		uid
+
+			LOGIC:
+
+				delete it
+
+	api/statTree/updateBasic // can't change table
+		uid
+		name
+		slug
+
+			LOGIC:
+
+				confirm no duplicate
+				update
+
+	api/statTree/refreshCount
+		uid
+
+			LOGIC:
+
+				public function refreshCount($statTreeID){
+					$statTree = StatTree::get($statTreeID);
+					foreach($statTree->lines as $line){
+						this->updateStatTreeLineCount($line);
+					}
+					$statTree->last_refreshed_at = now();
+				}
+
+				private function refreshCount($line){
+					$table = $line->statTree->table;
+					$query = "SELECT COUNT(*) FROM $table WHERE ";
+					$allClauses = $line->statTreeLineClauses;
+					for($i = 0; $i < count($allClauses); $i++){
+						$query .= $allClauses[$i] . ($i == count($allClauses) - 1 ? '' : ' AND ');
+					}
+					$count = runRawSqlSafelyForCount($query);
+					$line->last_refresh_count = $count;
+					return count;
+				}
+
+	api/statTree/replaceAllLines
+		uid
+		tsvText
+
+			LOGIC:
+
+				EXAMPLE tsv_text_for_lines:
+
+					Active patient? YES
+						MCP assigned? YES
+							MCB Primary? NO
+								Has active RM device? YES
+						MCP assigned? NO
+							MCB Primary? YES
+					Active patient? NO
+						MCB Primary? YES
+							Has active RM device? YES	
+							Has active RM device? NO	
+						MCB Primary? NO
+							Has active RM device? YES
+							Has active RM device? NO
+						Has active RM device? YES	
+						Has active RM device? NO
+
+				public function replaceAllLines($statTree, $tsvText){
+					// fill in missing blanks down the rows
+					// foreach fully filled row, create a stat_tree_line
+				}
+
+
+	api/statTreeLine/replaceAllReportColumns
+		uid
+		tsvText
+
+			LOGIC:
+
+				EXAMPLE tsv_text_for_report_columns:
+
+					LABEL | DISPLAY_KEY | DISPLAY_FUNCTION | RECORD_ROUTE_NAME
+
+					public function replaceAllReportColumns($statTreeLine, $tsvText){
+						// fill in missing blanks down the rows
+					}
+
+------------------------------------------------------------------------------------------------
+
+/stat-tree/{{$statTree->slug}}
+
+	Stat Tree: {{ $statTree->name }} | Last refreshed: {{ $statTree->last_refreshed_at }}
+
+	<table>
+		<tr>
+			@for($i = 0; $statTree->max_line_length - 2; $i++)
+				<th></th>
+			@endfor
+			<th>Count</th>
+		</tr>
+		@foreach($statTree->lines as $line) // ->lines returns by tree_order_position_index
+			@for($i = 0; $statTree->max_line_length - 2; $i++)
+				<td>
+					{{ $i == $line->all_clauses_length - 1 ? $line->clause->label : '-' }}
+				</td>
+			@endfor
+			<td>{{ $line->last_refresh_count }}</td>
+		@endforeach
+	</table>
+
+------------------------------------------------------------------------------------------------
+
+/dynamic-stat-tree/{{statTree->slug}}?top-level-filters=(BASE64OFTHEM)
+
+	Top level filters:
+		-(WHERE mcp_pro_id=2)
+
+	// render same thing as static stat-tree, but with this filter and dynamic count
+
+------------------------------------------------------------------------------------------------
+
+/stat-tree-line/{{uid}}
+
+	Stat Tree: {{ $statTree->name }}
+	Table: {{ $line-> }}
+	Line: {{ $line->all_clauses_text }}
+
+	@foreach($columns as $column)
+		<th></th>
+
+	@foreach($records as $record)
+		@foreach($columns as $column)
+		<td>{{ $record->{{$column->display_function ? $column->display_function : $column->display_key }} }}</td>
+
+	(PAGINATE)
+
+------------------------------------------------------------------------------------------------
+
+/dynamic-stat-tree-line/{{uid}}?top-level-filters=(BASE64OFTHEM)
+
+	Top level filters:
+		-(WHERE mcp_pro_id=2)
+
+	// render same thing as static stat-tree-line, but with this filter