Categorygithub.com/aclindsa/ofxgo
modulepackage
0.1.3
Repository: https://github.com/aclindsa/ofxgo.git
Documentation: pkg.go.dev

# README

OFXGo

Go Report Card Build Status Coverage Status PkgGoDev

OFXGo is a library for querying OFX servers and/or parsing the responses. It also provides an example command-line client to demonstrate the use of the library.

Goals

The main purpose of this project is to provide a library to make it easier to query financial information with OFX from the comfort of Golang, without having to marshal/unmarshal to SGML or XML. The library does not intend to abstract away all of the details of the OFX specification, which would be difficult to do well. Instead, it exposes the OFX SGML/XML hierarchy as structs which mostly resemble it. Its primary goal is to enable the creation of other personal finance software in Go (as it was created to allow me to fetch OFX transactions for my own project, MoneyGo).

Because the OFX specification is rather... 'comprehensive,' it can be difficult for those unfamiliar with it to figure out where to start. To that end, I have created a sample command-line client which uses the library to do simple tasks (currently it does little more than list accounts and query for balances and transactions). My hope is that by studying its code, new users will be able to figure out how to use the library much faster than staring at the OFX specification (or this library's API documentation). The command-line client also serves as an easy way for me to test/debug the library with actual financial institutions, which frequently have 'quirks' in their implementations. The command-line client can be found in the cmd/ofx directory of this repository.

Library documentation

Documentation can be found with the go doc tool, or at https://pkg.go.dev/github.com/aclindsa/ofxgo

Example Usage

The following code snippet demonstrates how to use OFXGo to query and parse OFX code from a checking account, printing the balance and returned transactions:

client := ofxgo.BasicClient{} // Accept the default Client settings

// These values are specific to your bank
var query ofxgo.Request
query.URL = "https://secu.example.com/ofx"
query.Signon.Org = ofxgo.String("SECU")
query.Signon.Fid = ofxgo.String("1234")

// Set your username/password
query.Signon.UserID = ofxgo.String("username")
query.Signon.UserPass = ofxgo.String("hunter2")

uid, _ := ofxgo.RandomUID() // Handle error in real code
query.Bank = append(query.Bank, &ofxgo.StatementRequest{
	TrnUID: *uid,
	BankAcctFrom: ofxgo.BankAcct{
		BankID:   ofxgo.String("123456789"),   // Possibly your routing number
		AcctID:   ofxgo.String("00011122233"), // Possibly your account number
		AcctType: ofxgo.AcctTypeChecking,
	},
	Include: true, // Include transactions (instead of only balance information)
})

response, _ := client.Request(&query) // Handle error in real code

// Was there an OFX error while processing our request?
if response.Signon.Status.Code != 0 {
	meaning, _ := response.Signon.Status.CodeMeaning()
	fmt.Printf("Nonzero signon status (%d: %s) with message: %s\n", response.Signon.Status.Code, meaning, response.Signon.Status.Message)
	os.Exit(1)
}

if len(response.Bank) < 1 {
	fmt.Println("No banking messages received")
	os.Exit(1)
}

if stmt, ok := response.Bank[0].(*ofxgo.StatementResponse); ok {
	fmt.Printf("Balance: %s %s (as of %s)\n", stmt.BalAmt, stmt.CurDef, stmt.DtAsOf)
	fmt.Println("Transactions:")
	for _, tran := range stmt.BankTranList.Transactions {
		currency := stmt.CurDef
		if ok, _ := tran.Currency.Valid(); ok {
			currency = tran.Currency.CurSym
		}
		fmt.Printf("%s %-15s %-11s %s%s%s\n", tran.DtPosted, tran.TrnAmt.String()+" "+currency.String(), tran.TrnType, tran.Name, tran.Payee.Name, tran.Memo)
	}
}

Similarly, if you have an OFX file available locally, you can parse it directly:

func main() {
	f, err := os.Open("./transactions.qfx")
	if err != nil {
		fmt.Printf("can't open file: %v\n", err)
		return
	}
	defer f.Close()

	resp, err := ofxgo.ParseResponse(f)
	if err != nil {
		fmt.Printf("can't parse response: %v\n", err)
		return
	}

	// do something with resp (*ofxgo.Response)
}

Requirements

OFXGo requires go >= 1.12

Using the command-line client

To install the command-line client and test it out, you may do the following:

$ go get -v github.com/aclindsa/ofxgo/cmd/ofx && go install -v github.com/aclindsa/ofxgo/cmd/ofx

Once installed (at ~/go/bin/ofx by default, if you haven't set $GOPATH), the command's usage should help you to use it (./ofx --help for a listing of the available subcommands and their purposes, ./ofx subcommand --help for individual subcommand usage).

# Packages

No description provided by the author

# Functions

DecodeResponse parses an OFX response in SGML or XML into a Response object from the given io.Reader.
GetClient returns a new Client for a given URL.
NewAcctClassification returns returns an 'enum' value of type acctClassification given its string representation.
NewAcctType returns returns an 'enum' value of type acctType given its string representation.
NewAssetClass returns returns an 'enum' value of type assetClass given its string representation.
NewBalType returns returns an 'enum' value of type balType given its string representation.
NewBuyType returns returns an 'enum' value of type buyType given its string representation.
NewCallType returns returns an 'enum' value of type callType given its string representation.
NewCharType returns returns an 'enum' value of type charType given its string representation.
NewCheckSup returns returns an 'enum' value of type checkSup given its string representation.
NewCorrectAction returns returns an 'enum' value of type correctAction given its string representation.
NewCouponFreq returns returns an 'enum' value of type couponFreq given its string representation.
NewCurrSymbol returns a new CurrSymbol given a three-letter ISO-4217 currency symbol as a string.
NewDate returns a new Date object with the provided date, time, and timezone.
NewDateGMT returns a new Date object with the provided date and time in the GMT timezone.
NewDebtClass returns returns an 'enum' value of type debtClass given its string representation.
NewDebtType returns returns an 'enum' value of type debtType given its string representation.
NewDiscoverCardClient returns a Client interface configured to handle Discover Card's brand of idiosyncrasy.
NewDuration returns returns an 'enum' value of type duration given its string representation.
NewHolderType returns returns an 'enum' value of type holderType given its string representation.
NewImageRefType returns returns an 'enum' value of type imageRefType given its string representation.
NewImageType returns returns an 'enum' value of type imageType given its string representation.
NewIncomeType returns returns an 'enum' value of type incomeType given its string representation.
NewInv401kSource returns returns an 'enum' value of type inv401kSource given its string representation.
NewLoanPmtFreq returns returns an 'enum' value of type loanPmtFreq given its string representation.
NewMfType returns returns an 'enum' value of type mfType given its string representation.
NewOfxSec returns returns an 'enum' value of type ofxSec given its string representation.
NewOfxVersion returns returns an 'enum' value of type ofxVersion given its string representation.
NewOptAction returns returns an 'enum' value of type optAction given its string representation.
NewOptBuyType returns returns an 'enum' value of type optBuyType given its string representation.
NewOptSellType returns returns an 'enum' value of type optSellType given its string representation.
NewOptType returns returns an 'enum' value of type optType given its string representation.
NewPosType returns returns an 'enum' value of type posType given its string representation.
NewRelType returns returns an 'enum' value of type relType given its string representation.
NewRestriction returns returns an 'enum' value of type restriction given its string representation.
NewSecured returns returns an 'enum' value of type secured given its string representation.
NewSellReason returns returns an 'enum' value of type sellReason given its string representation.
NewSellType returns returns an 'enum' value of type sellType given its string representation.
NewStockType returns returns an 'enum' value of type stockType given its string representation.
NewSubAcctType returns returns an 'enum' value of type subAcctType given its string representation.
NewSvcStatus returns returns an 'enum' value of type svcStatus given its string representation.
NewSyncMode returns returns an 'enum' value of type syncMode given its string representation.
NewTferAction returns returns an 'enum' value of type tferAction given its string representation.
NewTrnType returns returns an 'enum' value of type trnType given its string representation.
NewUnitType returns returns an 'enum' value of type unitType given its string representation.
NewUsProductType returns returns an 'enum' value of type usProductType given its string representation.
NewVanguardClient returns a Client interface configured to handle Vanguard's brand of idiosyncrasy.
ParseResponse parses and validates an OFX response in SGML or XML into a Response object from the given io.Reader It is commonly used as part of Client.Request(), but may be used on its own to parse already-downloaded OFX files (such as those from 'Web Connect').
RandomUID creates a new randomly-generated UID.

# Constants

AcctClassification* constants represent the type of an account.
AcctClassification* constants represent the type of an account.
AcctClassification* constants represent the type of an account.
AcctClassification* constants represent the type of an account.
AcctType* constants represent types of bank accounts.
AcctType* constants represent types of bank accounts.
AcctType* constants represent types of bank accounts.
AcctType* constants represent types of bank accounts.
AcctType* constants represent types of bank accounts.
AssetClass* constants represent type of asset classes.
AssetClass* constants represent type of asset classes.
AssetClass* constants represent type of asset classes.
AssetClass* constants represent type of asset classes.
AssetClass* constants represent type of asset classes.
AssetClass* constants represent type of asset classes.
AssetClass* constants represent type of asset classes.
BalType* constants represent how this BAL's VALUE field should be interpreted.
BalType* constants represent how this BAL's VALUE field should be interpreted.
BalType* constants represent how this BAL's VALUE field should be interpreted.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
BuyType* constants represent types of purchases.
BuyType* constants represent types of purchases.
CallType* constants represent type of next call (for a debt).
CallType* constants represent type of next call (for a debt).
CallType* constants represent type of next call (for a debt).
CallType* constants represent type of next call (for a debt).
CharType* constants represent types of characters allowed in password.
CharType* constants represent types of characters allowed in password.
CharType* constants represent types of characters allowed in password.
CharType* constants represent types of characters allowed in password.
CheckSup* constants represent what portions of the check this image contains.
CheckSup* constants represent what portions of the check this image contains.
CheckSup* constants represent what portions of the check this image contains.
CorrectAction* constants represent whether this transaction correction replaces or deletes the transaction matching its CORRECTFITID.
CorrectAction* constants represent whether this transaction correction replaces or deletes the transaction matching its CORRECTFITID.
CouponFreq* constants represent when debt coupons mature.
CouponFreq* constants represent when debt coupons mature.
CouponFreq* constants represent when debt coupons mature.
CouponFreq* constants represent when debt coupons mature.
CouponFreq* constants represent when debt coupons mature.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
DebtClass* constants represent the class of debt.
DebtClass* constants represent the class of debt.
DebtClass* constants represent the class of debt.
DebtClass* constants represent the class of debt.
DebtType* constants represent debt type.
DebtType* constants represent debt type.
Duration* constants represent how long the investment order is good for.
Duration* constants represent how long the investment order is good for.
Duration* constants represent how long the investment order is good for.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
HolderType* constants represent how the account is held.
HolderType* constants represent how the account is held.
HolderType* constants represent how the account is held.
HolderType* constants represent how the account is held.
HolderType* constants represent how the account is held.
ImageRefType* constants represent the type of reference to the image.
ImageRefType* constants represent the type of reference to the image.
ImageRefType* constants represent the type of reference to the image.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
ImageType* constants represent what this image contains.
ImageType* constants represent what this image contains.
ImageType* constants represent what this image contains.
IncomeType* constants represent types of investment income.
IncomeType* constants represent types of investment income.
IncomeType* constants represent types of investment income.
IncomeType* constants represent types of investment income.
IncomeType* constants represent types of investment income.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
Inv401kSource* constants represent the source of money used for this security in a 401(k) account.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
LoanPmtFreq* constants represent the frequency of loan payments.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
MfType* constants represent types of mutual funds.
MfType* constants represent types of mutual funds.
MfType* constants represent types of mutual funds.
OfxSec* constants represent the type of application-level security required for the message set.
OfxSec* constants represent the type of application-level security required for the message set.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OfxVersion* constants represent the OFX specification version in use.
OptAction* constants represent types of actions for options.
OptAction* constants represent types of actions for options.
OptAction* constants represent types of actions for options.
OptBuyType* constants represent types of purchases for options.
OptBuyType* constants represent types of purchases for options.
OptSellType* constants represent types of sales for options.
OptSellType* constants represent types of sales for options.
OptType* constants represent whether the option is a PUT or a CALL.
OptType* constants represent whether the option is a PUT or a CALL.
PosType* constants represent position type.
PosType* constants represent position type.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
RelType* constants represent related option transaction types.
RelType* constants represent related option transaction types.
RelType* constants represent related option transaction types.
RelType* constants represent related option transaction types.
Restriction* constants represent a special restriction on an investment order.
Restriction* constants represent a special restriction on an investment order.
Restriction* constants represent a special restriction on an investment order.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
Secured* constants represent how an option is secured.
Secured* constants represent how an option is secured.
SellReason* constants represent the reason the sell of a debt security was generated: CALL (the debt was called), SELL (the debt was sold), MATURITY (the debt reached maturity).
SellReason* constants represent the reason the sell of a debt security was generated: CALL (the debt was called), SELL (the debt was sold), MATURITY (the debt reached maturity).
SellReason* constants represent the reason the sell of a debt security was generated: CALL (the debt was called), SELL (the debt was sold), MATURITY (the debt reached maturity).
SellType* constants represent types of sales.
SellType* constants represent types of sales.
Requests.
Responses.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.
StockType* constants represent types of stock.
StockType* constants represent types of stock.
StockType* constants represent types of stock.
StockType* constants represent types of stock.
SubAcctType* constants represent the sub-account type for a source and/or destination of a transaction.
SubAcctType* constants represent the sub-account type for a source and/or destination of a transaction.
SubAcctType* constants represent the sub-account type for a source and/or destination of a transaction.
SubAcctType* constants represent the sub-account type for a source and/or destination of a transaction.
SvcStatus* constants represent the status of the account: AVAIL = Available, but not yet requested, PEND = Requested, but not yet available, ACTIVE = In use.
SvcStatus* constants represent the status of the account: AVAIL = Available, but not yet requested, PEND = Requested, but not yet available, ACTIVE = In use.
SvcStatus* constants represent the status of the account: AVAIL = Available, but not yet requested, PEND = Requested, but not yet available, ACTIVE = In use.
SyncMode* constants represent data synchronization mode supported (see OFX spec for more details).
SyncMode* constants represent data synchronization mode supported (see OFX spec for more details).
TferAction* constants represent whether the transfer is into or out of this account.
TferAction* constants represent whether the transfer is into or out of this account.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
TrnType* constants represent types of transactions.
UnitType* constants represent type of the UNITS value.
UnitType* constants represent type of the UNITS value.
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
UsProductType* constants represent type of investment account (in the US).
These constants are returned by Messages' Type() functions to determine which message set they belong to.
These constants are returned by Messages' Type() functions to determine which message set they belong to.

# Structs

AcctInfo represents generic account information.
AcctInfoRequest represents a request for the server to provide information for all of the user's available accounts at this FI.
AcctInfoResponse contains the information about all a user's accounts accessible from this FI.
Amount represents non-integer values (or at least values for fields that may not necessarily be integers).
AssetPortion represents the percentage of a mutual fund with the given asset classification.
Balance represents a generic (free-form) balance defined by an FI.
BankAcct represents the identifying information for one bank account.
BankAcctInfo contains information about a bank account, including how to access it (BankAcct), and whether it supports downloading transactions (SupTxDl).
BasicClient provides a standard Client implementation suitable for most financial institutions.
BuyDebt represents a transaction purchasing a debt security.
BuyMF represents a transaction purchasing a mutual fund.
BuyOpt represents a transaction purchasing an option.
BuyOther represents a transaction purchasing a type of security not covered by the other Buy* structs.
BuyStock represents a transaction purchasing stock.
CCAcct represents the identifying information for one checking account.
CCAcctInfo contains information about a credit card account, including how to access it (CCAcct), and whether it supports downloading transactions (SupTxDl).
CCStatementRequest represents a request for a credit card statement.
CCStatementResponse represents a credit card statement, including its balances and possibly transactions.
ClosureOpt represents a transaction closing a position for an option.
ContribSecurity identifies current contribution allocation for a security in a 401(k) account.
Currency represents one ISO-4217 currency.
CurrSymbol represents an ISO-4217 currency.
Date represents OFX date/time values.
DebtInfo provides information about a debt security.
DebtPosition represents a position held in a debt security.
DiscoverCardClient provides a Client implementation which handles DiscoverCard's broken HTTP header behavior.
FiAssetPortion represents the percentage of a mutual fund with the given FI-defined asset classification (AssetPortion should be used for all asset classifications defined by the assetClass enum).
HolderInfo contains the information a FI has about an account-holder.
ImageData represents the metadata surrounding a check or other image file, including how to retrieve the image.
Income represents a transaction where investment income is being realized as cash into the investment account.
Inv401K is included in InvStatementResponse for 401(k) accounts and provides a summary of the 401(k) specific information about the user's account.
Inv401KBal provides the balances for different 401(k) subaccount types, as well as the total cash value of the securities held.
Inv401KSummaryAggregate represents the total of either contributions, withdrawals, or earnings made in each contribution type in a given period (dates specified in a containing Inv401KSummaryPeriod).
Inv401KSummaryPeriod contains the total contributions, withdrawals, and earnings made in the given date range.
InvAcct represents the identifying information for one investment account.
InvAcctInfo contains information about an investment account, including how to access it (InvAcct), and whether it supports downloading transactions (SupTxDl).
InvBalance contains three (or optionally four) specified balances as well as a free-form list of generic balance information which may be provided by an FI.
InvBankTransaction is a banking transaction performed in an investment account.
InvBuy represents generic investment purchase transaction.
InvExpense represents a transaction realizing an expense associated with an investment.
InvPosition contains generic position information included in each of the other *Position types.
InvSell represents generic investment sale transaction.
InvStatementRequest allows a customer to request transactions, positions, open orders, and balances.
InvStatementResponse includes requested transaction, position, open order, and balance information for an investment account.
InvTran represents generic investment transaction.
InvTranList represents a list of investment account transactions.
JrnlFund represents a transaction journaling cash holdings between sub-accounts within the same investment account.
JrnlSec represents a transaction journaling security holdings between sub-accounts within the same investment account.
LoanInfo represents a loan outstanding against this 401(k) account.
MarginInterest represents a transaction realizing a margin interest expense.
MessageSet represents one message set supported by an FI and its capabilities.
MFInfo provides information about a mutual fund.
MFPosition represents a position held in a mutual fund.
OO represents a generic open investment order.
OOBuyDebt represents an open order to purchase a debt security.
OOBuyMF represents an open order to purchase a mutual fund.
OOBuyOpt represents an open order to purchase an option.
OOBuyOther represents an open order to purchase a security type not covered by the other OOBuy* elements.
OOBuyStock represents an open order to purchase stock.
OOSellDebt represents an open order to sell a debt security.
OOSellMF represents an open order to sell a mutual fund.
OOSellOpt represents an open order to sell an option.
OOSellOther represents an open order to sell a security type not covered by the other OOSell* elements.
OOSellStock represents an open order to sell stock.
OOSwitchMF represents an open order to switch to or purchase a different mutual fund.
OptInfo provides information about an option.
OptPosition represents a position held in an option.
OtherInfo provides information about a security type not covered by the other *Info elements.
OtherPosition represents a position held in a security type not covered by the other *Position elements.
Payee specifies a complete billing address for a payee.
PendingTransaction represents a single pending transaction.
PendingTransactionList represents a list of pending transactions, along with the date they were generated.
ProfileRequest represents a request for a server to provide a profile of its capabilities (which message sets and versions it supports, how to access them, which languages and which types of synchronization they support, etc.).
ProfileResponse contains a requested profile of the server's capabilities (which message sets and versions it supports, how to access them, which languages and which types of synchronization they support, etc.).
Reinvest is a single transaction that contains both income and an investment transaction.
Request is the top-level object marshalled and sent to OFX servers.
Response is the top-level object returned from a parsed OFX response file.
RetOfCap represents a transaction where capital is being returned to the account holder.
SecInfo represents the generic information about a security.
SecListRequest represents a request for information (namely price) about one or more securities.
SecListResponse is always empty (except for the transaction UID, status, and optional client cookie).
SecurityID identifies a security by its CUSIP (for US-based FI's, others may use UniqueID types other than CUSIP).
SecurityList is a container for Security objects containaing information about securities.
SecurityRequest represents a request for one security.
SellDebt represents the sale of a debt security.
SellMF represents a transaction selling a mutual fund.
SellOpt represents a transaction selling an option.
SellOther represents a transaction selling a security type not covered by the other Sell* structs.
SellStock represents a transaction selling stock.
SignonInfo provides the requirements to login to a single signon realm.
SignonRequest identifies and authenticates a user to their FI and is provided with every Request.
SignonResponse is provided with every Response and indicates the success or failure of the SignonRequest in the corresponding Request.
Split represents a stock or mutual fund split.
StatementRequest represents a request for a bank statement.
StatementResponse represents a bank account statement, including its balances and possibly transactions.
Status represents the status of a Response (both top-level Request objects, and *Response objects).
StockInfo provides information about a security type.
StockPosition represents a position held in a stock.
Transaction represents a single banking transaction.
TransactionList represents a list of bank transactions, and also includes the date range its transactions cover.
Transfer represents the transfer of securities into or out of an account.
VanguardClient provides a Client implementation which handles Vanguard's cookie-passing requirements.
VestInfo provides the vesting percentage of a 401(k) account as of a particular date (past, present, or future).

# Interfaces

Client serves to aggregate OFX client settings that may be necessary to talk to a particular server due to quirks in that server's implementation.
InvTransaction is a generic interface met by all investment transactions (Buy*, Sell*, & co.).
Message represents an OFX message in a message set.
OpenOrder is an interface satisfied by all the OO* elements.
Position is an interface satisfied by all the other *Position types.
Security is satisfied by all *Info elements providing information about securities for SecurityList.

# Type aliases

Boolean provides helper methods to unmarshal bool values from OFX SGML/XML.
Int provides helper methods to unmarshal int64 values from SGML/XML.
MessageSetList is a list of MessageSets (necessary because they must be manually parsed).
OOList represents a list of open orders (OO* elements).
PositionList represents a list of positions held in securities in an investment account.
String provides helper methods to unmarshal OFX string values from SGML/XML.
UID represents an UID according to the OFX spec.