bradymiller wrote on Tuesday, October 18, 2011:
Hi,
The rules can be built manually without the CDR editor, which is probably the best way to build rules that we include in the codebase (note the CDR editor uses numbers to identify added rules, while the rules included in the codebase use descriptive labels; this was done purposefully so we could continue to include new or improved rules without worrying about conflicts with rules that users create). Check out the format used in mysql to build rules. For example, following the ‘Pneumonia Vaccination Status for Older Adults’ rule has following elements:
table `clinical_rules`:
INSERT INTO `clinical_rules` ( `id`, `pid`, `active_alert_flag`, `passive_alert_flag`, `cqm_flag`, `cqm_nqf_code`, `cqm_pqri_code`, `amc_flag`, `amc_code`, `patient_reminder_flag` ) VALUES (‘rule_pneumovacc_ge_65’, 0, 0, 1, 0, ‘’, ‘’, 0, ‘’, 0);
-Note the rule_pneumovacc_ge_65 element here, which is used to identify this rule elsewhere
table list_options:
INSERT INTO `list_options` ( `list_id`, `option_id`, `title`, `seq`, `is_default` ) VALUES (‘clinical_rules’, ‘rule_pneumovacc_ge_65’, ‘Pneumonia Vaccination Status for Older Adults’, 570, 0);
table rule_filter:
INSERT INTO `rule_filter` ( `id`, `include_flag`, `required_flag`, `method`, `method_detail`, `value` ) VALUES (‘rule_pneumovacc_ge_65’, 1, 1, ‘filt_age_min’, ‘year’, ‘65’);
table rule_target:
INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES (‘rule_pneumovacc_ge_65’, 1, 1, 0, ‘target_database’, ‘::immunizations::cvx_code::eq::33::ge::1’, 0);
INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES (‘rule_pneumovacc_ge_65’, 1, 1, 0, ‘target_database’, ‘::immunizations::cvx_code::eq::ge::1’, 0);
INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES (‘rule_pneumovacc_ge_65’, 1, 1, 0, ‘target_database’, ‘::immunizations::cvx_code::eq::109::ge::1’, 0);
INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES (‘rule_pneumovacc_ge_65’, 1, 1, 0, ‘target_database’, ‘::immunizations::cvx_code::eq::133::ge::1’, 0);
table rule_reminder:
INSERT INTO `rule_reminder` ( `id`, `method`, `method_detail`, `value` ) VALUES (‘rule_pneumovacc_ge_65’, ‘clinical_reminder_pre’, ‘week’, ‘2’);
INSERT INTO `rule_reminder` ( `id`, `method`, `method_detail`, `value` ) VALUES (‘rule_pneumovacc_ge_65’, ‘clinical_reminder_post’, ‘month’, ‘1’);
INSERT INTO `rule_reminder` ( `id`, `method`, `method_detail`, `value` ) VALUES (‘rule_pneumovacc_ge_65’, ‘patient_reminder_pre’, ‘week’, ‘2’);
INSERT INTO `rule_reminder` ( `id`, `method`, `method_detail`, `value` ) VALUES (‘rule_pneumovacc_ge_65’, ‘patient_reminder_post’, ‘month’, ‘1’);
table rule_action:
INSERT INTO `rule_action` ( `id`, `group_id`, `category`, `item` ) VALUES (‘rule_pneumovacc_ge_65’, 1, ‘act_cat_treat’, ‘act_pneumovacc’);
table rule_action_item:
INSERT INTO `rule_action_item` ( `category`, `item`, `clin_rem_link`, `reminder_message`, `custom_flag` ) VALUES (‘act_cat_treat’, ‘act_pneumovacc’, ‘’, ‘’, 0);
Once you follow a couple already existent rules, you will begin to see how to add additional rules. To add a rule, probably most important thing is settling on a id name, so rec. providing your suggested rule, rule_id name along with what you plan to filter for and target for.
Also, to get more insight into the CDR engine, check out the wiki page we used while developing it here:
http://open-emr.org/wiki/index.php/Clinical_Decision_Rules#Notes_and_Issues
hope this helps get you started,
-brady