diff --git a/api/purchase.go b/api/purchase.go
index 9c8864f97bd51b0cc80b06cfad430954a1785127..270bc3badc3712cf68df0355bd62e35040f4a2ab 100644
--- a/api/purchase.go
+++ b/api/purchase.go
@@ -40,24 +40,9 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
 		purchase[i].Price = product.Price
 	}
 
-	var member Member
-	err = a.db.Where("num = ?", num).Find(&member).Error
-	if err != nil {
-		log.Printf("Can't find member %d: %v", num, err)
-		w.WriteHeader(http.StatusNotAcceptable)
-		return
-	}
-	if member.Balance < total {
-		log.Printf("Member %d don't have enough money (%d-%d)", num, member.Balance, total)
-		w.WriteHeader(http.StatusBadRequest)
-		return
-	}
-	err = a.db.Model(&Member{}).
-		Where("num = ?", num).
-		Update("balance", gorm.Expr("balance - ?", total)).Error
-	if err != nil {
-		log.Printf("Can't update update member balance %d-%d: %v", num, total, err)
-		w.WriteHeader(http.StatusNotAcceptable)
+	httpStatus := a.substractMemberBalance(num, total)
+	if httpStatus != http.StatusOK {
+		w.WriteHeader(httpStatus)
 		return
 	}
 
@@ -66,7 +51,7 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
 		Date:      time.Now(),
 		Purchase:  purchase,
 		Type:      "purchase",
-		Total:     total,
+		Total:     -total,
 	}
 	err = a.db.Create(&transaction).Error
 	if err != nil {
@@ -93,3 +78,24 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
 	}
 
 }
+
+func (a *api) substractMemberBalance(num int, total int) int {
+	var member Member
+	err := a.db.Where("num = ?", num).Find(&member).Error
+	if err != nil {
+		log.Printf("Can't find member %d: %v", num, err)
+		return http.StatusNotAcceptable
+	}
+	if member.Balance < total {
+		log.Printf("Member %d don't have enough money (%d-%d)", num, member.Balance, total)
+		return http.StatusBadRequest
+	}
+	err = a.db.Model(&Member{}).
+		Where("num = ?", num).
+		Update("balance", gorm.Expr("balance - ?", total)).Error
+	if err != nil {
+		log.Printf("Can't update update member balance %d-%d: %v", num, total, err)
+		return http.StatusNotAcceptable
+	}
+	return http.StatusOK
+}
diff --git a/api/purchase_test.go b/api/purchase_test.go
index e176e190e9e7e9135c25e67f23590a1ed3b45f0f..3e979cb8c5183c6ee92cd21f0d47f512a57e3dc9 100644
--- a/api/purchase_test.go
+++ b/api/purchase_test.go
@@ -30,7 +30,7 @@ func TestPurchaseAddListMine(t *testing.T) {
 	if len(transactions) != 1 {
 		t.Fatal("Wrong number of transactions", len(transactions), transactions)
 	}
-	if transactions[0].Total != testProduct.Price*products[0].Ammount {
+	if transactions[0].Total != -testProduct.Price*products[0].Ammount {
 		t.Error("Wrong total:", transactions[0].Total)
 	}
 	if len(transactions[0].Purchase) != 1 {
diff --git a/src/TransactionList.js b/src/TransactionList.js
index c52de0e5af50a86ee6860a81af3355dc4fbbdf4e..a5e16defcec88e5ad78e018e88cee50656ea55e1 100644
--- a/src/TransactionList.js
+++ b/src/TransactionList.js
@@ -16,7 +16,7 @@ const columns = [
             };
     }},
     {dataField: 'date', text: 'Fecha', formatter: printDate},
-    {dataField: 'total', text: 'Total', formatter: cell => printMoney(cell)+" €"},
+    {dataField: 'total', text: 'Cantidad', formatter: cell => printMoney(cell)+" €"},
 ]
 
 function TransactionList() {