|
@@ -421,6 +421,7 @@ def _append_sell(
|
|
|
ratio, ratio_mode, ratio_live, ratio_error = _ratio(sub, note, note_ambiguous, logs, sources)
|
|
ratio, ratio_mode, ratio_live, ratio_error = _ratio(sub, note, note_ambiguous, logs, sources)
|
|
|
face_calc, add_calc, dividend_calc = None, None, None
|
|
face_calc, add_calc, dividend_calc = None, None, None
|
|
|
face_live = add_live = dividend_live = ratio_live
|
|
face_live = add_live = dividend_live = ratio_live
|
|
|
|
|
+ add_skip = dividend_skip = False
|
|
|
if ratio_mode == "skip":
|
|
if ratio_mode == "skip":
|
|
|
# 没有执行名义本金,比例三列不核。日志留一行,结论里不出现。
|
|
# 没有执行名义本金,比例三列不核。日志留一行,结论里不出现。
|
|
|
logger.info("卖出比例不核:没有执行名义本金,子单 {}", label)
|
|
logger.info("卖出比例不核:没有执行名义本金,子单 {}", label)
|
|
@@ -436,24 +437,39 @@ def _append_sell(
|
|
|
face_name = "当前票据面值"
|
|
face_name = "当前票据面值"
|
|
|
face_formula = "卖出票据面值 = 比例 × 当前票据面值"
|
|
face_formula = "卖出票据面值 = 比例 × 当前票据面值"
|
|
|
face_calc, face_text, face_live = _sell_share(ratio, ratio_mode, ratio_live, face_base, face_name, ratio_error)
|
|
face_calc, face_text, face_live = _sell_share(ratio, ratio_mode, ratio_live, face_base, face_name, ratio_error)
|
|
|
- add_calc, add_text, add_live = _sold_amount_share(
|
|
|
|
|
|
|
+ add_calc, add_text, add_live, add_skip = _sold_amount_share(
|
|
|
sub, logs, sources, ratio, ratio_mode, ratio_live, ratio_error,
|
|
sub, logs, sources, ratio, ratio_mode, ratio_live, ratio_error,
|
|
|
read_note_cell(note, "add_amt", logs, sources), "当前增额金额", "sold_add_amt", fully_sold,
|
|
read_note_cell(note, "add_amt", logs, sources), "当前增额金额", "sold_add_amt", fully_sold,
|
|
|
)
|
|
)
|
|
|
- dividend_calc, dividend_text, dividend_live = _sold_amount_share(
|
|
|
|
|
|
|
+ dividend_calc, dividend_text, dividend_live, dividend_skip = _sold_amount_share(
|
|
|
sub, logs, sources, ratio, ratio_mode, ratio_live, ratio_error,
|
|
sub, logs, sources, ratio, ratio_mode, ratio_live, ratio_error,
|
|
|
read_note_cell(note, "dividend_amt", logs, sources), "当前分红金额", "realized_dividend", fully_sold,
|
|
read_note_cell(note, "dividend_amt", logs, sources), "当前分红金额", "realized_dividend", fully_sold,
|
|
|
)
|
|
)
|
|
|
_finish_share(lines, sub, logs, sources, label, face_formula, "sold_face_value", face_text, face_calc, face_live, ratio_mode)
|
|
_finish_share(lines, sub, logs, sources, label, face_formula, "sold_face_value", face_text, face_calc, face_live, ratio_mode)
|
|
|
- _finish_share(lines, sub, logs, sources, label, "卖出增额金额 = 比例 × 当前增额金额", "sold_add_amt", add_text, add_calc, add_live, ratio_mode)
|
|
|
|
|
- _finish_share(lines, sub, logs, sources, label, "实现分红 = 比例 × 当前分红金额", "realized_dividend", dividend_text, dividend_calc, dividend_live, ratio_mode)
|
|
|
|
|
|
|
+ # 全卖后票上增额/分红已清零且无卖出前快照时不核这两列,避免明知核不动还刷可疑。
|
|
|
|
|
+ if not add_skip:
|
|
|
|
|
+ _finish_share(
|
|
|
|
|
+ lines, sub, logs, sources, label,
|
|
|
|
|
+ "卖出增额金额 = 比例 × 当前增额金额", "sold_add_amt", add_text, add_calc, add_live, ratio_mode,
|
|
|
|
|
+ )
|
|
|
|
|
+ if not dividend_skip:
|
|
|
|
|
+ _finish_share(
|
|
|
|
|
+ lines, sub, logs, sources, label,
|
|
|
|
|
+ "实现分红 = 比例 × 当前分红金额", "realized_dividend", dividend_text, dividend_calc, dividend_live, ratio_mode,
|
|
|
|
|
+ )
|
|
|
|
|
+ # 分红公式因无快照跳过时,底层盈亏改用订单已落库的实现分红代入(不循环自证增额)。
|
|
|
|
|
+ pnl_dividend, pnl_dividend_live = dividend_calc, dividend_live
|
|
|
|
|
+ if dividend_skip:
|
|
|
|
|
+ stored_div = read_cell(sub, "realized_dividend", "order_sub_a", logs, sources)
|
|
|
|
|
+ pnl_dividend = stored_div.number
|
|
|
|
|
+ pnl_dividend_live = dividend_live or stored_div.live
|
|
|
pnl_calc, pnl_text, pnl_live = _pnl_for_sub(
|
|
pnl_calc, pnl_text, pnl_live = _pnl_for_sub(
|
|
|
sub,
|
|
sub,
|
|
|
note,
|
|
note,
|
|
|
logs,
|
|
logs,
|
|
|
sources,
|
|
sources,
|
|
|
- dividend_calc,
|
|
|
|
|
- dividend_live,
|
|
|
|
|
|
|
+ pnl_dividend,
|
|
|
|
|
+ pnl_dividend_live,
|
|
|
)
|
|
)
|
|
|
finish_number(
|
|
finish_number(
|
|
|
lines,
|
|
lines,
|
|
@@ -467,7 +483,11 @@ def _append_sell(
|
|
|
scale=SCALE_AMT,
|
|
scale=SCALE_AMT,
|
|
|
extra_live=pnl_live,
|
|
extra_live=pnl_live,
|
|
|
)
|
|
)
|
|
|
- _total_line(lines, sub, note, logs, sources, label, face_calc, add_calc, pnl_calc, face_live or add_live or pnl_live)
|
|
|
|
|
|
|
+ # 增额因无快照不核时,总金额缺独立算出的增额,同样不核。
|
|
|
|
|
+ _total_line(
|
|
|
|
|
+ lines, sub, note, logs, sources, label, face_calc, add_calc, pnl_calc,
|
|
|
|
|
+ face_live or add_live or pnl_live, skip_total=add_skip,
|
|
|
|
|
+ )
|
|
|
_final_line(lines, sub, logs, sources, label)
|
|
_final_line(lines, sub, logs, sources, label)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1015,15 +1035,19 @@ def _sold_amount_share(
|
|
|
base_name: str,
|
|
base_name: str,
|
|
|
column: str,
|
|
column: str,
|
|
|
fully_sold: bool,
|
|
fully_sold: bool,
|
|
|
-) -> tuple[Decimal | None, str, bool]:
|
|
|
|
|
- """全部卖出后增额、分红已扣成 0。订单上仍有金额时,卖出前的数不在票据上,不拿 0 去比。"""
|
|
|
|
|
|
|
+) -> tuple[Decimal | None, str, bool, bool]:
|
|
|
|
|
+ """全卖后增额/分红已扣成 0 且订单上仍有金额时,卖出前基数不在票上,本列不核。
|
|
|
|
|
+
|
|
|
|
|
+ 返回 (算出值, 代入文案, 是否活表, 是否跳过本列)。第四项为 True 时调用方不出结论行。
|
|
|
|
|
+ """
|
|
|
|
|
|
|
|
if fully_sold and not base.absent and base.number == 0:
|
|
if fully_sold and not base.absent and base.number == 0:
|
|
|
sold = read_cell(sub, column, "order_sub_a", logs, sources)
|
|
sold = read_cell(sub, column, "order_sub_a", logs, sources)
|
|
|
if sold.number not in (None, 0):
|
|
if sold.number not in (None, 0):
|
|
|
live = ratio_live or base.live or sold.live
|
|
live = ratio_live or base.live or sold.live
|
|
|
- return None, f"全部卖出后{base_name}已是 0,卖出前金额没有留在票据上", live
|
|
|
|
|
- return _sell_share(ratio, mode, ratio_live, base, base_name, error_text)
|
|
|
|
|
|
|
+ return None, "", live, True
|
|
|
|
|
+ calc, text, live = _sell_share(ratio, mode, ratio_live, base, base_name, error_text)
|
|
|
|
|
+ return calc, text, live, False
|
|
|
|
|
|
|
|
|
|
|
|
|
def _finish_share(
|
|
def _finish_share(
|
|
@@ -1153,7 +1177,11 @@ def _total_line(
|
|
|
sold_add: Decimal | None,
|
|
sold_add: Decimal | None,
|
|
|
pnl: Decimal | None,
|
|
pnl: Decimal | None,
|
|
|
extra_live: bool,
|
|
extra_live: bool,
|
|
|
|
|
+ skip_total: bool = False,
|
|
|
) -> None:
|
|
) -> None:
|
|
|
|
|
+ # 卖出增额因全卖无快照跳过时,总金额缺独立增额,整列不核。
|
|
|
|
|
+ if skip_total:
|
|
|
|
|
+ return
|
|
|
check = read_cell(sub, "exec_total_amt_settle", "order_sub_a", logs, sources)
|
|
check = read_cell(sub, "exec_total_amt_settle", "order_sub_a", logs, sources)
|
|
|
formula = "总金额 = 若底层资产盈亏 > 0,则卖出票据面值 + 卖出增额金额 + 底层资产盈亏 × 收益比例,否则取与 0 的较大者"
|
|
formula = "总金额 = 若底层资产盈亏 > 0,则卖出票据面值 + 卖出增额金额 + 底层资产盈亏 × 收益比例,否则取与 0 的较大者"
|
|
|
if sold_face is None or sold_add is None or pnl is None:
|
|
if sold_face is None or sold_add is None or pnl is None:
|