asgrim / ofxparser

:moneybag: OFX File Parser
MIT License
108 stars 100 forks source link

Unable to parse Google Finance ("Investment" type) OFX #15

Open ArakTaiRoth opened 8 years ago

ArakTaiRoth commented 8 years ago

Hey there, I've just tried parsing an OFX file from a dummy account on Google Finance and I get the following really long error:

Failed to parse OFX: array ( 0 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 11, 'message' => 'Opening and ending tag mismatch: MEMO line 67 and INVTRAN ', 'file' => '', 'line' => 69, )), 1 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 13, 'message' => 'Opening and ending tag mismatch: INVTRAN line 61 and INVBUY ', 'file' => '', 'line' => 89, )), 2 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 12, 'message' => 'Opening and ending tag mismatch: INVBUY line 59 and BUYSTOCK ', 'file' => '', 'line' => 93, )), 3 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 11, 'message' => 'Opening and ending tag mismatch: MEMO line 105 and INVTRAN ', 'file' => '', 'line' => 107, )), 4 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 13, 'message' => 'Opening and ending tag mismatch: INVTRAN line 99 and INVBUY ', 'file' => '', 'line' => 127, )), 5 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 12, 'message' => 'Opening and ending tag mismatch: INVBUY line 97 and BUYSTOCK ', 'file' => '', 'line' => 131, )), 6 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 11, 'message' => 'Opening and ending tag mismatch: MEMO line 143 and INVTRAN ', 'file' => '', 'line' => 145, )), 7 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 14, 'message' => 'Opening and ending tag mismatch: INVTRAN line 137 and INVSELL ', 'file' => '', 'line' => 165, )), 8 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 13, 'message' => 'Opening and ending tag mismatch: INVSELL line 135 and SELLSTOCK ', 'file' => '', 'line' => 169, )), 9 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 15, 'message' => 'Opening and ending tag mismatch: SELLSTOCK line 133 and INVTRANLIST ', 'file' => '', 'line' => 171, )), 10 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 13, 'message' => 'Opening and ending tag mismatch: BUYSTOCK line 95 and INVSTMTRS ', 'file' => '', 'line' => 173, )), 11 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 16, 'message' => 'Opening and ending tag mismatch: BUYSTOCK line 57 and INVSTMTTRNRS ', 'file' => '', 'line' => 175, )), 12 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 22, 'message' => 'Opening and ending tag mismatch: INVTRANLIST line 51 and INVSTMTMSGSRSV1 ', 'file' => '', 'line' => 177, )), 13 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 7, 'message' => 'Opening and ending tag mismatch: INVSTMTRS line 37 and OFX ', 'file' => '', 'line' => 207, )), 14 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 77, 'column' => 7, 'message' => 'Premature end of data in tag INVSTMTTRNRS line 25 ', 'file' => '', 'line' => 207, )), 15 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 77, 'column' => 7, 'message' => 'Premature end of data in tag INVSTMTMSGSRSV1 line 23 ', 'file' => '', 'line' => 207, )), 16 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 77, 'column' => 7, 'message' => 'Premature end of data in tag OFX line 1 ', 'file' => '', 'line' => 207, )), )

This is with the following data:

OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE

<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<DTSERVER>20151130171040.594
<LANGUAGE>ENG
</SONRS>
</SIGNONMSGSRSV1>
<INVSTMTMSGSRSV1>
<INVSTMTTRNRS>
<TRNUID>1001
<STATUS>
<CODE>0
<SEVERITY>INFO
</STATUS>
<INVSTMTRS>
<DTASOF>20151130171040.594
<CURDEF>USD
<INVACCTFROM>
<BROKERID>google.com
<ACCTID>StockersTest
</INVACCTFROM>
<INVTRANLIST>
<DTSTART>20100401000000.000
<DTEND>20150401000000.000
<BUYSTOCK>
<INVBUY>
<INVTRAN>
<FITID>1
<DTTRADE>20100401000000.000
<MEMO>
</INVTRAN>
<SECID>
<UNIQUEID>TSE:T
<UNIQUEIDTYPE>TICKER
</SECID>
<UNITS>5
<UNITPRICE>20
<TOTAL>-100
<SUBACCTSEC>CASH
<SUBACCTFUND>CASH
</INVBUY>
<BUYTYPE>BUY
</BUYSTOCK>
<BUYSTOCK>
<INVBUY>
<INVTRAN>
<FITID>3
<DTTRADE>20150101000000.000
<MEMO>
</INVTRAN>
<SECID>
<UNIQUEID>TSE:T
<UNIQUEIDTYPE>TICKER
</SECID>
<UNITS>20
<UNITPRICE>35
<TOTAL>-700
<SUBACCTSEC>CASH
<SUBACCTFUND>CASH
</INVBUY>
<BUYTYPE>BUY
</BUYSTOCK>
<SELLSTOCK>
<INVSELL>
<INVTRAN>
<FITID>2
<DTTRADE>20150401000000.000
<MEMO>
</INVTRAN>
<SECID>
<UNIQUEID>TSE:T
<UNIQUEIDTYPE>TICKER
</SECID>
<UNITS>-20
<UNITPRICE>42.06
<TOTAL>841.2
<SUBACCTSEC>CASH
<SUBACCTFUND>CASH
</INVSELL>
<SELLTYPE>SELL
</SELLSTOCK>
</INVTRANLIST>
</INVSTMTRS>
</INVSTMTTRNRS>
</INVSTMTMSGSRSV1>
<SECLISTMSGSRSV1>
<SECLIST>
<STOCKINFO>
<SECINFO>
<SECID>
<UNIQUEID>TSE:T
<UNIQUEIDTYPE>TICKER
</SECID>
<SECNAME>TELUS Corporation
<TICKER>T
</SECINFO>
</STOCKINFO>
</SECLIST>
</SECLISTMSGSRSV1>
</OFX>
jmarcelocjr commented 8 years ago

