项目基础信息、合约规划、指导价法明细、项目成本测算字段调整、菜单名称调整、专业人员报表与导出内容修复

This commit is contained in:
lzm
2026-05-15 17:57:24 +08:00
parent 5cb913cb0a
commit 4a0ff37963
10 changed files with 124 additions and 103 deletions

View File

@@ -10,6 +10,8 @@ export interface ProjectProfitVO {
effectiveSettlementAmount?: number
comprehensivePlanningAmount?: number
subcontractPlanningAmount?: number
specialSubcontractPlanningAmount?: number
sourceCoopSubcontractPlanningAmount?: number
majorOutputValue?: number
majorExpectedPerformance?: number
innovationOutputRate?: number

View File

@@ -105,7 +105,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工程总面积(m²)" prop="planningArea">
<el-form-item label="建筑面积(m²)" prop="planningArea">
<el-input
v-if="showGuideDetailSection"
:model-value="formatAmountText(guideDetailSummary.designArea)"
@@ -300,30 +300,36 @@
</el-table-column>
<el-table-column align="center" label="设计部位" min-width="120" fixed="left">
<template #default="{ row }">
<el-select v-model="row.designPart" class="!w-1/1" placeholder="请选择">
<el-option
v-for="item in DESIGN_PART_OPTIONS"
:key="String(item.value)"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-tooltip
:content="row.designPart"
:disabled="!hasValue(row.designPart)"
placement="top"
>
<el-select v-model="row.designPart" class="!w-1/1" placeholder="请选择">
<el-option
v-for="item in DESIGN_PART_OPTIONS"
:key="String(item.value)"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" label="建筑类型" min-width="140" fixed="left">
<el-table-column align="center" label="设计内容/设计类型" min-width="210" fixed="left">
<template #default="{ row }">
<el-tooltip
:content="row.buildingType"
:disabled="!hasValue(row.buildingType)"
placement="top"
>
<el-input v-model="row.buildingType" maxlength="100" placeholder="建筑类型" />
<el-input v-model="row.buildingType" maxlength="100" placeholder="请输入设计内容/设计类型" />
</el-tooltip>
</template>
</el-table-column>
<!-- 2. 取消 controls 的核心数值列 -->
<el-table-column align="center" label="指导单价(元)" min-width="110">
<el-table-column align="center" label="内部指导单价(元/m²)" min-width="150">
<template #default="{ row }">
<el-tooltip
:content="formatAmountText(row.internalGuidanceUnitPrice)"
@@ -357,55 +363,60 @@
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" label="楼栋/户型数" min-width="100">
<template #default="{ row }">
<el-input-number
v-model="row.buildingOrUnitCount"
:min="0"
:precision="0"
:controls="false"
class="!w-1/1"
/>
</template>
</el-table-column>
<!-- 3. 多级表头折叠系数配置 -->
<el-table-column label="调整系数配置" align="center">
<el-table-column align="center" label="套图" min-width="85">
<el-table-column align="center" label="楼栋/户型数" min-width="110">
<template #default="{ row }">
<el-input-number
v-model="row.buildingOrUnitCount"
:min="0"
:precision="0"
:controls="false"
class="!w-1/1"
/>
</template>
</el-table-column>
<el-table-column align="center" label="套图系数" min-width="100">
<template #default="{ row }">
<el-input-number v-model="row.drawingSetFactor" :min="0" :precision="2" :controls="false" class="!w-1/1" />
</template>
</el-table-column>
<el-table-column align="center" label="规模" min-width="85">
<el-table-column align="center" label="规模系数" min-width="100">
<template #default="{ row }">
<el-input-number v-model="row.scaleFactor" :min="0" :precision="2" :controls="false" class="!w-1/1" />
</template>
</el-table-column>
<el-table-column align="center" label="修改" min-width="85">
<el-table-column align="center" label="修改系数" min-width="100">
<template #default="{ row }">
<el-input-number v-model="row.modificationFactor" :min="0" :precision="2" :controls="false" class="!w-1/1" />
</template>
</el-table-column>
<el-table-column align="center" label="复杂(%)" min-width="90">
<el-table-column align="center" label="复杂系数/复杂等级" min-width="150">
<template #default="{ row }">
<el-input-number
:model-value="toPercentValue(row.complexityFactor)"
v-model="row.complexityFactor"
:min="0"
:precision="2"
:controls="false"
class="!w-1/1"
@update:model-value="setGuideDetailPercentValue(row, 'complexityFactor', $event)"
/>
</template>
</el-table-column>
<el-table-column align="center" label="计" min-width="80">
<el-table-column align="center" label="计" min-width="80">
<template #default="{ row }">
<span class="text-gray-500">{{ formatFactorText(getGuideDetailTotalAdjustmentFactor(row)) }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="设计占比(%)" min-width="100">
<!-- 4. 结果列靠右显示用浅色背景区分 -->
<el-table-column align="right" label="考核产值面积小计(m²)" min-width="150" class-name="bg-gray-50">
<template #default="{ row }">
<span class="font-bold">{{ formatAmountText(getGuideDetailAssessmentArea(row)) }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="设计阶段占比(%)" min-width="120">
<template #default="{ row }">
<el-input-number
:model-value="toPercentValue(row.designRatio)"
@@ -418,13 +429,7 @@
</template>
</el-table-column>
<!-- 4. 结果列靠右显示用浅色背景区分 -->
<el-table-column align="right" label="考核面积(m²)" min-width="110" class-name="bg-gray-50">
<template #default="{ row }">
<span class="font-bold">{{ formatAmountText(getGuideDetailAssessmentArea(row)) }}</span>
</template>
</el-table-column>
<el-table-column align="right" label="考核产值(元)" min-width="120" class-name="bg-gray-50">
<el-table-column align="right" label="考核产值小计(元)" min-width="130" class-name="bg-gray-50">
<template #default="{ row }">
<span class="font-bold text-primary">{{ formatAmountText(getGuideDetailAssessmentOutputValue(row)) }}</span>
</template>
@@ -469,17 +474,17 @@
<el-row :gutter="16" class="mt-16px">
<el-col :span="8">
<el-form-item label="汇总设计面积(m²)">
<el-form-item label="设计面积总计(m²)">
<el-input :model-value="formatAmountText(guideDetailSummary.designArea)" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇总考核面积(m²)">
<el-form-item label="考核产值面积总计(m²)">
<el-input :model-value="formatAmountText(guideDetailSummary.assessmentArea)" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇总考核产值(元)">
<el-form-item label="考核产值总计(元)">
<el-input
:model-value="formatAmountText(guideDetailSummary.assessmentOutputValue)"
disabled
@@ -578,7 +583,7 @@
<el-descriptions-item label="设计部位">
{{ activeRemarkRow.designPart || '-' }}
</el-descriptions-item>
<el-descriptions-item label="建筑类型">
<el-descriptions-item label="设计内容/设计类型">
{{ activeRemarkRow.buildingType || '-' }}
</el-descriptions-item>
<el-descriptions-item label="考核产值(元)">
@@ -934,7 +939,7 @@ const formatQuantityText = (value?: number, digits = 4) => {
const setGuideDetailPercentValue = (
row: GuideDetailRow,
field: 'complexityFactor' | 'designRatio',
field: 'designRatio',
value?: number | string | null
) => {
row[field] = fromPercentValue(value, 4)
@@ -953,7 +958,7 @@ const formRules = reactive<FormRules>({
return
}
if (!hasValue(value)) {
callback(new Error('工程总面积不能为空'))
callback(new Error('建筑面积不能为空'))
return
}
callback()
@@ -1153,7 +1158,7 @@ const validateGuideDetails = () => {
return false
}
if (!row.buildingType) {
message.warning(`${rowText}建筑类型不能为空`)
message.warning(`${rowText}设计内容/设计类型不能为空`)
return false
}
if (!hasValue(row.designArea)) {
@@ -1177,11 +1182,11 @@ const validateGuideDetails = () => {
return false
}
if (!hasValue(row.complexityFactor)) {
message.warning(`${rowText}复杂系数不能为空`)
message.warning(`${rowText}复杂系数/复杂等级不能为空`)
return false
}
if (!hasValue(row.designRatio)) {
message.warning(`${rowText}设计占比不能为空`)
message.warning(`${rowText}设计阶段占比不能为空`)
return false
}
}

View File

@@ -84,12 +84,12 @@
</template>
</el-table-column>
<el-table-column align="center" label="项目开始年度" prop="projectStartYear" width="120" />
<el-table-column align="center" label="合同产值(元)" width="130">
<el-table-column align="center" label="合同产值(元)" width="130">
<template #default="scope">
{{ formatAmountText(scope.row.contractAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="工程总面积(㎡)" width="140">
<el-table-column align="center" label="建筑面积(㎡)" width="140">
<template #default="scope">
{{ formatAreaText(scope.row.totalConstructionArea) }}
</template>

View File

@@ -78,21 +78,21 @@
</template>
</el-table-column>
<el-table-column align="center" label="开始年度" prop="projectStartYear" width="100" />
<el-table-column align="center" label="合同产值(元)" width="120">
<el-table-column align="center" label="合同产值(元)" width="120">
<template #default="scope">
{{ formatAmountText(scope.row.contractAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="最终结算金额(元)" width="140">
<el-table-column align="center" label="结算合同总产值(元)" width="150">
<template #default="scope">
{{ formatAmountText(scope.row.finalSettlementAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="测算采用金额(元)" width="140">
<el-table-column align="center" label="项目预算产值总计(元)" width="160">
<template #default="scope">
<el-tooltip
v-if="isUsingContractAmount(scope.row)"
content="最终结算金额未填写,当前暂按合同产值测算"
content="结算合同总产值未填写,当前暂按合同产值测算"
placement="top"
>
<span>{{ formatAmountText(scope.row.effectiveSettlementAmount) }}</span>
@@ -100,22 +100,27 @@
<span v-else>{{ formatAmountText(scope.row.effectiveSettlementAmount) }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="综合所协作金额(元)" width="150">
<el-table-column align="center" label="综合所人工成本(元)" width="150">
<template #default="scope">
{{ formatAmountText(scope.row.comprehensivePlanningAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="专分包金额(元)" width="150">
<el-table-column align="center" label="专分包人工成本(元)" width="170">
<template #default="scope">
{{ formatAmountText(scope.row.subcontractPlanningAmount) }}
{{ formatAmountText(scope.row.specialSubcontractPlanningAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="专业所产值(元)" width="130">
<el-table-column align="center" label="源头合作分包人工成本(元)" width="200">
<template #default="scope">
{{ formatAmountText(scope.row.sourceCoopSubcontractPlanningAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="专业所考核产值(元)" width="150">
<template #default="scope">
{{ formatAmountText(scope.row.majorOutputValue) }}
</template>
</el-table-column>
<el-table-column align="center" label="专业所预计绩效(元)" width="150">
<el-table-column align="center" label="专业所人工成本(元)" width="150">
<template #default="scope">
{{ formatAmountText(scope.row.majorExpectedPerformance) }}
</template>
@@ -135,14 +140,14 @@
{{ formatAmountText(scope.row.otherCost) }}
</template>
</el-table-column>
<el-table-column align="center" label="盈亏值(元)" width="120">
<el-table-column align="center" label="预算盈亏值(元)" width="130">
<template #default="scope">
<span :class="profitLossClass(scope.row.profitLossValue)">
{{ formatAmountText(scope.row.profitLossValue) }}
</span>
</template>
</el-table-column>
<el-table-column align="center" label="盈亏百分比" width="120">
<el-table-column align="center" label="预算盈亏百分比" width="140">
<template #default="scope">
<span :class="profitLossClass(scope.row.profitLossValue)">
{{ formatPercentText(scope.row.profitLossRate) }}
@@ -166,21 +171,21 @@
<div class="text-16px font-600">{{ currentProfit.projectName }}</div>
<el-button plain type="primary" @click="openProfitEditDialog">
<Icon class="mr-5px" icon="ep:edit" />
编辑盈亏参数
编辑项目成本参数
</el-button>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item label="合同产值(元)">
<el-descriptions-item label="合同产值(元)">
{{ formatAmountText(currentProfit.contractAmount) }}
</el-descriptions-item>
<el-descriptions-item label="最终结算金额(元)">
<el-descriptions-item label="结算合同总产值(元)">
{{ formatAmountText(currentProfit.finalSettlementAmount) }}
</el-descriptions-item>
<el-descriptions-item label="测算采用金额(元)">
<el-descriptions-item label="项目预算产值总计(元)">
<el-tooltip
v-if="isUsingContractAmount(currentProfit)"
content="最终结算金额未填写,当前暂按合同产值测算"
content="结算合同总产值未填写,当前暂按合同产值测算"
placement="top"
>
<span>{{ formatAmountText(currentProfit.effectiveSettlementAmount) }}</span>
@@ -190,16 +195,19 @@
<el-descriptions-item label="项目开始年度">
{{ currentProfit.projectStartYear || '-' }}
</el-descriptions-item>
<el-descriptions-item label="综合所协作金额(元)">
<el-descriptions-item label="综合所人工成本(元)">
{{ formatAmountText(currentProfit.comprehensivePlanningAmount) }}
</el-descriptions-item>
<el-descriptions-item label="专分包金额(元)">
{{ formatAmountText(currentProfit.subcontractPlanningAmount) }}
<el-descriptions-item label="专分包人工成本(元)">
{{ formatAmountText(currentProfit.specialSubcontractPlanningAmount) }}
</el-descriptions-item>
<el-descriptions-item label="专业所产值(元)">
<el-descriptions-item label="源头合作分包人工成本(元)">
{{ formatAmountText(currentProfit.sourceCoopSubcontractPlanningAmount) }}
</el-descriptions-item>
<el-descriptions-item label="专业所考核产值(元)">
{{ formatAmountText(currentProfit.majorOutputValue) }}
</el-descriptions-item>
<el-descriptions-item label="专业所预计绩效(元)">
<el-descriptions-item label="专业所人工成本(元)">
{{ formatAmountText(currentProfit.majorExpectedPerformance) }}
</el-descriptions-item>
<el-descriptions-item label="科创产值比例">
@@ -211,12 +219,12 @@
<el-descriptions-item label="其他成本(元)">
{{ formatAmountText(currentProfit.otherCost) }}
</el-descriptions-item>
<el-descriptions-item label="盈亏值(元)">
<el-descriptions-item label="预算盈亏值(元)">
<span :class="profitLossClass(currentProfit.profitLossValue)">
{{ formatAmountText(currentProfit.profitLossValue) }}
</span>
</el-descriptions-item>
<el-descriptions-item label="盈亏百分比">
<el-descriptions-item label="预算盈亏百分比">
<span :class="profitLossClass(currentProfit.profitLossValue)">
{{ formatPercentText(currentProfit.profitLossRate) }}
</span>
@@ -224,13 +232,13 @@
</el-descriptions>
</template>
<el-empty v-else-if="!detailLoading" description="请选择项目后查看盈亏详情" />
<el-empty v-else-if="!detailLoading" description="请选择项目后查看项目成本详情" />
</div>
</ContentWrap>
<Dialog v-model="dialogVisible" title="编辑盈亏参数" width="520">
<Dialog v-model="dialogVisible" title="编辑项目成本参数" width="520">
<el-form ref="formRef" v-loading="dialogLoading" :model="formData" label-width="140px">
<el-form-item label="最终结算金额(元)" prop="finalSettlementAmount">
<el-form-item label="结算合同总产值(元)" prop="finalSettlementAmount">
<el-input-number
v-model="formData.finalSettlementAmount"
:min="0"

View File

@@ -158,11 +158,7 @@ import { OWNERSHIP_TYPE_OPTIONS } from '@/views/tjt/shared/planning'
defineOptions({ name: 'TjtPlanningForm' })
const OWNERSHIP_TYPE_LABELS = ['专业所', '综合所', '专业分包']
const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS.map((item, index) => ({
label: OWNERSHIP_TYPE_LABELS[index] || item.label,
value: item.value
}))
const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS
const { t } = useI18n()
const message = useMessage()

View File

@@ -16,7 +16,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工程总面积(㎡)" prop="totalConstructionArea">
<el-form-item label="建筑面积(㎡)" prop="totalConstructionArea">
<el-input-number
v-model="formData.totalConstructionArea"
:min="0"
@@ -49,7 +49,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工程类别" prop="projectCategory">
<el-form-item label="设计类型" prop="projectCategory">
<el-select
v-model="formData.projectCategory"
class="!w-1/1"
@@ -80,7 +80,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同产值(元)" prop="contractAmount">
<el-form-item label="合同产值(元)" prop="contractAmount">
<el-input-number
v-model="formData.contractAmount"
:min="0"
@@ -459,8 +459,8 @@ watch(
const formRules = reactive<FormRules>({
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
contractAmount: [{ required: true, message: '合同产值不能为空', trigger: 'blur' }],
totalConstructionArea: [{ required: true, message: '工程总面积不能为空', trigger: 'blur' }],
contractAmount: [{ required: true, message: '合同产值不能为空', trigger: 'blur' }],
totalConstructionArea: [{ required: true, message: '建筑面积不能为空', trigger: 'blur' }],
projectStartYear: [{ required: true, message: '项目开始年度不能为空', trigger: 'change' }],
projectStatus: [{ required: true, message: '项目状态不能为空', trigger: 'change' }],
pauseReason: [

View File

@@ -188,7 +188,7 @@
<el-descriptions-item label="工程类型">
{{ getProjectTypeText(currentProject.projectType) }}
</el-descriptions-item>
<el-descriptions-item label="工程类别">
<el-descriptions-item label="设计类型">
{{ getProjectCategoryText(currentProject.projectCategory) }}
</el-descriptions-item>
<el-descriptions-item label="合同签订日期">
@@ -218,10 +218,10 @@
>
{{ currentProject.terminateReason || '-' }}
</el-descriptions-item>
<el-descriptions-item label="合同产值(元)">
<el-descriptions-item label="合同产值(元)">
{{ formatAmountText(currentProject.contractAmount) }}
</el-descriptions-item>
<el-descriptions-item label="工程总面积(m²)">
<el-descriptions-item label="建筑面积(m²)">
{{ formatAreaText(currentProject.totalConstructionArea) }}
</el-descriptions-item>
</el-descriptions>
@@ -353,7 +353,7 @@ const cleanOptionLabels = <T,>(options: Array<{ label: string; value: T }>, labe
}))
const contractSignOptions = cleanOptionLabels(CONTRACT_SIGN_OPTIONS, ['已签约', '未签约'])
const ownershipTypeOptions = cleanOptionLabels(OWNERSHIP_TYPE_OPTIONS, ['专业所', '综合所', '专业分包'])
const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS
const projectTypeOptions = cleanOptionLabels(PROJECT_TYPE_OPTIONS, [
'建筑工程',
'精装工程',

View File

@@ -91,12 +91,12 @@
prop="engineeringPrincipalName"
/>
<el-table-column align="center" label="开始年度" prop="projectStartYear" width="120" />
<el-table-column align="center" label="合同产值(元)" width="130">
<el-table-column align="center" label="合同产值(元)" width="130">
<template #default="scope">
{{ formatAmountText(scope.row.contractAmount) }}
</template>
</el-table-column>
<el-table-column align="center" label="工程总面积(㎡)" width="140">
<el-table-column align="center" label="建筑面积(㎡)" width="140">
<template #default="scope">
{{ formatAreaText(scope.row.totalConstructionArea) }}
</template>
@@ -140,10 +140,10 @@
<el-descriptions-item label="工程负责人">
{{ currentProject.engineeringPrincipalName || '-' }}
</el-descriptions-item>
<el-descriptions-item label="合同产值(元)">
<el-descriptions-item label="合同产值(元)">
{{ formatAmountText(currentProject.contractAmount) }}
</el-descriptions-item>
<el-descriptions-item label="工程总面积(㎡)">
<el-descriptions-item label="建筑面积(㎡)">
{{ formatAreaText(currentProject.totalConstructionArea) }}
</el-descriptions-item>
<el-descriptions-item label="开始年度">

View File

@@ -112,7 +112,7 @@
<div>
<div class="text-16px font-600">{{ currentPlanning.planningContent }}</div>
<div class="mt-6px text-12px text-[var(--el-text-color-secondary)]">
按当前年度和专业预览专业内人员计取结果
按当前合约规划年度和专业预览专业内人员计取结果
</div>
</div>
<div class="flex items-center gap-10px">
@@ -160,10 +160,9 @@
<div class="text-12px text-[var(--el-text-color-secondary)]">季度金额单位万元</div>
</div>
<el-table
v-loading="previewLoading"
:data="currentGroupDisplayRows"
border
empty-text="当前年度暂无可预览的专业人员计取数据"
empty-text="当前年度暂无可预览的专业人员考核产值计取数据"
:span-method="spanRoleColumns"
>
<el-table-column align="center" label="角色" min-width="110" prop="roleName" />
@@ -205,7 +204,7 @@
</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="季度计取明细(年度预览:比例 / 金额 万元)">
<el-table-column align="center" label="季度计取明细(合约规划年度预览:比例 / 金额 万元)">
<el-table-column align="center" label="一季度" min-width="150">
<template #default="scope">
{{

View File

@@ -6,7 +6,8 @@ export type Option<T = string> = {
export const OWNERSHIP_TYPE = {
major: '专业所',
comprehensive: '综合所',
subcontract: '专分包'
specialSubcontract: '专分包',
sourceCoopSubcontract: '源头合作分包'
} as const
export const CALCULATION_METHOD = {
@@ -29,7 +30,8 @@ export const DESIGN_STAGE = {
export const DESIGN_PART = {
realEstate: '地上部分',
underground: '地下部分'
underground: '地下部分',
other: '其他'
} as const
export const PROJECT_TYPE = {
@@ -100,7 +102,11 @@ export const normalizeProjectStatus = (value?: string) =>
export const OWNERSHIP_TYPE_OPTIONS: Option[] = [
{ label: OWNERSHIP_TYPE.major, value: OWNERSHIP_TYPE.major },
{ label: OWNERSHIP_TYPE.comprehensive, value: OWNERSHIP_TYPE.comprehensive },
{ label: OWNERSHIP_TYPE.subcontract, value: OWNERSHIP_TYPE.subcontract }
{ label: OWNERSHIP_TYPE.specialSubcontract, value: OWNERSHIP_TYPE.specialSubcontract },
{
label: OWNERSHIP_TYPE.sourceCoopSubcontract,
value: OWNERSHIP_TYPE.sourceCoopSubcontract
}
]
export const CALCULATION_METHOD_OPTIONS: Option[] = [
@@ -132,7 +138,8 @@ export const DESIGN_STAGE_OPTIONS: Option[] = [
export const DESIGN_PART_OPTIONS: Option[] = [
{ label: DESIGN_PART.realEstate, value: DESIGN_PART.realEstate },
{ label: DESIGN_PART.underground, value: DESIGN_PART.underground }
{ label: DESIGN_PART.underground, value: DESIGN_PART.underground },
{ label: DESIGN_PART.other, value: DESIGN_PART.other }
]
export const CONTRACT_SIGN_OPTIONS: Option<boolean>[] = [
@@ -221,8 +228,12 @@ export const isMajorOwnership = (value?: string) =>
normalizeOwnershipType(value) === OWNERSHIP_TYPE.major
export const isComprehensiveOwnership = (value?: string) =>
normalizeOwnershipType(value) === OWNERSHIP_TYPE.comprehensive
export const isSpecialSubcontractOwnership = (value?: string) =>
normalizeOwnershipType(value) === OWNERSHIP_TYPE.specialSubcontract
export const isSourceCoopSubcontractOwnership = (value?: string) =>
normalizeOwnershipType(value) === OWNERSHIP_TYPE.sourceCoopSubcontract
export const isSubcontractOwnership = (value?: string) =>
normalizeOwnershipType(value) === OWNERSHIP_TYPE.subcontract
isSpecialSubcontractOwnership(value) || isSourceCoopSubcontractOwnership(value)
export const isGuidancePriceMethod = (value?: string) =>
normalizeCalculationMethod(value) === CALCULATION_METHOD.guidancePrice