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 d0572f2..01534ec 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.api.domain;
 
+import com.supwisdom.dlpay.framework.util.Subject;
+
 import javax.persistence.*;
 
 import java.sql.Timestamp;
@@ -252,7 +254,7 @@
   }
 
   public Double sumAmountByAccno(String accno, String subjno,
-                                 int balanceFlag, String debitOrCredit) {
+                                 String debitOrCredit) {
     Double debitSum = 0.0;
     Double creditSum = 0.0;
     for (TDebitCreditDtl dtl : getDetails()) {
@@ -263,6 +265,14 @@
         creditSum += dtl.getAmount();
       }
     }
+    int balanceFlag = 2;
+    if (Subject.SUBJNO_MACHANT_INCOME.equals(subjno)) {
+      balanceFlag = 2;
+    } else if (Subject.SUBJNO_PERSONAL_DEPOSIT.equals(subjno)) {
+      balanceFlag = 2;
+    } else if (subjno.startsWith("1")) {
+      balanceFlag = 1;
+    }
     if ("debit".equals(debitOrCredit)) {
       if (balanceFlag == 2) {
         return -debitSum;
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt
index c65bc41..6e6ade4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/account_service_impl.kt
@@ -126,7 +126,7 @@
             return
         }
         val amount = transactionMainDao.findByRefno(refno)?.sumAmountByAccno(shopdtl.shopaccno,
-                Subject.SUBJNO_MACHANT_INCOME, 2, "both")
+                Subject.SUBJNO_MACHANT_INCOME, "both")
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
                         "交易参考号<$refno>不存在")
         recalcShopBalance(shopdtl, amount, overdraft)
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 a59a3f1..dccbf81 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
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl
 
 import com.supwisdom.dlpay.api.TransactionBuilder
-import com.supwisdom.dlpay.api.dao.PersondtlDao
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.*
 import com.supwisdom.dlpay.api.repositories.AccountService
@@ -16,18 +15,11 @@
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 import java.sql.SQLException
-import java.sql.Timestamp
 import kotlin.math.absoluteValue
 
 
 @Service
 class TransactionServiceImpl : TransactionService {
-
-    companion object {
-        const val PERSON_BALANCE_FLAG = 2
-        const val SHOP_BALANCE_FLAG = 2
-    }
-
     @Autowired
     private lateinit var transactionMainDao: TransactionMainDao
 
@@ -172,7 +164,7 @@
                 val dc = getDebitOrCredit(builder.person().tradeFlag)
                 transaction.sumAmountByAccno(builder.person().person.accno,
                         Subject.SUBJNO_PERSONAL_DEPOSIT,
-                        PERSON_BALANCE_FLAG, dc).also {
+                        dc).also {
                     if (transaction.personDtl.amount != it) {
                         throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
                                 "输入金额错误，个人余额不符<${transaction.personDtl.amount}>")
@@ -183,8 +175,7 @@
             if (builder.hasShop()) {
                 val dc = getDebitOrCredit(builder.shop().tradeFlag)
                 transaction.sumAmountByAccno(builder.shop().shopacc.shopaccno,
-                        Subject.SUBJNO_MACHANT_INCOME,
-                        SHOP_BALANCE_FLAG, dc).also {
+                        Subject.SUBJNO_MACHANT_INCOME, dc).also {
                     if (transaction.shopDtl.amount != it) {
                         throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
                                 "输入金额错误，商户余额不符<${transaction.shopDtl.amount}>")
@@ -194,9 +185,7 @@
 
             if (builder.hasSubject()) {
                 transaction.sumAmountByAccno(builder.subject().subject.subjno,
-                        builder.subject().subject.subjno,
-                        builder.subject().subject.balflag,
-                        "both").also {
+                        builder.subject().subject.subjno, "both").also {
                     if (transaction.subjectDtl.amount != it) {
                         throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
                                 "输入金额错误，科目余额不符<${transaction.subjectDtl.amount}>")
@@ -362,7 +351,7 @@
             // update account balance
             val amount = transaction.sumAmountByAccno(
                     transaction.personDtl.accountNo, Subject.SUBJNO_PERSONAL_DEPOSIT,
-                    PERSON_BALANCE_FLAG, "both")
+                    "both")
             if (amount.absoluteValue.compareTo(0.0) != 0) {
                 transaction.personDtl?.let {
                     transaction.personDtl.accdate = transaction.accdate
