From 1df17e67779b1fa5235afcf26d40545a7413ab12 Mon Sep 17 00:00:00 2001 From: baobao Date: Tue, 20 Oct 2026 11:32:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E8=AE=AE=E7=95=99=E7=97=95=EF=BC=9A?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E5=8E=9F=E6=B6=88=E8=B4=B9=E6=9D=A5=E6=BA=90?= =?UTF-8?q?=EF=BC=8C=E5=8D=95=E5=88=97=E9=87=87=E7=BA=B3=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E6=A3=80=E6=9F=A5=EF=BC=88=E6=A1=A5=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6077=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、无关版本变化允许快速采纳,但不能将新计划身份和旧消费凭据拼在一起。保留建议原计划与消费记录,当前检查版本只存入version_check。 二、专项覆盖旧消费来源不变且最新检查可追溯,46批隔离禁网回归通过。交易行为、仓位、阈值和调度保持。 --- app/services/plan_recheck.py | 6 +++--- docs/开发规格_提议先准备后采纳_2026-10-20.md | 1 + scripts/test_batch42_units.py | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/services/plan_recheck.py b/app/services/plan_recheck.py index 90e6049..8b94672 100644 --- a/app/services/plan_recheck.py +++ b/app/services/plan_recheck.py @@ -158,9 +158,9 @@ def before_accept(p, expected_revision): if reason: return _pending_response(p, reason, 'execution') # 保留生成时的已落库消费凭据。采纳核对结果随动作账本写入,不写另一份消费快照。 - provenance = dict(check['provenance']) - provenance['consumption_id'] = hard.get('consumption_id') - return {'ok': True, 'proposal': dict(p, hard_numbers=dict(hard, **provenance))} + checked = check['provenance'] + version_check = dict(checked.get('version_check') or {}, checked_decision=checked.get('decision')) + return {'ok': True, 'proposal': dict(p, hard_numbers=dict(hard, version_check=version_check))} except Exception: logger.exception('采纳快速检查失败 proposal=%s', p.get('proposal_id')) reason = '当前资料暂不可用,建议保留,后台将自动检查' diff --git a/docs/开发规格_提议先准备后采纳_2026-10-20.md b/docs/开发规格_提议先准备后采纳_2026-10-20.md index 2fc8229..4f6f49a 100644 --- a/docs/开发规格_提议先准备后采纳_2026-10-20.md +++ b/docs/开发规格_提议先准备后采纳_2026-10-20.md @@ -23,6 +23,7 @@ 采纳时检查确认内容、当日有效期、当前研究是否仍适用,以及资金、仓位、暂停与买卖冲突。 最新计划只读取完整发布结果,不新装配,不新增消费快照。必要交易动作审计仍必须落账。 +生成时的计划与消费编号成对保留。最新核验的计划另记入检查记录,不拼接成虚假消费。 依据发生变化时快速返回等待后台更新,不在HTTP请求里重评,也不暗中改数量。 已准备的数量仍在当前额度内时,不因其他持仓或资金读数变化强制重新确认。 正常下发继续执行既有择时及交易前终检。 diff --git a/scripts/test_batch42_units.py b/scripts/test_batch42_units.py index 2128b66..ae4b90e 100644 --- a/scripts/test_batch42_units.py +++ b/scripts/test_batch42_units.py @@ -15,7 +15,7 @@ CODE='600183.SH' def proposal(**kw): h={'preparation':{'status':'ready'},'proposal_revision':'shown','consumption_id':'saved', - 'plan_basis':{'risk':[]},'price':10,'sector':'电子','prepared_judgement':{'verdict':'PASS','reason':'原研究','degraded':False}} + 'decision':{'id':'prepared'},'plan_basis':{'risk':[]},'price':10,'sector':'电子','prepared_judgement':{'verdict':'PASS','reason':'原研究','degraded':False}} p={'proposal_id':'p1','ts_code':CODE,'action':'OPEN','qty':100,'hard_numbers':h, 'hard_numbers_json':pms_repo._dumps(h),'expire_at':datetime.now()+timedelta(hours=1)} p.update(kw) @@ -41,6 +41,8 @@ class PreparedProposalTest(unittest.TestCase): self.assertTrue(out['ok']) self.assertFalse(basis.call_args.kwargs['record']) self.assertEqual(out['proposal']['hard_numbers']['consumption_id'],'saved') + self.assertEqual(out['proposal']['hard_numbers']['decision']['id'],'prepared') + self.assertEqual(out['proposal']['hard_numbers']['version_check']['checked_decision']['id'],'new') def test_cash_or_other_position_change_can_accept_existing_quantity(self): with patch.object(rc,'current_basis',return_value=current(ok=False,material=True,portfolio_changed=True)), \