Same here, however with another bank (Banco do Brasil) with the following error:

Failed to parse OFX: array ( 0 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 8, 'message' => 'Opening and ending tag mismatch: STATUS line 7 and CODE ', 'file' => '', 'line' => 10, )), 1 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 13, 'message' => 'Opening and ending tag mismatch: SONRS line 5 and SEVERITY ', 'file' => '', 'line' => 13, )), 2 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 11, 'message' => 'Opening and ending tag mismatch: SIGNONMSGSRSV1 line 3 and STATUS ', 'file' => '', 'line' => 15, )), 3 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 76, 'column' => 9, 'message' => 'Opening and ending tag mismatch: OFX line 1 and SONRS ', 'file' => '', 'line' => 31, )), 4 => LibXMLError::__set_state(array( 'level' => 3, 'code' => 5, 'column' => 1, 'message' => 'Extra content at the end of the document ', 'file' => '', 'line' => 33, )), )

File:

OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE
<OFX>
<SIGNONMSGSRSV1>
 <SONRS>
  <STATUS>
   <CODE>0</CODE>
   <SEVERITY>INFO</SEVERITY>
  </STATUS>
  <DTSERVER>20151209
  <LANGUAGE>POR
  <DTACCTUP>20151209
  <FI>
   <ORG>Banco do Brasil S/A
   <FID>001
  </FI>
 </SONRS>
</SIGNONMSGSRSV1>
<BANKMSGSRSV1>
 <STMTTRNRS>
  <TRNUID>0
   <STATUS>
    <CODE>0
    <SEVERITY>INFO
   </STATUS>
   <STMTRS>
    <CURDEF>BRL
    <BANKACCTFROM>
     <BANKID>001
     <ACCTID>455000-5 
     <ACCTTYPE>CHECKING
    </BANKACCTFROM>
    <BANKTRANLIST>
     <DTSTART>20151030 
     <DTEND>20151130 
     <STMTTRN>
      <TRNTYPE>DEP 
      <DTPOSTED>20151103 
      <TRNAMT>239.55 
      <FITID>20151103023955 
      <CHECKNUM>252602 
      <MEMO>DOC CRÉDITO EM CONTA      
     </STMTTRN>
    </BANKTRANLIST>
    <LEDGERBAL>
     <BALAMT>239.35
     <DTASOF>20151209
    </LEDGERBAL>
    <MKTGINFO>Banco do Brasil, esse parceiro é todo seu.
   </STMTRS>
  </STMTTRNRS>
</BANKMSGSRSV1>
</OFX>
asgrim commented 8 years ago

What version are you using please? If you're using 1.1.1, please could you try with 1.1.0?

jmarcelocjr commented 8 years ago

it was 1.1.1, tried with 1.1.0 and works fine, however now i'm having charset issues (UTF-8)

PiX06 commented 8 years ago

I was having the same problem but found that the issue is resolved by commenting the following line:

$ofxContent = str_replace("<", "\n<", $ofxContent); //add linebreaks to allow XML to parse

I would suggest that the above line could be removed but not sure if it may be required in other circumstances. Perhaps a check needs to be added to the parser to check which version of OFX the file header states the file to be and then only add the linebreaks for versions that require it.

asgrim commented 8 years ago

