diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java
new file mode 100644
index 0000000..747f613
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionDataError extends Error {
+  public TransactionDataError(int errCode, String message) {
+    super(String.format("E-%d : %s", errCode, message));
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java
new file mode 100644
index 0000000..84affc8
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.consume.domain.TPaydtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PaydtlDao extends JpaRepository<TPaydtl, String> {
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
new file mode 100644
index 0000000..1cc2119
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -0,0 +1,35 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class TradeErrorCode {
+
+  public static final int OK = 0;
+
+  /**
+   * 10000 开始表示交易数据错误
+   */
+  public static final int INPUT_DATA_ERROR = 100000;
+  /**
+   * 账户余额不足
+   */
+  public static final int SHORT_BALANCE_ERROR = 100001;
+
+  /**
+   * 个人账户状态异常
+   */
+  public static final int PERSON_STATUS_ERROR = 100002;
+
+  /**
+   * 交易记录不存在
+   */
+  public static final int TRANSACTION_NOT_EXISTS = 100003;
+
+  /**
+   * 交易状态已完成
+   */
+  public static final int TRANSACTION_IS_FINISHED = 100004;
+
+  /**
+   * 交易已冲正
+   */
+  public static final int TRANSACTION_HAS_CANCELED = 100005;
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
new file mode 100644
index 0000000..517a6d6
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -0,0 +1,57 @@
+package com.supwisdom.dlpay.consume
+
+import com.supwisdom.dlpay.consume.domain.TAccount
+import com.supwisdom.dlpay.consume.domain.TPaydtl
+import com.supwisdom.dlpay.consume.domain.TPerson
+import com.supwisdom.dlpay.consume.service.PersonBalancePayService
+
+class PersonBalancePayBuilder private constructor() {
+    companion object {
+        fun newBuilder() = PersonBalancePayBuilder()
+    }
+
+    lateinit var person: TPerson
+    lateinit var account: TAccount
+
+    var transDate = ""
+    var transTime = ""
+    var description = ""
+    val details = mutableListOf<PayDtlBuilder.PayDetail>()
+
+    fun setUserAndAcc(per: TPerson, acc: TAccount) {
+        this.person = per
+        this.account = acc
+    }
+
+    private fun prepareData() {
+
+    }
+
+    private fun preCheckAccount() {
+
+    }
+
+    /**
+     * 单步交易，一次完成交易记账过程
+     * @param service
+     * @param isFinished - true : 完成交易过程,扣除账户余额; false - 完成检查
+     */
+    fun done(service: PersonBalancePayService, isFinished: Boolean): TPaydtl {
+        prepareData()
+        preCheckAccount()
+        return service.process(this)
+    }
+
+    /**
+     * 两步交易，在 paydtl 基础完成确认过程
+     * @param paydtl
+     * @param status - 完成交易状态，见 TradeDict.DTL_STATUS_FAIL
+     */
+    fun done(paydtl: TPaydtl, status: String, service: PersonBalancePayService): TPaydtl {
+        TODO("finish")
+    }
+
+    fun done(refno: String, status: String, service: PersonBalancePayService): TPaydtl {
+        TODO("add process")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
new file mode 100644
index 0000000..217ed47
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
@@ -0,0 +1,45 @@
+package com.supwisdom.dlpay.consume.service.impl
+
+import com.supwisdom.dlpay.consume.PersonBalancePayBuilder
+import com.supwisdom.dlpay.consume.domain.TPaydtl
+import com.supwisdom.dlpay.consume.service.PersonBalancePayService
+import com.supwisdom.dlpay.exception.TransactionDataError
+import com.supwisdom.dlpay.framework.dao.PaydtlDao
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+@Service
+class PersonBalancePayServiceImpl : PersonBalancePayService {
+    @Autowired
+    lateinit var paydtlDao: PaydtlDao
+
+    override fun init(builder: PersonBalancePayBuilder): TPaydtl {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun wip(paydtl: TPaydtl, builder: PersonBalancePayBuilder): TPaydtl {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun wip(refno: String, builder: PersonBalancePayBuilder): TPaydtl {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun finish(paydtl: TPaydtl, status: String, builder: PersonBalancePayBuilder): TPaydtl {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun finish(refno: String, status: String, builder: PersonBalancePayBuilder): TPaydtl {
+        paydtlDao.findById(refno).let {
+            if (it.isPresent) {
+                return finish(it.get(), status, builder)
+            }
+            throw TransactionDataError(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
+        }
+    }
+
+    override fun process(builder: PersonBalancePayBuilder): TPaydtl {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
new file mode 100644
index 0000000..2d559ea
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.consume.service
+
+import com.supwisdom.dlpay.consume.PersonBalancePayBuilder
+import com.supwisdom.dlpay.consume.domain.TPaydtl
+
+interface PersonBalancePayService {
+
+    /**
+     * 一步完成交易
+     */
+    fun process(builder: PersonBalancePayBuilder): TPaydtl
+
+    /**
+     * 两步交易，交易初始化方法，检查交易参数，记录交易流水
+     */
+    fun init(builder: PersonBalancePayBuilder): TPaydtl
+
+    /**
+     * 两步交易，交易过程中判断交易状态，并更新交易状态为 wip
+     */
+    fun wip(paydtl: TPaydtl, builder: PersonBalancePayBuilder): TPaydtl
+
+    fun wip(refno: String, builder: PersonBalancePayBuilder): TPaydtl
+
+    /**
+     * 两步交易，完成交易过程，包括更新交易状态（成功、失败），更新借贷双方余额
+     */
+    fun finish(paydtl: TPaydtl, status: String, builder: PersonBalancePayBuilder): TPaydtl
+
+    fun finish(refno: String, status: String, builder: PersonBalancePayBuilder): TPaydtl
+}
\ No newline at end of file
