package com.openhis.web.externalintegration.dto;

import org.hibernate.validator.constraints.Length;

import com.alibaba.fastjson2.annotation.JSONField;

import lombok.Data;

/**
 * 【BPC】数据元
 *
 * @author Thanking
 * @date 2025-10-16
 */
@Data
public class BpcDataElementDto {

    /**
     * 设备终端编号：设备的唯一编号
     */
    @Length(max = 10)
    @JSONField(name = "posNo")
    private String posNo;

    /**
     * 终端实时经纬度信息：格式为为纬度/经度，+表示北纬、东经，-表示南纬、西 经。例：+37.12/-121.213。例：+37.12/-121.213
     */
    @Length(max = 30)
    @JSONField(name = "posGa")
    private String posGa;

    /**
     * 交易类型：（枚举TranType）
     */
    @Length(max = 1)
    @JSONField(name = "tranType")
    private String tranType;

    /**
     * 交易金额：以分为单位的交易金额
     */
    @Length(max = 12)
    @JSONField(name = "txnAmt")
    private String txnAmt;

    /**
     * 支付方式：（枚举PayType）
     */
    @Length(max = 4)
    @JSONField(name = "payType")
    private String payType;

    /**
     * 交易流水号
     */
    @Length(max = 32)
    @JSONField(name = "sysTrace")
    private String sysTrace;

    /**
     * 原交易流水号：支付结果查询、退货、退货结果查询交易需要传入
     */
    @Length(max = 32)
    @JSONField(name = "orgSysTrace")
    private String orgSysTrace;

    /**
     * 原交易时间：（yyyyMMddHHmmss）该字段为消费成功后返回的日期时间，在做退货、退货结果查询时,需要传入原消费交易的日期时间
     */
    @Length(max = 14)
    @JSONField(name = "orgTxnTime")
    private String orgTxnTime;

    /**
     * 二维码信息：支付二维码，扫码消费订单查询时传入
     */
    @Length(max = 64)
    @JSONField(name = "scanCode")
    private String scanCode;

    /**
     * 支付订单号：扫码支付交易订单号，扫码支付退货时传入
     */
    @Length(max = 64)
    @JSONField(name = "tradeNo")
    private String tradeNo;

    /**
     * 通知URL：交易延时响应时的交易结果通知URL
     */
    @Length(max = 256)
    @JSONField(name = "retUrl")
    private String retUrl;

    /**
     * 清算商户号
     */
    @Length(max = 15)
    @JSONField(name = "mid")
    private String mid;

    /**
     * 商户名称
     */
    @Length(max = 64)
    @JSONField(name = "merName")
    private String merName;

    /**
     * 终端号
     */
    @Length(max = 8)
    @JSONField(name = "tid")
    private String tid;

    /**
     * 商户系统订单号：由商户系统产生
     */
    @Length(max = 64)
    @JSONField(name = "merTradeNo")
    private String merTradeNo;

    /**
     * 银行优惠金额
     */
    @Length(max = 12)
    @JSONField(name = "discountAmt")
    private String discountAmt;

    /**
     * 收款方备注
     */
    @Length(max = 64)
    @JSONField(name = "txtRemarks")
    private String txtRemarks;

    /**
     * 实名认证标志：（枚举RealNameAuthFlag）
     */
    @Length(max = 1)
    @JSONField(name = "realNameAuth")
    private String realNameAuth;

    /**
     * 付款人姓名：当realNameAuth为1时必填
     */
    @Length(max = 64)
    @JSONField(name = "payerName")
    private String payerName;

    /**
     * 付款人身份证件类型：（枚举PayerIdType）当realNameAuth为1时必填
     */
    @Length(max = 2)
    @JSONField(name = "payerIDType")
    private String payerIdType;

    /**
     * 付款人身份证件号码：当realNameAuth为1时必填
     */
    @Length(max = 20)
    @JSONField(name = "payerID")
    private String payerId;

    /**
     * 发起方IP地址：支持IPv6格式
     */
    @Length(max = 40)
    @JSONField(name = "IP")
    private String ip;

    /**
     * 终端设备类型：（枚举DeviceType）
     */
    @Length(max = 2)
    @JSONField(name = "deviceType")
    private String deviceType;

}