@jmarcelocjr the "Banco do Brasil" OFX file issue you reported is a separate issue to the original Google OFX format reported by @ArakTaiRoth above. I've resolved that in #27 - but keeping this issue open as the original issue persists.

asgrim commented 7 years ago

Another nice example of "investment" format OFX reported in #37

billm950 commented 7 years ago

another example from another brokerage.

OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:42e45d2f2af447c1a5d349340379ca9e

<OFX>
  <SIGNONMSGSRSV1>
    <SONRS>
      <STATUS>
        <CODE>0
        <SEVERITY>INFO
        <MESSAGE>SUCCESS
      </STATUS>
      <DTSERVER>20170206182255
      <LANGUAGE>ENG
      <FI>
        <ORG>ISC
        <FID>5104
      </FI>
    </SONRS>
  </SIGNONMSGSRSV1>
  <INVSTMTMSGSRSV1>
    <INVSTMTTRNRS>
      <TRNUID>400c0cb71ec8404e97bed5007174dbba
      <STATUS>
        <CODE>0
        <SEVERITY>INFO
        <MESSAGE>SUCCESS
      </STATUS>
      <CLTCOOKIE>4
      <INVSTMTRS>
        <DTASOF>20170206
        <CURDEF>USD
        <INVACCTFROM>
          <BROKERID>SCHWAB.COM
          <ACCTID>00000000
        </INVACCTFROM>
        <INVTRANLIST>
          <DTSTART>20170107
          <DTEND>20170205120000
          <BUYOTHER>
            <INVBUY>
              <INVTRAN>
                <FITID>000000002017020112000020170201224327580739145
                <DTTRADE>20170201120000
                <MEMO>Reinvest of POWERSHARES PREFERRED   PORTFOLIO ETF
              </INVTRAN>
              <SECID>
                <UNIQUEID>73936T565
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <UNITS>0.0048
              <UNITPRICE>14.5799
              <TOTAL>-0.07
              <SUBACCTSEC>CASH
              <SUBACCTFUND>CASH
            </INVBUY>
          </BUYOTHER>
          <BUYOTHER>
            <INVBUY>
              <INVTRAN>
                <FITID>000000002017020112000020170201224327580737144
                <DTTRADE>20170201120000
                <MEMO>Reinvest of POWERSHARES PREFERRED   PORTFOLIO ETF
              </INVTRAN>
              <SECID>
                <UNIQUEID>73936T565
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <UNITS>0.0096
              <UNITPRICE>14.5799
              <TOTAL>-0.14
              <SUBACCTSEC>CASH
              <SUBACCTFUND>CASH
            </INVBUY>
          </BUYOTHER>
          <INCOME>
            <INVTRAN>
              <FITID>0000000020170131120000201701312223080748291
              <DTTRADE>20170131120000
              <MEMO>POWERSHARES PREFERRED   PORTFOLIO ETF
            </INVTRAN>
            <SECID>
              <UNIQUEID>73936T565
              <UNIQUEIDTYPE>CUSIP
            </SECID>
            <INCOMETYPE>DIV
            <TOTAL>0.07
            <SUBACCTSEC>CASH
            <SUBACCTFUND>CASH
          </INCOME>
          <INCOME>
            <INVTRAN>
              <FITID>0000000020170131120000201701312223080748281
              <DTTRADE>20170131120000
              <MEMO>POWERSHARES PREFERRED   PORTFOLIO ETF
            </INVTRAN>
            <SECID>
              <UNIQUEID>73936T565
              <UNIQUEIDTYPE>CUSIP
            </SECID>
            <INCOMETYPE>DIV
            <TOTAL>0.14
            <SUBACCTSEC>CASH
            <SUBACCTFUND>CASH
          </INCOME>
          <BUYSTOCK>
            <INVBUY>
              <INVTRAN>
                <FITID>00000000201701181200002017011813201357502010
                <DTTRADE>20170118120000
                <DTSETTLE>20170123120000
                <MEMO>POWERSHARES PREFERRED   PORTFOLIO ETF
              </INVTRAN>
              <SECID>
                <UNIQUEID>73936T565
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <UNITS>1.0000
              <UNITPRICE>14.5200
              <FEES>0.00
              <TOTAL>-14.52
              <SUBACCTSEC>CASH
              <SUBACCTFUND>CASH
            </INVBUY>
            <BUYTYPE>BUY
          </BUYSTOCK>
          <BUYSTOCK>
            <INVBUY>
              <INVTRAN>
                <FITID>000000002017011812000020170118100815858072529
                <DTTRADE>20170118120000
                <DTSETTLE>20170123120000
                <MEMO>SCHWAB US BROAD MARKET  ETF
              </INVTRAN>
              <SECID>
                <UNIQUEID>808524102
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <UNITS>2.0000
              <UNITPRICE>54.8800
              <FEES>0.00
              <TOTAL>-109.76
              <SUBACCTSEC>CASH
              <SUBACCTFUND>CASH
            </INVBUY>
            <BUYTYPE>BUY
          </BUYSTOCK>
          <BUYSTOCK>
            <INVBUY>
              <INVTRAN>
                <FITID>00000000201701181200002017011810034716799110
                <DTTRADE>20170118120000
                <DTSETTLE>20170123120000
                <MEMO>SCHWAB EMERGING MARKETS EQUITY ETF
              </INVTRAN>
              <SECID>
                <UNIQUEID>808524706
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <UNITS>1.0000
              <UNITPRICE>22.4600
              <FEES>0.00
              <TOTAL>-22.46
              <SUBACCTSEC>CASH
              <SUBACCTFUND>CASH
            </INVBUY>
            <BUYTYPE>BUY
          </BUYSTOCK>
          <INVBANKTRAN>
            <STMTTRN>
              <TRNTYPE>CREDIT
              <DTPOSTED>20170118120000
              <DTAVAIL>20170118120000
              <TRNAMT>151.62
              <FITID>0000000020170118120000201701180552448211001516
              <CORRECTACTION>REPLACE
              <NAME>TRANSFER FUNDS FROM SCHWAB BANK
              <MEMO>TRANSFER FUNDS FROM SCHWAB BANK - 00000000000
            </STMTTRN>
            <SUBACCTFUND>CASH
          </INVBANKTRAN>
        </INVTRANLIST>
        <INVPOSLIST>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>73936T565
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>1.0000
              <UNITPRICE>14.6800
              <MKTVAL>14.68
              <DTPRICEASOF>20170205210000
              <MEMO>POWERSHARES PREFERRED   PORTFOLIO ETF
            </INVPOS>
          </POSSTOCK>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>73936T565
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>3.0394
              <UNITPRICE>14.6800
              <MKTVAL>44.62
              <DTPRICEASOF>20170205210000
              <MEMO>POWERSHARES PREFERRED   PORTFOLIO ETF
            </INVPOS>
          </POSSTOCK>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>808524706
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>11.0000
              <UNITPRICE>23.0500
              <MKTVAL>253.55
              <DTPRICEASOF>20170205210000
              <MEMO>SCHWAB EMERGING MARKETS EQUITY ETF
            </INVPOS>
          </POSSTOCK>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>808524805
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>8.0000
              <UNITPRICE>28.7400
              <MKTVAL>229.92
              <DTPRICEASOF>20170205210000
              <MEMO>SCHWAB INTERNATIONAL    EQUITY ETF
            </INVPOS>
          </POSSTOCK>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>808524102
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>8.0000
              <UNITPRICE>55.5400
              <MKTVAL>444.32
              <DTPRICEASOF>20170205210000
              <MEMO>SCHWAB US BROAD MARKET  ETF
            </INVPOS>
          </POSSTOCK>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>808524797
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>45.4866
              <UNITPRICE>43.3600
              <MKTVAL>1972.30
              <DTPRICEASOF>20170205210000
              <MEMO>SCHWAB US DIVIDEND      EQUITY ETF
            </INVPOS>
          </POSSTOCK>
          <POSSTOCK>
            <INVPOS>
              <SECID>
                <UNIQUEID>808524201
                <UNIQUEIDTYPE>CUSIP
              </SECID>
              <HELDINACCT>OTHER
              <POSTYPE>LONG
              <UNITS>4.0000
              <UNITPRICE>54.6800
              <MKTVAL>218.72
              <DTPRICEASOF>20170205210000
              <MEMO>SCHWAB US LARGE CAP ETF
            </INVPOS>
          </POSSTOCK>
        </INVPOSLIST>
        <INVBAL>
          <AVAILCASH>4.88
          <MARGINBALANCE>4.88
          <SHORTBALANCE>0.00
          <BUYPOWER>4.88
          <BALLIST>
            <BAL>
              <NAME>Cash Account Long
              <DESC>Value of Securities held in Cash sub Account
              <BALTYPE>DOLLAR
              <VALUE>29.26
            </BAL>
            <BAL>
              <NAME>Margin Account Long
              <DESC>Value of Securities held in Margin sub Account
              <BALTYPE>DOLLAR
              <VALUE>3154.74
            </BAL>
            <BAL>
              <NAME>Option Account Market Value
              <DESC>Value of Options positions held in the Option sub Account
              <BALTYPE>DOLLAR
              <VALUE>0.00
            </BAL>
            <BAL>
              <NAME>Schwab One Limit
              <DESC>The maximum amount you can withdraw from your SchwabOne Account
              <BALTYPE>DOLLAR
              <VALUE>4.88
            </BAL>
            <BAL>
              <NAME>Margin Account Equity
              <DESC>The value of securities and funds in the Margin sub Accounts
              <BALTYPE>DOLLAR
              <VALUE>3159.62
            </BAL>
            <BAL>
              <NAME>Equity Percent
              <DESC>Margin Account Equity divided by the market value of the Margin sub Account
              <BALTYPE>PERCENT
              <VALUE>100.00
            </BAL>
            <BAL>
              <NAME>SMA
              <DESC>Special Memorandum Account authorized by the Federal Reserve Board
              <BALTYPE>DOLLAR
              <VALUE>1596.00
            </BAL>
            <BAL>
              <NAME>MTD Div and Interest
              <DESC>The amount of dividends and interest declared for securities and not yet paid
              <BALTYPE>DOLLAR
              <VALUE>0.00
            </BAL>
            <BAL>
              <NAME>MTD Interest Owed
              <DESC>Margin interest due Schwab for the period
              <BALTYPE>DOLLAR
              <VALUE>0.00
            </BAL>
            <BAL>
              <NAME>Total Account Value
              <DESC>Account Net Worth
              <BALTYPE>DOLLAR
              <VALUE>3182.99
            </BAL>
            <BAL>
              <NAME>Day Change Dollar
              <DESC>Net Worth Change
              <BALTYPE>DOLLAR
              <VALUE>-5.89
            </BAL>
            <BAL>
              <NAME>Day Change Percent
              <DESC>Net Worth Change Percent
              <BALTYPE>PERCENT
              <VALUE>-0.18
            </BAL>
            <BAL>
              <NAME>Cash and Cash Investments
              <DESC>Total Funds Balance in the account
              <BALTYPE>DOLLAR
              <VALUE>4.88
            </BAL>
          </BALLIST>
        </INVBAL>
      </INVSTMTRS>
    </INVSTMTTRNRS>
  </INVSTMTMSGSRSV1>
  <SECLISTMSGSRSV1>
    <SECLIST>
      <STOCKINFO>
        <SECINFO>
          <SECID>
            <UNIQUEID>73936T565
            <UNIQUEIDTYPE>CUSIP
          </SECID>
          <SECNAME>POWERSHARES PREFERRED   PORTFOLIO ETF
          <TICKER>PGX
        </SECINFO>
        <STOCKTYPE>OTHER
        <YIELD>0.0000
      </STOCKINFO>
      <STOCKINFO>
        <SECINFO>
          <SECID>
            <UNIQUEID>808524102
            <UNIQUEIDTYPE>CUSIP
          </SECID>
          <SECNAME>SCHWAB US BROAD MARKET  ETF
          <TICKER>SCHB
        </SECINFO>
        <STOCKTYPE>OTHER
        <YIELD>0.0000
      </STOCKINFO>
      <STOCKINFO>
        <SECINFO>
          <SECID>
            <UNIQUEID>808524706
            <UNIQUEIDTYPE>CUSIP
          </SECID>
          <SECNAME>SCHWAB EMERGING MARKETS EQUITY ETF
          <TICKER>SCHE
        </SECINFO>
        <STOCKTYPE>OTHER
        <YIELD>0.0000
      </STOCKINFO>
      <STOCKINFO>
        <SECINFO>
          <SECID>
            <UNIQUEID>808524805
            <UNIQUEIDTYPE>CUSIP
          </SECID>
          <SECNAME>SCHWAB INTERNATIONAL    EQUITY ETF
          <TICKER>SCHF
        </SECINFO>
        <STOCKTYPE>OTHER
        <YIELD>0.0000
      </STOCKINFO>
      <STOCKINFO>
        <SECINFO>
          <SECID>
            <UNIQUEID>808524797
            <UNIQUEIDTYPE>CUSIP
          </SECID>
          <SECNAME>SCHWAB US DIVIDEND      EQUITY ETF
          <TICKER>SCHD
        </SECINFO>
        <STOCKTYPE>OTHER
        <YIELD>0.0000
      </STOCKINFO>
      <STOCKINFO>
        <SECINFO>
          <SECID>
            <UNIQUEID>808524201
            <UNIQUEIDTYPE>CUSIP
          </SECID>
          <SECNAME>SCHWAB US LARGE CAP ETF
          <TICKER>SCHX
        </SECINFO>
        <STOCKTYPE>OTHER
        <YIELD>0.0000
      </STOCKINFO>
    </SECLIST>
  </SECLISTMSGSRSV1>
</OFX>