úΑé‹T~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}NoneK7Holds all data both for CURRENCY and for ORIGCURRENCY. =Ratio of CURDEF currency to CURSYM currency, in decimal form &ISO-4217 3-letter currency identifier Account number !Checksum for international banks Routing and transit number (Bank identifier for international banks Account number Type of account !Checksum for international banks !Can be either REPLACE or DELETE. 7Deletes the transaction referenced by the CORRECTFITID 8Replaces the transaction referenced by the CORRECTFITID &@A single STMTTRN, see OFX spec section 11.4.2.3.1. This is most A likely what you are interested in after downloading a statement  from a bank. (Transaction type )'Date transaction was posted to account **Date user initiated transaction, if known +Date funds are available ,;Amount of transaction. This is left as the string that was < originally in the download. That means the transaction may = include a plus or minus sign (no sign is the same as a plus @ sign.) According to section 3.2.9.2, amounts are always signed ' from the perspective of the customer. Typically negative amounts: 1 Investment buy amount, investment sell quantity , Bank statement debit amounts, checks, fees  Credit card purchases ? Margin balance (unless the institution owes the client money) Typically positive amounts: 1 Investment sell amount, investment buy quantity  Bank statement credits  Credit card payments 2 Ledger balance (unless the account is overdrawn) =Formats for amounts are described in 3.2.9.1. If there is no @ decimal point, there is an implied decimal point at the end of ( the value. Trailing and leading spaces "should" be A stripped. Positive or minus is indicated with a leading sign; a + plus sign is assumed if there is no sign. 7An amount has a maximum of 32 alphanumeric characters, # including digits and punctuation. 7The radix point is indicated with either a period or a  comma. Amounts "should" not include any digit grouping  characters. -8Transaction ID issued by financial institution. Used to  detect duplicate downloads. .:If present, this indicates the FITID of a previously sent @ transaction that is corrected by this record. This transaction @ replaces or deletes the transaction that it corrects, based on # the value of CORRECTACTION below. /See  and . 06Server assigned transaction ID; used for transactions 8 initiated by client, such as payment or funds transfer 1 Check or other reference number 2.Reference number that uniquely identifies the 9 transaction. Can be used in addition to or instead of a  CHECKNUM. 3Standard Industrial Code 4Payee identifier if available 5:Information on the payee. The OFX spec seems to be saying 7 that every transaction must have either NAME, wich is "name of $ payee or description of transaction", or the Payee A aggregate. The former is indicated with a Left, the latter with  a Right. 65Information on a transfer. If this transaction wa sa @ transfer, this may contain information about the account being  transferred to. 7Extra information not in NAME 8<Currency option. OFX spec says to choose either CURRENCY or  ORIGCURRENCY. 9AOFX transaction types. These are used in STMTTRN aggregates, see  OFX spec section 11.4.2.3.1.1. ;Repeating payment / standing order <Merchant initiated debit =Direct deposit >Cash withdrawal ?Electronic payment A Transfer B>Point of sale debit or credit (which it is depends on sign of  amount) C<ATM debit or credit (which it is depends on sign of amount) DDeposit G Dividend H@Interest earned or paid (which it is depends on sign of amount) KAll the data from an OFX file. N>All the data will be contained in a root tag with the TagName  OFX. OBThe main OFX data consists of a series of tags. OFX 1.03 is SGML, = not XML. This means that opening tags need not have closing B tags. In OFX, a tag either has data and no child elements, or it ( has no data and it has child elements. Q"The data accompanying an OFX tag. RThe name of an OFX tag SAAn OFX file starts with a number of headers, which take the form   tag:value6 followed by a newline. These are followed by a blank  line. UThe value in an OFX header. VHeaders consists of simple  tag:value pairs; this represents the  tag. W?Parses either a UNIX or an MS-DOS newline. According to 1.2.2, E OFX does not contain any white space between tags. However, since I ? have seen OFX files that do have whitespace between tags, the " parser makes allowance for this. X:Parses a character, possibly with an escape sequence. The B greater-than sign, less-than sign, and ampersand must be entered  with escape sequences. Z5Parses any opening tag. Returns the name of the tag. [*Parses a closing tag with the given name. \@Parses any tag. The tag itself must be followed by at least one D character: either the next tag if this is an aggregate tag, or the < data if this is a data tag. OFX does not allow empty tags. AThe OFX spec seems to say that OFX files do not include trailing D newlines after tags or data, but I have seen these newlines in QFX > files, so this parses optional trailing newlines and spaces. ].Parses an entire OFX file, including headers. ~BParses an OFX date; provides an error message if the parse fails. ^BParses an OFX date. Fails if the date is not valid or if there is  no date to be parsed. _BParses an OFX time. Fails if the time is not valid or if there is C no time to parse. Fails if there is no time to parse; however, if E there is a time but no zone, returns the time and UTC for the zone. `AParses a time zone offset. Fails if there is no time zone offset  to parse. a@Finds child tags with the given name. When a tag is found, that > tag is not searched for further children with the same name. b<Descends through a tree of tags to find a tag at a specific B location in the tree. Fails if any part of the search fails. For ; example, to find the financial institution ORG tag, where t is  the root OFX tag: 5 findPath ["SIGNONMSGSRSV1", "SONRS", "FI", "ORG"] t c4Gets the data from a tag, if it is a tag with data. d:Goes to a certain path in the tag hierarchy and pulls the B requested data, if the tag is present and it is a data tag. For 8 example, to get the name of the financial institution: 5 pathData ["SIGNONMSGSRSV1", "SONRS", "FI", "ORG"] f e?Gets the name of the financial institution from the FI tag, if B available. The OFX spec does not require this tag to be present. fAGets the credit card number, if available. The OFX spec does not ! require this tag to be present. gBGets the bank account number, if available. The OFX spec does not ! require this tag to be present. hBGets either the credit card or bank account number, if available. i?Finds the first tag (either this tag or any children) that has E the given name and that is a data tag (not an aggregate tag.) If no 9 data tag with the given name is found, returns Nothing. ?Finds the first tag (either this tag or any children) that has B the given name and that is a data tag. Gives an error message if  the tag is not found. l@Gets a single Transaction from a tag. The tag should be the one B named STMTTRN. Fails with an error message if any required field  was not present. m+Parses a Payee record from its parent tag. pParses currency data. s?Pulls all Transactions from a file. Might fail if the OFX file E does not conform to the specification (or if there are bugs in this = library.) In case of the former, you can manually parse the 7 transaction information yourself using functions like  d4. In case of the latter, please send bugreports :-)   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]~^_`abcdefghijklm<The tag which contains the PAYEE tag, if there is one. This # would typically be a STMTTRN tag. @Nothing if there is no PAYEE tag. Just if a PAYEE tag is found, B with an Exception if the tag is lacking a required element, or a , Success if the tag is successfully parsed. ;If there is more than one PAYEE tag, only the first one is  considered. nop?The tag that contains the data, e.g. CURRENCY or ORIGCURRENCY. qr€stuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~VUSTRQOPKLMNabcdiefgh&'()*+,-./012345678ls9JIHGFEDCBA@?>=<;:k !"#$%mq r jpno]WXYZ[\^_`tuvwxyz{|};   !"#$%&'()*+,-./0123456789JIHGFEDCBA@?>=<;:KLMNOPQRSTUVWXYZ[\]~^_`abcdefghijklmnopqr€stuvwxyz{|}       !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHIIJKLLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy ofx-0.2.0.0Data.OFX OrigCurrencyCurrency CurrencyData cdCURRATEcdCURSYMAcctType ACREDITLINE AMONEYMRKTASAVINGS ACHECKINGCCAcctToctACCTID ctACCTKEY BankAcctTobtBANKID btBRANCHIDbtACCTID btACCTTYPE btACCTKEY CorrectActionDELETEREPLACEPayeepeNAMEpeADDR1peADDR2peADDR3peCITYpeSTATE pePOSTALCODE peCOUNTRYpePHONE Transaction txTRNTYPE txDTPOSTEDtxDTUSER txDTAVAILtxTRNAMTtxFITIDtxCORRECTFITIDtxCORRECTACTION txSRVRTID txCHECKNUMtxREFNUMtxSIC txPAYEEID txPayeeInfo txAccountTotxMEMO txCurrencyTrnTypeTOTHER TREPEATPMT TDIRECTDEBIT TDIRECTDEPTCASHTPAYMENTTCHECKTXFERTPOSTATMTDEPTSRVCHGTFEETDIVTINTTDEBITTCREDITOFXFilefHeaderfTagTagTagDataTagName OFXHeader HeaderValue HeaderTagnewlineescCharheader openingTag closingTagtagofxFiledatetimetzOffsetfindfindPathtagDatapathDatafiNamecreditCardNumberbankAccountNumber accountNumberfindDataacctTypetrnType transactionpayeecurrency origCurrency currencyData bankAcctToccAcctTo transactionspPayee pTransactionpTagpHeaderpFilepEitherpMaybepListlabel pExceptional parseDaterequiredsafeRead