diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TDebitCreditDtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TDebitCreditDtl.java
index 85bac09..7c288bd 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TDebitCreditDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TDebitCreditDtl.java
@@ -15,8 +15,8 @@
   @Column(name = "SEQNO", nullable = false, precision = 2)
   private Integer seqno;
 
-  @Column(name = "accdate", nullable = false, length = 8)
-  private String accdate;
+  @Column(name = "settledate", nullable = false, length = 8)
+  private String settleDate;
 
   @Column(name = "DRSUBJNO", length = 10)
   private String drsubjno; //借方科目
@@ -101,11 +101,11 @@
     this.summary = summary;
   }
 
-  public String getAccdate() {
-    return accdate;
+  public String getSettleDate() {
+    return settleDate;
   }
 
-  public void setAccdate(String accdate) {
-    this.accdate = accdate;
+  public void setSettleDate(String settleDate) {
+    this.settleDate = settleDate;
   }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
index d65da13..95a7b0f 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.api.domain;
 
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+
 import javax.persistence.*;
 
 @Entity
@@ -45,6 +47,9 @@
   @Column(name = "TRANSDESC", length = 240)
   private String transdesc; //交易描述
 
+  @Column(name = "reverseflag", length = 10)
+  private String reverseFlag;
+
   @Column(name = "status", length = 20)
   private String status;
 
@@ -184,4 +189,12 @@
   public void setRemark(String remark) {
     this.remark = remark;
   }
+
+  public String getReverseFlag() {
+    return reverseFlag;
+  }
+
+  public void setReverseFlag(String reverseFlag) {
+    this.reverseFlag = reverseFlag;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
index a4969cb..fa3fc8d 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
@@ -20,6 +20,12 @@
   @Column(name = "accdate", nullable = false, length = 8)
   private String accdate;
 
+  @Column(name = "checkable")
+  private Boolean checkable; // 是否需要清算的交易
+
+  @Column(name = "checkdate", length = 8)
+  private String checkDate;
+
   @Column(name = "person")
   private Boolean person = false;
 
@@ -51,7 +57,7 @@
   private Timestamp endTime;
 
   @Column(name = "reverse_flag", nullable = false, length = 10)
-  private String reverseFlag = "none";
+  private String reverseFlag = "none"; // 冲正标识， none - 未冲正, reverse - 被撤销, cancel - 被冲正
 
   @OneToOne(targetEntity = TPersondtl.class, fetch = LAZY, cascade = CascadeType.ALL)
   @JoinColumn(name = "refno", referencedColumnName = "refno")
@@ -206,6 +212,22 @@
     this.opertype = opertype;
   }
 
+  public String getCheckDate() {
+    return checkDate;
+  }
+
+  public void setCheckDate(String checkDate) {
+    this.checkDate = checkDate;
+  }
+
+  public Boolean getCheckable() {
+    return checkable;
+  }
+
+  public void setCheckable(Boolean checkable) {
+    this.checkable = checkable;
+  }
+
   public Double sumAmountByAccno(String accno, String subjno,
                                  int balanceFlag, String debitOrCredit) {
     Double debitSum = 0.0;
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 461f6dd..1b68789 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -99,7 +99,7 @@
                 builder.addDebitCreditRecord(AccountProxy(person), AccountProxy(shop),
                         amount, feetypeConfig.summary)
                         .shop().also {
-                            it.amount += amount
+                            it.addAmount(amount)
                         }
             }
             else -> {
@@ -149,23 +149,18 @@
                 val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
 
                 val builder = TransactionBuilder().apply {
-                    transDate = param.transdate
-                    transTime = param.transtime
-                    paytype = TradeDict.PAYTYPE_BALANCE
-                    transCode = TradeCode.TRANSCODE_BALANCE_PAY
-                    payinfo = "账户余额消费"
-                    outId = shopacc.shopaccno
-                    outtradeno = param.billno
+                    setTransInfo(param.transdate, param.transtime, TradeCode.TRANSCODE_BALANCE_PAY, false)
+                    setOutTransInfo(shopacc.shopaccno, param.billno)
                     operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
-                }.person(account).apply {
+                    paytype = TradeDict.PAYTYPE_BALANCE
+                    payinfo = "账户余额消费"
                     description = "账户余额消费"
-                    amount = param.amount / 100.0
+                }.person(account).apply {
+                    setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT)
                     opposite = AccountProxy(shopacc)
-                    tradeOut()
                 }.and().shop(shopacc).apply {
-                    amount = param.amount / 100.0
+                    setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
                     opposite = AccountProxy(account)
-                    tradeIn()
                 }.and()
 
                 param.feelist?.forEach {
@@ -223,23 +218,18 @@
                 val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
                 val subject = accountUtilServcie.readSubject(Subject.SUBJNO_PAY_CITIZEN_CARD)
                 val transaction = TransactionBuilder().apply {
-                    transCode = TradeCode.TRANSCODE_CITIZENCARD_PAY
-                    transDate = param.transdate
-                    transTime = param.transtime
+                    setTransInfo(param.transdate, param.transtime, TradeCode.TRANSCODE_CITIZENCARD_PAY, true)
+                    setOutTransInfo(shopacc.shopaccno, param.billno)
+                    operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
                     paytype = TradeDict.PAYTYPE_CITIZEN_CARD
                     payinfo = "市民卡代扣消费"
                     description = "市民卡代扣消费"
-                    outId = shopacc.shopaccno
-                    outtradeno = param.billno
-                    operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
                 }.person(account).apply {
-                    amount = param.amount / 100.0
+                    setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT)
                     opposite = AccountProxy(shopacc)
-                    tradeOut()
                 }.and().shop(shopacc).apply {
-                    amount = param.amount / 100.0
+                    setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
                     opposite = AccountProxy(account)
-                    tradeIn()
                 }.and().addDebitCreditRecord(AccountProxy(subject), AccountProxy(account),
                         param.amount / 100.0, "市民卡代扣消费")
                         .addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc),
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 1948116..a972d3f 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -57,6 +57,7 @@
                 createTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
                 operid = builder.operId
                 opertype = builder.operType
+                reverseFlag = builder.tradeType
             }
 
             if (builder.hasPerson()) {
@@ -70,7 +71,7 @@
                     transdate = builder.transDate
                     transtime = builder.transTime
                     befbal = builder.person().person.availbal
-                    amount = if (builder.person().tradeFlag() == TradeDict.TRADE_FLAG_IN) {
+                    amount = if (builder.person().tradeFlag == TradeDict.TRADE_FLAG_IN) {
                         builder.person().amount
                     } else {
                         -builder.person().amount
@@ -78,11 +79,11 @@
                     paytype = builder.person().paytype
                     payinfo = builder.person().payinfo
                     transcode = builder.transCode
-                    tradeflag = builder.person().tradeFlag()
+                    tradeflag = builder.person().tradeFlag
                     transdesc = builder.person().description
                     oppositeAccNo = builder.person().opposite.getAccountNo()
                     oppositeAccName = builder.person().opposite.getAccountName()
-                    reverseFlag = builder.reverseFlag
+                    this.reverseFlag = TradeDict.REVERSE_FLAG_NONE
                     remark = builder.person().remark
                     this.status = status
                 }.also {
@@ -102,18 +103,19 @@
                     this.transDate = builder.transDate
                     this.transTime = builder.transTime
                     this.tradeCode = builder.transCode
-                    amount = if (builder.shop().tradeFlag() == TradeDict.TRADE_FLAG_IN) {
+                    amount = if (builder.shop().tradeFlag == TradeDict.TRADE_FLAG_IN) {
                         builder.shop().amount
                     } else {
                         -builder.shop().amount
                     }
-                    this.tradeflag = builder.shop().tradeFlag()
+                    this.tradeflag = builder.shop().tradeFlag
                     this.shopaccno = builder.shop().shopacc.shopaccno
                     this.shopname = builder.shop().shopacc.shopname
                     this.transdesc = builder.shop().description
                     this.oppositeAccNo = builder.shop().opposite.getAccountNo()
                     this.oppositeAccName = builder.shop().opposite.getAccountName()
                     this.remark = builder.shop().remark
+                    this.reverseFlag = TradeDict.REVERSE_FLAG_NONE
                     this.status = status
                 }.also {
                     // save shopdtl
@@ -144,7 +146,6 @@
             builder.getAllDetails().map { line ->
                 TDebitCreditDtl().apply {
                     this.refno = transaction.refno
-                    this.accdate = transaction.accdate
                     this.seqno = line.seqno
                     this.draccno = line.debit.getAccountNo()
                     this.drsubjno = line.debit.getSubjectNo()
@@ -159,7 +160,7 @@
 
 
             if (builder.hasPerson()) {
-                val dc = getDebitOrCredit(builder.person().tradeFlag())
+                val dc = getDebitOrCredit(builder.person().tradeFlag)
                 transaction.sumAmountByAccno(builder.person().person.accno,
                         Subject.SUBJNO_PERSONAL_DEPOSIT,
                         PERSON_BALANCE_FLAG, dc).also {
@@ -171,7 +172,7 @@
             }
 
             if (builder.hasShop()) {
-                val dc = getDebitOrCredit(builder.shop().tradeFlag())
+                val dc = getDebitOrCredit(builder.shop().tradeFlag)
                 transaction.sumAmountByAccno(builder.shop().shopacc.shopaccno,
                         Subject.SUBJNO_MACHANT_INCOME,
                         SHOP_BALANCE_FLAG, dc).also {
@@ -308,6 +309,46 @@
         }
         transaction.status = TradeDict.DTL_STATUS_SUCCESS
         transaction.accdate = systemUtilService.accdate
+        transactionOnSuccess(transaction, remark, false)
+
+        transaction.endTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
+        transactionMainDao.save(transaction)
+        return transaction
+    }
+
+    override fun reverse(originRefno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun reverseInit(originRefno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun reverseConfirm(refno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun reverseFail(refno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun cancel(originRefno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun cancelInit(originRefno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun cancelConfirm(refno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun cancelFail(refno: String): TTransactionMain {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    private fun transactionOnSuccess(transaction: TTransactionMain, remark: String, overdraft: Boolean) {
         if (transaction.person) {
             // update account balance
             val amount = transaction.sumAmountByAccno(
@@ -315,7 +356,7 @@
                     PERSON_BALANCE_FLAG, "both")
             if (amount.compareTo(0.0) != 0) {
                 transaction.personDtl?.let {
-                    if (accountRepository.recalcAccountBalance(it, amount, false) != 1) {
+                    if (accountRepository.recalcAccountBalance(it, amount, overdraft) != 1) {
                         throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
                                 "个人账户交易冲突")
                     }
@@ -333,7 +374,7 @@
                     SHOP_BALANCE_FLAG, "both")
             if (amount.compareTo(0.0) != 0) {
                 transaction.shopDtl?.let {
-                    if (shopaccRepository.recalcShopBalance(it, it.amount, false) != 1) {
+                    if (shopaccRepository.recalcShopBalance(it, it.amount, overdraft) != 1) {
                         throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
                                 "商户账户交易冲突")
                     }
@@ -348,8 +389,24 @@
         if (transaction.subject) {
             // update subject balance
         }
+    }
 
+    override fun repair(refno: String, remark: String): TTransactionMain {
+        val transaction = transactionMainDao.findByRefnoForUpdate(refno)
+                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
+                        "补帐交易流水<$refno>不存在")
+        val checkStatus = setOf(TradeDict.DTL_STATUS_FAIL, TradeDict.DTL_STATUS_CANCEL,
+                TradeDict.DTL_STATUS_WIP)
+
+        if (transaction.status !in checkStatus) {
+            throw TransactionCheckException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+                    "补帐交易<$refno>状态错误，status<${transaction.status}>")
+        }
+
+        transactionOnSuccess(transaction, remark, true)
+        transaction.checkDate = systemUtilService.accdate
         transaction.endTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
+
         transactionMainDao.save(transaction)
         return transaction
     }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index 4113740..f0acef4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.api.service
 
 import com.supwisdom.dlpay.api.TransactionBuilder
-import com.supwisdom.dlpay.api.domain.TAccount
 import com.supwisdom.dlpay.api.domain.TTransactionMain
 import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
@@ -27,8 +26,35 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
     fun success(refno: String, remark: String): TTransactionMain
-}
 
-interface PersonAccountService {
-    fun recalcBalance(account: TAccount, amount: Double)
-}
\ No newline at end of file
+    // 撤销接口冲正类接口
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun reverse(originRefno: String): TTransactionMain
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun reverseInit(originRefno: String): TTransactionMain
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun reverseConfirm(refno: String): TTransactionMain
+
+    fun reverseFail(refno: String): TTransactionMain
+
+    // 冲正类接口
+    /**
+     * 冲正业务
+     */
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun cancel(originRefno: String): TTransactionMain
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun cancelInit(originRefno: String): TTransactionMain
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun cancelConfirm(refno: String): TTransactionMain
+
+    fun cancelFail(refno: String): TTransactionMain
+
+    // 补帐接口
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun repair(refno: String, remark: String): TTransactionMain
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index 5d379fe..15a23d4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -2,16 +2,14 @@
 
 import com.supwisdom.dlpay.api.domain.TAccount
 import com.supwisdom.dlpay.api.domain.TTransactionMain
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
 import com.supwisdom.dlpay.api.service.TransactionService
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 
-open class SubTransactionBuilder(val parent: TransactionBuilder) {
+open class SubTransactionBuilder<T : SubTransactionBuilder<T>>(val parent: TransactionBuilder) {
     var paytype: String = ""
         get() {
             return if (field.isEmpty()) parent.paytype else field
@@ -42,38 +40,42 @@
         return parent
     }
 
-    private var balanceInOut: String = ""
+    // 收支方向, in / out
+    var tradeFlag: String = ""
+        private set
 
-    fun tradeIn(): SubTransactionBuilder {
-        this.balanceInOut = TradeDict.TRADE_FLAG_IN
+    var amount: Double = 0.0
+        private set
+
+    /**
+     * amount : 交易金额， 正向交易金额必须 >= 0, 冲正交易金额必须 <= 0
+     */
+    fun setAmount(amount: Double, inOut: String): SubTransactionBuilder<T> {
+        this.amount = amount
+        this.tradeFlag = inOut
         return this
     }
 
-    fun tradeOut(): SubTransactionBuilder {
-        this.balanceInOut = TradeDict.TRADE_FLAG_OUT
+    /**
+     * amount : 交易金额， 正向交易金额必须 >= 0, 冲正交易金额必须 <= 0
+     */
+    fun addAmount(amount: Double): SubTransactionBuilder<T> {
+        this.amount += amount
         return this
     }
 
-    fun tradeFlag(): String {
-        return this.balanceInOut
-    }
-
-
 }
 
 class PersonTranactionBuilder(parent: TransactionBuilder, val person: TAccount)
-    : SubTransactionBuilder(parent) {
-    var amount: Double = 0.0
+    : SubTransactionBuilder<PersonTranactionBuilder>(parent) {
 }
 
 class ShopTransactionBuilder(parent: TransactionBuilder, val shopacc: TShopacc)
-    : SubTransactionBuilder(parent) {
-    var amount: Double = 0.0
+    : SubTransactionBuilder<ShopTransactionBuilder>(parent) {
 }
 
 class SubjectTransactionBuilder(parent: TransactionBuilder, val subject: TSubject)
-    : SubTransactionBuilder(parent) {
-    var amount: Double = 0.0
+    : SubTransactionBuilder<SubjectTransactionBuilder>(parent) {
 }
 
 class AccountProxy<T>(private val accountObj: T) {
@@ -118,26 +120,59 @@
 
 // 在 constructor 中加入 service 接口
 class TransactionBuilder {
+    companion object {
+        private val VALID_REVERSEFLAG = setOf(TradeDict.REVERSE_FLAG_CANCEL,
+                TradeDict.REVERSE_FLAG_REVERSE,
+                TradeDict.REVERSE_FLAG_NONE)
+
+        private val VALID_OPERTYPE = setOf(TradeDict.OPERTYPE_OPER,
+                TradeDict.OPERTYPE_SHOP, TradeDict.OPERTYPE_PERSON)
+
+        private val VALID_TRADEFLAG = setOf(TradeDict.TRADE_FLAG_IN,
+                TradeDict.TRADE_FLAG_OUT)
+    }
+
     private lateinit var personBuilder: PersonTranactionBuilder
     private lateinit var shopBuilder: ShopTransactionBuilder
     private lateinit var subjectBuilder: SubjectTransactionBuilder
 
     private val debitCreditLines = mutableListOf<DebitCreditLine>()
 
+    // 以下是交易主表属性
     var transDate: String = ""
+        private set
     var transTime: String = ""
+        private set
     var transCode: Int = 0 //交易码,各明细流水统一
-    var refno: String = ""
-    var paytype: String = ""
-    var payinfo: String = ""
+        private set
+
+    // 是否需要清算的交易
+    var checkable: Boolean = false
+        private set
+
+    fun setTransInfo(date: String, time: String, code: Int, checkable: Boolean = false): TransactionBuilder {
+        this.transDate = date
+        this.transTime = time
+        this.transCode = code
+        this.checkable = checkable
+        return this
+    }
+
     var outtradeno: String = "" //第三方流水号
+        private set
     var outId: String = ""
-    var reverseFlag: String = "none"
-    var description: String = ""
-    var remark: String = ""
+        private set
+
+    fun setOutTransInfo(id: String, tradeno: String): TransactionBuilder {
+        this.outId = id
+        this.outtradeno = tradeno
+        return this
+    }
 
     var operId: String = ""
+        private set
     var operType: String = ""
+        private set
 
     fun operator(id: String, type: String): TransactionBuilder {
         this.operId = id
@@ -145,6 +180,26 @@
         return this
     }
 
+    var tradeType: String = "none"
+        private set
+
+    fun reverse(): TransactionBuilder {
+        this.tradeType = TradeDict.REVERSE_FLAG_REVERSE
+        return this
+    }
+
+    fun cancel(): TransactionBuilder {
+        this.tradeType = TradeDict.REVERSE_FLAG_CANCEL
+        return this
+    }
+
+
+    // 以下属性可以在子表中不同
+    var paytype: String = ""
+    var payinfo: String = ""
+    var description: String = ""
+    var remark: String = ""
+
     fun person(): PersonTranactionBuilder {
         return this.personBuilder
     }
@@ -210,6 +265,14 @@
         return debitCreditLines.toList()
     }
 
+    private fun checkAmount(amount: Double): Boolean {
+        return if (tradeType == TradeDict.REVERSE_FLAG_NONE) {
+            amount >= 0.0
+        } else {
+            amount <= 0.0
+        }
+    }
+
     fun preCheck() {
         if (outId.isNotEmpty() && outtradeno.isEmpty()) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
@@ -226,14 +289,27 @@
                     "交易码错误")
         }
 
+        if (tradeType !in VALID_REVERSEFLAG) {
+            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                    "冲正标志错误")
+        }
+
         if ((operId.isNotEmpty() || operType.isNotEmpty())
-                && operType !in setOf(TradeDict.OPERTYPE_OPER, TradeDict.OPERTYPE_PERSON, TradeDict.OPERTYPE_SHOP)) {
+                && operType !in VALID_OPERTYPE) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                     "操作员类型错误")
         }
 
         if (hasPerson()) {
             person().also {
+                if (it.tradeFlag !in VALID_TRADEFLAG) {
+                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                            "个人交易收支方向错误")
+                }
+                if (!checkAmount(it.amount)) {
+                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                            "个人交易金额不正确")
+                }
                 if (!it.hasOpposite()) {
                     throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "个人交易对方账户未设置")
@@ -242,51 +318,23 @@
                     throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "个人交易信息未设置")
                 }
-                when (it.tradeFlag()) {
-                    TradeDict.TRADE_FLAG_IN -> {
-                        throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                                "不支持的交易")
-                    }
-                    TradeDict.TRADE_FLAG_OUT -> {
-                        if (reverseFlag != TradeDict.REVERSE_FLAG_NONE && it.amount > 0) {
-                            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                                    "消费冲正交易，余额不能大于0")
-                        } else if (reverseFlag == TradeDict.REVERSE_FLAG_NONE && it.amount < 0) {
-                            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                                    "消费交易，余额不能小于0")
-                        }
-                    }
-                    else -> {
-                        throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                                "个人交易方向未设置")
-                    }
-                }
-
             }
         }
 
         if (hasShop()) {
             shop().also {
+                if (it.tradeFlag !in VALID_TRADEFLAG) {
+                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                            "商户交易收支方向错误")
+                }
+                if (!checkAmount(it.amount)) {
+                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                            "商户交易金额不正确")
+                }
                 if (!it.hasOpposite()) {
                     throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
                             "商户交易对方账户未设置")
                 }
-                when (it.tradeFlag()) {
-                    TradeDict.TRADE_FLAG_IN -> {
-                        if (it.amount < 0) {
-                            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                                    "商户收入交易金额不能小于0")
-                        }
-                    }
-                    TradeDict.TRADE_FLAG_OUT -> {
-                        if (it.amount > 0) {
-                            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                                    "商户支出交易金额不能小于0")
-                        }
-                    }
-                    else -> throw  TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                            "商户交易方向未设置")
-                }
             }
         }
     }
@@ -298,4 +346,12 @@
     fun wip(transactionService: TransactionService): TTransactionMain {
         return transactionService.wip(this)
     }
+
+    fun cancel(transactionService: TransactionService, originRefno: String): TTransactionMain {
+        TODO("not implement")
+    }
+
+    fun reverse(transactionService: TransactionService, originRefno: String, amount: Double): TTransactionMain {
+        TODO("not implement")
+    }
 }
