"package drools\n\nimport com.iqser.red.service.redaction.v1.server.redaction.model.Section\n\nglobal Section section\n\n\n// --------------------------------------- AI rules -------------------------------------------------------------------\n\nrule \"0: Add CBI_author from ai\"\n    when\n        Section(aiMatchesType(\"CBI_author\"))\n    then\n        section.addAiEntities(\"CBI_author\", \"CBI_author\");\n    end\n\nrule \"0: Combine address parts from ai to CBI_address (org is mandatory)\"\n    when\n        Section(aiMatchesType(\"ORG\"))\n    then\n        section.combineAiTypes(\"ORG\", \"STREET,POSTAL,COUNTRY,CARDINAL,CITY,STATE\", 20, \"CBI_address\", 3, false);\n    end\n\nrule \"0: Combine address parts from ai to CBI_address (street is mandatory)\"\n    when\n        Section(aiMatchesType(\"STREET\"))\n    then\n        section.combineAiTypes(\"STREET\", \"ORG,POSTAL,COUNTRY,CARDINAL,CITY,STATE\", 20, \"CBI_address\", 3, false);\n    end\n\nrule \"0: Combine address parts from ai to CBI_address (city is mandatory)\"\n    when\n        Section(aiMatchesType(\"CITY\"))\n    then\n        section.combineAiTypes(\"CITY\", \"ORG,STREET,POSTAL,COUNTRY,CARDINAL,STATE\", 20, \"CBI_address\", 3, false);\n    end\n\n/* Syngenta specific laboratory recommendation */\nrule \"0: Recommend CTL/BL laboratory that start with BL or CTL\"\n    when\n        Section(searchText.contains(\"CT\") || searchText.contains(\"BL\"))\n    then\n        /* Regular expression: ((\\b((([Cc]T(([1ILli\\/])| L|~P))|(BL))[\\. ]?([\\dA-Ziltphz~\\/.:!]| ?[\\(',][Ppi](\\(e)?|([\\(-?']\\/))+( ?[\\(\\/\\dA-Znasieg]+)?)\\b( ?\\/? ?\\d+)?)|(\\bCT[L1i]\\b)) */\n        section.addRecommendationByRegEx(\"((\\\\b((([Cc]T(([1ILli\\\\/])| L|~P))|(BL))[\\\\. ]?([\\\\dA-Ziltphz~\\\\/.:!]| ?[\\\\(',][Ppi](\\\\(e)?|([\\\\(-?']\\\\/))+( ?[\\\\(\\\\/\\\\dA-Znasieg]+)?)\\\\b( ?\\\\/? ?\\\\d+)?)|(\\\\bCT[L1i]\\\\b))\", true, 0, \"CBI_address\");\n    end\n\n\n// --------------------------------------- CBI rules -------------------------------------------------------------------\n\nrule \"1: Redact CBI Authors (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesType(\"CBI_author\"))\n    then\n        section.redact(\"CBI_author\", 1, \"Author found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"2: Redact CBI Authors (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesType(\"CBI_author\"))\n    then\n        section.redact(\"CBI_author\", 2, \"Author found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"3: Redact not CBI Address (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesType(\"CBI_address\"))\n    then\n        section.redactNot(\"CBI_address\", 3, \"Address found for non vertebrate study\");\n        section.ignoreRecommendations(\"CBI_address\");\n    end\n\nrule \"4: Redact CBI Address (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesType(\"CBI_address\"))\n    then\n        section.redact(\"CBI_address\", 4, \"Address found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"5: Do not redact genitive CBI_author\"\n    when\n        Section(matchesType(\"CBI_author\"))\n    then\n        section.expandToFalsePositiveByRegEx(\"CBI_author\", \"['’’'ʼˈ´`‘′ʻ’']s\", false, 0);\n    end\n\n\nrule \"6: Redact Author(s) cells in Tables with Author(s) header (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && hasTableHeader(\"Author(s)\") && !hasTableHeader(\"Vertebrate study Y/N\"))\n    then\n        section.redactCell(\"Author(s)\", 6, \"CBI_author\", false, \"Author found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"7: Redact Author(s) cells in Tables with Author(s) header (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && hasTableHeader(\"Author(s)\") && !hasTableHeader(\"Vertebrate study Y/N\"))\n    then\n        section.redactCell(\"Author(s)\", 7, \"CBI_author\", false, \"Author found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"8: Redact Author cells in Tables with Author header (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && hasTableHeader(\"Author\") && !hasTableHeader(\"Vertebrate study Y/N\"))\n    then\n        section.redactCell(\"Author\", 8, \"CBI_author\", false, \"Author found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"9: Redact Author cells in Tables with Author header (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && hasTableHeader(\"Author\") && !hasTableHeader(\"Vertebrate study Y/N\"))\n    then\n        section.redactCell(\"Author\", 9, \"CBI_author\", false, \"Author found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"10: Redact and recommand Authors in Tables with Vertebrate study Y/N header (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && (rowEquals(\"Vertebrate study Y/N\", \"Y\") || rowEquals(\"Vertebrate study Y/N\", \"Yes\") || rowEquals(\"Vertebrate study Y/N\", \"N\") || rowEquals(\"Vertebrate study Y/N\", \"No\")))\n    then\n        section.redactCell(\"Author(s)\", 10, \"CBI_author\", true, \"Author found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"11: Redact and recommand Authors in Tables with Vertebrate study Y/N header (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && (rowEquals(\"Vertebrate study Y/N\", \"Y\") || rowEquals(\"Vertebrate study Y/N\", \"Yes\") || rowEquals(\"Vertebrate study Y/N\", \"N\") || rowEquals(\"Vertebrate study Y/N\", \"No\")))\n    then\n        section.redactCell(\"Author(s)\", 11, \"CBI_author\", true, \"Author found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"14: Redact and add recommendation for et al. author (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && searchText.contains(\"et al\"))\n    then\n        section.redactAndRecommendByRegEx(\"\\\\b([A-ZÄÖÜ][^\\\\s\\\\.,]+( [A-ZÄÖÜ]{1,2}\\\\.?)?( ?[A-ZÄÖÜ]\\\\.?)?) et al\\\\.?\", false, 1, \"CBI_author\", 14, \"Author found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"15: Redact and add recommendation for et al. author (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && searchText.contains(\"et al\"))\n    then\n        section.redactAndRecommendByRegEx(\"\\\\b([A-ZÄÖÜ][^\\\\s\\\\.,]+( [A-ZÄÖÜ]{1,2}\\\\.?)?( ?[A-ZÄÖÜ]\\\\.?)?) et al\\\\.?\", false, 1, \"CBI_author\", 15, \"Author found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"16: Add recommendation for Addresses in Test Organism sections\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && searchText.contains(\"Species:\") && searchText.contains(\"Source:\"))\n    then\n        section.recommendLineAfter(\"Source:\", \"CBI_address\");\n    end\n\nrule \"17: Add recommendation for Addresses in Test Animals sections\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && searchText.contains(\"Species\") && searchText.contains(\"Source\"))\n    then\n        section.recommendLineAfter(\"Source\", \"CBI_address\");\n    end\n\n\nrule \"18: Do not redact Names and Addresses if Published Information found\"\n    when\n        Section(matchesType(\"published_information\"))\n    then\n        section.redactNotAndReference(\"CBI_author\",\"published_information\", 18, \"Published Information found\");\n        section.redactNotAndReference(\"CBI_address\",\"published_information\", 18, \"Published Information found\");\n    end\n\n\n// --------------------------------------- PII rules -------------------------------------------------------------------\n\n\nrule \"19: Redacted PII Personal Identification Information (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesType(\"PII\"))\n    then\n        section.redact(\"PII\", 19, \"Personal information found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"20: Redacted PII Personal Identification Information (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesType(\"PII\"))\n    then\n        section.redact(\"PII\", 20, \"Personal information found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"21: Redact Emails by RegEx (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && searchText.contains(\"@\"))\n    then\n        section.redactByRegEx(\"\\\\b([A-Za-z0-9._%+\\\\-]+@[A-Za-z0-9.\\\\-]+\\\\.[A-Za-z\\\\-]{1,23}[A-Za-z])\\\\b\", true, 1, \"PII\", 21, \"Personal information found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"22: Redact Emails by RegEx (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && searchText.contains(\"@\"))\n    then\n        section.redactByRegEx(\"\\\\b([A-Za-z0-9._%+\\\\-]+@[A-Za-z0-9.\\\\-]+\\\\.[A-Za-z\\\\-]{1,23}[A-Za-z])\\\\b\", true, 1, \"PII\", 22, \"Personal information found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"25: Redact Phone and Fax by RegEx (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && (\n               text.contains(\"Contact\")\n            || text.contains(\"Telephone\")\n            || text.contains(\"Phone\")\n            || text.contains(\"Fax\")\n            || text.contains(\"Tel\")\n            || text.contains(\"Ter\")\n            || text.contains(\"Mobile\")\n            || text.contains(\"Fel\")\n            || text.contains(\"Fer\")\n        ))\n    then\n        section.redactByRegEx(\"\\\\b(contact|telephone|phone|fax|tel|ter|mobile|fel|fer)[a-zA-Z\\\\s]{0,10}[:.\\\\s]{0,3}([\\\\+\\\\d\\\\(][\\\\s\\\\d\\\\(\\\\)\\\\-\\\\/\\\\.]{4,100}\\\\d)\\\\b\", true, 2, \"PII\", 25, \"Personal information found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"26: Redact Phone and Fax by RegEx (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && (\n               text.contains(\"Contact\")\n            || text.contains(\"Telephone\")\n            || text.contains(\"Phone\")\n            || text.contains(\"Fax\")\n            || text.contains(\"Tel\")\n            || text.contains(\"Ter\")\n            || text.contains(\"Mobile\")\n            || text.contains(\"Fel\")\n            || text.contains(\"Fer\")\n        ))\n    then\n        section.redactByRegEx(\"\\\\b(contact|telephone|phone|fax|tel|ter|mobile|fel|fer)[a-zA-Z\\\\s]{0,10}[:.\\\\s]{0,3}([\\\\+\\\\d\\\\(][\\\\s\\\\d\\\\(\\\\)\\\\-\\\\/\\\\.]{4,100}\\\\d)\\\\b\", true, 2, \"PII\", 26, \"Personal information found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"27: Redact AUTHOR(S) (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\")\n            && searchText.contains(\"AUTHOR(S):\")\n            && searchText.contains(\"COMPLETION DATE:\")\n            && !searchText.contains(\"STUDY COMPLETION DATE:\")\n        )\n    then\n        section.redactLinesBetween(\"AUTHOR(S):\", \"COMPLETION DATE:\", \"PII\", 27, true, \"Author found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"28: Redact AUTHOR(S) (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\")\n            && searchText.contains(\"AUTHOR(S):\")\n            && searchText.contains(\"COMPLETION DATE:\")\n            && !searchText.contains(\"STUDY COMPLETION DATE:\")\n        )\n    then\n        section.redactLinesBetween(\"AUTHOR(S):\", \"COMPLETION DATE:\", \"PII\", 28, true, \"AUTHOR(S) was found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"29: Redact AUTHOR(S) (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\")\n            && searchText.contains(\"AUTHOR(S):\")\n            && searchText.contains(\"STUDY COMPLETION DATE:\")\n        )\n    then\n        section.redactLinesBetween(\"AUTHOR(S):\", \"STUDY COMPLETION DATE:\", \"PII\", 29, true, \"AUTHOR(S) was found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"30: Redact AUTHOR(S) (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\")\n            && searchText.contains(\"AUTHOR(S):\")\n            && searchText.contains(\"STUDY COMPLETION DATE:\")\n        )\n    then\n        section.redactLinesBetween(\"AUTHOR(S):\", \"STUDY COMPLETION DATE:\", \"PII\", 30, true, \"AUTHOR(S) was found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"31: Redact PERFORMING LABORATORY (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\")\n            && searchText.contains(\"PERFORMING LABORATORY:\")\n        )\n    then\n        section.redactBetween(\"PERFORMING LABORATORY:\", \"LABORATORY PROJECT ID:\", \"CBI_address\", 31, true, \"PERFORMING LABORATORY was found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n        section.redactNot(\"CBI_address\", 31, \"Performing laboratory found for non vertebrate study\");\n    end\n\nrule \"32: Redact PERFORMING LABORATORY (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\")\n            && searchText.contains(\"PERFORMING LABORATORY:\"))\n    then\n        section.redactBetween(\"PERFORMING LABORATORY:\", \"LABORATORY PROJECT ID:\", \"CBI_address\", 32, true, \"PERFORMING LABORATORY was found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\n// --------------------------------------- other rules -------------------------------------------------------------------\n\nrule \"33: Purity Hint\"\n    when\n        Section(searchText.toLowerCase().contains(\"purity\"))\n    then\n\t    section.addHintAnnotationByRegEx(\"(purity ?( of|\\\\(.{1,20}\\\\))?( ?:)?) .{0,5}[\\\\d\\\\.]+( .{0,4}\\\\.)? ?%\", true, 1, \"hint_only\");\n    end\n\n\nrule \"34: Ignore dossier_redaction entries if confidentiality is not 'confidential'\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Confidentiality\",\"confidential\") && matchesType(\"dossier_redaction\"));\n    then\n        section.ignore(\"dossier_redaction\");\n    end\n\n\nrule \"35: Redact signatures (Non vertebrate study)\"\n    when\n        Section(!fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesImageType(\"signature\"))\n    then\n        section.redactImage(\"signature\", 35, \"Signature found\", \"Article 39(e)(3) of Regulation (EC) No 178/2002\");\n    end\n\nrule \"36: Redact signatures (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesImageType(\"signature\"))\n    then\n        section.redactImage(\"signature\", 36, \"Signature found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n\n\nrule \"43: Redact Logos (Vertebrate study)\"\n    when\n        Section(fileAttributeByLabelEqualsIgnoreCase(\"Vertebrate Study\",\"Yes\") && matchesImageType(\"logo\"))\n    then\n        section.redactImage(\"logo\", 43, \"Logo found\", \"Article 39(e)(2) of Regulation (EC) No 178/2002\");\n    end\n"