diff --git a/gramps/gen/filters/_filterparser.py b/gramps/gen/filters/_filterparser.py
index e1cbc4093d4..3ce6edf71ba 100644
--- a/gramps/gen/filters/_filterparser.py
+++ b/gramps/gen/filters/_filterparser.py
@@ -243,6 +243,7 @@ def __upgrade(self):
"Has the personal event": rules.person.HasEvent,
"Has the family event": rules.person.HasFamilyEvent,
"Has the personal attribute": rules.person.HasAttribute,
+ "Has not the personal attribute": rules.person.HasNotAttribute,
"Has the family attribute": rules.person.HasFamilyAttribute,
"Has source of": rules.person.HasSourceOf,
"Matches the filter named": rules.person.HasSourceOf,
diff --git a/gramps/gen/filters/rules/__init__.py b/gramps/gen/filters/rules/__init__.py
index fda6e6bb5d5..f15c42ed89b 100644
--- a/gramps/gen/filters/rules/__init__.py
+++ b/gramps/gen/filters/rules/__init__.py
@@ -37,6 +37,7 @@
Match on sub-objects
_ChangedSinceBase Object changed since date
_HasAttributeBase Object has particular attribute value
+_HasNotAttributeBase
_HasGrampsId Object has a specific Gramps Id
_HasNoteRegexBase Object has notes matching regular expression
_HasNoteSubstrBase Object has note containing substring
diff --git a/gramps/gen/filters/rules/_hasnotattributebase.py b/gramps/gen/filters/rules/_hasnotattributebase.py
new file mode 100644
index 00000000000..f2e5ecce31a
--- /dev/null
+++ b/gramps/gen/filters/rules/_hasnotattributebase.py
@@ -0,0 +1,82 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2002-2006 Donald N. Allingham
+# Copyright (C) 2019 Matthias Kemmer
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+"""
+Rule that checks for an object with a particular attribute.
+"""
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from ...const import GRAMPS_LOCALE as glocale
+from ...lib.attrtype import AttributeType
+from . import Rule
+
+_ = glocale.translation.gettext
+
+
+# -------------------------------------------------------------------------
+#
+# Typing modules
+#
+# -------------------------------------------------------------------------
+from ...lib.attrbase import AttributeBase
+from ...db import Database
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttributeBase
+#
+# -------------------------------------------------------------------------
+class HasNotAttributeBase(Rule):
+ """
+ Rule that checks for an object without a particular attribute.
+ """
+
+ name = "Objects without the "
+ description = "Matches objects without the given attribute"
+ category = _("General filters")
+ allow_regex = True
+
+ def __init__(self, arg, use_regex=False, use_case=False):
+ super().__init__(arg, use_regex, use_case)
+ self.attribute_type = None
+
+ def prepare(self, db: Database, user):
+ """
+ Prepare the rule. Things that should only be done once.
+ """
+ if self.list[0]:
+ self.attribute_type = AttributeType()
+ self.attribute_type.set_from_xml_str(self.list[0])
+
+ def apply_to_one(self, db: Database, obj: AttributeBase) -> bool:
+ """
+ Apply the rule. Return True if a match.
+ """
+ if self.attribute_type:
+ for attribute in obj.attribute_list:
+ name_match = attribute.type == self.attribute_type
+ if name_match:
+ return False
+ return True
diff --git a/gramps/gen/filters/rules/citation/__init__.py b/gramps/gen/filters/rules/citation/__init__.py
index eb26bdb72ec..0c6d2a4281a 100644
--- a/gramps/gen/filters/rules/citation/__init__.py
+++ b/gramps/gen/filters/rules/citation/__init__.py
@@ -28,6 +28,7 @@
from ._changedsince import ChangedSince
from ._citationprivate import CitationPrivate
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._hasgallery import HasGallery
from ._hasidof import HasIdOf
from ._hasnote import HasNote
@@ -55,6 +56,7 @@
HasAttribute,
HasGallery,
HasIdOf,
+ HasNotAttribute,
HasNote,
HasNoteRegexp,
HasNoteTag,
diff --git a/gramps/gen/filters/rules/citation/_hasnotattribute.py b/gramps/gen/filters/rules/citation/_hasnotattribute.py
new file mode 100644
index 00000000000..25e5d5af271
--- /dev/null
+++ b/gramps/gen/filters/rules/citation/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for a citation with a particular attribute"""
+
+ labels = [_("Citation attribute:")]
+ name = _("Citations without the attribute ")
+ description = _("Matches citations without the attribute")
diff --git a/gramps/gen/filters/rules/event/__init__.py b/gramps/gen/filters/rules/event/__init__.py
index e74de889fc1..50f112308c3 100644
--- a/gramps/gen/filters/rules/event/__init__.py
+++ b/gramps/gen/filters/rules/event/__init__.py
@@ -43,6 +43,7 @@
from ._matchessourceconfidence import MatchesSourceConfidence
from ._matchessourcefilter import MatchesSourceFilter
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._hasdata import HasData
from ._changedsince import ChangedSince
from ._hastag import HasTag
@@ -68,6 +69,7 @@
MatchesSourceConfidence,
MatchesSourceFilter,
HasAttribute,
+ HasNotAttribute,
HasData,
ChangedSince,
HasTag,
diff --git a/gramps/gen/filters/rules/event/_hasnotattribute.py b/gramps/gen/filters/rules/event/_hasnotattribute.py
new file mode 100644
index 00000000000..d409295f194
--- /dev/null
+++ b/gramps/gen/filters/rules/event/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for an event with a particular event attribute"""
+
+ labels = [_("Event attribute:")]
+ name = _("Events without the attribute ")
+ description = _("Matches events without the event attribute")
diff --git a/gramps/gen/filters/rules/family/__init__.py b/gramps/gen/filters/rules/family/__init__.py
index a694c5de761..fa4d158be2d 100644
--- a/gramps/gen/filters/rules/family/__init__.py
+++ b/gramps/gen/filters/rules/family/__init__.py
@@ -47,6 +47,7 @@
from ._hascitation import HasCitation
from ._familyprivate import FamilyPrivate
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._hasevent import HasEvent
from ._isbookmarked import IsBookmarked
from ._matchesfilter import MatchesFilter
@@ -81,6 +82,7 @@
FamilyPrivate,
HasEvent,
HasAttribute,
+ HasNotAttribute,
IsBookmarked,
MatchesFilter,
MatchesSourceConfidence,
diff --git a/gramps/gen/filters/rules/family/_hasnotattribute.py b/gramps/gen/filters/rules/family/_hasnotattribute.py
new file mode 100644
index 00000000000..fa42b026507
--- /dev/null
+++ b/gramps/gen/filters/rules/family/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for a family with a particular family attribute"""
+
+ labels = [_("Family attribute:")]
+ name = _("Families without the family ")
+ description = _("Matches families without the family attribute")
diff --git a/gramps/gen/filters/rules/media/__init__.py b/gramps/gen/filters/rules/media/__init__.py
index 972f4730d34..5ae2a718711 100644
--- a/gramps/gen/filters/rules/media/__init__.py
+++ b/gramps/gen/filters/rules/media/__init__.py
@@ -37,6 +37,7 @@
from ._matchessourceconfidence import MatchesSourceConfidence
from ._hasmedia import HasMedia
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._changedsince import ChangedSince
from ._hastag import HasTag
@@ -56,6 +57,7 @@
MatchesSourceConfidence,
HasMedia,
HasAttribute,
+ HasNotAttribute,
ChangedSince,
HasTag,
]
diff --git a/gramps/gen/filters/rules/media/_hasnotattribute.py b/gramps/gen/filters/rules/media/_hasnotattribute.py
new file mode 100644
index 00000000000..fd97b5106c1
--- /dev/null
+++ b/gramps/gen/filters/rules/media/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for a media object with a particular attribute"""
+
+ labels = [_("Media attribute:")]
+ name = _("Media objects without the attribute ")
+ description = _("Matches media objects without the attribute")
diff --git a/gramps/gen/filters/rules/person/__init__.py b/gramps/gen/filters/rules/person/__init__.py
index 48f95b91556..6dad5b377d8 100644
--- a/gramps/gen/filters/rules/person/__init__.py
+++ b/gramps/gen/filters/rules/person/__init__.py
@@ -32,6 +32,7 @@
from ._hasalternatename import HasAlternateName
from ._hasassociation import HasAssociation
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._hasbirth import HasBirth
from ._hascitation import HasCitation
from ._hascommonancestorwith import HasCommonAncestorWith
@@ -142,6 +143,7 @@
HasEvent,
HasFamilyEvent,
HasAttribute,
+ HasNotAttribute,
HasFamilyAttribute,
HasTag,
HasSourceCount,
diff --git a/gramps/gen/filters/rules/person/_hasnotattribute.py b/gramps/gen/filters/rules/person/_hasnotattribute.py
new file mode 100644
index 00000000000..1b317a487eb
--- /dev/null
+++ b/gramps/gen/filters/rules/person/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for a person with a particular personal attribute"""
+
+ labels = [_("Personal attribute:")]
+ name = _("People without the personal ")
+ description = _("Matches people without the personal attribute")
diff --git a/gramps/gen/filters/rules/repository/__init__.py b/gramps/gen/filters/rules/repository/__init__.py
index fd05e7b5752..8e7a9d0814c 100644
--- a/gramps/gen/filters/rules/repository/__init__.py
+++ b/gramps/gen/filters/rules/repository/__init__.py
@@ -25,6 +25,7 @@
from ._hasidof import HasIdOf
from ._regexpidof import RegExpIdOf
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._hasnoteregexp import HasNoteRegexp
from ._hasnotematchingsubstringof import HasNoteMatchingSubstringOf
from ._hasnotetype import HasNoteType
@@ -40,6 +41,7 @@
editor_rule_list = [
AllRepos,
HasAttribute,
+ HasNotAttribute,
HasIdOf,
RegExpIdOf,
HasNoteRegexp,
diff --git a/gramps/gen/filters/rules/repository/_hasnotattribute.py b/gramps/gen/filters/rules/repository/_hasnotattribute.py
new file mode 100644
index 00000000000..50846bd50b0
--- /dev/null
+++ b/gramps/gen/filters/rules/repository/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for a repository with a particular attribute"""
+
+ labels = [_("Repository attribute:")]
+ name = _("Repositories without the attribute ")
+ description = _("Matches repositories without the attribute")
diff --git a/gramps/gen/filters/rules/source/__init__.py b/gramps/gen/filters/rules/source/__init__.py
index a966a0364dc..a988ac54719 100644
--- a/gramps/gen/filters/rules/source/__init__.py
+++ b/gramps/gen/filters/rules/source/__init__.py
@@ -25,6 +25,7 @@
from ._allsources import AllSources
from ._hasattribute import HasAttribute
+from ._hasnotattribute import HasNotAttribute
from ._hasgallery import HasGallery
from ._hasidof import HasIdOf
from ._regexpidof import RegExpIdOf
@@ -47,6 +48,7 @@
editor_rule_list = [
AllSources,
HasAttribute,
+ HasNotAttribute,
HasGallery,
HasIdOf,
RegExpIdOf,
diff --git a/gramps/gen/filters/rules/source/_hasnotattribute.py b/gramps/gen/filters/rules/source/_hasnotattribute.py
new file mode 100644
index 00000000000..c6ff757c65d
--- /dev/null
+++ b/gramps/gen/filters/rules/source/_hasnotattribute.py
@@ -0,0 +1,47 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2026 Thierry Vignaud
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see .
+#
+
+# -------------------------------------------------------------------------
+#
+# Standard Python modules
+#
+# -------------------------------------------------------------------------
+from ....const import GRAMPS_LOCALE as glocale
+
+_ = glocale.translation.gettext
+
+# -------------------------------------------------------------------------
+#
+# Gramps modules
+#
+# -------------------------------------------------------------------------
+from .._hasnotattributebase import HasNotAttributeBase
+
+
+# -------------------------------------------------------------------------
+#
+# HasNotAttribute
+#
+# -------------------------------------------------------------------------
+class HasNotAttribute(HasNotAttributeBase):
+ """Rule that checks for a source with a particular attribute"""
+
+ labels = [_("Source attribute:")]
+ name = _("Sources without the attribute ")
+ description = _("Matches sources without the attribute")
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 611eb3a3475..f4e35ab1c50 100755
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -29,6 +29,7 @@ gramps/gen/filters/rules/_haseventbase.py
gramps/gen/filters/rules/_hasgallerybase.py
gramps/gen/filters/rules/_hasgrampsid.py
gramps/gen/filters/rules/_hasldsbase.py
+gramps/gen/filters/rules/_hasnotattributebase.py
gramps/gen/filters/rules/_hasnotebase.py
gramps/gen/filters/rules/_hasnoteregexbase.py
gramps/gen/filters/rules/_hasnotesubstrbase.py
@@ -56,6 +57,7 @@ gramps/gen/filters/rules/citation/_hasattribute.py
gramps/gen/filters/rules/citation/_hascitation.py
gramps/gen/filters/rules/citation/_hasgallery.py
gramps/gen/filters/rules/citation/_hasidof.py
+gramps/gen/filters/rules/citation/_hasnotattribute.py
gramps/gen/filters/rules/citation/_hasnote.py
gramps/gen/filters/rules/citation/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/citation/_hasnoteregexp.py
@@ -82,6 +84,7 @@ gramps/gen/filters/rules/event/_hasdayofweek.py
gramps/gen/filters/rules/event/_hasevent.py
gramps/gen/filters/rules/event/_hasgallery.py
gramps/gen/filters/rules/event/_hasidof.py
+gramps/gen/filters/rules/event/_hasnotattribute.py
gramps/gen/filters/rules/event/_hasnote.py
gramps/gen/filters/rules/event/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/event/_hasnoteregexp.py
@@ -110,6 +113,7 @@ gramps/gen/filters/rules/family/_hasevent.py
gramps/gen/filters/rules/family/_hasgallery.py
gramps/gen/filters/rules/family/_hasidof.py
gramps/gen/filters/rules/family/_haslds.py
+gramps/gen/filters/rules/family/_hasnotattribute.py
gramps/gen/filters/rules/family/_hasnote.py
gramps/gen/filters/rules/family/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/family/_hasnoteregexp.py
@@ -141,6 +145,7 @@ gramps/gen/filters/rules/media/_hasattribute.py
gramps/gen/filters/rules/media/_hascitation.py
gramps/gen/filters/rules/media/_hasidof.py
gramps/gen/filters/rules/media/_hasmedia.py
+gramps/gen/filters/rules/media/_hasnotattribute.py
gramps/gen/filters/rules/media/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/media/_hasnoteregexp.py
gramps/gen/filters/rules/media/_hasnotetag.py
@@ -190,6 +195,7 @@ gramps/gen/filters/rules/person/_hasnameof.py
gramps/gen/filters/rules/person/_hasnameorigintype.py
gramps/gen/filters/rules/person/_hasnametype.py
gramps/gen/filters/rules/person/_hasnickname.py
+gramps/gen/filters/rules/person/_hasnotattribute.py
gramps/gen/filters/rules/person/_hasnote.py
gramps/gen/filters/rules/person/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/person/_hasnoteregexp.py
@@ -277,6 +283,7 @@ gramps/gen/filters/rules/repository/_allrepos.py
gramps/gen/filters/rules/repository/_changedsince.py
gramps/gen/filters/rules/repository/_hasattribute.py
gramps/gen/filters/rules/repository/_hasidof.py
+gramps/gen/filters/rules/repository/_hasnotattribute.py
gramps/gen/filters/rules/repository/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/repository/_hasnoteregexp.py
gramps/gen/filters/rules/repository/_hasnotetag.py
@@ -293,6 +300,7 @@ gramps/gen/filters/rules/source/_changedsince.py
gramps/gen/filters/rules/source/_hasattribute.py
gramps/gen/filters/rules/source/_hasgallery.py
gramps/gen/filters/rules/source/_hasidof.py
+gramps/gen/filters/rules/source/_hasnotattribute.py
gramps/gen/filters/rules/source/_hasnote.py
gramps/gen/filters/rules/source/_hasnotematchingsubstringof.py
gramps/gen/filters/rules/source/_hasnoteregexp.py