[rules-users] Facts - One to Many

Michael Anstis michael.anstis at gmail.com
Wed Jan 8 23:53:19 EST 2014


Try prefixing MedicationRecord with "exists". See the user guide for more
information.

Sent on the move
On 9 Jan 2014 03:36, "Ray Hooker" <ray.hooker at me.com> wrote:

> Wolfgang,  Thanks.  That works nicely.  I do have a followup question.  I
> wrote the following query:
>
> rule "Find patient taking Atorvastin (Lipitor)"
> dialect "mvel"
> when
> $p: PatientRecord($meds: medications)
> MedicationRecord(getCode("RxNorm").contains("617314")) from $meds
> then
> System.out.println("Found a patient taking Lipitor:
> "+$p.medical_record_number);
> results.addResult(new Result("test",$p.medical_record_number,"Found
> Patient Taking Lipitor","now"));
> end
>
> The problem is that a patient record may have multiple times where this
> was prescribed.  How would I change the query so that it does not repeat
> the find so that it is logically:
> “If the patient ever took Lipitor… or if there is any record of the
> patient taking Lipitor then flag then…”  instead of flagging for each hit??
>  So it only flags a patient with at least one medication record indicating
> Lipitor…
>
> Thanks,
>
>
> Ray
> On Jan 2, 2014, at 12:36 PM, Wolfgang Laun <wolfgang.laun at gmail.com>
> wrote:
>
> As you describe it, here's the way to refer to a particular medication:
>
>   Patient( $meds: medications )
>   Medication( drugCode == "55749-003-01" ) from $meds
>
> This rule determines whether the patient has this particular
> medication. There are other operators that might be useful:
>
>  Medication( drugCode str[startsWith] "55749-003" ) from $meds
>
> Inserting the Medication objects with a backlink to the Patient can
> simplify rule evaluation, which may depend on the number and
> complexity of the rules. Compare:
>
>   Patient( $meds: medications )
>   Medication( drugCode == "55749-003-01" ) from $meds
>   Medication( drugCode == "55799-565-01" ) from $meds
>
> with
>
>   $p: Patient()
>   Medication( drugCode == "55749-003-01", patient == $p )
>   Medication( drugCode == "55799-565-01", patient == $p )
>
> Much depends on the number of facts you'll need to process.
>
> To answer your question, "Takes" was a class name I invented to refer
> to the relation as an object, and "this" is Java's "this", referring
> to the matching object.
>
> -W
>
>
> On 02/01/2014, Ray Hooker <ray.hooker at me.com> wrote:
>
> Wolfgang,   So in your case you were envisioning the possibility of a Takes
> object that matched between a particular medication and the patient.
> Actually we are fairly close in the case of medications.
>
> As you probably know MongoDB allows for documents.   In this case, the
> patient’s document contains subdocuments.  In the case of medications, this
> semantically means “as of the date of this patient document, the patient is
> taking the following medicine listed by the applicable code and text
> description”.
>
> When read from the DB, you actually have a Java object Patient (or
> “Record”)
> that has a method “medications” that returns a set of “Medication” objects.
> The parent knows about the medication through the set “medications”.  I
> certainly could assert each patient/ record and for each of those assert
> each subdocument, inserting a key back to the parent.
>
> So the rule would need to identify, for example, any case where a
> particular
> had a medication object where the drug code matched a particular code or
> set
> of codes.
>
> Any suggestions are appreciated.  Also in the example below, is “Takes” a
> function  and what does “this” refer to?
>
> Thanks,
>
> Ray
> On Jan 2, 2014, at 2:01 AM, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:
>
> Ideally, a relation is represented by separate objects. Then you might
> have
> a rule
>
>  $p: Patient()
>  $p: Takes( patient == $p, $m: medication )
>  Medication( this == $m )
>
> and this rule will fire for each medication of the patient.
>
> Answering such questions without details about the actual data model
> is impossible.
>
> -W
>
> On 02/01/2014, Ray Hooker <ray.hooker at me.com> wrote:
>
> I am trying to figure out how to work with an existing model. The data
> is
> in
> MongoDB with embedded documents.  It is about patients would have
> sub-documents.  For example.  An individual patient may have multiple
> allergies. Also a patient has multiple medications.  So it is as
> follows:
>
> - Patient.medications ---> multiple Medication objects
>
> So I see where you have a simple one to one.  Typically perhaps you
> might
> have the medication record know that it is associated with the patient,
> but
> that is not how it is currently organized.  So the question is can I
> write
> rules when patients.medications returns a set/ collection of medications
> associated with the patient. I want to write a rule such as "if a
> patient
> is
> taking medication=xxx...."
>
> Thanks for your help.
>
> Ray Hooker
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140109/8becbd39/attachment-0001.html 


More information about the rules-users mailing list