计算服务执行次数的Drools规则?
我是个新来的流口水的人,我正在尝试为牙齿保险申请设计一些规则。根据之前执行的服务的历史记录,系统基本上会让用户知道他们将要执行的程序可能不在保险范围内。它还将有其他规则,可能是基于年龄的,但我可以处理这些规则 我的事实是:计算服务执行次数的Drools规则?,drools,Drools,我是个新来的流口水的人,我正在尝试为牙齿保险申请设计一些规则。根据之前执行的服务的历史记录,系统基本上会让用户知道他们将要执行的程序可能不在保险范围内。它还将有其他规则,可能是基于年龄的,但我可以处理这些规则 我的事实是: 患者-患者信息列表 服务-以前执行的服务。(即:服务代码=D1234,执行日期=日期) 警报-(alertName=“X射线2/12个月期间”) 我需要一条规则,说明当患者在过去12个月内进行了2次或2次以上的D1234检查时,,然后添加一条警告,说明D1234可能在最后
- 患者-患者信息列表李>
- 服务-以前执行的服务。(即:服务代码=D1234,执行日期=日期)
- 警报-(alertName=“X射线2/12个月期间”)
有人能帮助我理解如何编写上面所需的规则吗?我将向您展示一些需要执行的不同操作的示例,并让您将它们组合成一个在您的应用程序中工作的规则 警告-我没有执行以下示例,因此可能存在错误/打字错误 首先,下面的代码将收集在工作记忆中对每个患者执行的所有服务
rule "Count patient services"
when
$patient : Patient()
$serviceList : ArrayList() from collect (
Service(patientId == $patient.id)
)
then
System.out.println("Patient " + $patient.id
+ " has received " + $serviceList.size() + " services.");
end
当患者接受了2项以上带有特定代码的服务时,以下匹配:
$serviceList : ArrayList( size > 2 ) from collect (
Service(
patientId == $patient.id,
serviceCode == "D1234"
)
)
当患者接受了两项以上与代码列表匹配的服务时,以下匹配
$serviceList : ArrayList( size > 2 ) from collect (
Service(
patientId == $patient.id,
serviceCode in ("D1234", "E5678")
)
)
以下内容查找最近匹配的服务日期:
accumulate (
Service(
patientId == $patient.id,
serviceCode in ("D1234", "E5678"),
$datePerformed: datePerformed
);
$mostRecentDate: max($datePerformed)
)
同样,您可以在日期或其他属性上添加约束
维护代码组的有效机制是插入组成员事实。电子表格或web决策表可以轻松做到这一点,或者您可以查询数据库并通过API插入它们。i、 e
insert( new ServiceGroup( "HighCostService", "D1234" ) );
insert( new ServiceGroup( "HighCostService", "D5678" ) );
然后可以使用以下约束进行匹配:
$highCostServices : ArrayList() from accumulate (
ServiceGroup( group == "HighCostService", $serviceCode ),
init( ArrayList list = new ArrayList(); ),
action( list.add($serviceCode); ),
reverse( list.remove($serviceCode); ),
result(list)
)
$serviceList : ArrayList( size > 2 ) from collect (
Service(
patientId == $patient.id,
serviceCode in $highCostServices
)
)
n、 蓄能器很容易出错,所以我通常会对它们进行一些单元测试。上面的代码是在这里徒手编写的,没有在任何地方运行它,因此如果它在没有更正的情况下工作,您可能会很幸运
有关更多详细信息,请参阅手册:
匹配列表中的项目:
4.8.3.3.10.10。中的运算符和非中的运算符(复合值限制)
收集匹配事实的列表:
4.8.3.7.3。条件元素集合
用于计算集合的最大值、最小值、总和等值的累加器:
4.8.3.7.4.1。累积CE(首选语法)
我将向您展示一些需要执行的不同操作的示例,并让您将它们组合成在应用程序中工作的规则 警告-我没有执行以下示例,因此可能存在错误/打字错误 首先,下面的代码将收集在工作记忆中对每个患者执行的所有服务
rule "Count patient services"
when
$patient : Patient()
$serviceList : ArrayList() from collect (
Service(patientId == $patient.id)
)
then
System.out.println("Patient " + $patient.id
+ " has received " + $serviceList.size() + " services.");
end
当患者接受了2项以上带有特定代码的服务时,以下匹配:
$serviceList : ArrayList( size > 2 ) from collect (
Service(
patientId == $patient.id,
serviceCode == "D1234"
)
)
当患者接受了两项以上与代码列表匹配的服务时,以下匹配
$serviceList : ArrayList( size > 2 ) from collect (
Service(
patientId == $patient.id,
serviceCode in ("D1234", "E5678")
)
)
以下内容查找最近匹配的服务日期:
accumulate (
Service(
patientId == $patient.id,
serviceCode in ("D1234", "E5678"),
$datePerformed: datePerformed
);
$mostRecentDate: max($datePerformed)
)
同样,您可以在日期或其他属性上添加约束
维护代码组的有效机制是插入组成员事实。电子表格或web决策表可以轻松做到这一点,或者您可以查询数据库并通过API插入它们。i、 e
insert( new ServiceGroup( "HighCostService", "D1234" ) );
insert( new ServiceGroup( "HighCostService", "D5678" ) );
然后可以使用以下约束进行匹配:
$highCostServices : ArrayList() from accumulate (
ServiceGroup( group == "HighCostService", $serviceCode ),
init( ArrayList list = new ArrayList(); ),
action( list.add($serviceCode); ),
reverse( list.remove($serviceCode); ),
result(list)
)
$serviceList : ArrayList( size > 2 ) from collect (
Service(
patientId == $patient.id,
serviceCode in $highCostServices
)
)
n、 蓄能器很容易出错,所以我通常会对它们进行一些单元测试。上面的代码是在这里徒手编写的,没有在任何地方运行它,因此如果它在没有更正的情况下工作,您可能会很幸运
有关更多详细信息,请参阅手册:
匹配列表中的项目:
4.8.3.3.10.10。中的运算符和非中的运算符(复合值限制)
收集匹配事实的列表:
4.8.3.7.3。条件元素集合
用于计算集合的最大值、最小值、总和等值的累加器:
4.8.3.7.4.1。累积CE(首选语法)
非常有用。谢谢你花时间做这件事。对代码进行分组的最佳方式是什么,这样我就不需要为每个规则编写代码。许多规则适用于某些代码组。我可以注册一个全局文件,但如果可能的话,我宁愿在.drl文件中定义它。也许可以用另一条规则来做吗?我希望能够做一些类似的事情:服务(BitewingServiceCodes中的serviceCode)我还认为唯一的事实将是患者和针对特定患者的服务。可以理解的是,只有为该患者提供的服务才是事实。您是否也可以为这个例子提供一个更具体的例子?查找最新的服务?非常有用。谢谢你花时间做这件事。对代码进行分组的最佳方式是什么,这样我就不需要为每个规则编写代码。许多规则适用于某些代码组。我可以注册一个全局文件,但如果可能的话,我宁愿在.drl文件中定义它。也许可以用另一条规则来做吗?我希望能够做一些事情,比如:服务(服务代码在BitewingServiceCodes中)我也很瘦