285 lines
16 KiB
Plaintext
285 lines
16 KiB
Plaintext
package drools
|
||
|
||
import com.iqser.red.service.redaction.v1.server.redaction.model.Section
|
||
|
||
global Section section
|
||
|
||
|
||
// --------------------------------------- CBI rules -------------------------------------------------------------------
|
||
|
||
rule "0: Expand CBI Authors with firstname initials"
|
||
when
|
||
Section(matchesType("CBI_author") || matchesType("recommendation_CBI_author"))
|
||
then
|
||
section.expandByRegEx("CBI_author", "(,? [A-Z]\\.?( ?[A-Z]\\.?)?( ?[A-Z]\\.?)?\\b\\.?)", false, 1);
|
||
section.expandByRegEx("recommendation_CBI_author", "(,? [A-Z]\\.?( ?[A-Z]\\.?)?( ?[A-Z]\\.?)?\\b\\.?)", false, 1);
|
||
end
|
||
|
||
|
||
rule "1: Redact CBI Authors"
|
||
when
|
||
Section(matchesType("CBI_author") || matchesType("recommendation_CBI_author"))
|
||
then
|
||
section.redact("CBI_author", 1, "Author found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "2: Redact CBI Address"
|
||
when
|
||
Section(matchesType("CBI_address") || matchesType("recommendation_CBI_address"))
|
||
then
|
||
section.redact("CBI_address", 2, "Address found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "3: Do not redact genitive CBI_author"
|
||
when
|
||
Section(matchesType("CBI_author") || matchesType("recommendation_CBI_author"))
|
||
then
|
||
section.expandToHintAnnotationByRegEx("CBI_author", "['’’'ʼˈ´`‘′ʻ’']s", false, 0, "test_method");
|
||
section.expandToHintAnnotationByRegEx("recommendation_CBI_author", "['’’'ʼˈ´`‘′ʻ’']s", false, 0, "test_method");
|
||
end
|
||
|
||
|
||
rule "4: Redact Author(s) cells in Tables with Author(s) header"
|
||
when
|
||
Section(hasTableHeader("Author(s)") && !hasTableHeader("Vertebrate study Y/N"))
|
||
then
|
||
section.redactCell("Author(s)", 4, "CBI_author", false, "Author found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "5: Redact Author cells in Tables with Author header"
|
||
when
|
||
Section(hasTableHeader("Author") && !hasTableHeader("Vertebrate study Y/N"))
|
||
then
|
||
section.redactCell("Author", 5, "CBI_author", false, "Author found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "6: Redact and recommand Authors in Tables with Vertebrate study Y/N header"
|
||
when
|
||
Section(rowEquals("Vertebrate study Y/N", "Y") || rowEquals("Vertebrate study Y/N", "Yes") || rowEquals("Vertebrate study Y/N", "N") || rowEquals("Vertebrate study Y/N", "No"))
|
||
then
|
||
section.redactCell("Author(s)", 6, "CBI_author", true, "Author found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "7: Redact if CTL/* or BL/* was found"
|
||
when
|
||
Section(searchText.contains("CTL/") || searchText.contains("BL/"))
|
||
then
|
||
section.addRedaction("CTL", "must_redact", 7, "Laboratory for vertebrate studies found", "Article 39(1)(2) of Regulation (EC) No 178/2002" );
|
||
section.addRedaction("BL", "must_redact", 7, "Laboratory for vertebrate studies found", "Article 39(1)(2) of Regulation (EC) No 178/2002" );
|
||
end
|
||
|
||
|
||
rule "8: Redact and add recommendation for et al. author"
|
||
when
|
||
Section(searchText.contains("et al"))
|
||
then
|
||
section.redactAndRecommendByRegEx("\\b([A-ZÄÖÜ][^\\s\\.,]+( [A-ZÄÖÜ]{1,2}\\.?)?( ?[A-ZÄÖÜ]\\.?)?) et al\\.?", false, 1, "CBI_author", 8, "Author found", "Reg (EC) No 1107/2009 Art. 63 (2g)");
|
||
end
|
||
|
||
|
||
rule "9: Add recommendation for Addresses in Test Organism sections"
|
||
when
|
||
Section(searchText.contains("Species:") && searchText.contains("Source:"))
|
||
then
|
||
section.recommendLineAfter("Source:", "CBI_address");
|
||
end
|
||
|
||
|
||
rule "10: Add recommendation for Addresses in Test Animals sections"
|
||
when
|
||
Section(searchText.contains("Species") && searchText.contains("Source"))
|
||
then
|
||
section.recommendLineAfter("Source", "CBI_address");
|
||
end
|
||
|
||
|
||
rule "11: Do not redact Names and Addresses if Published Information found"
|
||
when
|
||
Section(matchesType("published_information"))
|
||
then
|
||
section.redactNot("CBI_author", 11, "Published Information found");
|
||
section.redactNot("CBI_address", 11, "Published Information found");
|
||
end
|
||
|
||
|
||
// --------------------------------------- PII rules -------------------------------------------------------------------
|
||
|
||
|
||
rule "12: Redacted PII Personal Identification Information"
|
||
when
|
||
Section(matchesType("PII"))
|
||
then
|
||
section.redact("PII", 12, "PII (Personal Identification Information) found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "13: Redact Emails by RegEx"
|
||
when
|
||
Section(searchText.contains("@"))
|
||
then
|
||
section.redactByRegEx("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b", true, 0, "PII", 13, "PII (Personal Identification Information) found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "14: Redact contact information"
|
||
when
|
||
Section(text.contains("Contact point:")
|
||
|| text.contains("Phone:")
|
||
|| text.contains("Fax:")
|
||
|| text.contains("Tel.:")
|
||
|| text.contains("Tel:")
|
||
|| text.contains("E-mail:")
|
||
|| text.contains("Email:")
|
||
|| text.contains("e-mail:")
|
||
|| text.contains("E-mail address:")
|
||
|| text.contains("Alternative contact:")
|
||
|| text.contains("Telephone number:")
|
||
|| text.contains("Telephone No:")
|
||
|| text.contains("Fax number:")
|
||
|| text.contains("Telephone:")
|
||
|| text.contains("Phone No.")
|
||
|| text.contains("European contact:"))
|
||
then
|
||
section.redactLineAfter("Contact point:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Phone:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Fax:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Tel.:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Tel:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("E-mail:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Email:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("e-mail:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("E-mail address:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Contact:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Alternative contact:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone number:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone No:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Fax number:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Phone No.", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactBetween("No:", "Fax", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactBetween("Contact:", "Tel.:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("European contact:", "PII", 14, true, "Contact information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "15: Redact contact information if applicant is found"
|
||
when
|
||
Section(headlineContainsWord("applicant") || text.contains("Applicant") || headlineContainsWord("Primary contact") || headlineContainsWord("Alternative contact") || text.contains("Telephone number:"))
|
||
then
|
||
section.redactLineAfter("Contact point:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Phone:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Fax:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Tel.:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Tel:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("E-mail:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Email:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("e-mail:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("E-mail address:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Contact:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Alternative contact:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone number:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone No:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Fax number:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Phone No.", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactBetween("No:", "Fax", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactBetween("Contact:", "Tel.:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("European contact:", "PII", 15, true, "Applicant information was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "16: Redact contact information if Producer is found"
|
||
when
|
||
Section(text.toLowerCase().contains("producer of the plant protection") || text.toLowerCase().contains("producer of the active substance") || text.contains("Manufacturer of the active substance") || text.contains("Manufacturer:") || text.contains("Producer or producers of the active substance"))
|
||
then
|
||
section.redactLineAfter("Contact:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Phone:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Fax:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("E-mail:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Contact:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Fax number:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Telephone number:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Tel:", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactLineAfter("Phone No.", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
section.redactBetween("No:", "Fax", "PII", 16, true, "Producer was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "17: Redact AUTHOR(S)"
|
||
when
|
||
Section(searchText.contains("AUTHOR(S):"))
|
||
then
|
||
section.redactLinesBetween("AUTHOR(S):", "COMPLETION DATE:", "PII", 17, true, "AUTHOR(S) was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "18: Redact PERFORMING LABORATORY"
|
||
when
|
||
Section(searchText.contains("PERFORMING LABORATORY:"))
|
||
then
|
||
section.redactBetween("PERFORMING LABORATORY:", "LABORATORY PROJECT ID:", "PII", 18, true, "PERFORMING LABORATORY was found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "19: Redact On behalf of Sequani Ltd.:"
|
||
when
|
||
Section(searchText.contains("On behalf of Sequani Ltd.: Name Title"))
|
||
then
|
||
section.redactBetween("On behalf of Sequani Ltd.: Name Title", "On behalf of", "PII", 19, false , "PII (Personal Identification Information) found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "20: Redact On behalf of Syngenta Ltd.:"
|
||
when
|
||
Section(searchText.contains("On behalf of Syngenta Ltd.: Name Title"))
|
||
then
|
||
section.redactBetween("On behalf of Syngenta Ltd.: Name Title", "Study dates", "PII", 20, false , "PII (Personal Identification Information) found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
// --------------------------------------- other rules -------------------------------------------------------------------
|
||
|
||
rule "21: Purity Hint"
|
||
when
|
||
Section(searchText.toLowerCase().contains("purity"))
|
||
then
|
||
section.addHintAnnotationByRegEx("(purity ?( of|\\(.{1,20}\\))?( ?:)?) .{0,5}[\\d\\.]+( .{0,4}\\.)? ?%", true, 1, "hint_only");
|
||
end
|
||
|
||
|
||
rule "22: Redact Must Redact"
|
||
when
|
||
Section(matchesType("must_redact"))
|
||
then
|
||
section.redact("must_redact", 22, "Must Redact found", "Article 39(1)(2) of Regulation (EC) No 178/2002");
|
||
end
|
||
|
||
|
||
rule "23: Redact signatures"
|
||
when
|
||
Section(matchesImageType("signature"))
|
||
then
|
||
section.redactImage("signature", 23, "Signature found", "Reg (EC) No 1107/2009 Art. 63 (2g)");
|
||
end
|
||
|
||
|
||
rule "24: Redact formula"
|
||
when
|
||
Section(matchesImageType("formula"))
|
||
then
|
||
section.redactImage("formula", 24, "Formula found", "Reg (EC) No 1107/2009 Art. 63 (2g)");
|
||
end
|
||
|
||
|
||
rule "25: Redact Logos"
|
||
when
|
||
Section(matchesImageType("logo"))
|
||
then
|
||
section.redactImage("logo", 25, "Logo found", "Reg (EC) No 1107/2009 Art. 63 (2g)");
|
||
end |