Skip to content

Instantly share code, notes, and snippets.

@elandesign
Created November 25, 2015 10:37
Show Gist options
  • Save elandesign/13bf842f349dd9c32187 to your computer and use it in GitHub Desktop.
Save elandesign/13bf842f349dd9c32187 to your computer and use it in GitHub Desktop.
Script to generate a dummy ofx bank statement
#!/usr/bin/env ruby
# == Synopsis
# Generate a dummy OFX bank transactions file
# Depends on nokogiri, faker and pickup gems
# OFX format reverse engineered from my Nationwide bank download. YMMV.
#
# == Usage
# ofx-generator [options] > file.ofx
#
# == Options
# -c, --count The number of dummy transactions to generate (average 1 per day)
# -f, --from Dated from (3 months ago)
# -t, --to Dated to (yesterday)
# --currency The bank currency (GBP)
# --opening-balance The opening balance (zero)
# --bank-id The BANKID (0)
# --account-id The ACCTID (****1234)
# --account-type The ACCTTYPE (CHECKING)
#
# == Author
# Paul Smith
#
# == Copyright
# Copyright (c) 2007 Paul Smith. Licensed under the MIT License:
# http://www.opensource.org/licenses/mit-license.php
require 'optparse'
require 'ostruct'
require 'date'
require 'bigdecimal'
require 'faker'
require 'nokogiri'
require 'pickup'
class OfxGenerator
attr_reader :options
DATE_FORMAT = "%Y%m%d%H%M%S.%L[#{Time.now.utc_offset}]"
NUMBER_FORMAT = "%.2f"
TRANSACTION_TYPES = {
"CREDIT" => { :weight => 300, :range => BigDecimal('0.01')..BigDecimal('10000.00') },
"POS" => { :weight => 1000, :range => BigDecimal('-1000.00')..BigDecimal('-0.01') },
"XFER" => { :weight => 100, :range => BigDecimal('-1000.00')..BigDecimal('1000.00') },
"FEE" => { :weight => 10, :range => BigDecimal('-40.00')..BigDecimal('-0.01'), :name => "Bank Fees" },
"DIRECTDEBIT" => { :weight => 10, :range => BigDecimal('-200.00')..BigDecimal('-10.00') }
}
TRANSACTIONS = Pickup.new(TRANSACTION_TYPES.inject({}) { |weights, (type, options)| weights[type] = options[:weight]; weights })
def initialize(arguments)
@arguments = arguments
@options = OpenStruct.new
@options.verbose = false
@options.from = Date.today << 3
@options.to = Date.today - 1
@options.count = nil
@options.currency = 'GBP'
@options.bankid = 0
@options.acctid = "****1234"
@options.accttype = "CHECKING"
@options.opening_balance = BigDecimal('0.00')
end
# Parse options, check arguments, then process the command
def run
if parsed_options?
process_command
else
output_options
end
end
protected
def parsed_options?
opts = OptionParser.new
opts.on('-V', '--verbose') { @options.verbose = true }
opts.on('-c', '--count [NUMBER]') { |count| @options.count = count.to_i }
opts.on('-f', '--from [DATE]') { |date| @options.from = Date.parse(date) }
opts.on('-t', '--to [DATE]') { |date| @options.to = Date.parse(date) }
opts.on('--currency [CURRENCY]') { |currency| @options.currency = currency }
opts.on('--opening-balance [BAL]') { |balance| @options.opening_balance = BigDecimal(balance) }
opts.on('--bank-id [ID]') { |id| @options.bankid = id }
opts.on('--account-id [ID]') { |id| @options.acctid = id }
opts.on('--account-type [TYPE]') { |type| @options.accttype = type }
opts.parse!(@arguments) rescue return false
@options.count ||= (@options.to - @options.from).to_i
@date_range = @options.from..@options.to
true
end
def output_options
puts "Options:\n"
@options.marshal_dump.each do |name, val|
puts " #{name} = #{val}"
end
end
def process_command
transactions = @options.count.times.collect { build_transaction }.sort { |a, b| a[:date] <=> b[:date] }
builder = Nokogiri::XML::Builder.new(:encoding => "utf-8") do |xml|
xml << '<?OFX OFXHEADER="200" VERSION="203" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?>'
xml.OFX do
xml.SIGNONMSGSRSV1 do
xml.SONRS do
xml.STATUS do
xml.CODE 0
xml.SEVERITY 'INFO'
end
xml.DTSERVER Time.now.strftime(DATE_FORMAT)
xml.LANGUAGE 'ENG'
end
end
xml.BANKMSGSRSV1 do
xml.STMTTRNRS do
xml.TRNUID 'A'
xml.STATUS do
xml.CODE 0
xml.SEVERITY 'INFO'
end
xml.STMTRS do
xml.CURDEF @options.currency
xml.BANKACCTFROM do
xml.BANKID @options.bankid
xml.ACCTID @options.acctid
xml.ACCTTYPE @options.accttype
end
end
xml.BANKTRANLIST do
xml.DTSTART @options.from.strftime(DATE_FORMAT)
xml.DTEND @options.to.strftime(DATE_FORMAT)
transactions.each do |tx|
xml.STMTTRN do
xml.TRNTYPE tx[:type]
xml.DTPOSTED tx[:date].strftime(DATE_FORMAT)
xml.TRNAMT NUMBER_FORMAT % tx[:value]
xml.FITID fitid(tx)
xml.NAME tx[:name]
end
end
end
xml.LEDGERBAL do
xml.BALAMT NUMBER_FORMAT % (@options.opening_balance + transactions.map { |tx| tx[:value] }.reduce(:+))
xml.DTASOF @options.to.strftime(DATE_FORMAT)
end
end
end
end
end
puts builder.to_xml
end
def build_transaction
type = TRANSACTIONS.pick
options = TRANSACTION_TYPES[type]
{
:type => type,
:value => random_value(options[:range]),
:date => rand(@date_range),
:name => options[:name] || Faker::Company.name
}
end
def fitid(tx)
"00#{tx[:type]}#{tx[:date].strftime('%Y%m%d')}1200000000#{(tx[:value] * 100).to_i}#{tx[:name].gsub(' ', '')}"
end
def random_value(range)
baseline = range.min
integer_rage = (range.max - range.min) * 100
pennies = rand(integer_rage)
baseline + (BigDecimal(pennies) / BigDecimal('100'))
end
end
app = OfxGenerator.new(ARGV)
app.run
<?xml version="1.0" encoding="utf-8"?>
<?OFX OFXHEADER="200" VERSION="203" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?>
<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<DTSERVER>20151125102949.223[0]</DTSERVER>
<LANGUAGE>ENG</LANGUAGE>
</SONRS>
</SIGNONMSGSRSV1>
<BANKMSGSRSV1>
<STMTTRNRS>
<TRNUID>A</TRNUID>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<STMTRS>
<CURDEF>GBP</CURDEF>
<BANKACCTFROM>
<BANKID>0</BANKID>
<ACCTID>****1234</ACCTID>
<ACCTTYPE>CHECKING</ACCTTYPE>
</BANKACCTFROM>
</STMTRS>
<BANKTRANLIST>
<DTSTART>20150825000000.000[0]</DTSTART>
<DTEND>20151124000000.000[0]</DTEND>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150825000000.000[0]</DTPOSTED>
<TRNAMT>-496.68</TRNAMT>
<FITID>00POS201508251200000000-49668WunschGroup</FITID>
<NAME>Wunsch Group</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150826000000.000[0]</DTPOSTED>
<TRNAMT>-410.15</TRNAMT>
<FITID>00POS201508261200000000-41015Auer-Daugherty</FITID>
<NAME>Auer-Daugherty</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150826000000.000[0]</DTPOSTED>
<TRNAMT>-445.30</TRNAMT>
<FITID>00POS201508261200000000-44530HarveyInc</FITID>
<NAME>Harvey Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20150831000000.000[0]</DTPOSTED>
<TRNAMT>-583.22</TRNAMT>
<FITID>00XFER201508311200000000-58322BartonGroup</FITID>
<NAME>Barton Group</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150831000000.000[0]</DTPOSTED>
<TRNAMT>-538.91</TRNAMT>
<FITID>00POS201508311200000000-53891Towne-Collier</FITID>
<NAME>Towne-Collier</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20150901000000.000[0]</DTPOSTED>
<TRNAMT>32.17</TRNAMT>
<FITID>00CREDIT2015090112000000003217Quigley,KundeandGibson</FITID>
<NAME>Quigley, Kunde and Gibson</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150903000000.000[0]</DTPOSTED>
<TRNAMT>-988.53</TRNAMT>
<FITID>00POS201509031200000000-98853PurdyLLC</FITID>
<NAME>Purdy LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150904000000.000[0]</DTPOSTED>
<TRNAMT>-918.21</TRNAMT>
<FITID>00POS201509041200000000-91821BeattyandSons</FITID>
<NAME>Beatty and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20150905000000.000[0]</DTPOSTED>
<TRNAMT>5279.30</TRNAMT>
<FITID>00CREDIT201509051200000000527930KlockoInc</FITID>
<NAME>Klocko Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150906000000.000[0]</DTPOSTED>
<TRNAMT>-510.11</TRNAMT>
<FITID>00POS201509061200000000-51011Reichel,ArmstrongandFerry</FITID>
<NAME>Reichel, Armstrong and Ferry</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150906000000.000[0]</DTPOSTED>
<TRNAMT>-88.45</TRNAMT>
<FITID>00POS201509061200000000-8845Pacocha-Rempel</FITID>
<NAME>Pacocha-Rempel</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20150907000000.000[0]</DTPOSTED>
<TRNAMT>-356.19</TRNAMT>
<FITID>00XFER201509071200000000-35619Conroy-Ledner</FITID>
<NAME>Conroy-Ledner</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150907000000.000[0]</DTPOSTED>
<TRNAMT>-876.03</TRNAMT>
<FITID>00POS201509071200000000-87603Altenwerth-Kunze</FITID>
<NAME>Altenwerth-Kunze</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150908000000.000[0]</DTPOSTED>
<TRNAMT>-910.35</TRNAMT>
<FITID>00POS201509081200000000-91035Wilkinson,RosenbaumandAbernathy</FITID>
<NAME>Wilkinson, Rosenbaum and Abernathy</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150909000000.000[0]</DTPOSTED>
<TRNAMT>-282.08</TRNAMT>
<FITID>00POS201509091200000000-28208Moen-Murphy</FITID>
<NAME>Moen-Murphy</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150911000000.000[0]</DTPOSTED>
<TRNAMT>-352.41</TRNAMT>
<FITID>00POS201509111200000000-35241SauerLLC</FITID>
<NAME>Sauer LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150913000000.000[0]</DTPOSTED>
<TRNAMT>-227.82</TRNAMT>
<FITID>00POS201509131200000000-22782RunolfssonInc</FITID>
<NAME>Runolfsson Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150914000000.000[0]</DTPOSTED>
<TRNAMT>-771.85</TRNAMT>
<FITID>00POS201509141200000000-77185HamillLLC</FITID>
<NAME>Hamill LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150915000000.000[0]</DTPOSTED>
<TRNAMT>-51.65</TRNAMT>
<FITID>00POS201509151200000000-5165Sanford-Mann</FITID>
<NAME>Sanford-Mann</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150915000000.000[0]</DTPOSTED>
<TRNAMT>-423.56</TRNAMT>
<FITID>00POS201509151200000000-42356Wisozk,ZulaufandMcDermott</FITID>
<NAME>Wisozk, Zulauf and McDermott</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150916000000.000[0]</DTPOSTED>
<TRNAMT>-616.37</TRNAMT>
<FITID>00POS201509161200000000-61637Christiansen-Strosin</FITID>
<NAME>Christiansen-Strosin</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20150918000000.000[0]</DTPOSTED>
<TRNAMT>1813.73</TRNAMT>
<FITID>00CREDIT201509181200000000181373Wisozk-Kris</FITID>
<NAME>Wisozk-Kris</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20150921000000.000[0]</DTPOSTED>
<TRNAMT>304.92</TRNAMT>
<FITID>00CREDIT20150921120000000030492Quitzon,StrosinandBalistreri</FITID>
<NAME>Quitzon, Strosin and Balistreri</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150923000000.000[0]</DTPOSTED>
<TRNAMT>-746.03</TRNAMT>
<FITID>00POS201509231200000000-74603PadbergGroup</FITID>
<NAME>Padberg Group</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20150923000000.000[0]</DTPOSTED>
<TRNAMT>932.89</TRNAMT>
<FITID>00XFER20150923120000000093289BergstromLLC</FITID>
<NAME>Bergstrom LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150924000000.000[0]</DTPOSTED>
<TRNAMT>-419.55</TRNAMT>
<FITID>00POS201509241200000000-41955Lowe-Grant</FITID>
<NAME>Lowe-Grant</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20150925000000.000[0]</DTPOSTED>
<TRNAMT>4819.31</TRNAMT>
<FITID>00CREDIT201509251200000000481931Stiedemann-Will</FITID>
<NAME>Stiedemann-Will</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150925000000.000[0]</DTPOSTED>
<TRNAMT>-260.85</TRNAMT>
<FITID>00POS201509251200000000-26085Haley,JacobiandSporer</FITID>
<NAME>Haley, Jacobi and Sporer</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20150925000000.000[0]</DTPOSTED>
<TRNAMT>7433.99</TRNAMT>
<FITID>00CREDIT201509251200000000743399O'Reilly,HammesandJenkins</FITID>
<NAME>O'Reilly, Hammes and Jenkins</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150926000000.000[0]</DTPOSTED>
<TRNAMT>-431.61</TRNAMT>
<FITID>00POS201509261200000000-43161Heathcote,KilbackandRuecker</FITID>
<NAME>Heathcote, Kilback and Ruecker</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150926000000.000[0]</DTPOSTED>
<TRNAMT>-6.52</TRNAMT>
<FITID>00POS201509261200000000-652MarquardtInc</FITID>
<NAME>Marquardt Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150927000000.000[0]</DTPOSTED>
<TRNAMT>-450.53</TRNAMT>
<FITID>00POS201509271200000000-45053Murray,PfannerstillandGleason</FITID>
<NAME>Murray, Pfannerstill and Gleason</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150927000000.000[0]</DTPOSTED>
<TRNAMT>-594.73</TRNAMT>
<FITID>00POS201509271200000000-59473Botsford-Balistreri</FITID>
<NAME>Botsford-Balistreri</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150928000000.000[0]</DTPOSTED>
<TRNAMT>-402.60</TRNAMT>
<FITID>00POS201509281200000000-40260Morar-Lang</FITID>
<NAME>Morar-Lang</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20150929000000.000[0]</DTPOSTED>
<TRNAMT>-913.94</TRNAMT>
<FITID>00POS201509291200000000-91394Quigley,StreichandMraz</FITID>
<NAME>Quigley, Streich and Mraz</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20150929000000.000[0]</DTPOSTED>
<TRNAMT>-375.82</TRNAMT>
<FITID>00XFER201509291200000000-37582Smith-Nienow</FITID>
<NAME>Smith-Nienow</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151002000000.000[0]</DTPOSTED>
<TRNAMT>-593.11</TRNAMT>
<FITID>00POS201510021200000000-59311Kiehn-Glover</FITID>
<NAME>Kiehn-Glover</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151004000000.000[0]</DTPOSTED>
<TRNAMT>-110.17</TRNAMT>
<FITID>00POS201510041200000000-11017KesslerInc</FITID>
<NAME>Kessler Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151004000000.000[0]</DTPOSTED>
<TRNAMT>-855.20</TRNAMT>
<FITID>00POS201510041200000000-85520Bergnaum,BuckridgeandRohan</FITID>
<NAME>Bergnaum, Buckridge and Rohan</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151005000000.000[0]</DTPOSTED>
<TRNAMT>-775.09</TRNAMT>
<FITID>00POS201510051200000000-77509Hauck-Kilback</FITID>
<NAME>Hauck-Kilback</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151006000000.000[0]</DTPOSTED>
<TRNAMT>-473.44</TRNAMT>
<FITID>00POS201510061200000000-47344Rippin-Wilderman</FITID>
<NAME>Rippin-Wilderman</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151007000000.000[0]</DTPOSTED>
<TRNAMT>-841.22</TRNAMT>
<FITID>00POS201510071200000000-84122GorczanyInc</FITID>
<NAME>Rippin-Wilderman</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151007000000.000[0]</DTPOSTED>
<TRNAMT>-721.88</TRNAMT>
<FITID>00POS201510071200000000-72188Ondricka,BlickandMurazik</FITID>
<NAME>Rippin-Wilderman</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151007000000.000[0]</DTPOSTED>
<TRNAMT>-284.86</TRNAMT>
<FITID>00POS201510071200000000-28486MacejkovicInc</FITID>
<NAME>Rippin-Wilderman</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151009000000.000[0]</DTPOSTED>
<TRNAMT>6061.29</TRNAMT>
<FITID>00CREDIT201510091200000000606129Bogisich,JohnsonandMarks</FITID>
<NAME>Rippin-Wilderman</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151009000000.000[0]</DTPOSTED>
<TRNAMT>7687.31</TRNAMT>
<FITID>00CREDIT201510091200000000768731Kutch-Stoltenberg</FITID>
<NAME>Kutch-Stoltenberg</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151010000000.000[0]</DTPOSTED>
<TRNAMT>-827.78</TRNAMT>
<FITID>00POS201510101200000000-82778MoenandSons</FITID>
<NAME>Moen and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151014000000.000[0]</DTPOSTED>
<TRNAMT>-465.74</TRNAMT>
<FITID>00POS201510141200000000-46574SchillerInc</FITID>
<NAME>Schiller Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151014000000.000[0]</DTPOSTED>
<TRNAMT>-256.92</TRNAMT>
<FITID>00POS201510141200000000-25692HammesInc</FITID>
<NAME>Hammes Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151015000000.000[0]</DTPOSTED>
<TRNAMT>-464.69</TRNAMT>
<FITID>00POS201510151200000000-46469LynchandSons</FITID>
<NAME>Lynch and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151015000000.000[0]</DTPOSTED>
<TRNAMT>-930.35</TRNAMT>
<FITID>00POS201510151200000000-93035Kunde-Bauch</FITID>
<NAME>Kunde-Bauch</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151016000000.000[0]</DTPOSTED>
<TRNAMT>-799.87</TRNAMT>
<FITID>00POS201510161200000000-79987Boyle-Pfeffer</FITID>
<NAME>Boyle-Pfeffer</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151016000000.000[0]</DTPOSTED>
<TRNAMT>-966.05</TRNAMT>
<FITID>00POS201510161200000000-96605ThielLLC</FITID>
<NAME>Thiel LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151017000000.000[0]</DTPOSTED>
<TRNAMT>7297.48</TRNAMT>
<FITID>00CREDIT201510171200000000729748Littel,RippinandSipes</FITID>
<NAME>Littel, Rippin and Sipes</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151017000000.000[0]</DTPOSTED>
<TRNAMT>-830.82</TRNAMT>
<FITID>00POS201510171200000000-83082Kshlerin-Daniel</FITID>
<NAME>Kshlerin-Daniel</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151019000000.000[0]</DTPOSTED>
<TRNAMT>4267.86</TRNAMT>
<FITID>00CREDIT201510191200000000426786Konopelski,SchmittandGraham</FITID>
<NAME>Konopelski, Schmitt and Graham</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151020000000.000[0]</DTPOSTED>
<TRNAMT>-199.41</TRNAMT>
<FITID>00POS201510201200000000-19941Streich,LuettgenandStamm</FITID>
<NAME>Streich, Luettgen and Stamm</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151023000000.000[0]</DTPOSTED>
<TRNAMT>6092.29</TRNAMT>
<FITID>00CREDIT201510231200000000609229HeathcoteInc</FITID>
<NAME>Heathcote Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151023000000.000[0]</DTPOSTED>
<TRNAMT>1159.46</TRNAMT>
<FITID>00CREDIT201510231200000000115946EmardandSons</FITID>
<NAME>Emard and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20151024000000.000[0]</DTPOSTED>
<TRNAMT>617.03</TRNAMT>
<FITID>00XFER20151024120000000061703GoyetteGroup</FITID>
<NAME>Goyette Group</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151024000000.000[0]</DTPOSTED>
<TRNAMT>-313.96</TRNAMT>
<FITID>00POS201510241200000000-31396Predovic-Flatley</FITID>
<NAME>Predovic-Flatley</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151024000000.000[0]</DTPOSTED>
<TRNAMT>-450.02</TRNAMT>
<FITID>00POS201510241200000000-45002White,CronaandBeer</FITID>
<NAME>White, Crona and Beer</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151026000000.000[0]</DTPOSTED>
<TRNAMT>-305.35</TRNAMT>
<FITID>00POS201510261200000000-30535TerryInc</FITID>
<NAME>Terry Inc</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151026000000.000[0]</DTPOSTED>
<TRNAMT>-609.14</TRNAMT>
<FITID>00POS201510261200000000-60914Murphy-Veum</FITID>
<NAME>Murphy-Veum</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151026000000.000[0]</DTPOSTED>
<TRNAMT>6895.99</TRNAMT>
<FITID>00CREDIT201510261200000000689599JerdeLLC</FITID>
<NAME>Jerde LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151027000000.000[0]</DTPOSTED>
<TRNAMT>-108.46</TRNAMT>
<FITID>00POS201510271200000000-10846SatterfieldandSons</FITID>
<NAME>Satterfield and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151029000000.000[0]</DTPOSTED>
<TRNAMT>-181.56</TRNAMT>
<FITID>00POS201510291200000000-18156RohanandSons</FITID>
<NAME>Rohan and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151031000000.000[0]</DTPOSTED>
<TRNAMT>-923.00</TRNAMT>
<FITID>00POS201510311200000000-92300ParisianandSons</FITID>
<NAME>Parisian and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151031000000.000[0]</DTPOSTED>
<TRNAMT>5573.73</TRNAMT>
<FITID>00CREDIT201510311200000000557373KochGroup</FITID>
<NAME>Koch Group</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20151031000000.000[0]</DTPOSTED>
<TRNAMT>-212.64</TRNAMT>
<FITID>00XFER201510311200000000-21264CroninandSons</FITID>
<NAME>Cronin and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151103000000.000[0]</DTPOSTED>
<TRNAMT>-677.40</TRNAMT>
<FITID>00POS201511031200000000-67740ReichelLLC</FITID>
<NAME>Reichel LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151103000000.000[0]</DTPOSTED>
<TRNAMT>-176.09</TRNAMT>
<FITID>00POS201511031200000000-17609Will-Lesch</FITID>
<NAME>Will-Lesch</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151105000000.000[0]</DTPOSTED>
<TRNAMT>389.12</TRNAMT>
<FITID>00CREDIT20151105120000000038912VonRueden,OrnandKuhic</FITID>
<NAME>VonRueden, Orn and Kuhic</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151105000000.000[0]</DTPOSTED>
<TRNAMT>1818.27</TRNAMT>
<FITID>00CREDIT201511051200000000181827Ratke,KossandRath</FITID>
<NAME>Ratke, Koss and Rath</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151106000000.000[0]</DTPOSTED>
<TRNAMT>-986.56</TRNAMT>
<FITID>00POS201511061200000000-98656NienowLLC</FITID>
<NAME>Nienow LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151106000000.000[0]</DTPOSTED>
<TRNAMT>-84.26</TRNAMT>
<FITID>00POS201511061200000000-8426Will,BlickandTorphy</FITID>
<NAME>Will, Blick and Torphy</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>FEE</TRNTYPE>
<DTPOSTED>20151110000000.000[0]</DTPOSTED>
<TRNAMT>-17.40</TRNAMT>
<FITID>00FEE201511101200000000-1740BankFees</FITID>
<NAME>Bank Fees</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151111000000.000[0]</DTPOSTED>
<TRNAMT>-537.30</TRNAMT>
<FITID>00POS201511111200000000-53730Kuhic-Nikolaus</FITID>
<NAME>Kuhic-Nikolaus</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151111000000.000[0]</DTPOSTED>
<TRNAMT>-773.33</TRNAMT>
<FITID>00POS201511111200000000-77333Hessel,SchneiderandWatsica</FITID>
<NAME>Hessel, Schneider and Watsica</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151112000000.000[0]</DTPOSTED>
<TRNAMT>-527.10</TRNAMT>
<FITID>00POS201511121200000000-52710BauchGroup</FITID>
<NAME>Bauch Group</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151114000000.000[0]</DTPOSTED>
<TRNAMT>-741.58</TRNAMT>
<FITID>00POS201511141200000000-74158RunolfsdottirandSons</FITID>
<NAME>Runolfsdottir and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151115000000.000[0]</DTPOSTED>
<TRNAMT>-349.48</TRNAMT>
<FITID>00POS201511151200000000-34948Murphy-Bergstrom</FITID>
<NAME>Murphy-Bergstrom</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151116000000.000[0]</DTPOSTED>
<TRNAMT>-734.70</TRNAMT>
<FITID>00POS201511161200000000-73470FerryandSons</FITID>
<NAME>Ferry and Sons</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151116000000.000[0]</DTPOSTED>
<TRNAMT>-228.60</TRNAMT>
<FITID>00POS201511161200000000-22860ParisianLLC</FITID>
<NAME>Parisian LLC</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151116000000.000[0]</DTPOSTED>
<TRNAMT>-779.38</TRNAMT>
<FITID>00POS201511161200000000-77938Strosin-Nikolaus</FITID>
<NAME>Strosin-Nikolaus</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151117000000.000[0]</DTPOSTED>
<TRNAMT>-596.81</TRNAMT>
<FITID>00POS201511171200000000-59681Wuckert-Ortiz</FITID>
<NAME>Wuckert-Ortiz</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151118000000.000[0]</DTPOSTED>
<TRNAMT>-948.01</TRNAMT>
<FITID>00POS201511181200000000-94801Franecki,KubandMohr</FITID>
<NAME>Franecki, Kub and Mohr</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151119000000.000[0]</DTPOSTED>
<TRNAMT>-441.39</TRNAMT>
<FITID>00POS201511191200000000-44139Kertzmann-Hilll</FITID>
<NAME>Kertzmann-Hilll</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20151121000000.000[0]</DTPOSTED>
<TRNAMT>1741.43</TRNAMT>
<FITID>00CREDIT201511211200000000174143Zemlak-Effertz</FITID>
<NAME>Zemlak-Effertz</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>XFER</TRNTYPE>
<DTPOSTED>20151122000000.000[0]</DTPOSTED>
<TRNAMT>900.08</TRNAMT>
<FITID>00XFER20151122120000000090008Rutherford,DickinsonandBashirian</FITID>
<NAME>Rutherford, Dickinson and Bashirian</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>POS</TRNTYPE>
<DTPOSTED>20151124000000.000[0]</DTPOSTED>
<TRNAMT>-855.56</TRNAMT>
<FITID>00POS201511241200000000-85556Corkery-Quitzon</FITID>
<NAME>Corkery-Quitzon</NAME>
</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL>
<BALAMT>33711.92</BALAMT>
<DTASOF>20151124000000.000[0]</DTASOF>
</LEDGERBAL>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment