Наследование в схемах расчетов

О наследовании в схемах расчетов

В данном разделе описана логика работы наследования расчетов. Используются два основных понятия:

  • Наследуемый расчет — расчет, на основе которого создается расчет-наследник.

  • Расчет-наследник — расчет, переопределяющий атрибуты наследуемого расчета и используемый для другой сущности.

Наследование расчетов может быть использовано при работе с сущностями-наследниками.

Например, пусть создана расширенная форма требования аудита, имеющая дополнительные свойства относительно стандартной формы. Тогда можно создать расчет-наследник для индекса соответствия требования, имеющий то же имя, что и расчет для стандартной формы требования, но иную формулу, учитывающую значения дополнительных свойств.

Определять расчеты-наследники можно:

Определение наследников в текущей схеме расчетов

Чтобы создать расчет-наследник в той же схеме, что и наследуемый расчет, достаточно создать расчет с тем же идентификатором, что и наследуемый, но с другой сущностью в поле entity.

Пример определения наследника в текущей схеме расчетов
id: evo.compliance.audit.calculations
name: audit_calculations
description: Расчеты для аудитов
type: calculation_schema
tags: [audit, calculations]
version: 1.0.0
status: stable
author: John Doe <johndoe@example.com>
calculations:
  - id: audit_assessment_requirement_impact_coefficient
    auto_recalculation: true
    name: Коэффициент значимости требования
    entity: evo.compliance.audit/Requirement
    complexity_limit: 1
    expression: "{field:impactCoefficient}"

  - id: audit_assessment_requirement_impact_coefficient
    auto_recalculation: true
    name: Коэффициент значимости требования
    entity: evo.compliance.audit/RequirementExtendedForm
    complexity_limit: 100
    expression: |
      sum({calculation:audit_assessment_requirement_impact_coefficient_children}) +
      {field:mark}
    children:
      - linkage: evo.compliance.audit/RequirementExtendedForm_Requirement
        calculation: audit_assessment_requirement_impact_coefficient_children

  - id: audit_assessment_requirement_impact_coefficient_children
    auto_recalculation: true
    name: Коэффициент значимости дочернего требования
    entity: evo.compliance.audit/RequirementExtendedForm
    complexity_limit: 1
    expression: "{field:impactCoefficient}"

Здесь:

  • audit_assessment_requirement_impact_coefficient для сущности Requirement — наследуемый расчет коэффициента значимости для стандартной сущности требования.

  • audit_assessment_requirement_impact_coefficient для сущности RequirementExtendedForm — расчет-наследник для расширенной сущности требования, унаследованной от стандартного требования:

    • Идентификаторы наследуемого расчета и расчета-наследника совпадают.

    • Значения свойств auto_recalculation и name в расчете-наследнике совпадают с наследуемым расчетом.

    • Значения свойств entity, complexity_limit, expression и children переопределены.

Определение наследников в другой схеме расчетов

Чтобы создать расчет-наследник в другой схеме расчетов, в метаданных схемы, в которой определяется наследник, необходимо указать ключевое слово extends и идентификатор схемы, в которой определен наследуемый расчет.

Пример определения наследника в другой схеме расчетов

Схема с наследуемым расчетом

id: evo.compliance.audit.calculations
name: audit_calculations
description: Расчеты для аудитов
type: calculation_schema
tags: [audit, calculations]
version: 1.0.0
status: stable
author: John Doe <johndoe@example.com>
calculations:
  - id: audit_assessment_requirement_impact_coefficient
    auto_recalculation: true
    name: Коэффициент значимости требования
    entity: evo.compliance.audit/Requirement
    complexity_limit: 1
    expression: "{field:impactCoefficient}"

Здесь:

  • audit_assessment_requirement_impact_coefficient для сущности Requirement — наследуемый расчет коэффициента значимости для стандартной сущности требования.

Схема с расчетом-наследником

id: evo.compliance.audit.calculations.extended
name: audit_calculations_extended
description: Расчеты для аудитов (расширенная форма)
type: calculation_schema
tags: [audit, calculations]
version: 1.0.0
status: stable
author: John Doe <johndoe@example.com>
extends: evo.compliance.audit.calculations
calculations:
  - id: audit_assessment_requirement_impact_coefficient
    auto_recalculation: true
    name: Коэффициент значимости требования
    entity: evo.compliance.audit/RequirementExtendedForm
    complexity_limit: 100
    expression: |
      sum({calculation:audit_assessment_requirement_impact_coefficient_children}) +
      {field:mark}
    children:
      - linkage: evo.compliance.audit/RequirementExtendedForm_Requirement
        calculation: audit_assessment_requirement_impact_coefficient_children

  - id: audit_assessment_requirement_impact_coefficient_children
    auto_recalculation: true
    name: Коэффициент значимости дочернего требования
    entity: evo.compliance.audit/RequirementExtendedForm
    complexity_limit: 1
    expression: "{field:impactCoefficient}"

Здесь:

  • extends: evo.compliance.audit.calculations — ссылка на схему расчетов, содержащую наследуемый расчет.

  • audit_assessment_requirement_impact_coefficient для сущности RequirementExtendedForm — расчет-наследник для расширенной сущности требования, унаследованной от стандартного требования:

    • Идентификаторы наследуемого расчета и расчета-наследника совпадают.

    • Значения свойств auto_recalculation и name в расчете-наследнике совпадают с наследуемым расчетом.

    • Значения свойств entity, complexity_limit, expression и children переопределены.