Skip to content

Code quality

ALN** occurrences by order of importance

NOQA Number of occurrences
ALN069: You can't import models from other components, see: https://www.notion.so/alaninsurance/Modular-monolith-a9d84f1318d34115bbd08b3648e5a587 ⧉", 78
ALN043: You can only import things from a Component public module, see: https://www.notion.so/alaninsurance/Modular-monolith-a9d84f1318d34115bbd08b3648e5a587 ⧉", 54
ALN039: The module public cannot import other components (or from apps/), it's meant to be the public interface of the component #{self.component_name}, see: https://www.notion.so/alaninsurance/Modular-monolith-a9d84f1318d34115bbd08b3648e5a587 ⧉", 2
ALN009: Checks that models do not import business logic 32
ALN021: Foreign keys must use models, not string. See this Notion page : https://www.notion.so/alaninsurance/Imports-5495c8713847434986ef03ad09158bf1 ⧉ 40
ALN027: This class checks that no protected attribute access is used. 9
ALN037: @property are not serialized by dataclass_json. If not a problem for your use case, please ignore (# noqa: ALN037). "See this Notion page: https://www.notion.so/alaninsurance/Dataclass-the-good-parts-8f387ec2a8e24a55af294237b97dc210#a611a9154af448a38e552c61415169df ⧉ 26
ALN042: 1/n or n/1 relationships must define an explicit 'order_by' clause. 1
ALN051: Check that we use isodate_field(), optional_isodate_field(), isodatetime_field() and optional_isodatetime_field() in json dataclasses for es/be/ca apps 3
ALN071: SQLAlchemy v2 migration, in models all attributes (or functions with @declared_attr) must return a Mapped[...] type. If it's a class variable type it with ClassVar[...] 3
ALN073: Don't call functions without assigning their return value to a variable. 1
ALN077: Check for usage of backref in SQLAlchemy relationships and suggest using back_populates instead. 58
ALN079: Check for direct instantiation of AlanBaseFactory or its derived classes. Always use the .create() class method instead of direct instantiation. 6
ALN085: Enforces SQLAlchemy 2.0 query style by detecting deprecated patterns that will be removed in SQLAlchemy 2.0. This linter checks for: 1. Usage of session.query() which is deprecated in favor of session.scalar(), session.scalars(), or session.execute() Note: Other SQLAlchemy 2.0 deprecation warnings are already being turned into errors at runtime by the _turn_sql_alchemy_warning_into_errors function in backend/shared/models/orm/sqlalchemy.py. 962
ALN089: pytest fixtures with autouse=True in conftest.py files can have unwanted side-effects as they will be used in any tests in the subfolders and can inadvertently use other fixtures that add functionality. Instead, mark tests that need the fixture explicitly with @pytest.mark.usefixtures("fixture_name") or use the fixture as a parameter. 1
ALN096: Do not set auth headers (Authorization, CF-Access-*, X-Api-Key) inline in HTTP calls. Use a requests.auth.AuthBase subclass instead. This centralizes auth logic, makes credentials easier to rotate, and prevents accidental leaks in logs. Bad: requests.get(url, headers={"Authorization": f"Bearer {token}"}) Good: class BearerAuth(requests.auth.AuthBase): def init(self, token: str) -> None: self.token = token def call(self, r: requests.PreparedRequest) -> requests.PreparedRequest: r.headers["Authorization"] = f"Bearer {self.token}" return r requests.get(url, auth=BearerAuth(token)) 1

Listing of files of the most critical ALN**

ALN069 occurs 78 times

File:line Content
components/be/bootstrap/load_all_models.py:320 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/bootstrap/load_all_models.py:323 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/bootstrap/load_all_models.py:326 ⧉ from components.offer_builder.subcomponents.pricer.internal.country_specific.be.models.demographics_model_entry import ( # noqa: ALN069
components/be/bootstrap/load_all_models.py:329 ⧉ from components.offer_builder.subcomponents.pricer.internal.country_specific.be.models.option_taker_model import ( # noqa: ALN069
components/be/bootstrap/flask_admin_configuration.py:367 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/bootstrap/flask_admin_configuration.py:370 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/bootstrap/flask_admin_configuration.py:373 ⧉ from components.offer_builder.subcomponents.pricer.internal.country_specific.be.models.demographics_model_entry import ( # noqa: ALN069
components/be/bootstrap/flask_admin_configuration.py:376 ⧉ from components.offer_builder.subcomponents.pricer.internal.country_specific.be.models.option_taker_model import ( # noqa: ALN069
components/be/bootstrap/dependencies/gamification.py:141 ⧉ from components.gamification.internal.models.player import ( # noqa: ALN069
components/be/bootstrap/dependencies/tests/test_payroll_tool.py:16 ⧉ from components.payroll_tool.internal.models.payloads import ( # noqa: ALN069
components/be/bootstrap/dependencies/tests/test_payroll_tool.py:19 ⧉ from components.payroll_tool.internal.models.tests.factories.snapshot_entry_factory import ( # noqa: ALN069
components/be/internal/data_consistency/commands/check_profile_consistency.py:17 ⧉ from components.global_profile.internal.models.profile import ( # noqa: ALN069
components/be/internal/data_consistency/queries/profile.py:5 ⧉ from components.global_profile.internal.models.profile import ( # noqa: ALN069
components/be/internal/data_consistency/entities/factories/data_inconsistency.py:7 ⧉ from components.global_profile.internal.models.profile import ( # noqa: ALN069 for typing only
components/be/internal/models/be_account.py:16 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/models/be_company.py:35 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/models/be_user.py:57 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/models/be_user.py:60 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/models/be_company_admin.py:18 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/models/tests/factories.py:96 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/models/tests/factories.py:99 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/models/tests/factories.py:108 ⧉ from components.global_profile.internal.models.tests.factories import ( # noqa: ALN069
components/be/internal/global_profile/tests/test_repositoryV2.py:14 ⧉ from components.global_profile.internal.models.profile import ( # noqa: ALN069
components/be/internal/customer_health_partner/tests/test_commands.py:14 ⧉ from components.customer_health_partner.wellbeing_assessment.internal.models.tests.factories import ( # tests # noqa: ALN069
components/be/internal/payment_method/billing_customer_repository.py:38 ⧉ from components.payment_method.internal.models.billing_payment_method import ( # noqa: ALN069
components/be/internal/contracting/proposal/tests/test_create_renewal_proposals_from_csv.py:15 ⧉ from components.contracting.subcomponents.proposal.internals.models.proposal import ( # noqa: ALN069
components/be/internal/contracting/proposal/tests/test_create_renewal_proposals_from_csv.py:37 ⧉ from components.contracting.subcomponents.renewal.internal.models.renewal_campaign_configuration import ( # noqa: ALN069
components/be/internal/payroll_tool/tests/test_take_snapshot.py:30 ⧉ from components.payroll_tool.internal.models.enums import ( # noqa: ALN069
components/be/internal/payroll_tool/tests/test_payloads.py:15 ⧉ from components.payroll_tool.internal.models.snapshot_entry import ( # noqa: ALN069
components/be/internal/services/tracking/generic_traits.py:18 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/services/tracking/policy_traits.py:67 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/health_contract/actions/tests/test_add_health_contract_versions.py:36 ⧉ from components.contracting.subcomponents.legal_document.internal.models.tests.factories import ( # noqa: ALN069
components/be/internal/health_contract/actions/tests/test_create_health_contract.py:26 ⧉ from components.contracting.subcomponents.legal_document.internal.models.tests.factories import ( # noqa: ALN069
components/be/internal/health_contract/queries/get_health_contract_locale.py:10 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/assusoft/business_logic/actions/tests/test_retry_assusoft_onboarding.py:22 ⧉ from components.employment.internal.models.blocked_movement import ( # noqa: ALN069
components/be/internal/customer_dashboard/tests/test_admins.py:30 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa:ALN069
components/be/internal/customer_dashboard/tests/test_admins.py:33 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa:ALN069
components/be/internal/customer_dashboard/tests/test_admins.py:36 ⧉ from components.onboarding.internal.models.tests.factories.factories import ( # noqa:ALN069
components/be/internal/customer_dashboard/tests/test_admin_invitations.py:12 ⧉ from components.onboarding.internal.models.tests.factories.factories import ( # noqa: ALN069 # tests
components/be/internal/customer_dashboard/tests/test_admin_invitations.py:30 ⧉ from components.onboarding.internal.models.tests.factories.factories import ( # noqa: ALN069 # tests
components/be/internal/customer_dashboard/controllers/tests/test_companies.py:23 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/billing/commands/stripe_vban_migration.py:22 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/billing/adapters/tests/test_stripe.py:29 ⧉ from components.payment_gateway.subcomponents.parties.models.tests.factories import ( # noqa: ALN069
components/be/internal/billing/business_logic/pay_csv.py:60 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/billing/business_logic/actions/tests/test_billing_customer_migration.py:16 ⧉ from components.payment_method.internal.models.billing_customer import ( # noqa: ALN069
components/be/internal/billing/business_logic/queries/billing_customer_migration.py:7 ⧉ from components.payment_method.internal.models.billing_customer import ( # noqa: ALN069
components/be/internal/retiree/queries/get_company_retirees.py:55 ⧉ from components.global_profile.internal.models.profile import ( # noqa: ALN069 # access Profile columns directly to drop deprecated BeUser.first_name/last_name/email proxies
components/be/internal/retiree/queries/get_company_retirees.py:58 ⧉ from components.onboarding.internal.models.onboarding_invitation import ( # noqa: ALN069 # SQL union of retiree invitations with BE individual contracts requires column-level access
components/be/internal/affiliation/actions/tests/test_process_affiliation_cancel_integration.py:22 ⧉ from components.employment.internal.models.model_brokers import ( # noqa: ALN069
components/be/internal/affiliation/actions/tests/test_process_affiliation_cancel_integration.py:25 ⧉ from components.employment.internal.models.tests.factories import ( # noqa: ALN069
components/be/internal/company/company.py:60 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/company/actions/account.py:128 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/company/actions/account.py:131 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/company/queries/get_company.py:11 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/company/queries/company_admin.py:8 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/company/queries/access_control.py:10 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/company/public/tests/test_company.py:16 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/auth/tests/factories.py:1 ⧉ from components.global_services.internal.models.feature_flag import ( # noqa: ALN069
components/be/internal/auth/tests/factories.py:4 ⧉ from components.global_services.internal.models.tests.factories import ( # noqa: ALN069
components/be/internal/account/actions/account.py:9 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/account/actions/account.py:12 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/account/queries/account.py:15 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/account/queries/account.py:18 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/document_parsing/business_logic/indexation/test_document.py:29 ⧉ from components.documents.internal.models.document_embedding import ( # noqa: ALN069
components/be/internal/document_parsing/business_logic/indexation/test_document.py:32 ⧉ from components.documents.internal.models.tests.factories import ( # we don't care on tests # noqa: ALN069
components/be/internal/document_parsing/business_logic/indexation/document.py:101 ⧉ from components.documents.internal.models.document_embedding import ( # noqa: ALN069
components/be/internal/employment/global_employment/tests/test_backfill.py:18 ⧉ from components.employment.internal.models.core_employment_version import ( # - migration temporary code # noqa: ALN069
components/be/internal/employment/global_employment/tests/test_backfill.py:21 ⧉ from components.employment.internal.models.model_brokers import ( # - migration temporary code # noqa: ALN069
components/be/internal/employment/global_employment/tests/test_backfill.py:24 ⧉ from components.employment.internal.models.tests.factories import ( # - migration temporary code # noqa: ALN069
components/be/internal/company_admin/repository.py:10 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069
components/be/internal/company_admin/repository.py:33 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069
components/be/internal/company_admin/repository.py:83 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa:ALN069
components/be/internal/company_admin/repository.py:282 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa:ALN069
components/be/internal/premium_computation/models/premium_component.py:3 ⧉ from components.premium.public.models.helper import ( # noqa: ALN069
components/be/internal/premium_computation/models/premium_component.py:6 ⧉ from components.premium.public.models.premium_component import ( # noqa: ALN069
components/be/internal/premium_computation/business_logic/tests/factory.py:55 ⧉ from components.contracting.subcomponents.subscription.internal.models.subscription_version import ( # noqa: ALN069
components/be/public/global_customer_dashboard/admin.py:39 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069, ALN039
components/be/public/global_customer_dashboard/admin.py:42 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069, ALN039

ALN043 occurs 54 times

File:line Content
components/be/conftest.py:210 ⧉ from components.global_customer_dashboard.internal.controllers.admin import ( # noqa: ALN043
components/be/conftest.py:214 ⧉ from components.global_customer_dashboard.internal.controllers.admin_invitation import ( # noqa: ALN043
components/be/conftest.py:217 ⧉ from components.global_customer_dashboard.internal.controllers.dsn_status import ( # noqa: ALN043
components/be/subcomponents/offer_catalog/internal/create_offer_from_payload.py:47 ⧉ from components.offer_builder.internal.country_specific.be.business_logic.get_limits_from_offer_payload import ( # noqa: ALN043
components/be/subcomponents/offer_catalog/internal/create_offer_from_payload.py:53 ⧉ from components.offer_builder.internal.country_specific.be.enums.be_price_component_type import ( # noqa: ALN043
components/be/subcomponents/offer_catalog/internal/create_offer_from_payload.py:110 ⧉ from components.offer_builder.internal.country_specific.be.business_logic.get_limits_from_offer_payload import ( # noqa: ALN043
components/be/subcomponents/offer_catalog/internal/create_offer_from_payload.py:240 ⧉ from components.offer_builder.internal.country_specific.be.business_logic.get_limits_from_offer_payload import ( # noqa: ALN043
components/be/subcomponents/offer_catalog/internal/tests/test_create_offer_from_payload.py:65 ⧉ from components.offer_builder.internal.country_specific.be.enums.be_price_component_type import ( # noqa: ALN043
components/be/bootstrap/offer_catalog.py:13 ⧉ from components.offer_builder.internal.country_specific.be.enums.be_price_component_type import ( # noqa: ALN043
components/be/bootstrap/blueprint.py:97 ⧉ from components.payroll_tool.internal.controllers.timeline_viewer import ( # noqa: ALN043
components/be/bootstrap/test_offer_builder.py:3 ⧉ from components.offer_builder.internal.country_specific.be.dependencies.offer_builder import ( # noqa: ALN043
components/be/bootstrap/test_offer_builder.py:6 ⧉ from components.offer_builder.internal.country_specific.be.templates.entities import ( # noqa: ALN043
components/be/bootstrap/test_offer_builder.py:9 ⧉ from components.offer_builder.internal.entities.factories.builder_product import ( # noqa: ALN043
components/be/bootstrap/test_offer_builder.py:13 ⧉ from components.offer_builder.internal.entities.factories.builder_template import ( # noqa: ALN043
components/be/bootstrap/payment_method.py:5 ⧉ from components.payment_method.internal.domain.repository import ( # noqa: ALN043
components/be/bootstrap/dependencies/tests/test_payroll_tool.py:13 ⧉ from components.payroll_tool.internal.business_logic.queries.get_employees_for_snapshot import ( # noqa: ALN043
components/be/internal/health_plan/queries/tests/test_coverage_module.py:42 ⧉ from components.contracting.subcomponents.subscription.internal.tests.factories import ( # noqa: ALN043
components/be/internal/models/tests/factories.py:102 ⧉ from components.global_profile.internal.domain.tests.factories import ( # noqa: ALN043
components/be/internal/models/tests/factories.py:105 ⧉ from components.global_profile.internal.infrastructure.repository import ( # noqa: ALN043
components/be/internal/global_profile/repository.py:13 ⧉ from components.global_profile.internal.domain.address_timeline import ( # noqa: ALN043
components/be/internal/global_profile/repository.py:16 ⧉ from components.global_profile.internal.domain.entities import ( # noqa: ALN043
components/be/internal/global_profile/repository.py:20 ⧉ from components.global_profile.internal.domain.events import DomainEvent # noqa: ALN043
components/be/internal/global_profile/repository.py:21 ⧉ from components.global_profile.internal.domain.repository import ( # noqa: ALN043
components/be/internal/global_profile/repository.py:24 ⧉ from components.global_profile.internal.infrastructure.repository import ( # noqa: ALN043
components/be/internal/global_profile/repository.py:27 ⧉ from components.global_profile.internal.infrastructure.user_profile_mapping_repository import ( # noqa: ALN043
components/be/internal/global_profile/tests/test_create_profile_with_user.py:13 ⧉ from components.fr.internal.tests.factories.user import ( # noqa: ALN043
components/be/internal/payment_method/billing_customer_repository.py:23 ⧉ from components.payment_method.internal.domain.entities import ( # noqa: ALN043
components/be/internal/payment_method/billing_customer_repository.py:29 ⧉ from components.payment_method.internal.domain.repository import ( # noqa: ALN043
components/be/internal/payment_method/billing_customer_repository.py:32 ⧉ from components.payment_method.internal.domain.signature_metadata import ( # noqa: ALN043
components/be/internal/payment_method/billing_customer_repository.py:35 ⧉ from components.payment_method.internal.infrastructure.global_repository import ( # noqa: ALN043
components/be/internal/payment_method/tests/test_be_repository.py:25 ⧉ from components.payment_method.internal.domain.tests.factories import ( # noqa: ALN043
components/be/internal/payment_method/tests/test_be_repository.py:30 ⧉ from components.payment_method.internal.infrastructure.global_repository import ( # noqa: ALN043
components/be/internal/payment_method/tests/test_generate_sepa_mandate_document.py:4 ⧉ from components.payment_method.internal.business_logic.documents import ( # noqa: ALN043
components/be/internal/contracting/proposal/tests/test_main.py:9 ⧉ from components.contracting.conftest import ( # noqa: F401, ALN043
components/be/internal/contracting/proposal/tests/test_main.py:45 ⧉ from components.contracting.subcomponents.proposal.api.tests.test_main import ( # noqa: ALN043
components/be/internal/contracting/proposal/tests/test_main.py:88 ⧉ from components.contracting.external.subscriptor.be.company import ( # noqa: ALN043
components/be/internal/contracting/proposal/tests/test_main.py:91 ⧉ from components.contracting.subcomponents.subscription.internal.tests.factories import ( # noqa: ALN043
components/be/internal/contracting/proposal/tests/test_main.py:170 ⧉ from components.contracting.external.subscriptor.be.company import ( # noqa: ALN043
components/be/internal/contracting/proposal/tests/test_create_renewal_proposals_from_csv.py:18 ⧉ from components.contracting.subcomponents.renewal.internal.app_specifics.be.create_renewal_proposals_from_csv import ( # noqa: ALN043
components/be/internal/invoicing/business_logic/actions/tests/test_charge.py:34 ⧉ from components.payment_method.internal.domain.tests.factories import ( # noqa: ALN043
components/be/internal/services/intercom/tests/test_care_conversation_context.py:8 ⧉ from components.support.internal.business_logic.queries.contact_request_queries import ( # noqa: ALN043
components/be/internal/iban/tests/test_iban.py:29 ⧉ from components.payment_method.internal.domain.tests.factories import ( # noqa: ALN043
components/be/internal/iban/tests/test_iban.py:33 ⧉ from components.payment_method.internal.infrastructure.global_repository import ( # noqa: ALN043
components/be/internal/health_contract/actions/add_health_contract_versions.py:56 ⧉ from components.contracting.subcomponents.proposal.plugins.shared.be.health.validation import ( # # fixme: We should not call logic from proposal-builder plugins here # noqa: ALN043
components/be/internal/health_contract/documents/actions/generate_cp.py:174 ⧉ from components.contracting.subcomponents.legal_document.external.contexts.be_health.template_args import ( # noqa: ALN043
components/be/internal/customer_dashboard/tests/test_admin_invitations.py:15 ⧉ from components.onboarding.internal.queries.onboarding_invitation import ( # noqa: ALN043 # tests
components/be/internal/billing/business_logic/actions/billing_customer_migration.py:13 ⧉ from components.payment_method.internal.infrastructure.global_repository import ( # noqa: ALN043
components/be/internal/billing/business_logic/tests/test_stripe.py:36 ⧉ from components.payment_method.internal.domain.tests.factories import ( # noqa: ALN043
components/be/internal/document_parsing/business_logic/indexation/test_document.py:26 ⧉ from components.documents.internal.helpers.embedding_algorithm import ( # , we don't care on tests # noqa: ALN043
components/be/internal/employment/global_employment/tests/test_backfill.py:15 ⧉ from components.employment.external.country_gateways import ( # - migration temporary code # noqa: ALN043
components/be/internal/claim_management/commands/documents.py:57 ⧉ from components.documents.internal.business_logic.parsing.flow.document_parsing_flow import ( # noqa: ALN043
components/be/internal/helpers/tests/base_test_app.py:117 ⧉ from components.contracting.bootstrap.bootstrap import ( # noqa: ALN043
components/be/internal/premium_computation/business_logic/tests/test_premium_computation_extended_coverage_scenario.py:39 ⧉ from components.contracting.subcomponents.subscription.internal.tests.factories import ( # noqa: ALN043
components/be/internal/premium_computation/business_logic/tests/factory.py:58 ⧉ from components.contracting.subcomponents.subscription.internal.tests.factories import ( # noqa: ALN043

ALN039 occurs 2 times

File:line Content
components/be/public/global_customer_dashboard/admin.py:39 ⧉ from components.customer_admin.internal.models.be_account_admin import ( # noqa: ALN069, ALN039
components/be/public/global_customer_dashboard/admin.py:42 ⧉ from components.customer_admin.internal.models.be_company_admin import ( # noqa: ALN069, ALN039