Skip to content

Commit

Permalink
Interactive Brokers statement import: Split with symbol change for de…
Browse files Browse the repository at this point in the history
…faulted asset.
  • Loading branch information
titov-vv committed Apr 6, 2024
1 parent be2484b commit fcf39f8
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 1 deletion.
4 changes: 3 additions & 1 deletion jal/data_import/broker_statements/ibkr.py
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,9 @@ def find_corp_action_pair(self, asset, description, action, parts_b):
paired_record = list(filter(
lambda pair: pair['asset'] == asset
and (pair['description'].startswith(description + ", ")
or pair['description'].startswith(description + ".OLD, "))
or pair['description'].startswith(description + ".OLD, ")
or pair['description'].startswith(description + "D, ")
or pair['description'].startswith(description + "D.OLD, "))
and pair['type'] == action['type']
and pair['timestamp'] == action['timestamp'], parts_b))
if len(paired_record) != 1:
Expand Down
27 changes: 27 additions & 0 deletions tests/test_data/ibkr_corp_actions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"period": [1672531200, 1704067199],
"accounts": [
{"id": 1, "number": "U7654321", "currency": 1, "precision": 10, "cash_begin": 12.345, "cash_end": 1234567.249966388, "cash_end_settled": 1234567.89}],
"assets": [
{"id": 1, "type": "money", "name": ""},
{"id": 2, "type": "stock", "name": "TWO HANDS CORP", "isin": "US90187E5015"},
{"id": 3, "type": "stock", "name": "TWO HANDS CORP", "isin": "US90187E4026"}
],
"symbols": [
{"id": 1, "asset": 1, "symbol": "USD"},
{"id": 2, "asset": 2, "symbol": "TWOHD", "currency": 1, "note": "PINK"},
{"id": 3, "asset": 3, "symbol": "TWOHD", "currency": 1, "note": "PINK"}
],
"assets_data": [
{"id": 1, "asset": 2, "reg_number": "90187E501"},
{"id": 2, "asset": 3, "reg_number": "90187E402"}
],
"asset_payments": [],
"corporate_actions": [
{"id": 1, "type": "split", "account": 1, "timestamp": 1695932700, "number": "25164201871", "asset": 3, "quantity": 35.0,
"outcome": [{"asset": 2, "quantity": 0.035, "share": 1.0}], "description": "TWOH(US90187E4026) SPLIT 1 FOR 1000 (TWOHD, TWO HANDS CORP, US90187E5015)"}
],
"income_spending": [],
"trades": [],
"transfers": []
}
20 changes: 20 additions & 0 deletions tests/test_data/ibkr_corp_actions.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<FlexQueryResponse queryName="Full" type="AF">
<FlexStatements count="1">
<FlexStatement accountId="U7654321" fromDate="20230101" toDate="20231231" period="LastBusinessDay" whenGenerated="20231231;000000">
<AccountInformation accountId="U7654321" acctAlias="" model="" currency="USD" name="Ivan Ivanov" accountType="Individual" customerType="Individual" accountCapabilities="Cash" tradingPermissions="Stocks,Warrants,Bonds,Forex" accountRepName="" accountRepPhone="" dateOpened="20210101" dateFunded="20210101" dateClosed="" ibEntity="IBLLC-US" primaryEmail="" />
<CashReport>
<CashReportCurrency accountId="U7654321" acctAlias="" model="" currency="BASE_SUMMARY" levelOfDetail="BaseCurrency" fromDate="20220101" toDate="20221213" startingCash="12.345" startingCashSec="12.345" startingCashCom="0" clientFees="0" clientFeesSec="0" clientFeesCom="0" clientFeesMTD="0" clientFeesYTD="0" commissions="0" commissionsSec="0" commissionsCom="0" commissionsMTD="0" commissionsYTD="0" commissionCreditsRedemption="0" commissionCreditsRedemptionSec="0" commissionCreditsRedemptionCom="0" commissionCreditsRedemptionMTD="0" commissionCreditsRedemptionYTD="0" billableCommissions="0" billableCommissionsSec="0" billableCommissionsCom="0" billableCommissionsMTD="0" billableCommissionsYTD="0" depositWithdrawals="0" depositWithdrawalsSec="0" depositWithdrawalsCom="0" depositWithdrawalsMTD="0" depositWithdrawalsYTD="0" deposits="0" depositsSec="0" depositsCom="0" depositsMTD="0" depositsYTD="0" withdrawals="0" withdrawalsSec="0" withdrawalsCom="0" withdrawalsMTD="0" withdrawalsYTD="0" accountTransfers="0" accountTransfersSec="0" accountTransfersCom="0" accountTransfersMTD="0" accountTransfersYTD="0" linkingAdjustments="0" linkingAdjustmentsSec="0" linkingAdjustmentsCom="0" internalTransfers="0" internalTransfersSec="0" internalTransfersCom="0" internalTransfersMTD="0" internalTransfersYTD="0" debitCardActivity="0" debitCardActivitySec="0" debitCardActivityCom="0" debitCardActivityMTD="0" debitCardActivityYTD="0" billPay="0" billPaySec="0" billPayCom="0" billPayMTD="0" billPayYTD="0" dividends="0" dividendsSec="0" dividendsCom="0" dividendsMTD="0" dividendsYTD="12.34" insuredDepositInterest="0" insuredDepositInterestSec="0" insuredDepositInterestCom="0" insuredDepositInterestMTD="0" insuredDepositInterestYTD="0" brokerInterest="0" brokerInterestSec="0" brokerInterestCom="0" brokerInterestMTD="0" brokerInterestYTD="0" bondInterest="0" bondInterestSec="0" bondInterestCom="0" bondInterestMTD="0" bondInterestYTD="0" cashSettlingMtm="0" cashSettlingMtmSec="0" cashSettlingMtmCom="0" cashSettlingMtmMTD="0" cashSettlingMtmYTD="0" realizedVm="0" realizedVmSec="0" realizedVmCom="0" realizedVmMTD="0" realizedVmYTD="0" realizedForexVm="0" realizedForexVmSec="0" realizedForexVmCom="0" realizedForexVmMTD="0" realizedForexVmYTD="0" cfdCharges="0" cfdChargesSec="0" cfdChargesCom="0" cfdChargesMTD="0" cfdChargesYTD="0" netTradesSales="0" netTradesSalesSec="0" netTradesSalesCom="0" netTradesSalesMTD="0" netTradesSalesYTD="0" netTradesPurchases="0" netTradesPurchasesSec="0" netTradesPurchasesCom="0" netTradesPurchasesMTD="0" netTradesPurchasesYTD="0" advisorFees="0" advisorFeesSec="0" advisorFeesCom="0" advisorFeesMTD="0" advisorFeesYTD="0" feesReceivables="0" feesReceivablesSec="0" feesReceivablesCom="0" feesReceivablesMTD="0" feesReceivablesYTD="0" paymentInLieu="0" paymentInLieuSec="0" paymentInLieuCom="0" paymentInLieuMTD="0" paymentInLieuYTD="0" transactionTax="0" transactionTaxSec="0" transactionTaxCom="0" transactionTaxMTD="0" transactionTaxYTD="0" taxReceivables="0" taxReceivablesSec="0" taxReceivablesCom="0" taxReceivablesMTD="0" taxReceivablesYTD="0" withholdingTax="0" withholdingTaxSec="0" withholdingTaxCom="0" withholdingTaxMTD="0" withholdingTaxYTD="18.11" withholding871m="0" withholding871mSec="0" withholding871mCom="0" withholding871mMTD="0" withholding871mYTD="0" withholdingCollectedTax="0" withholdingCollectedTaxSec="0" withholdingCollectedTaxCom="0" withholdingCollectedTaxMTD="0" withholdingCollectedTaxYTD="0" salesTax="0" salesTaxSec="0" salesTaxCom="0" salesTaxMTD="0" salesTaxYTD="0" ipoSubscription="0" ipoSubscriptionSec="0" ipoSubscriptionCom="0" ipoSubscriptionMTD="0" ipoSubscriptionYTD="0" fxTranslationGainLoss="0" fxTranslationGainLossSec="0" fxTranslationGainLossCom="0" otherFees="0" otherFeesSec="0" otherFeesCom="0" otherFeesMTD="0" otherFeesYTD="0" other="0" otherSec="0" otherCom="0" endingCash="1234567.249966388" endingCashSec="1234567.249966388" endingCashCom="0" endingSettledCash="1234567.89" endingSettledCashSec="1234567.89" endingSettledCashCom="0" excessFundSweep="0" excessFundSweepSec="0" excessFundSweepCom="0" excessFundSweepMTD="0" excessFundSweepYTD="0" brokerFees="0" brokerFeesSec="0" brokerFeesCom="0" brokerFeesMTD="0" brokerFeesYTD="0" billableSalesTax="0" billableSalesTaxSec="0" billableSalesTaxCom="0" billableSalesTaxMTD="0" billableSalesTaxYTD="0" />
<CashReportCurrency accountId="U7654321" acctAlias="" model="" currency="USD" levelOfDetail="Currency" fromDate="20220101" toDate="20221213" startingCash="12.345" startingCashSec="12.345" startingCashCom="0" clientFees="0" clientFeesSec="0" clientFeesCom="0" clientFeesMTD="0" clientFeesYTD="0" commissions="0" commissionsSec="0" commissionsCom="0" commissionsMTD="0" commissionsYTD="0" commissionCreditsRedemption="0" commissionCreditsRedemptionSec="0" commissionCreditsRedemptionCom="0" commissionCreditsRedemptionMTD="0" commissionCreditsRedemptionYTD="0" billableCommissions="0" billableCommissionsSec="0" billableCommissionsCom="0" billableCommissionsMTD="0" billableCommissionsYTD="0" depositWithdrawals="0" depositWithdrawalsSec="0" depositWithdrawalsCom="0" depositWithdrawalsMTD="0" depositWithdrawalsYTD="0" deposits="0" depositsSec="0" depositsCom="0" depositsMTD="0" depositsYTD="0" withdrawals="0" withdrawalsSec="0" withdrawalsCom="0" withdrawalsMTD="0" withdrawalsYTD="0" accountTransfers="0" accountTransfersSec="0" accountTransfersCom="0" accountTransfersMTD="0" accountTransfersYTD="0" linkingAdjustments="0" linkingAdjustmentsSec="0" linkingAdjustmentsCom="0" internalTransfers="0" internalTransfersSec="0" internalTransfersCom="0" internalTransfersMTD="0" internalTransfersYTD="0" debitCardActivity="0" debitCardActivitySec="0" debitCardActivityCom="0" debitCardActivityMTD="0" debitCardActivityYTD="0" billPay="0" billPaySec="0" billPayCom="0" billPayMTD="0" billPayYTD="0" dividends="0" dividendsSec="0" dividendsCom="0" dividendsMTD="0" dividendsYTD="12.34" insuredDepositInterest="0" insuredDepositInterestSec="0" insuredDepositInterestCom="0" insuredDepositInterestMTD="0" insuredDepositInterestYTD="0" brokerInterest="0" brokerInterestSec="0" brokerInterestCom="0" brokerInterestMTD="0" brokerInterestYTD="0" bondInterest="0" bondInterestSec="0" bondInterestCom="0" bondInterestMTD="0" bondInterestYTD="0" cashSettlingMtm="0" cashSettlingMtmSec="0" cashSettlingMtmCom="0" cashSettlingMtmMTD="0" cashSettlingMtmYTD="0" realizedVm="0" realizedVmSec="0" realizedVmCom="0" realizedVmMTD="0" realizedVmYTD="0" realizedForexVm="0" realizedForexVmSec="0" realizedForexVmCom="0" realizedForexVmMTD="0" realizedForexVmYTD="0" cfdCharges="0" cfdChargesSec="0" cfdChargesCom="0" cfdChargesMTD="0" cfdChargesYTD="0" netTradesSales="0" netTradesSalesSec="0" netTradesSalesCom="0" netTradesSalesMTD="0" netTradesSalesYTD="0" netTradesPurchases="0" netTradesPurchasesSec="0" netTradesPurchasesCom="0" netTradesPurchasesMTD="0" netTradesPurchasesYTD="0" advisorFees="0" advisorFeesSec="0" advisorFeesCom="0" advisorFeesMTD="0" advisorFeesYTD="0" feesReceivables="0" feesReceivablesSec="0" feesReceivablesCom="0" feesReceivablesMTD="0" feesReceivablesYTD="0" paymentInLieu="0" paymentInLieuSec="0" paymentInLieuCom="0" paymentInLieuMTD="0" paymentInLieuYTD="0" transactionTax="0" transactionTaxSec="0" transactionTaxCom="0" transactionTaxMTD="0" transactionTaxYTD="0" taxReceivables="0" taxReceivablesSec="0" taxReceivablesCom="0" taxReceivablesMTD="0" taxReceivablesYTD="0" withholdingTax="0" withholdingTaxSec="0" withholdingTaxCom="0" withholdingTaxMTD="0" withholdingTaxYTD="18.11" withholding871m="0" withholding871mSec="0" withholding871mCom="0" withholding871mMTD="0" withholding871mYTD="0" withholdingCollectedTax="0" withholdingCollectedTaxSec="0" withholdingCollectedTaxCom="0" withholdingCollectedTaxMTD="0" withholdingCollectedTaxYTD="0" salesTax="0" salesTaxSec="0" salesTaxCom="0" salesTaxMTD="0" salesTaxYTD="0" ipoSubscription="0" ipoSubscriptionSec="0" ipoSubscriptionCom="0" ipoSubscriptionMTD="0" ipoSubscriptionYTD="0" fxTranslationGainLoss="0" fxTranslationGainLossSec="0" fxTranslationGainLossCom="0" otherFees="0" otherFeesSec="0" otherFeesCom="0" otherFeesMTD="0" otherFeesYTD="0" other="0" otherSec="0" otherCom="0" endingCash="1234567.249966388" endingCashSec="1234567.249966388" endingCashCom="0" endingSettledCash="1234567.89" endingSettledCashSec="1234567.89" endingSettledCashCom="0" excessFundSweep="0" excessFundSweepSec="0" excessFundSweepCom="0" excessFundSweepMTD="0" excessFundSweepYTD="0" brokerFees="0" brokerFeesSec="0" brokerFeesCom="0" brokerFeesMTD="0" brokerFeesYTD="0" billableSalesTax="0" billableSalesTaxSec="0" billableSalesTaxCom="0" billableSalesTaxMTD="0" billableSalesTaxYTD="0" />
</CashReport>
<SecuritiesInfo>
<SecurityInfo currency="USD" assetCategory="STK" symbol="TWOHD" description="TWO HANDS CORP" conid="657142858" securityID="US90187E5015" securityIDType="ISIN" cusip="90187E501" isin="US90187E5015" listingExchange="PINK" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" putCall="" principalAdjustFactor="" maturity="" issueDate="" underlyingCategory="" subCategory="COMMON" settlementPolicyMethod="" code="" />
<SecurityInfo currency="USD" assetCategory="STK" symbol="TWOHD.OLD" description="TWO HANDS CORP" conid="558667700" securityID="US90187E4026" securityIDType="ISIN" cusip="90187E402" isin="US90187E4026" listingExchange="PINK" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" putCall="" principalAdjustFactor="" maturity="" issueDate="" underlyingCategory="" subCategory="COMMON" settlementPolicyMethod="" code="" />
</SecuritiesInfo>
<CorporateActions>
<!-- Split with ISIN change -->
<CorporateAction accountId="U7654321" acctAlias="" model="" currency="USD" fxRateToBase="1" assetCategory="STK" symbol="TWOHD" description="TWOH(US90187E4026) SPLIT 1 FOR 1000 (TWOHD, TWO HANDS CORP, US90187E5015)" conid="657142858" securityID="US90187E5015" securityIDType="ISIN" cusip="90187E501" isin="US90187E5015" listingExchange="PINK" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" putCall="" principalAdjustFactor="" reportDate="20230929" dateTime="20230928;202500" actionDescription="TWOH(US90187E4026) SPLIT 1 FOR 1000 (TWOHD, TWO HANDS CORP, US90187E5015)" amount="0" proceeds="0" value="0" quantity="0.035" fifoPnlRealized="0" mtmPnl="0" code="" type="RS" transactionID="25164201871" levelOfDetail="DETAIL" />
<CorporateAction accountId="U7654321" acctAlias="" model="" currency="USD" fxRateToBase="1" assetCategory="STK" symbol="TWOHD.OLD" description="TWOH(US90187E4026) SPLIT 1 FOR 1000 (TWOHD.OLD, TWO HANDS CORP, US90187E4026)" conid="558667700" securityID="US90187E4026" securityIDType="ISIN" cusip="90187E402" isin="US90187E4026" listingExchange="PINK" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" putCall="" principalAdjustFactor="" reportDate="20230929" dateTime="20230928;202500" actionDescription="TWOH(US90187E4026) SPLIT 1 FOR 1000 (TWOHD.OLD, TWO HANDS CORP, US90187E4026)" amount="0" proceeds="0" value="0" quantity="-35" fifoPnlRealized="0" mtmPnl="0" code="" type="RS" transactionID="25164201877" levelOfDetail="DETAIL" />
</CorporateActions>
</FlexStatement>
</FlexStatements>
</FlexQueryResponse>
10 changes: 10 additions & 0 deletions tests/test_ibkr.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,3 +215,13 @@ def test_ibkr_dividends(tmp_path, project_root, data_path, prepare_db_taxes):
IBKR = StatementIBKR()
IBKR.load(data_path + 'ibkr_dividends.xml')
assert IBKR._data == statement


# ----------------------------------------------------------------------------------------------------------------------
def test_ibkr_corp_actions(tmp_path, project_root, data_path, prepare_db_taxes):
with open(data_path + 'ibkr_corp_actions.json', 'r', encoding='utf-8') as json_file:
statement = json.load(json_file)

IBKR = StatementIBKR()
IBKR.load(data_path + 'ibkr_corp_actions.xml')
assert IBKR._data == statement

0 comments on commit fcf39f8

Please sign in to comment.