貝寶

用我下載的 PayPal 交易歷史計算餘額

  • September 4, 2016

PayPal 可讓您將賬戶中的每筆交易(自賬戶開通以來)下載到 CSV 文件中,供您根據需要進行處理。

我想確定實際賬戶餘額。

我已將整個 PayPal 導入到單個 SQL 數據庫表中,因此我可以對其執行查詢以執行計算和探索數據。無論如何,Excel 的數據太多了。

我的數據庫表的架構包含 CSV 文件中的所有欄位,但這些欄位特別突出:

DateTime,
Type,
Status,
Gross,
Fee,
Net,
TransactionId,
ReferenceTransactionId

不幸的是,PayPal 沒有提供任何說明某些值的重要性的規範文件(交易 CSV 與 PayPal 的 IPN 不同)。

我對數據的第一個觀察是PayPal 重寫了歷史!. 有人會假設 PayPal 會像銀行一樣運作,因為交易一旦寫入日誌就不可更改:例如,如果向您的銀行賬戶添加了 50 美元,但幾天后交易被撤銷/退款,您會期望看到:

Date         Amount     Description
2016-01-04    50.00     $50 deposit
2016-01-07   -50.00     $50 deposit refunded

如果你這樣做,SUM(Amount)你會得到0.00- 因為這兩個交易導致淨零。

然而,使用 PayPal 的體驗是這樣的:

  1. 第 1 步:下載 1 月份的交易 CSV
  2. 第 2 步:CSV 文件將包含以下內容(釋義):
Date         Amount     Description    Status
2016-01-04   50.00      $50 deposit    Completed
  1. 第 3 步:幾天后重新下載 1 月份的交易 CSV
  2. 第 4 步:觀察 CSV 文件仍將只包含 1 行,但看起來像這樣:
Date         Amount     Description    Status
2016-01-04   50.00      $50 deposit    Canceled

…這意味著您需要始終重新下載至少一年前的歷史記錄,以擷取任何重寫的事務並將它們重新導入您的數據庫表中。

您可以爭辯說這不是問題 - 只需執行SUMwhere Status <> 'Canceled'- 這可能是正確的解決方案,除了……

  • 我已經確定了超過 47 種不同的TypeStatus值的獨特組合,這使得確定哪些應該包含在SUM或不包含在變得更加困難:
+-----------------------------------------+-----------+
| Type                                    | Status    |
+-----------------------------------------+-----------+
| Add Funds from a Bank Account           | Completed |
| Authorization                           | Completed |
| Cancelled Fee                           | Completed |
| Chargeback Reimbursement                | Completed |
| Chargeback Settlement                   | Completed |
| Donation Received                       | Canceled  |
| Donation Received                       | Cleared   |
| Donation Received                       | Completed |
| Donation Received                       | Refunded  |
| Donation Received                       | Reversed  |
| Donation Received                       | Uncleared |
| Donation Sent                           | Completed |
| eCheck Sent                             | Cleared   |
| Express Checkout Payment Sent           | Completed |
| Mobile Payment Received                 | Completed |
| Payment Received                        | Completed |
| Payment Review                          | Cleared   |
| Payment Review                          | Placed    |
| Payment Sent                            | Completed |
| Payment Sent                            | Refunded  |
| PayPal card confirmation refund         | Completed |
| Recurring Payment Received              | Completed |
| Recurring Payment Received              | Refunded  |
| Refund                                  | Completed |
| Request Received                        | Canceled  |
| Request Received                        | Pending   |
| Reversal                                | Completed |
| Shopping Cart Payment Sent              | Completed |
| Temporary Hold                          | Placed    |
| Temporary Hold                          | Removed   |
| Update to Add Funds from a Bank Account | Completed |
| Update to eCheck Received               | Canceled  |
| Update to eCheck Received               | Cleared   |
| Update to eCheck Received               | Updated   |
| Update to eCheck Sent                   | Cleared   |
| Update to Reversal                      | Canceled  |
| Web Accept Payment Received             | Canceled  |
| Web Accept Payment Received             | Cleared   |
| Web Accept Payment Received             | Completed |
| Web Accept Payment Received             | Held      |
| Web Accept Payment Received             | Refunded  |
| Web Accept Payment Received             | Reversed  |
| Web Accept Payment Received             | Uncleared |
| Web Accept Payment Sent                 | Completed |
| Withdraw Funds to a Bank Account        | Completed |
| Withdraw Funds to a Bank Account        | Pending   |
| Withdraw Funds to Bank Account          | Completed |
+-----------------------------------------+-----------+
  • PayPal 會重寫一些交易,但有時他們會將相關交易附加到您的歷史記錄中(指向 中的原始交易ReferenceTxnId) - 有時他們會同時執行這兩項操作。
  • 並且該ReferenceTxnId欄位用於表示交易的多層層次結構——即購買交易1可以有相關的退款交易2,而交易可以有引用和不引用2的反退款交易)。

