úÎ!­ö¢ðÆ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅSafe27>žÄRofx6Holds all data both for CURRENCY and for ORIGCURRENCY.ofx<Ratio of CURDEF currency to CURSYM currency, in decimal formofx%ISO-4217 3-letter currency identifierofxAccount numberofx Checksum for international banksofxRouting and transit numberofx'Bank identifier for international banksofxAccount numberofxType of accountofx Checksum for international banksofx Can be either REPLACE or DELETE.ofx7Replaces the transaction referenced by the CORRECTFITIDofx6Deletes the transaction referenced by the CORRECTFITID&ofxŽA single STMTTRN, see OFX spec section 11.4.2.3.1. This is most likely what you are interested in after downloading a statement from a bank.(ofxTransaction type)ofx&Date transaction was posted to account*ofx)Date user initiated transaction, if known+ofxDate funds are available,ofxÿ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:/Investment buy amount, investment sell quantity*Bank statement debit amounts, checks, feesCredit card purchases=Margin balance (unless the institution owes the client money)Typically positive amounts:/Investment sell amount, investment buy quantityBank statement creditsCredit card payments0Ledger 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 stripped. Positive or minus is indicated with a leading sign; a plus sign is assumed if there is no sign.YAn amount has a maximum of 32 alphanumeric characters, including digits and punctuation.{The radix point is indicated with either a period or a comma. Amounts "should" not include any digit grouping characters.-ofxTTransaction ID issued by financial institution. Used to detect duplicate downloads..ofxÜ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./ofxSee  and .0ofxmServer assigned transaction ID; used for transactions initiated by client, such as payment or funds transfer1ofxCheck or other reference number2ofxqReference number that uniquely identifies the transaction. Can be used in addition to or instead of a CHECKNUM.3ofxStandard Industrial Code4ofxPayee identifier if available5ofxøInformation on the payee. The OFX spec seems to be saying that every transaction must have either NAME, wich is "name of payee or description of transaction", or the Payee aggregate. The former is indicated with a Left, the latter with a Right.6ofx…Information on a transfer. If this transaction wa sa transfer, this may contain information about the account being transferred to.7ofxExtra information not in NAME8ofxJCurrency option. OFX spec says to choose either CURRENCY or ORIGCURRENCY.9ofx`OFX transaction types. These are used in STMTTRN aggregates, see OFX spec section 11.4.2.3.1.1.<ofx?Interest earned or paid (which it is depends on sign of amount)=ofxDividend@ofxDepositAofx;ATM debit or credit (which it is depends on sign of amount)BofxFPoint of sale debit or credit (which it is depends on sign of amount)CofxTransferEofxElectronic paymentFofxCash withdrawalGofxDirect depositHofxMerchant initiated debitIofx"Repeating payment / standing orderKofxAll the data from an OFX file.Nofx?All the data will be contained in a root tag with the TagName OFX.OofxèThe 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 tags. In OFX, a tag either has data and no child elements, or it has no data and it has child elements.Qofx!The data accompanying an OFX tag.RofxThe name of an OFX tagSofxBAn OFX file starts with a number of headers, which take the form  tag:value< followed by a newline. These are followed by a blank line.UofxThe value in an OFX header.VofxHeaders consists of simple  tag:value! pairs; this represents the tag.WofxQError handling. Errors are indicated with a Left String; successes with a Right.XofxäParses either a UNIX or an MS-DOS newline. According to 1.2.2, 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.Yofx“Parses a character, possibly with an escape sequence. The greater-than sign, less-than sign, and ampersand must be entered with escape sequences.ÿÌAccording to OFX spec section 2.3.2.1, ampersands, less-than signs, and greater-than signs must appear as entities. However some banks deliver broken OFX files that do not use entities for ampersands (and possibly for less-than or greater-than signs too, although I have not yet observed such behavior.) There is now an error message that reflects this problem. Client code can filter the OFX data for known offenders before passing it to this library.[ofx4Parses any opening tag. Returns the name of the tag.\ofx)Parses a closing tag with the given name.]ofx¿Parses any tag. The tag itself must be followed by at least one 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.ÂThe OFX spec seems to say that OFX files do not include trailing newlines after tags or data, but I have seen these newlines in QFX files, so this parses optional trailing newlines and spaces.^ofx-Parses an entire OFX file, including headers.ÆofxAParses an OFX date; provides an error message if the parse fails._ofxXParses an OFX date. Fails if the date is not valid or if there is no date to be parsed.`ofxÉParses an OFX time. Fails if the time is not valid or if there is no time to parse. Fails if there is no time to parse; however, if there is a time but no zone, returns the time and UTC for the zone.aofxKParses a time zone offset. Fails if there is no time zone offset to parse.bofx}Finds child tags with the given name. When a tag is found, that tag is not searched for further children with the same name.cofx¹Descends through a tree of tags to find a tag at a specific 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: 3findPath ["SIGNONMSGSRSV1", "SONRS", "FI", "ORG"] tdofx3Gets the data from a tag, if it is a tag with data.eofx³Goes to a certain path in the tag hierarchy and pulls the requested data, if the tag is present and it is a data tag. For example, to get the name of the financial institution: 3pathData ["SIGNONMSGSRSV1", "SONRS", "FI", "ORG"] ffofx€Gets the name of the financial institution from the FI tag, if available. The OFX spec does not require this tag to be present.gofxaGets the credit card number, if available. The OFX spec does not require this tag to be present.hofxbGets the bank account number, if available. The OFX spec does not require this tag to be present.iofxAGets either the credit card or bank account number, if available.jofx¼Finds the first tag (either this tag or any children) that has the given name and that is a data tag (not an aggregate tag.) If no data tag with the given name is found, returns Nothing.Çofx—Finds the first tag (either this tag or any children) that has the given name and that is a data tag. Gives an error message if the tag is not found.mofx“Gets a single Transaction from a tag. The tag should be the one named STMTTRN. Fails with an error message if any required field was not present.nofx*Parses a Payee record from its parent tag.qofxParses currency data.tofxùPulls all Transactions from a file. Might fail if the OFX file does not conform to the specification (or if there are bugs in this library.) In case of the former, you can manually parse the transaction information yourself using functions like e3. In case of the latter, please send bugreports :-)ofxIParses an input file. Returns either an error message or the resulting K.€ofx(Parses an OFX file and gets the list of &.ofxCLoads an OFX file from disk, parses it, and returns the resulting K. Uses È if the parse fails.‚ofxKLoads an OFX file from disk, parses it, and returns the resulting list of &. Uses È if the parse fails.ƒofxdParses an input file to an OfxFile. Returns a pretty-printed string with the results of the parse.„ofx;Parses an input file to an OfxFile, and then to a list of &4. Returns a pretty-printed string with the results.nofx^The tag which contains the PAYEE tag, if there is one. This would typically be a STMTTRN tag.ofx¥Nothing if there is no PAYEE tag. Just if a PAYEE tag is found, with a Left if the tag is lacking a required element, or a Right if the tag is successfully parsed.GIf there is more than one PAYEE tag, only the first one is considered.qofx>The tag that contains the data, e.g. CURRENCY or ORIGCURRENCY.ƒofxFile contents to parseofxbPretty printed result of rending the result of the parse, which is either an error message or an K.„ofxFile contents to parseofxkPretty printed result of rendering the result of the parse, which is either an error message or a list of &.…  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…WVUSTRQOPKLMNbcdejfghi&'()*+,-./012345678mt9:;<=>?@ABCDEFGHIJl !"#$%nr s kqop€‚ƒ„^XYZ[\]_`auvwxyz{|}~É       !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHIIJKLLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃ"ofx-0.4.4.0-4RaBzGShUblBGqFbadwzIrData.OFX OrigCurrencyCurrency CurrencyData cdCURRATEcdCURSYMAcctType ACHECKINGASAVINGS AMONEYMRKT ACREDITLINECCAcctToctACCTID ctACCTKEY BankAcctTobtBANKID btBRANCHIDbtACCTID btACCTTYPE btACCTKEY CorrectActionREPLACEDELETEPayeepeNAMEpeADDR1peADDR2peADDR3peCITYpeSTATE pePOSTALCODE peCOUNTRYpePHONE Transaction txTRNTYPE txDTPOSTEDtxDTUSER txDTAVAILtxTRNAMTtxFITIDtxCORRECTFITIDtxCORRECTACTION txSRVRTID txCHECKNUMtxREFNUMtxSIC txPAYEEID txPayeeInfo txAccountTotxMEMO txCurrencyTrnTypeTCREDITTDEBITTINTTDIVTFEETSRVCHGTDEPTATMTPOSTXFERTCHECKTPAYMENTTCASH TDIRECTDEP TDIRECTDEBIT TREPEATPMTTOTHEROFXFilefHeaderfTagTagTagDataTagName OFXHeader HeaderValue HeaderTagErrnewlineescCharheader openingTag closingTagtagofxFiledatetimetzOffsetfindfindPathtagDatapathDatafiNamecreditCardNumberbankAccountNumber accountNumberfindDataacctTypetrnType transactionpayeecurrency origCurrency currencyData bankAcctToccAcctTo transactionspPayee pTransactionpTagpHeaderpFilepEitherpMaybepListlabel pExceptional parseOfxFileparseTransactions loadOfxFileloadTransactionsprettyRenderOfxFileprettyRenderTransactions $fEqOFXHeader$fShowOFXHeader$fReadOFXHeader$fDataOFXHeader$fGenericOFXHeader$fEqTag $fShowTag $fReadTag $fDataTag $fGenericTag $fEqOFXFile $fShowOFXFile $fReadOFXFile $fDataOFXFile$fGenericOFXFile $fEqTrnType $fOrdTrnType $fShowTrnType $fReadTrnType $fDataTrnType$fGenericTrnType $fEqPayee $fShowPayee $fReadPayee $fDataPayee$fGenericPayee$fEqCorrectAction$fShowCorrectAction$fReadCorrectAction$fDataCorrectAction$fGenericCorrectAction $fEqCCAcctTo$fShowCCAcctTo$fReadCCAcctTo$fDataCCAcctTo$fGenericCCAcctTo $fEqAcctType$fShowAcctType $fOrdAcctType$fReadAcctType$fDataAcctType$fGenericAcctType$fShowBankAcctTo$fReadBankAcctTo$fDataBankAcctTo$fGenericBankAcctTo$fEqCurrencyData$fShowCurrencyData$fReadCurrencyData$fDataCurrencyData$fGenericCurrencyData $fEqCurrency$fShowCurrency$fReadCurrency$fDataCurrency$fGenericCurrency$fEqOrigCurrency$fShowOrigCurrency$fReadOrigCurrency$fDataOrigCurrency$fGenericOrigCurrency$fShowTransaction$fReadTransaction$fDataTransaction$fGenericTransaction parseDaterequiredbaseGHC.Basefail