Skip to content
Updated Sep 26, 2026 by Barča Dvořáková · Owner: analysisactiveentityconfluence-migration Edit on GitHub

Entity: contractItemType ​

Entity: contractItemType

Description: A global, admin-managed catalogue of priceable line-item types (e.g. individual distribution tariff rates such as "C01d", "vodné", "stočné", "paušální poplatek"). Shared across all tenants — see the deviation note below. Referenced by contractItem to specify what is being priced.

Entity Type: database table

Note — no tenantId (deviation #17). This entity intentionally has no tenantId. The catalogue of contract line-item types (national distribution tariffs, standard billing components) is identical for every tenant and is managed exclusively by the Porsenna superadmin — the same pattern used for uiLabel and gaugePurposeOption. See em3-knowledgebase-deviations.md deviation #17.

Data Attributes Table ​

Attribute NameDescriptionData TypeDefault ValueRequired (= Nullable)UniqueFormatValidationsIndexExample
idPrimary key of the entity.UUIDGenerated in code (app layer)YesYesUUID v7-Primary Key018ed0b3-c298-7c7a-96d5-8b36f5a7f8d2
nameDisplay name of the line-item type.string-YesNo-Must not be empty-C02d
mediumCommodity this line-item type applies to.string (enum)-YesNoenum — see Medium (same set as contract.medium) (source Confluence page; not yet migrated to the local enum catalog)Must be one of the supported subset values-electricity
tariffTariff band this line-item type applies to, if relevant.string (enum, nullable)-NoNoOne of: highTariff, lowTariff, or nullNull when not tariff-specific (e.g. paušální poplatek, vodné)-highTariff
deliveryMethodWhether this type applies under a single-component or two-component pricing structure.string (enum, nullable)-NoNoOne of: singleComponent, twoComponent, or nullNull when not applicable-twoComponent
groupNameDisplay grouping label used to cluster related line-item types in the UI (e.g. "Ceny sazeb (vysoký tarif)").string-NoNo---Ceny sazeb (vysoký tarif)
overviewColumnKey used to render this type as a column in the contract overview table.string-YesNo-Must not be empty-unitPriceHighTariff
displayOrderSort order within the contract entry form.integer-NoNo---2
createdAtTimestamp of entity creation. Immutable.timestamp with time zonenow()YesNoISO 8601 — YYYY-MM-DDTHH:mm:ss.SSSZ--2026-01-15T09:00:00Z
updatedAtTimestamp of last entity update. Mutable.timestamp with time zonenow()YesNoISO 8601 — YYYY-MM-DDTHH:mm:ss.SSSZ--2026-01-15T09:00:00Z
deletedAtTimestamp of entity soft delete. Once set, immutable.timestamp with time zone-NoNoISO 8601 — YYYY-MM-DDTHH:mm:ss.SSSZImmutable once set. Active records: WHERE deletedAt IS NULL-null
createdByIdentifier of the author who created this record.string-YesNotype:actor--user:c2d3f586-1c9a-4f5f-b9ae-45f2c4f69f7e
updatedByIdentifier of the author who last updated this record.string-YesNotype:actor--system:migration-v1

Note — indexing. No secondary indexes are defined. This is a small, global catalogue (a few dozen rows total across the whole system) — a sequential scan filtered by medium is not a performance concern.

Audited fields ​

Recorded on created (in full), updated (changed only) and deleted (in full): name, medium, tariff, deliveryMethod, groupName, overviewColumn, displayOrder.

Excluded: none.

No subjectEntityType/subjectEntityId — a global, superadmin-managed catalogue (no tenantId), same exception class as uiLabel and gaugePurposeOption. Registered for entityName resolution via the global catalogue registry — resolves to name (architecture 61-audit-log.md §7.4/§7.6 in the code repo).