salt-parser 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +88 -0
- data/README.rdoc +39 -0
- data/Rakefile +7 -0
- data/lib/ofx/account.rb +28 -0
- data/lib/ofx/accounts.rb +9 -0
- data/lib/ofx/balance.rb +15 -0
- data/lib/ofx/builder.rb +61 -0
- data/lib/ofx/dependencies.rb +13 -0
- data/lib/ofx/parser/base.rb +366 -0
- data/lib/ofx/parser/ofx102.rb +28 -0
- data/lib/ofx/parser/ofx211.rb +21 -0
- data/lib/ofx/sign_on.rb +18 -0
- data/lib/ofx/transaction.rb +28 -0
- data/lib/qif/account.rb +19 -0
- data/lib/qif/accounts.rb +54 -0
- data/lib/qif/builder.rb +37 -0
- data/lib/qif/dependencies.rb +8 -0
- data/lib/qif/parser.rb +68 -0
- data/lib/qif/transaction.rb +28 -0
- data/lib/salt-parser/accounts.rb +11 -0
- data/lib/salt-parser/base.rb +19 -0
- data/lib/salt-parser/builder.rb +24 -0
- data/lib/salt-parser/errors.rb +14 -0
- data/lib/salt-parser/version.rb +8 -0
- data/salt-parser.gemspec +24 -0
- data/spec/ofx/account_spec.rb +97 -0
- data/spec/ofx/accounts_response_spec.rb +45 -0
- data/spec/ofx/accounts_spec.rb +34 -0
- data/spec/ofx/balance_spec.rb +32 -0
- data/spec/ofx/builder_spec.rb +136 -0
- data/spec/ofx/error_request_spec.rb +37 -0
- data/spec/ofx/fixtures/accounts_partial.ofx +52 -0
- data/spec/ofx/fixtures/accounts_request.ofx +11 -0
- data/spec/ofx/fixtures/accounts_response.ofx +109 -0
- data/spec/ofx/fixtures/avatar.gif +0 -0
- data/spec/ofx/fixtures/bb.ofx +700 -0
- data/spec/ofx/fixtures/credit_card_response.ofx +52 -0
- data/spec/ofx/fixtures/creditcard.ofx +79 -0
- data/spec/ofx/fixtures/creditcard_transactions_request.ofx +11 -0
- data/spec/ofx/fixtures/creditcards_partial.ofx +85 -0
- data/spec/ofx/fixtures/date_missing.ofx +73 -0
- data/spec/ofx/fixtures/empty_balance.ofx +44 -0
- data/spec/ofx/fixtures/invalid_version.ofx +308 -0
- data/spec/ofx/fixtures/investment_transactions_response.ofx +108 -0
- data/spec/ofx/fixtures/investment_transactions_response2.ofx +200 -0
- data/spec/ofx/fixtures/investments_with_mkval.ofx +99 -0
- data/spec/ofx/fixtures/missing_headers.ofx +47 -0
- data/spec/ofx/fixtures/mixed_accountinfo_response.ofx +58 -0
- data/spec/ofx/fixtures/ms_money.ofx +52 -0
- data/spec/ofx/fixtures/request_error.ofx +39 -0
- data/spec/ofx/fixtures/request_error2.ofx +39 -0
- data/spec/ofx/fixtures/request_error3.ofx +36 -0
- data/spec/ofx/fixtures/sample_examples/sample_401K_loan.qfx +651 -0
- data/spec/ofx/fixtures/sample_examples/sample_banking.qbo +258 -0
- data/spec/ofx/fixtures/sample_examples/sample_banking.qfx +258 -0
- data/spec/ofx/fixtures/sample_examples/sample_banking_multiacct.qfx +284 -0
- data/spec/ofx/fixtures/sample_examples/sample_credit_card.qfx +257 -0
- data/spec/ofx/fixtures/sample_examples/sample_investment.qfx +654 -0
- data/spec/ofx/fixtures/transactions_empty.ofx +60 -0
- data/spec/ofx/fixtures/utf8.ofx +65 -0
- data/spec/ofx/fixtures/v102.ofx +314 -0
- data/spec/ofx/fixtures/v202.ofx +22 -0
- data/spec/ofx/fixtures/v211.ofx +85 -0
- data/spec/ofx/investment_accounts_spec.rb +70 -0
- data/spec/ofx/ofx102_spec.rb +44 -0
- data/spec/ofx/ofx211_spec.rb +68 -0
- data/spec/ofx/ofx_parser_spec.rb +100 -0
- data/spec/ofx/sign_on_spec.rb +49 -0
- data/spec/ofx/transaction_spec.rb +157 -0
- data/spec/qif/account_spec.rb +42 -0
- data/spec/qif/fixtures/3_records_ddmmyy.qif +19 -0
- data/spec/qif/fixtures/3_records_ddmmyyyy.qif +19 -0
- data/spec/qif/fixtures/3_records_dmyy.qif +19 -0
- data/spec/qif/fixtures/3_records_invalid_header.qif +20 -0
- data/spec/qif/fixtures/3_records_mdyy.qif +19 -0
- data/spec/qif/fixtures/3_records_mmddyy.qif +19 -0
- data/spec/qif/fixtures/3_records_mmddyyyy.qif +19 -0
- data/spec/qif/fixtures/3_records_spaced.qif +19 -0
- data/spec/qif/fixtures/bank_account.qif +19 -0
- data/spec/qif/fixtures/empty_body.qif +1 -0
- data/spec/qif/fixtures/empty_header.qif +18 -0
- data/spec/qif/fixtures/incompatible_date_formats.qif +13 -0
- data/spec/qif/fixtures/invalid_date_format.qif +7 -0
- data/spec/qif/fixtures/not_a_QIF_file.txt +3 -0
- data/spec/qif/fixtures/quicken_non_investement_account.qif +30 -0
- data/spec/qif/fixtures/unknown_account.qif +20 -0
- data/spec/qif/fixtures/various_date_format.qif +19 -0
- data/spec/qif/fixtures/with_categories_list.qif +8669 -0
- data/spec/qif/parser_spec.rb +156 -0
- data/spec/qif/transaction_spec.rb +18 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/support/fixture.rb +9 -0
- metadata +208 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe SaltParser::Ofx::Parser::OFX211 do
|
4
|
+
let(:ofx) { SaltParser::Ofx::Builder.new("spec/ofx/fixtures/v211.ofx") }
|
5
|
+
let(:parser) { ofx.parser }
|
6
|
+
|
7
|
+
it "should have a version" do
|
8
|
+
SaltParser::Ofx::Parser::OFX211::VERSION.should == "2.1.1"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should set headers" do
|
12
|
+
parser.headers.should == ofx.headers
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should set body" do
|
16
|
+
parser.body.should == ofx.body
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set accounts" do
|
20
|
+
parser.accounts.should be_a_kind_of(Array)
|
21
|
+
parser.accounts.first.should be_a_kind_of(SaltParser::Ofx::Account)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should set sign_on" do
|
25
|
+
parser.sign_on.should be_a_kind_of(SaltParser::Ofx::SignOn)
|
26
|
+
end
|
27
|
+
|
28
|
+
context "transactions" do
|
29
|
+
# Test file contains only three transactions. Let's just check
|
30
|
+
# them all.
|
31
|
+
context "first" do
|
32
|
+
let(:t) { parser.accounts.first.transactions[0] }
|
33
|
+
|
34
|
+
it "should contain the correct values" do
|
35
|
+
t.amount.should == -80
|
36
|
+
t.fit_id.should == "219378"
|
37
|
+
t.memo.should be_empty
|
38
|
+
t.posted_at.should == Time.parse("2005-08-24 08:00:00")
|
39
|
+
t.name.should == "FrogKick Scuba Gear"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "second" do
|
44
|
+
let(:t) { parser.accounts.last.transactions[0] }
|
45
|
+
|
46
|
+
it "should contain the correct values" do
|
47
|
+
t.amount.should == -23
|
48
|
+
t.fit_id.should == "219867"
|
49
|
+
t.memo.should be_empty
|
50
|
+
t.posted_at.should == Time.parse("2005-08-11 08:00:00")
|
51
|
+
t.name.should == "Interest Charge"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "third" do
|
56
|
+
let(:t) { parser.accounts.last.transactions[1] }
|
57
|
+
|
58
|
+
it "should contain the correct values" do
|
59
|
+
t.amount.should == 350
|
60
|
+
t.fit_id.should == "219868"
|
61
|
+
t.memo.should be_empty
|
62
|
+
t.posted_at.should == Time.parse("2005-08-11 08:00:00")
|
63
|
+
t.name.should == "Payment - Thank You"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe SaltParser::Ofx::Parser do
|
4
|
+
let(:ofx) { SaltParser::Ofx::Builder.new("spec/ofx/fixtures/v102.ofx") }
|
5
|
+
|
6
|
+
it "should accept file path" do
|
7
|
+
ofx = SaltParser::Ofx::Builder.new("spec/ofx/fixtures/v102.ofx")
|
8
|
+
ofx.content.should_not be_nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should accept file handler" do
|
12
|
+
file = open("spec/ofx/fixtures/v102.ofx")
|
13
|
+
ofx = SaltParser::Ofx::Builder.new(file)
|
14
|
+
ofx.content.should_not be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should accept file content" do
|
18
|
+
file = open("spec/ofx/fixtures/v102.ofx").read
|
19
|
+
ofx =SaltParser::Ofx::Builder.new(file)
|
20
|
+
ofx.content.should_not be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should set content" do
|
24
|
+
ofx.content.should == open("spec/ofx/fixtures/v102.ofx").read
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should work with UTF8 and Latin1 encodings" do
|
28
|
+
ofx = SaltParser::Ofx::Builder.new("spec/ofx/fixtures/utf8.ofx")
|
29
|
+
ofx.content.should == open("spec/ofx/fixtures/utf8.ofx").read
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should set body" do
|
33
|
+
ofx.body.should_not be_nil
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should raise exception when trying to parse an unsupported OFX version" do
|
37
|
+
expect {
|
38
|
+
SaltParser::Ofx::Builder.new("spec/ofx/fixtures/invalid_version.ofx")
|
39
|
+
}.to raise_error(SaltParser::Error::UnsupportedFileError)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should raise exception when trying to parse an invalid file" do
|
43
|
+
expect {
|
44
|
+
SaltParser::Ofx::Builder.new("spec/ofx/fixtures/avatar.gif")
|
45
|
+
}.to raise_error(SaltParser::Error::UnsupportedFileError)
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "headers" do
|
49
|
+
it "should have OFXHEADER" do
|
50
|
+
ofx.headers["OFXHEADER"].should == "100"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should have DATA" do
|
54
|
+
ofx.headers["DATA"].should == "OFXSGML"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should have VERSION" do
|
58
|
+
ofx.headers["VERSION"].should == "102"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should have SECURITY" do
|
62
|
+
ofx.headers.should have_key("SECURITY")
|
63
|
+
ofx.headers["SECURITY"].should be_nil
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should have ENCODING" do
|
67
|
+
ofx.headers["ENCODING"].should == "USASCII"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should have CHARSET" do
|
71
|
+
ofx.headers["CHARSET"].should == "1252"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should have COMPRESSION" do
|
75
|
+
ofx.headers.should have_key("COMPRESSION")
|
76
|
+
ofx.headers["COMPRESSION"].should be_nil
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should have OLDFILEUID" do
|
80
|
+
ofx.headers.should have_key("OLDFILEUID")
|
81
|
+
ofx.headers["OLDFILEUID"].should be_nil
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should have NEWFILEUID" do
|
85
|
+
ofx.headers.should have_key("NEWFILEUID")
|
86
|
+
ofx.headers["NEWFILEUID"].should be_nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should parse headers with CR and without LF" do
|
90
|
+
ofx = SaltParser::Ofx::Builder.new(ofx_with_carriage_return)
|
91
|
+
ofx.headers.size.should be(9)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def ofx_with_carriage_return
|
96
|
+
header = %{OFXHEADER:100\rDATA:OFXSGML\rVERSION:102\rSECURITY:NONE\rENCODING:USASCII\rCHARSET:1252\rCOMPRESSION:NONE\rOLDFILEUID:NONE\rNEWFILEUID:NONE\r}
|
97
|
+
body = open("spec/ofx/fixtures/v102.ofx").read.split(/<OFX>/, 2)[1]
|
98
|
+
header + "<OFX>" + body
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe SaltParser::Ofx::SignOn do
|
4
|
+
let(:ofx) { SaltParser::Ofx::Builder.new("spec/ofx/fixtures/creditcard.ofx") }
|
5
|
+
let(:parser) { ofx.parser }
|
6
|
+
let(:sign_on) { parser.sign_on }
|
7
|
+
let(:hash) { sign_on.to_hash }
|
8
|
+
|
9
|
+
describe "sign_on" do
|
10
|
+
it "should return language" do
|
11
|
+
sign_on.language.should == "ENG"
|
12
|
+
hash[:language].should == sign_on.language
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return Financial Institution ID" do
|
16
|
+
sign_on.fi_id.should == "24909"
|
17
|
+
hash[:fi_id].should == sign_on.fi_id
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return Financial Institution Name" do
|
21
|
+
sign_on.fi_name.should == "Citigroup"
|
22
|
+
hash[:fi_name].should == sign_on.fi_name
|
23
|
+
end
|
24
|
+
|
25
|
+
context "#to_hash" do
|
26
|
+
it "should return Hash" do
|
27
|
+
hash.should be_a_kind_of(Hash)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "#status" do
|
32
|
+
let(:sign_on) { SaltParser::Ofx::Builder.new("spec/ofx/fixtures/request_error.ofx").parser.sign_on }
|
33
|
+
it "should return status code" do
|
34
|
+
sign_on.code.should == "2000"
|
35
|
+
hash[:code].should == sign_on.code
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return status severity" do
|
39
|
+
sign_on.severity.should == "ERROR"
|
40
|
+
hash[:severity].should == sign_on.severity
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return status message" do
|
44
|
+
sign_on.message.should == "Application which you are using is not enabled. Please call customer service."
|
45
|
+
hash[:message].should == sign_on.message
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe SaltParser::Ofx::Transaction do
|
4
|
+
let(:ofx) { SaltParser::Ofx::Builder.new("spec/ofx/fixtures/v102.ofx") }
|
5
|
+
let(:parser) { ofx.parser }
|
6
|
+
let(:account) { parser.accounts.first }
|
7
|
+
|
8
|
+
context "debit" do
|
9
|
+
let(:transaction) { account.transactions[0] }
|
10
|
+
let(:hash) { transaction.to_hash }
|
11
|
+
|
12
|
+
it "should set amount" do
|
13
|
+
transaction.amount.should == -35.34
|
14
|
+
hash[:amount].should == -35.34
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should cast amount to Float" do
|
18
|
+
transaction.amount.class.should == Float
|
19
|
+
hash[:amount].class.should == Float
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should set amount in pennies" do
|
23
|
+
transaction.amount_in_pennies.should == -3534
|
24
|
+
hash[:amount_in_pennies].should == -3534
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should set fit id" do
|
28
|
+
transaction.fit_id.should == "200910091"
|
29
|
+
hash[:fit_id].should == "200910091"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should set memo" do
|
33
|
+
transaction.memo.should == "COMPRA VISA ELECTRON"
|
34
|
+
hash[:memo].should == "COMPRA VISA ELECTRON"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should set check number" do
|
38
|
+
transaction.check_number.should == "0001223"
|
39
|
+
hash[:check_number].should == "0001223"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should have date" do
|
43
|
+
transaction.posted_at.should == Time.parse("2009-10-09 08:00:00")
|
44
|
+
hash[:posted_at].should == Time.parse("2009-10-09 08:00:00")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should have type" do
|
48
|
+
transaction.type.should == :debit
|
49
|
+
hash[:type].should == :debit
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should have sic" do
|
53
|
+
transaction.sic.should == "5072"
|
54
|
+
hash[:sic].should == "5072"
|
55
|
+
end
|
56
|
+
|
57
|
+
context "#to_hash" do
|
58
|
+
it "should return Hash" do
|
59
|
+
hash.should be_a_kind_of(Hash)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "credit" do
|
65
|
+
let(:transaction) { account.transactions[1] }
|
66
|
+
|
67
|
+
it "should set amount" do
|
68
|
+
transaction.amount.should == 60.39
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should set amount in pennies" do
|
72
|
+
transaction.amount_in_pennies.should == 6039
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should set fit id" do
|
76
|
+
transaction.fit_id.should == "200910162"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should set memo" do
|
80
|
+
transaction.memo.should == "DEPOSITO POUP.CORRENTE"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should set check number" do
|
84
|
+
transaction.check_number.should == "0880136"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should have date" do
|
88
|
+
transaction.posted_at.should == Time.parse("2009-10-16 08:00:00")
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should have type" do
|
92
|
+
transaction.type.should == :credit
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should have empty sic" do
|
96
|
+
transaction.sic.should == ''
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "with more info" do
|
101
|
+
let(:transaction) { account.transactions[2] }
|
102
|
+
|
103
|
+
it "should set payee" do
|
104
|
+
transaction.payee.should == "Pagto conta telefone"
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should set check number" do
|
108
|
+
transaction.check_number.should == "000000101901"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should have date" do
|
112
|
+
transaction.posted_at.should == Time.parse("2009-10-19 12:00:00")
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should have type" do
|
116
|
+
transaction.type.should == :other
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should have reference number" do
|
120
|
+
transaction.ref_number.should == "101.901"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context "with name" do
|
125
|
+
let(:transaction) { account.transactions[3] }
|
126
|
+
|
127
|
+
it "should set name" do
|
128
|
+
transaction.name.should == "Pagto conta telefone"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "with other types" do
|
133
|
+
let(:ofx) { SaltParser::Ofx::Builder.new("spec/ofx/fixtures/bb.ofx") }
|
134
|
+
let(:parser) { ofx.parser }
|
135
|
+
let(:account) { parser.accounts.first }
|
136
|
+
|
137
|
+
it "should return dep" do
|
138
|
+
transaction = account.transactions[9]
|
139
|
+
transaction.type.should == :dep
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should return xfer" do
|
143
|
+
transaction = account.transactions[18]
|
144
|
+
transaction.type.should == :xfer
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should return cash" do
|
148
|
+
transaction = account.transactions[45]
|
149
|
+
transaction.type.should == :cash
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should return check" do
|
153
|
+
transaction = account.transactions[0]
|
154
|
+
transaction.type.should == :check
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe SaltParser::Qif::Account do
|
4
|
+
let(:parser) { SaltParser::Qif::Builder.new("spec/qif/fixtures/bank_account.qif", "%d/%m/%Y").parser }
|
5
|
+
let(:account) { parser.accounts.first }
|
6
|
+
|
7
|
+
it "creates an account with default data" do
|
8
|
+
account.to_hash.should == {
|
9
|
+
:name => "Bank account",
|
10
|
+
:type => "bank_account",
|
11
|
+
:transactions => [
|
12
|
+
{
|
13
|
+
:date => "2010-01-01",
|
14
|
+
:amount => "-1,010.02",
|
15
|
+
:status => nil,
|
16
|
+
:number => nil,
|
17
|
+
:payee => "Description",
|
18
|
+
:memo => "Reference",
|
19
|
+
:category => "Debit"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
:date => "2010-06-01",
|
23
|
+
:amount => "-30,020.00",
|
24
|
+
:status => nil,
|
25
|
+
:number => nil,
|
26
|
+
:payee => "Description",
|
27
|
+
:memo => "Reference",
|
28
|
+
:category => "Debit"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
:date => "2010-12-29",
|
32
|
+
:amount => "1234.12",
|
33
|
+
:status => nil,
|
34
|
+
:number => nil,
|
35
|
+
:payee => "Description",
|
36
|
+
:memo => "Reference",
|
37
|
+
:category => "Credit"
|
38
|
+
}
|
39
|
+
]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
!Type:Bank
|
@@ -0,0 +1,3 @@
|
|
1
|
+
Tchen tenterait-il de lever la moustiquaire ? Frapperait-il au travers ? L’angoisse lui tordait l’estomac ; il connaissait sa propre fermeté, mais n’était capable en cet instant que d’y songer avec hébétude, fasciné par ce tas de mousseline blanche qui tombait du plafond sur un corps moins visible qu’une ombre, et d’où sortait seulement ce pied à demi incliné par le sommeil, vivant quand même — de la chair d’homme. La seule lumière venait du building voisin : un grand rectangle d’électricité pâle, coupé par les barreaux de la fenêtre dont l’un rayait le lit juste au-dessous du pied comme pour en accentuer le volume et la vie. Quatre ou cinq klaxons grincèrent à la fois. Découvert ? Combattre, combattre des ennemis qui se défendent, des ennemis éveillés !
|
2
|
+
|
3
|
+
Incipit de "La Condition humaine", André Malraux, 1933
|
@@ -0,0 +1,30 @@
|
|
1
|
+
!Type:Bank
|
2
|
+
D6/1/94
|
3
|
+
T-1,000.00
|
4
|
+
CX
|
5
|
+
N1005
|
6
|
+
PBank Of Mortgage
|
7
|
+
MMemo
|
8
|
+
L[linda]
|
9
|
+
S[linda]
|
10
|
+
ECash
|
11
|
+
$-253.64
|
12
|
+
SMort Int
|
13
|
+
$=746.36
|
14
|
+
^
|
15
|
+
D6/2/94
|
16
|
+
T75.00
|
17
|
+
PDeposit
|
18
|
+
^
|
19
|
+
D6/3/94
|
20
|
+
T-10.00
|
21
|
+
PAnthony Hopkins
|
22
|
+
MFilm
|
23
|
+
LEntertain
|
24
|
+
AP.O. Box 27027
|
25
|
+
ATucson, AZ
|
26
|
+
A85726
|
27
|
+
A
|
28
|
+
A
|
29
|
+
A
|
30
|
+
^
|