=================================================================== RCS file: /cvs/pta/pta_import.1,v retrieving revision 1.2 retrieving revision 1.6 diff -u -p -r1.2 -r1.6 --- pta/pta_import.1 2020/11/01 23:07:35 1.2 +++ pta/pta_import.1 2020/11/23 18:46:05 1.6 @@ -1,4 +1,4 @@ -.\" $Id: pta_import.1,v 1.2 2020/11/01 23:07:35 schwarze Exp $ +.\" $Id: pta_import.1,v 1.6 2020/11/23 18:46:05 freda Exp $ .\" .\" Copyright (c) 2020 Freda Bundchen .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: November 1 2020 $ +.Dd $Mdocdate: November 23 2020 $ .Dt PTA_IMPORT 1 .Os .Sh NAME @@ -22,6 +22,7 @@ .Nd print pta journal entries from bank CSV file input .Sh SYNOPSIS .Nm pta_import +.Fl I Ar accountname .Op Ar file .Sh DESCRIPTION The @@ -35,62 +36,240 @@ institution into journal entries used by If the .Ar file argument is omitted, standard input is read instead. +.Pp +.Ar accountname +is exactly one of +.Pp +.Bl -bullet -offset indent -compact +.It +.Cm bbva_usa +.It +.Cm capital_one_credit +.It +.Cm chase_credit +.It +.Cm optum_hsa +.It +.Cm sparkasse_camt +.It +.Cm wellsfargo +.El +.Pp +and corresponds to an existing +.Pa import_ Ns Ar accountname Ns Pa .txt +configuration file in the current directory. +.Ss Configuration file format +Each file of the form +.Pa import_ Ns Ar accountname Ns Pa .txt +in the current directory is a configuration file used to +import transactions from a financial institution. +Like all +.Xr pta 1 +input files, it is an +.Xr ascii 7 +text file using strings of one or more space characters +as the field delimiter and using the hash character +.Pq Sq # +in the first column to mark lines as ignored. +.Pp +Each file contains one line beginning with +.Qq ACCOUNT +and is followed by whitespace and then an account number. +.Pp +Each file contains lines of the form +.Pp +.Ar selector account_number booking_identifier +.Pp +The +.Ar selector +is a string consisting of regular expressions +separated by commas. +Its fields correspond to header fields in the financial +institution's CSV file and is used to classify transactions +that match the search pattern. +The first selector that +matches a transaction wins. +.Pp +The +.Ar account_number +corresponds to an account number in +.Pa ./accounts.txt . +The +.Ar booking_identifier +is defined by the user to classify +the transaction. .Sh FILES -.Bl -tag -width import.txt -.It Pa ./import.txt -file containing account numbers associated with CSV categories +.Bl -tag -width Ds -compact +.It Pa ./import_bbva_usa.txt +.It Pa ./import_capital_one_credit.txt +.It Pa ./import_chase_credit.txt +.It Pa ./import_sparkasse_camt.txt +.It Pa ./import_optum_hsa.txt +.It Pa ./import_wellsfargo.txt .El +.Pp +These files contain the header that the financial institution uses, the +account number from +.Pa ./accounts.txt +used by this account, as well as patterns used to map transactions to +the correct account and booking identifier. .Sh EXIT STATUS .Ex -std .Sh EXAMPLES Add journal entries to a journal file using a CSV file generated by a financial institution: .Pp -.Dl "$ pta_import MyCreditCard1234.csv >> journal.txt" +.Dl "$ pta_import -I chase_credit chasedownload.csv >> journal.txt" +.Ss Account numbers in the configuration file +The line .Pp -Suppose a line in the CSV file looks like +.Dl ACCOUNT 3235 .Pp -.Dl "10/26/2020,10/26/2020,example.com*asldfkj,Shopping,Sale,-17.07" +in the configuration file corresponds to a line such as .Pp -Then -.Nm -prints +.Dl 3235 L Capital One credit card .Pp -.Dl "20201026 SHOP 9996 1234 17.07 example.com*asldfkj" +in +.Pa ./accounts.txt . .Pp -In this example, the user's -.Pa ./import.txt -contains +The description +.Qq Capital One credit card +may vary, but in this example, the account numbers +.Qq 3235 +match, and the account type is +.Qq L +to indicate that it is a liability account. +.Ss Patterns in the configuration file +Suppose .Pp -.Dl "SHOP Shopping 9996" +.Dl ,,,Automotive,,, 1111 AUTO .Pp -to reflect that their expense account for shopping is 9996 in -.Pa ./accounts.txt -and +is a sample entry in the +.Pa ./import_chase_credit.txt +file which uses headers of the form .Pp -.Dl "CVSACCOUNT Current Account 1234" +.Dl Transaction Date,Post Date,Description,Category,Type,Amount .Pp -to reflect that the account they are importing is 1234 in -.Pa ./accounts.txt . +Then this +.Ar selector +ignores the transaction date, post date, description, type, and amount. +It matches the +.Qq Automotive +category and maps transactions to account +.Qq 1111 +defined in +.Pa ./accounts.txt +with the +.Qq Auto +booking identifier. +.Ss A sample credit card purchase +If +.Pa chasedownload.csv +file contains .Pp -Now suppose a line in the CSV file looks like +.Dl "10/26/2020,10/26/2020,example.com*asldfkj,Shopping,Sale,-17.07" .Pp -.Dl "10/27/2020,10/27/2020,Payment Thank You - Web,,Payment,1653.42" +and +.Pa ./import_chase_credit.txt +contains +.Bd -literal -offset Ds +ACCOUNT 3234 +,,,Shopping,,, 9996 SHOP +.Ed .Pp -Then +and +.Pa ./accounts.txt +contains +.Bd -literal -offset Ds +3234 L Chase credit card +9996 X shopping +.Ed +.Pp +then the +.Qq Shopping +category defined by Chase is mapped to the user's +.Qq SHOP +booking identifier, the user's account for shopping +expenses is defined as +.Qq 9996 +in their +.Pa ./accounts.txt , +the user's account for the credit card is 3234 in their +.Pa ./accounts.txt , +and .Nm prints .Pp -.Dl "20201027 DEFAULTCONTRA 1234 5678 1653.2 Payment Thank You - Web" +.Dl "20201026 SHOP 9996 3234 17.07 example.com*asldfkj" +.Ss A complete example +Suppose +.Pa ./accounts.txt +is given by +.Bd -literal +1700 A My Bank +3234 L My Chase Credit Card +5102 X Physician expenses +5103 X Dental expenses +5203 X Shopping +.Ed .Pp -In this example, the user's -.Pa ./import.txt -has +and +.Pa chasedownload.csv +is given by +.Bd -literal +Transaction Date,Post Date,Description,Category,Type,Amount,Memo +11/06/2020,11/09/2020,Dr. Joseph Schmoe,Health & Wellness,Sale,-100.00, +11/06/2020,11/09/2020,Dr. Sally Sue,Health & Wellness,Sale,-183.00, +11/08/2020,11/08/2020,example.com,Shopping,Sale,-53.83, +11/04/2020,11/04/2020,Payment Thank You - Web,,Payment,75.43, +.Ed .Pp -.Dl "DEFAULTCONTRA Contra 5678" +and +.Pa ./import_chase_credit.txt +is given by +.Bd -literal +# Chase credit card header is +# Transaction Date,Post Date,Description,Category,Type,Amount +# The format of this file is +# selector account_number booking_identifier +# selector is a comma-separated list of regular expressions which +# matches corresponding fields in the CSV file +ACCOUNT 3234 +,,,Automotive,,, 1111 AUTO +,,,Bills & Utilities,,, 2222 BILLS +,,,Fees & Adjustments,,, 3333 FEES +,,,Food & Drink,,, 4444 FOOD +,,,Gas,,, 5555 GAS +,,,Gifts & Donations,,, 6666 GIFTS +,,,Groceries,,, 7777 GROCERIES +,,Dr. Sally Sue,,,, 5103 DENTAL +,,,Health & Wellness,,, 5102 PHYSICIAN +,,,Home,,, 9999 HOME +,,,Personal,,, 9998 PERSONAL +,,,Professional Services,,, 9997 PRO +,,,Shopping,,, 5203 SHOP +,,,,Payment,, 1700 PAY +.Ed .Pp -to reflect that the default account used to make payments for the -account we are importing is 5678. +Then +.Pp +.Dl pta_import -I chase_credit chasedownload.csv +.Pp +outputs +.Bd -literal +20201109 PHYSICIAN 5102 3234 100.00 Dr. Joseph Schmoe +20201109 DENTAL 5103 3234 183.00 Dr. Sally Sue +20201108 SHOP 5203 3234 53.83 example.com +20201104 PAY 3234 1700 75.43 Payment Thank You - Web +.Ed +.Pp +Note that the selector for Dr\&. Sally Sue +in the example configuration file comes before the +Health & Wellness selector. +Since the first match wins, transactions for Dr\&. Sally Sue +can be classified with the DENTAL booking identifier, +even though the bank's CSV file classifies +these transactions as Health & Wellness. .Sh SEE ALSO .Xr pta-accounts 5 , .Xr pta-journal 5 , @@ -101,7 +280,23 @@ Currently, has the following limitations: .Bl -dash .It -The CVS file's first line must contain a header. +Pattern recognition in the +.Pa import_accountname.txt +files is under continued development. .It -Only CSV files generated by Chase Bank are supported at this time. +Only CSV files for these account types are supported: +.Bl -bullet -offset indent -compact +.It +.Cm BBVA USA bank accounts +.It +.Cm Capital One credit cards +.It +.Cm Chase credit cards +.It +.Cm Optum HSA bank accounts +.It +.Cm Sparkasse bank accounts +.It +.Cm Wells Fargo bank accounts +.El .El