import { buildTamRequestPayload, tamRequest, type TamRequestPayload, type TamResponse, } from '@/api/tam' export type PositionEstimateHistoryQueryForm = { /** 预报日期,页面日期控件为 YYYY-MM-DD,接口入参为 YYYYMMDD。 */ tranDate: string } type PositionEstimateHistoryQueryBody = { /** 预报日期,格式 YYYYMMDD。 */ tranDate: string } export type PositionEstimateHistoryBody = { /** 超额备付金。 */ overAmt?: string /** 今日资金交易预计收付额收入。 */ ysAmtIn?: string /** 今日资金交易预计收付额支出。 */ ysAmtOut?: string /** 今日资金交易预计收付额备注,当前页面不展示。 */ ysAmtRmk?: string /** 法定准备金退/缴款及其他未达款收入。 */ fzAmtIn?: string /** 法定准备金退/缴款及其他未达款支出。 */ fzAmtOut?: string /** 法定准备金退/缴款及其他未达款备注,当前页面不展示。 */ fzAmtRmk?: string /** 小额未走款收入。 */ bepsAmtIn?: string /** 小额未走款支出。 */ bepsAmtOut?: string /** 小额未走款备注,当前页面不展示。 */ bepsAmtRmk?: string /** 其他未走款收入。 */ othAmtIn?: string /** 其他未走款支出。 */ othAmtOut?: string /** 其他未走款备注,当前页面不展示。 */ othAmtRmk?: string } export type PositionEstimateHistoryPayload = TamRequestPayload export type PositionEstimateHistoryResult = TamResponse export type PositionEstimateDetailQueryForm = { /** 超额备付金。 */ overAmt: string /** 交易日期,页面为 YYYY-MM-DD,接口为 YYYYMMDD。 */ tranDate: string /** 法定准备金退/缴款及其他未达款收入。 */ fzAmtIn: string /** 法定准备金退/缴款及其他未达款支出。 */ fzAmtOut: string /** 法定准备金退/缴款及其他未达款备注。 */ fzAmtRmk?: string /** 小额未走款收入。 */ bepsAmtIn: string /** 小额未走款支出。 */ bepsAmtOut: string /** 小额未走款备注。 */ bepsAmtRmk?: string /** 其他未走款收入。 */ othAmtIn: string /** 其他未走款支出。 */ othAmtOut: string /** 其他未走款备注。 */ othAmtRmk?: string /** 今日资金交易预计收付额收入。 */ ysAmtIn: string /** 今日资金交易预计收付额支出。 */ ysAmtOut: string /** 今日资金交易预计收付额备注。 */ ysAmtRmk?: string } export type PositionEstimateDetailRequestBody = Required type BusinessPrefix = 'hg' | 'zq' | 'pj' | 'tg' | 'fzh' | 'ty' | 'lc' | 'qt' | 'zj' type BusinessStage = 'Pred' | 'Unverify' type AmountDirection = 'AmtIn' | 'AmtOut' | 'AmtNet' type BusinessAmountKey = `${BusinessPrefix}${BusinessStage}${AmountDirection}` type OtherAmountKey = | 'xjAmtIn' | 'xjAmtOut' | 'xjAmtNet' | 'unVerifyAmtIn1' | 'unVerifyAmtOut1' | 'unVerifyAmtNet1' | 'unVerifyAmtIn' | 'unVerifyAmtOut' | 'unVerifyAmtNet' export type PositionEstimateDetailBody = Partial< Record > & { /** 接口可能返回的结果文件名。 */ fileName?: string } export type PositionEstimateDetailPayload = TamRequestPayload export type PositionEstimateDetailResult = TamResponse export type PositionEstimateDetailSnapshot = { displayDate: string request: PositionEstimateDetailQueryForm response?: PositionEstimateDetailBody } export type PositionEstimateCellDetailQueryForm = { /** 老 JSP 表格单元格坐标,例如 C5、D24。 */ position: string /** 交易日期,页面为 YYYY-MM-DD,接口为 YYYYMMDD。 */ tranDate: string pageIndex: number pageSize: number } type PositionEstimateCellDetailRequestBody = { position: string tranDate: string } export type PositionEstimatePredictionDetail = { busiType?: string clientName?: string competName?: string groundBranch?: string payChannel?: string payDirec?: string predAmt?: string predRefNo?: string upOrg?: string verifyAmt?: string verifyStatus?: string } export type PositionEstimateTransactionDetail = { amt?: string busiType?: string groundBranch?: string payChannel?: string payDirec?: string payeeName?: string payerName?: string refNo?: string upOrg?: string verifyStatus?: string } export type PositionEstimateCellDetailBody = { predList?: PositionEstimatePredictionDetail[] totalCount?: string tranList?: PositionEstimateTransactionDetail[] } export type PositionEstimateCellDetailPayload = TamRequestPayload export type PositionEstimateCellDetailResult = TamResponse export const POSITION_ESTIMATE_DETAIL_STORAGE_KEY = 'position-estimate-report:detail' const HISTORY_QUERY_TRAN_CODE = '/TAM/0001/140103005' const DETAIL_QUERY_TRAN_CODE = '/TAM/0001/140103006' const CELL_DETAIL_QUERY_TRAN_CODE = '/TAM/0001/140103007' export function buildPositionEstimateHistoryPayload( form: PositionEstimateHistoryQueryForm, ): PositionEstimateHistoryPayload { return buildTamRequestPayload({ tranCode: HISTORY_QUERY_TRAN_CODE, body: { tranDate: normalizeDate(form.tranDate), }, }) } export async function queryPositionEstimateHistory( payload: PositionEstimateHistoryPayload, ): Promise { return tamRequest(payload) } export function buildPositionEstimateDetailPayload( form: PositionEstimateDetailQueryForm, ): PositionEstimateDetailPayload { const body: PositionEstimateDetailRequestBody = { overAmt: normalizeAmount(form.overAmt), tranDate: normalizeDate(form.tranDate), fzAmtIn: normalizeAmount(form.fzAmtIn), fzAmtOut: normalizeAmount(form.fzAmtOut), fzAmtRmk: form.fzAmtRmk?.trim() || '', bepsAmtIn: normalizeAmount(form.bepsAmtIn), bepsAmtOut: normalizeAmount(form.bepsAmtOut), bepsAmtRmk: form.bepsAmtRmk?.trim() || '', othAmtIn: normalizeAmount(form.othAmtIn), othAmtOut: normalizeAmount(form.othAmtOut), othAmtRmk: form.othAmtRmk?.trim() || '', ysAmtIn: normalizeAmount(form.ysAmtIn), ysAmtOut: normalizeAmount(form.ysAmtOut), ysAmtRmk: form.ysAmtRmk?.trim() || '', } return buildTamRequestPayload({ tranCode: DETAIL_QUERY_TRAN_CODE, body, }) } export async function queryPositionEstimateDetail( payload: PositionEstimateDetailPayload, ): Promise { return tamRequest(payload) } export function buildPositionEstimateCellDetailPayload( form: PositionEstimateCellDetailQueryForm, ): PositionEstimateCellDetailPayload { return buildTamRequestPayload({ tranCode: CELL_DETAIL_QUERY_TRAN_CODE, pageIndex: form.pageIndex, pageSize: form.pageSize, body: { position: form.position.trim().toUpperCase(), tranDate: normalizeDate(form.tranDate), }, }) } export async function queryPositionEstimateCellDetail( payload: PositionEstimateCellDetailPayload, ): Promise { return tamRequest(payload) } function normalizeDate(value: string) { if (/^\d{8}$/.test(value)) return value return value.replaceAll('-', '') } function normalizeAmount(value: string) { return value.trim().replaceAll(',', '') }