#!/usr/bin/perl # Copyright (c) 2020 Freda Bundchen # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. use warnings; use strict; use autodie; # Please change the account numbers below to match the # desired accounts in your accounts.txt. my %accounts = ( CHASE_CREDIT_CARD => '1234', CHASE_PAYMENT_ACCOUNT => '5678', AUTO => '1111', BILLS => '2222', FEES => '3333', FOOD => '4444', GAS => '5555', GIFTS => '6666', GROCERIES => '7777', HEALTH => '8888', HOME => '9999', PERSONAL => '9998', PRO => '9997', SHOP => '9996' ); # This is the end of the user-configurable section. # === SUBROUTINES ===================================================== sub import_chase_credit_card() { my %categories = ( 'Automotive' => 'AUTO', 'Bills & Utilities' => 'BILLS', 'Fees & Adjustments' => 'FEES', 'Food & Drink' => 'FOOD', 'Gas' => 'GAS', 'Gifts & Donations' => 'GIFTS', 'Groceries' => 'GROCERIES', 'Health & Wellness' => 'HEALTH', 'Home' => 'HOME', 'Personal' => 'PERSONAL', 'Professional Services' => 'PRO', 'Shopping' => 'SHOP' ); while () { chomp; my ($trans_date, $post_date, $description, $category, $type, $amount) = split /,/; $trans_date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#; $post_date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#; $description =~ s/#//g; my $booking = $categories{$category} || 'CHASE_PAYMENT_ACCOUNT'; my $contra = $accounts{$booking}; my ($debit, $credit); if ($amount <= 0) { $amount = substr $amount, 1; $credit = $accounts{CHASE_CREDIT_CARD}; $debit = $contra; } else { $debit = $accounts{CHASE_CREDIT_CARD}; $credit = $contra; } print "$post_date $booking $debit $credit $amount " . "$description\n"; } } # === MAIN PROGRAM ===================================================== my $chase_credit_card_header = "Transaction Date,Post Date," . "Description,Category,Type,Amount"; my $firstLine; open CSV, '<', $ARGV[0]; chomp($firstLine = ); if ($firstLine eq $chase_credit_card_header) { import_chase_credit_card; } else { print "Undefined bank header\n"; } close CSV;