3``2``1

  • 我必須編寫一個遞歸 CTE 查詢來檢索給定根事務的“事務樹”。

我觀察到的其他好奇心包括:

  • PayPal有時Name使用列(用於客戶姓名)來儲存交易類型資訊,並使用列(客戶的電子郵件地址)來包含 PayPal 自己的電子郵件地址,例如.From Email``riskmanagement@x.com

  • 無法解釋且明顯不一致的使用:

    • Canceled”,對“ Refunded”,對“ Reversed”,對“ Removed
    • Completed”,對“ Cleared”,對“ Placed
  • 和有什麼區別:

    • Type: Web Accept Payment Received, Status: Refunded
    • …和…
    • Type: Refund, Status: Completed

…為什麼貝寶這麼遲鈍?

這是我導入的一系列交易的真實範例。讀者,我的問題是,假設這些是賬戶中唯一的交易,那麼最終的 PayPal 賬戶餘額是多少?

DateTimeUtc           Name                         Type                            Status       Gross     Fee      Net      FromEmail              TxnId     ReferenceTxnId
------------------    -------------------------    ----------------------------    ----------   -----    -----    -----     --------------------   ----      --------------
2014-06-15 17:47:30   (Customer name)              Web Accept Payment Received     Completed    20.00     -1.05    18.95    customer@hotmail.com   1111          
2014-07-02 03:41:22   (Customer name)              Temporary Hold                  Removed     -20.00      1.05   -18.95    customer@hotmail.com   2222      1111
2014-07-16 21:00:58   Reversal                     Update to Reversal              Canceled     18.95      0.00    18.95    customer@hotmail.com   3333      2222
2014-07-16 21:00:59   Chargeback Settlement        Chargeback Settlement           Completed   -20.00    -20.00   -40.00    riskmanagement@x.com   4444      1111
2014-10-01 13:32:55   Chargeback Reimbursement     Chargeback Reimbursement        Completed    20.00      0.00    20.00    riskmanagement@x.com   5555      1111

根據您的解釋,它可能是:

  • - 1.05
  • 17.90
  • -20.00

…我自己也不知道正確的答案是什麼!

我也遇到過這種情況,幾乎每個月下載的交易都與報表餘額不匹配。以我的經驗,這不一定是因為交易後來發生了變化;由於以下原因,我看到了差異:

  1. 處理退款時,固定費用部分不可退還,這不包括在下載的交易中。在您的 20 美元退款範例中,1.05 美元中​​的 0.05 美元是固定費用部分,不會退還給您,因此您的真實餘額將減少 5 美分。(我不知道為什麼真實金額沒有反映在下載的交易中。但在明細表上是正確的。)
  2. 當客戶與其信用卡提供商提出爭議時,PayPal 將與您聯繫並告知您,並且可以選擇批准退款。如果您批准,PayPal 將退還這筆錢並收取您 20 美元的費用,該費用不會顯示在您下載的交易中。(至少它發生的一次對我來說不是。)順便說一句,如果在過去 60 天內向您支付了 CC 爭議的退款,而不是批准退款,您應該能夠正常退還交易方式並避免 20 美元的費用。(為什麼人們會與他們的 CC 公司爭論收費,而不是僅僅通過電子郵件發送客戶支持並首先要求退款,這超出了我的理解……)

那麼該怎麼辦呢?到目前為止,我每個月都在手動核對明細表。對我來說,退款很少見,因此很容易發現差異。

旁注:我看到您正在使用小額支​​付費用表。由於您沒有預設設置,我相信您知道 PayPal 提供 2 種不同的時間表:

  1. 0.30 美元 + 2.9%(正常)
  2. 0.05 美元 + 5%(小額支付)

一些快速代數告訴我們,如果您的平均售價超過 11.90 美元,那麼您最好使用選項 1。即使您範例中的所有費用都是 20 美元或更多,您顯然也在使用選項 2。如果您的範例數字表明您的平均銷售額,您可能可以通過更改選項 1 來節省一些錢。請注意,我說可能而不是肯定的原因是因為當您獲得退款時,您無法獲得固定費用。因此,現在您每次退款僅損失 5 美分,而如果您切換,每次退款將損失 30 美分。您必須計算平均銷售價格的數字,並考慮您的退款率,才能知道哪個最適合您。

在這個問題上付出了很大的努力。

我只能建議:如果貝寶不提供映射表(類型、狀態、信用/借記),您將不得不自己建構它。

我會這樣處理:您的 SQL 映射表包含所有已知組合的貸記/借記條目,並且貸記/借記條目將是所有的 -1。然後,當您獲得交易列表時,您必須向使用者顯示所有可能的結果,然後使用者將勾選正確的結果(將其與餘額進行比較)。如果它是唯一的,您將儲存貸記/借記條目。這樣,隨著時間的推移,您將了解可能的組合。

它是第 n 個問題,所以可能先從少量事務開始。我希望你能很快建立起來。

這將是一個有趣的實驗……

引用自:https://money.stackexchange.com/questions/65917