fix(profit-caliber): 博海口径 §4-1/§4-2/§4-5 落地 —— 固定成本仅借方 + 6403 进变动 + 财务收益单列 + 批次备注
ci/woodpecker/push/main Pipeline was successful
ci/woodpecker/push/main Pipeline was successful
ASK-20261014-04(任总 2026-10-14 11:20「放行4」)批后口径: - §4-1 博海固定成本弃净额:6601/6602/6603 仅借方(133.98 万,2026-01..09);2026-03 单月由 -9.02 万转正; 6603 贷方(现金折扣收益 64.40 万)改 finance_income_terms 单列备查,不进固定成本/末行/勾稽。 - §4-2 博海变动成本追加 6403 营业税金及附加(530.17 万)。 - §4-3/§4-4 维持现行(酣客收入/边际贡献基数不动)。 - §4-5 管理利润表页加「数据批次/导入时刻」纯展示备注(import_logs)。 - 口径唯一源仍为 bep_caliber.ENTITY_CALIBERS;报表/卡面/派生器一律经 fixed_cost_spec() 解析(读口写口一致)。
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
<!-- ════ 报表1:管理利润表 ════ -->
|
||||
<el-tab-pane label="💰 管理利润表" name="profit">
|
||||
<div v-loading="loading">
|
||||
<div class="report-desc">基于管理会计视角的利润结构分析:收入 → 变动成本 → 边际贡献 → 固定成本 → 息税前利润</div>
|
||||
<div class="report-desc">{{ profitDesc || '基于管理会计视角的利润结构分析:营业收入 → 变动成本 → 边际贡献 → 固定成本 → 营业利润(真实科目取数)' }}</div>
|
||||
<el-table :data="profitItems" border stripe size="small" style="width:100%;margin-top:12px;" :summary-method="profitSummary" show-summary>
|
||||
<el-table-column prop="name" label="项目" width="200">
|
||||
<template #default="{ row }">
|
||||
@@ -61,6 +61,25 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 4-5 备注(纯展示,不参与任何计算):数据批次 / 导入时刻 -->
|
||||
<div v-if="profitBatches.length" style="margin-top:10px;font-size:12px;color:#909399;line-height:1.8;">
|
||||
<span>数据批次 / 导入时刻:</span>
|
||||
<span v-for="(b, i) in profitBatches" :key="(b.batch || 'b') + '-' + i">
|
||||
<span style="display:inline-block;margin-left:8px;padding:0 6px;border:1px solid #e4e7ed;border-radius:3px;">
|
||||
{{ b.batch }} | {{ b.rows }} 行 | 导入 {{ b.imported_at }}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 财务收益(单列备查,不进固定成本、不参与勾稽)—— 仅口径注册了该项时展示 -->
|
||||
<div v-if="profitFinanceIncome && profitFinanceIncome.value != null"
|
||||
style="margin-top:6px;font-size:12px;color:#909399;line-height:1.8;">
|
||||
{{ profitFinanceIncome.name }}(备查,不计入上行):¥ {{ Number(profitFinanceIncome.value).toLocaleString() }} 万元
|
||||
</div>
|
||||
<!-- 勾稽自检:不平/取数缺行 ⇒ 显式标红,不静默 -->
|
||||
<div v-if="profitChecks && profitChecks.balanced === false"
|
||||
style="margin-top:10px;padding:8px 12px;border:1px solid #f56c6c;border-radius:4px;background:#fef0f0;color:#f56c6c;font-size:12px;line-height:1.8;">
|
||||
<div>{{ profitChecks.note || '⚠️ 勾稽自检未通过:收入 − 变动成本 − 固定成本 ≠ 末行' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
@@ -649,6 +668,10 @@ function getEntityId() {
|
||||
|
||||
// ── 报表1:管理利润表 ──
|
||||
const profitItems = ref<any[]>([])
|
||||
const profitDesc = ref('')
|
||||
const profitBatches = ref<any[]>([]) // 4-5 备注(纯展示:数据批次/导入时刻)
|
||||
const profitChecks = ref<any>(null) // 勾稽自检(reconciliation:balanced/diff/note)
|
||||
const profitFinanceIncome = ref<any>(null) // 财务收益(§4-1 单列备查)
|
||||
|
||||
function profitSummary(param: any) {
|
||||
const sums: string[] = ['合计']
|
||||
@@ -859,8 +882,21 @@ function onPeriodChange() {
|
||||
async function loadProfit() {
|
||||
try {
|
||||
const r = await api.get('/reports/profit-summary', { params: { period: reportPeriod.value, entity_id: getEntityId() } })
|
||||
profitItems.value = (r as any)?.items || []
|
||||
} catch { profitItems.value = [] }
|
||||
const d: any = (r as any) || {}
|
||||
profitItems.value = d.items || []
|
||||
profitDesc.value = d.desc || ''
|
||||
// 以下三项均**纯展示**,不参与任何计算:
|
||||
// 4-5 数据批次 / 导入时刻备注 · 勾稽自检(不平显式标红)· 财务收益单列备查
|
||||
profitBatches.value = d.data_batches || []
|
||||
profitChecks.value = d.reconciliation || null
|
||||
profitFinanceIncome.value = d.finance_income || null
|
||||
} catch {
|
||||
profitItems.value = []
|
||||
profitDesc.value = ''
|
||||
profitBatches.value = []
|
||||
profitChecks.value = null
|
||||
profitFinanceIncome.value = null
|
||||
}
|
||||
}
|
||||
|
||||
async function loadBudget() {
|
||||
|
||||
Reference in New Issue
Block a user