PayPal le permite descargar todas las transacciones de su cuenta, desde que se abrió la cuenta, a un archivo CSV para que lo procese como desee.
Deseo determinar el actual saldo de la cuenta.
He importado todo mi PayPal a una única tabla de base de datos SQL para poder ejecutar consultas en ella para realizar cálculos y explorar los datos. De todos modos, hay demasiados datos para Excel.
El esquema de mi tabla de base de datos contiene todos los campos del archivo CSV, pero estos campos en particular destacan:
DateTime,
Type,
Status,
Gross,
Fee,
Net,
TransactionId,
ReferenceTransactionId
Lamentablemente, PayPal no proporciona ningún documento de especificación que explique el significado de ciertos valores (los CSV de transacciones son diferentes a las IPN de PayPal).
Mi primera observación con los datos es que PayPal reescribe la historia . Uno supondría que PayPal funcionaría como un banco en el sentido de que las transacciones son inmutables una vez escritas en el registro: por ejemplo, si se añaden 50 dólares a su cuenta bancaria pero unos días después la transacción se anula/reembolsa, uno esperaría ver:
Date Amount Description
2016-01-04 50.00 $50 deposit
2016-01-07 -50.00 $50 deposit refunded
Si haces un SUM(Amount)
obtendrá 0.00
- porque estas dos transacciones resultaron en un cero neto.
Sin embargo, con PayPal la experiencia es esta:
-
Paso 1: Descargar el CSV de las transacciones de enero
-
Paso 2: El archivo CSV contendrá lo siguiente (parafraseado):
Date Amount Description Status 2016-01-04 50.00 $50 deposit Completed
-
Paso 3: Volver a descargar el CSV de las transacciones de enero unos días después
-
Paso 4: Observe que el archivo CSV seguirá conteniendo sólo una fila, pero con el siguiente aspecto:
Date Amount Description Status 2016-01-04 50.00 $50 deposit Canceled
...lo que significa que siempre hay que volver a descargar el historial que se remonta al menos a un año atrás para captar cualquier transacción reescrita y volver a importarla a la tabla de la base de datos.
Se puede argumentar que no es un problema - solo hay que realizar un SUM
donde Status <> 'Canceled'
- y probablemente sea la solución correcta, excepto...
-
He identificado más de 47 combinaciones diferentes de
Type
yStatus
valores, lo que hace más difícil determinar cuáles de ellos deben incluirse en elSUM
o no:+-----------------------------------------+-----------+ | 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 reescribirá algunos transacciones, pero otras veces añadirán una transacción relacionada a su historial (apuntando a la transacción original en el
ReferenceTxnId
), y a veces hacen ambas cosas. -
Y el
ReferenceTxnId
se utiliza para representar una jerarquía de transacciones de varios niveles, es decir, la transacción de compra1
podría tener una transacción de reembolso relacionada2
y la transacción2
podría tener una operación de contrareembolso3
esa referencia2
y no1
).- Tuve que escribir una consulta CTE recursiva para recuperar el "árbol de transacciones" de una determinada transacción root.
Otras curiosidades que he observado son:
- PayPal utilizando el
Name
columna (destinada al nombre del cliente) a a veces almacenan la información del tipo de transacción, y elFrom Email
(la dirección de correo electrónico del cliente) para contener las propias direcciones de correo electrónico de PayPal, comoriskmanagement@x.com
. - Uso inexplicable y aparentemente incoherente de:
- "
Canceled
", frente a "Refunded
", frente a "Reversed
", frente a "Removed
" - "
Completed
", frente a "Cleared
", frente a "Placed
"
- "
- Y cuál es la diferencia entre:
Type: Web Accept Payment Received, Status: Refunded
- ...y...
Type: Refund, Status: Completed
...¿por qué PayPal es tan obtuso?
Este es un ejemplo real de una serie de transacciones que importé. Mi pregunta para usted, el lector, es que asumiendo que estos son los sólo transacciones en una cuenta, ¿cuál es el saldo final de la cuenta 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
Dependiendo de cómo lo interpretes, podría ser:
- 1.05
17.90
-20.00
...¡y yo mismo no tengo ni idea de cuál es la respuesta correcta!