forked from openemr/openemr
-
Notifications
You must be signed in to change notification settings - Fork 13
/
RuleCriteriaListsBuilder.php
106 lines (88 loc) · 3.35 KB
/
RuleCriteriaListsBuilder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
// Copyright (C) 2010-2011 Aron Racho <aron@mi-squred.com>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
/**
* Description of RuleCriteriaListsBuilder
*
* @author aron
*/
class RuleCriteriaListsBuilder extends RuleCriteriaBuilder {
/**
* @return RuleCriteriaType
*/
function resolveRuleCriteriaType( $method, $methodDetail, $value ) {
if (strpos($method, "lists") ) {
if ( $methodDetail == 'medical_problem' ) {
$exploded = explode("::", $value);
if ( $exploded[0] == "CUSTOM" ) {
// its a medical issue
return RuleCriteriaType::from( RuleCriteriaType::issue );
} else {
// assume its a diagnosis
return RuleCriteriaType::from( RuleCriteriaType::diagnosis );
}
} else if ( $methodDetail == 'medication' ) {
// its a medication
return RuleCriteriaType::from( RuleCriteriaType::medication );
} else if ( $methodDetail == 'allergy' ) {
// its a medication
return RuleCriteriaType::from( RuleCriteriaType::allergy );
} else if ( $methodDetail == 'surgery' ) {
// its a medication
return RuleCriteriaType::from( RuleCriteriaType::surgery );
}
}
return null;
}
/**
* @param RuleCriteriaType $ruleCriteriaType
* @return RuleCriteria
*/
function build( $ruleCriteriaType, $value, $methodDetail ) {
$exploded = explode("::", $value);
if ( $ruleCriteriaType->code == 'issue' ) {
return new RuleCriteriaMedicalIssue( xl( "Medical Issue" ), $exploded[1] );
}
if ( $ruleCriteriaType->code == 'diagnosis' ) {
return new RuleCriteriaDiagnosis( xl( "Diagnosis" ), $exploded[0], $exploded[1] );
}
if ( $ruleCriteriaType->code == 'medication' ) {
return new RuleCriteriaMedication( xl( "Medication" ), $value );
}
if ( $ruleCriteriaType->code == 'surgery' ) {
return new RuleCriteriaSurgery( xl( "Surgery" ), $value );
}
if ( $ruleCriteriaType->code == 'allergy' ) {
return new RuleCriteriaAllergy( xl( "Allergy" ), $value );
}
// its unknown
return null;
}
/**
*
* @param RuleCriteriaType $criteriaType
*/
function newInstance( $ruleCriteriaType ) {
if ( $ruleCriteriaType->code == 'issue' ) {
return new RuleCriteriaMedicalIssue( xl( "Medical Issue" ) );
}
if ( $ruleCriteriaType->code == 'diagnosis' ) {
return new RuleCriteriaDiagnosis( xl( "Diagnosis" ) );
}
if ( $ruleCriteriaType->code == 'medication' ) {
return new RuleCriteriaMedication( xl( "Medication" ) );
}
if ( $ruleCriteriaType->code == 'surgery' ) {
return new RuleCriteriaSurgery( xl( "Surgery" ) );
}
if ( $ruleCriteriaType->code == 'allergy' ) {
return new RuleCriteriaAllergy( xl( "Allergy" ) );
}
return null;
}
}
?>