La importación CSV falla porque la importación CSV de Quicken, "Mint.com (CSV)", espera un formato particular producido por la aplicación financiera Mint. Podemos solucionarlo reorganizando los datos del archivo CSV exportados por la aplicación Wallet.
Para exportar un extracto de la tarjeta de Apple como CSV, pulse el Apple Wallet en su iPhone, pulse la tarjeta de Apple y pulse el saldo de la tarjeta bajo la imagen de la misma. Desplázate y toca el extracto que deseas exportar, y toca Exportar Transacciones en la parte inferior de la página. Elige el primer elemento, "Valores separados por comas (CSV)". Después de un momento, lo verás, y puedes guardar el archivo de varias maneras usando el icono en la parte superior derecha. Puedes guardarlo como un archivo, puedes enviarlo como correo electrónico, incluso puedes copiarlo a números. Dejaré a tu criterio cómo llevar el archivo a tu Mac.
Una vez que tengas el archivo CSV, tienes que editarlo. Puedes hacerlo manualmente en una hoja de cálculo como Numbers, o incluso en un editor de texto, aunque es más difícil seguir las columnas. Afortunadamente, la edición es lo suficientemente sencilla como para poder automatizarla, pero primero mostraré los pasos necesarios:
- Cambie el nombre de la columna "Fecha de la transacción" por "Fecha".
- Eliminar la columna 2 (era "Fecha de compensación")
- Intercambiar las columnas "Descripción" y "Comerciante"
- Cambiar el nombre de "Descripción" por "Descripción original".
- Cambiar el nombre de "Comerciante" por "Descripción".
- Cambiar el nombre de "Importe (USD)" por "Importe"
- Cambiar el nombre de "Tipo" a "Transacción"
- Intercambiar las columnas "Categoría" e "Importe"
- En la columna de transacciones, cambie todos los "Pagos" por "Créditos" y las "Compras" por "Débitos".
Guarde el archivo como CSV y utilice el comando de importación en el menú Archivo de Quicken para importarlo. Esto añade una cuenta gestionada manualmente en Quicken, que puede ser renombrada. Al importar el siguiente mes, QUicken creará una nueva cuenta. Puede ver esa cuenta, seleccionar todas las transacciones y arrastrarlas a la cuenta de la tarjeta de Apple previamente existente. Puede eliminar la cuenta recién creada.
Esto se puede hacer con este script de Python, que utiliza AppleScript para mostrar un diálogo de archivo:
#!/usr/bin/env python
# coding: UTF8
import csv
import numpy as np
import sys
import os
import subprocess
default_path = os.path.expanduser('~')
def user_action(apath, cmd):
ascript = '''
-- apath - default path for dialogs to open too
-- cmd - "Select", "Save"
on run argv
set userCanceled to false
if (count of argv) = 0 then
tell application "System Events" to display dialog "argv is 0" ¬
giving up after 10
else
set apath to POSIX file (item 1 of argv) as alias
set action to (item 2 of argv) as text
end if
try
if action contains "Select" then
set fpath to POSIX path of (choose file default location apath ¬
without invisibles, multiple selections allowed and ¬
showing package contents)
# return fpath as text
else if action contains "Save" then
set fpath to POSIX path of (choose file name default location apath)
end if
return fpath as text
on error number -128
set userCanceled to true
end try
if userCanceled then
return "Cancel"
else
return fpath
end if
end run
'''
try:
proc = subprocess.check_output(['osascript', '-e', ascript,
apath, cmd])
if 'Cancel' in proc.decode('utf-8'): # User pressed Cancel button
sys.exit('User Canceled')
return proc.decode('utf-8')
except subprocess.CalledProcessError as e:
print('Python error: [%d]\n%s\n' % e.returncode, e.output)
def csvToMint(src, dest):
# coverts apple Pay csv format to Mint csv format, for Quicken
# if dest is empty, the src path is used, appending in " (Mint)"
with open(src, 'rb') as csvfile:
data = np.array(list(csv.reader(csvfile)))
data = data[:,[0,2,3,6,5,4]]
data[:,4] = np.core.defchararray.replace(data[:,4], 'Purchase', 'debit')
data[:,4] = np.core.defchararray.replace(data[:,4], 'Payment', 'credit')
data[0, :] = ['Date','Description','Original Description','Amount','Transaction','Category']
if dest == '':
dest = src
if dest[-4:] == '.csv':
dest = dest[0:-4]
dest = dest + ' (Mint).csv'
with open(dest, 'wb') as csvfile:
writer = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
writer.writerows(data.tolist())
def main():
src = user_action(default_path, "Select").strip()
# could let user choose destination file
#dest = user_action(default_path, "Save").strip()
dest = ''
csvToMint(src, dest)
if __name__ == '__main__':
sys.exit(main())
El script admite un diálogo de apertura y otro de guardado por separado, pero he desactivado el diálogo de guardado, lo que hace que el scriptguarde con el mismo nombre de archivo que abrió, pero con " (Mint)" añadido. Para habilitar el diálogo de guardado en su lugar, elimine el "#" de la línea "#dest..." para descomentar, y elimine o comente la línea "dest = ''" debajo de ella.
Una forma conveniente de utilizar este script es incorporarlo a una aplicación creada con Automator. Así lo he hecho para esta aplicación, cvsToMint . Descárgalo, haz doble clic para extraerlo del archivo zip e inicia la aplicación. Seleccione su archivo csv, y guardará una copia en formato Mint en el mismo directorio.