"""Constants.""" # pylint: disable=E0401 from enum import Enum from dateutil import tz class ListEnum(str, Enum): """Parent enum class for inheriting list functions.""" @classmethod def to_list(cls) -> list[str]: """Convert enums into a list of strings.""" return [c.value for c in cls] class JWTKeys(str, Enum): """Enum containing JWTKeys.""" CLIENT_ID = 'azp' ORCHARD_IDENTITY_ID = 'orchardIdentityId' PROFILE_META = 'https://grass.theorchard.com/profiles' PROFILE_TYPE = 'profile_type' PROFILE_ID = 'profile_id' ROLES = 'roles' USER_META = 'https://grass.theorchard.com/user_metadata' UUID = 'uuid' # Default endpoints class DefaultEndpoints(ListEnum): """Collection of default endpoints.""" HEALTH_CHECK = '/hello/' HEALTH_CHECK_NO_SLASH = '/hello' RECOC = '/redoc' DOCS = '/docs' # We use this timezone for internally generated timestamps. SYSTEM_TIMEZONE = tz.gettz('Europe/London') class Environment(ListEnum): """Environment Type.""" DEV = 'dev' PROD = 'prod' QA = 'qa' TEST = 'test' class ContractType(str, Enum): """Contract type.""" DISTRIBUTION = 'distribution' LEGACY_DISTRIBUTION = 'legacy_distribution' NEIGHBOURING_RIGHTS = 'neighbouring_rights' class RevenueType(str, Enum): """Revenue type.""" DISTRIBUTION = 'distribution' NEIGHBOURING_RIGHTS = 'neighbouring_rights' class RevenueDisplayType(str, Enum): """Revenue display type for custom reports.""" NET = 'net' GROSS = 'gross' class ReportCustomColumnDimension(str, Enum): """Custom report column dimension.""" STATEMENT_PERIOD = 'statement_period' TERRITORY = 'territory' FINANCIAL_DETAIL = 'financial_detail' class ReportCustomRowDimension(str, Enum): """Custom report row dimension.""" PRODUCT = 'product' RECORDING = 'recording' SERVICE = 'service' STATEMENT_PERIOD = 'statement_period' TERRITORY = 'territory' PRODUCT_ARTIST = 'product_artist' COLLECTION_SOCIETY = 'collection_society' TRACK = 'track' TRANSACTION_TYPE = 'transaction_type' IMPRINT = 'imprint' SUBACCOUNT = 'subaccount' PROJECT = 'project' class ReportCustomStatus(str, Enum): """Custom report status.""" IN_PROGRESS = 'in_progress' COMPLETE = 'complete' ERROR = 'error' class StatementAttachmentStatus(str, Enum): """Statement attachment status.""" IN_PROGRESS = 'in_progress' COMPLETE = 'complete' ERROR = 'error' RETRY = 'retry' class StatementAttachmentType(str, Enum): """Statement attachment type.""" DISTRIBUTION_FEE_INVOICE = 'distribution_fee_invoice' REVENUE_DETAIL = 'revenue_detail' SELF_BILLING_INVOICE = 'self_billing_invoice' NEIGHBOURING_RIGHTS_LABEL_REVENUE = 'nr_label_revenue' NEIGHBOURING_RIGHTS_PERFORMER_REVENUE = 'nr_performer_revenue' COLLECTION_SUMMARY_LABEL = 'collection_summary_label' COLLECTION_SUMMARY_PERFORMER = 'collection_summary_performer' PUBLISHING_DETAIL = 'publishing_detail' INTERNAL_UPLOAD = 'internal_upload' LEGACY_REVENUE_DETAIL_FULL = 'legacy_revenue_detail_full' LEGACY_REVENUE_DETAIL_PHYSICAL = 'legacy_revenue_detail_physical' ROYALTY_SHARE_STATEMENT = 'royalty_share_statement' class StatementAttachmentFailureReason(str, Enum): """Statement attachment failure reason.""" MISSING_TAX_INFORMATION = 'missing_tax_information' MISSING_BANK_INFORMATION = 'missing_bank_information' SYSTEM_ERROR = 'system_error' class RevenueVariant(str, Enum): """Revenue variant for filtering.""" PHYSICAL = 'physical' DIGITAL = 'digital' OTHER = 'other' ALL = 'all' class ReportCustomFileType(str, Enum): """File type for custom reports.""" CSV = 'csv' XLS = 'xls' TXT = 'txt' class StatementAttachmentFileType(str, Enum): """File type for statement attachments.""" PDF = 'pdf' CSV = 'csv' XLS = 'xls' XLSX = 'xlsx' PNG = 'png' JPG = 'jpg' DOC = 'doc' DOCX = 'docx' TXT = 'txt' class NumberFormat(str, Enum): """File Numbers Format.""" EU = 'eu' US = 'us' class StatementPeriodStatus(str, Enum): """Statement period status.""" OPEN = 'open' CLOSED = 'closed' CURRENT = 'current' class DistributionType(str, Enum): """Distribution type.""" DIGITAL = 'digital' PHYSICAL = 'physical' class VatCategory(str, Enum): """Vat category.""" GROSS_REVENUE = 'gross_revenue' DISTRIBUTION_FEE = 'distribution_fee' CLOSING_BALANCE = 'closing_balance' COMMISSION = 'commission' CUSTOM_PAYMENT = 'custom_payment' class ActionStatus(str, Enum): """Action status.""" INIT = 'init' RUNNING = 'running' ERROR = 'error' COMPLETE = 'complete' APPROVED = 'approved' REJECTED = 'rejected' class Milestone(str, Enum): """Milestone.""" CONTRACT_EXECUTION = 'contract_execution' DELIVERY = 'delivery' FUND_CONTINGENT = 'fund_contingent' FUND_NON_CONTINGENT = 'fund_non_contingent' RECOUPMENT = 'recoupment' SCHEDULED_INSTALLMENT = 'scheduled_installment' SALES_MILESTONE = 'sales_milestone' OPTION = 'option' OTHER = 'other' # TODO: remove once backfilling is completed class AdvanceStatus(str, Enum): """Advance status.""" NOT_QUALIFIED = 'not_qualified' QUALIFIED = 'qualified' APPROVED = 'approved' PAID = 'paid' DELETED = 'deleted' IN_REVIEW = 'in_review' PENDING_PAYMENT = 'pending_payment' class OrderDirection(str, Enum): """Enum for order Direction.""" ASC = 'asc' DESC = 'desc' class RequestMethod(str, Enum): """Request methods enum.""" POST = 'post' GET = 'get' class CorrectionType(str, Enum): """Correction type.""" ROYALTY_REVERSAL = 'royalty_reversal' ROYALTY_CORRECTION = 'royalty_correction' class PaymentSchedule(str, Enum): """Payment Schedule.""" _30_DAYS_AFTER_MONTH_END = '30_days_after_month_end' _45_DAYS_AFTER_MONTH_END = '45_days_after_month_end' _60_DAYS_AFTER_MONTH_END = '60_days_after_month_end' _90_DAYS_AFTER_MONTH_END = '90_days_after_month_end' _30_DAYS_AFTER_QUARTER_END = '30_days_after_quarter_end' _45_DAYS_AFTER_QUARTER_END = '45_days_after_quarter_end' _60_DAYS_AFTER_QUARTER_END = '60_days_after_quarter_end' _90_DAYS_AFTER_QUARTER_END = '90_days_after_quarter_end' _30_DAYS_AFTER_HALF_YEAR_END = '30_days_after_half_year_end' _45_DAYS_AFTER_HALF_YEAR_END = '45_days_after_half_year_end' _60_DAYS_AFTER_HALF_YEAR_END = '60_days_after_half_year_end' _90_DAYS_AFTER_HALF_YEAR_END = '90_days_after_half_year_end' _TEMPORARY = 'TEMPORARY' EXPENSE_ADJUSTMENT_TYPE_ID: int = 65 VAT_ADJUSTMENT_TYPE_ID: int = 87 FLOWTHROUGH_ADJUSTMENT_TYPE_ID: int = 105 ABACUS_EVENT_BACKFILL = 'backfill' # Company SAP IDs AWAL_SAP_IDS = ['2820', '2821', '4914', '4915', '4916'] KNR_SAP_IDS = ['4917', '4918', '4919', '4920'] # Authorization headers IDENTITY_HEADER = 'Orchard-Identity-Id' USER_HEADER_NAME = 'Orchard-User-Id' USER_HEADER_DELIMITER = ':' USER_HEADER_LENGTH = 2 USER_HEADER_PROFILE_ID = 'orchard-profile-id' USER_HEADER_PROFILE_TYPE = 'orchard-profile-type' USER_HEADER_PROFILE_UUID = 'orchard-profile-uuid' USER_HEADER_ROLES = 'orchard-roles' APPLICATION_PROFILE_TYPE = 'AbacusProfile' # Request Keys SCOPE = 'scope' TOKEN = 'token' class Header(str, Enum): """Generic Request Headers.""" AUTHORIZATION = 'Authorization' # Generic headers CORRELATION_ID_HEADER = 'Correlation-Id' # Path Parameter ACCOUNT_PATH_PARAM = 'account' # Response Status Codes OK_RESPONSE = 200 SUCCESS_UPPER_BOUNDARY = 299 # Defaults DEFAULT_USER_ID = 'default_user_id' LAMBDA_PROFILE_ID_QA = 87918 LAMBDA_PROFILE_ID_PROD = 134124 DEFAULT_USER_TYPE = 'AbacusProfile' DEFAULT_HEADERS: dict[str, str] = { 'Orchard-Profile-Type': 'MoneyhubProfile', 'Orchard-Profile-Id': 'system_profile_id', 'Orchard-Roles': 'administrator', 'Orchard-Identity-Id': 'system_id' } # Comparisons ITEMS_KEY = 'items' WILD_CARD = '*' # Pagination PAGINATION_TYPE_STANDARD = 'standard' # Order by default parameters class OrderBy(str, Enum): """Order By column names.""" NET_REVENUE_PAYEE_CURRENCY = 'net_revenue_payee_currency' # Group by default parameters class GroupBy(str, Enum): """Group By column names.""" ARTIST_ID = 'artist_id' EXPENSE_TYPE_ID = 'expense_type_id' IMPRINT_ID = 'imprint_id' SUBACCOUNT_ID = 'subaccount_id' UPC = 'upc' ORDER_BY_ARTIST_NAME = 'artist_name' ORDER_BY_PRODUCT_ID = 'product_id' ORDER_BY_SUBACCOUNT_ID = 'subaccount_id' ORDER_BY_RECORDING_ID = 'recording_id' ORDER_BY_TRACK_UNIQUE_ID = 'track_unique_id' ORDER_BY_IMPRINT = 'imprint' ORDER_BY_NET_REVENUE_PAYEE_CURRENCY = 'net_revenue_payee_currency' ORDER_BY_PROJECT_ID = 'project_id' # TTL Cache Constants ONE_HOUR = 60 * 60 ONE_DAY = ONE_HOUR * 24 ONE_WEEK = ONE_DAY * 7 ONE_MONTH = ONE_DAY * 30 TWO_MONTHS = ONE_MONTH * 2 # Commission override options class CommissionOverride(str, Enum): """Commission Override types.""" GROSS = 'Gross' NET = 'Net' class PaymentAllocationType(str, Enum): """Payment allocation types.""" COLLABORATOR = 'collaborator' FLOWTHROUGH = 'flowthrough' TRANSFER_OF_EARNING = 'transfer_of_earning'