diff --git a/nedrexdb/db/models/nodes/drug.py b/nedrexdb/db/models/nodes/drug.py index 4d7bbc1..9a1fd21 100644 --- a/nedrexdb/db/models/nodes/drug.py +++ b/nedrexdb/db/models/nodes/drug.py @@ -33,6 +33,7 @@ class Drug(_BaseModel, DrugBase): drugGroups: list[str] = _Field(default_factory=list) casNumber: _StrictStr = "" indication: _StrictStr = "" + approvedEuDrugs: list[str] = _Field(default_factory=list) def generate_update(self): tnow = _datetime.datetime.utcnow() @@ -44,6 +45,7 @@ def generate_update(self): "drugCategories": {"$each": self.drugCategories}, "drugGroups": {"$each": self.drugGroups}, "dataSources": {"$each": self.dataSources}, + "approvedEuDrugs": {"$each": self.approvedEuDrugs}, }, "$setOnInsert": {"created": tnow}, "$set": { @@ -76,6 +78,7 @@ def generate_update(self): "synonyms": {"$each": self.synonyms}, "drugCategories": {"$each": self.drugCategories}, "drugGroups": {"$each": self.drugGroups}, + "approvedEuDrugs": {"$each": self.approvedEuDrugs}, }, "$set": { "displayName": self.displayName, @@ -111,6 +114,7 @@ def generate_update(self): "synonyms": {"$each": self.synonyms}, "drugCategories": {"$each": self.drugCategories}, "drugGroups": {"$each": self.drugGroups}, + "approvedEuDrugs": {"$each": self.approvedEuDrugs}, }, "$set": { "displayName": self.displayName, diff --git a/nedrexdb/db/parsers/drugbank.py b/nedrexdb/db/parsers/drugbank.py index 96abb90..552dbd5 100644 --- a/nedrexdb/db/parsers/drugbank.py +++ b/nedrexdb/db/parsers/drugbank.py @@ -210,7 +210,42 @@ def get_iupac(self) -> _Optional[str]: def get_molecular_formula(self) -> _Optional[str]: return self._calculated_properties.get("Molecular Formula") + + def get_eu_approved_drugs(self) -> list[str]: + products_block = self._entry.get(ns("products")) + if not products_block: + return [] + + products = products_block.get(ns("product")) + if not products: + return [] + + if isinstance(products, _OrderedDict): + products = [products] + + eu_approved_names = set() + + for p in products: + + def get(field): + val = p.get(ns(field)) + if not val: + return None + return val.get("$") + + country = get("country") + if country != "EU": + continue + + name = get("name") + approved = get("approved") + + if approved and name: + eu_approved_names.add(name) + return list(eu_approved_names) + + def get_sequences(self) -> list[str]: sequences: list[str] = [] @@ -249,6 +284,7 @@ def parse(self): d.displayName = self.get_display_name() d.synonyms = self.get_synonyms() + d.approvedEuDrugs = self.get_eu_approved_drugs() d.drugCategories = self.get_drug_categories() d.drugGroups = self.get_drug_groups() d.casNumber = self.get_cas_number()