@@ -191,10 +191,8 @@ type ValueSummary struct {
191191 TotalLTCGMicros int64
192192 // LTCGTaxMicros is the estimated long-term capital gains tax in micros.
193193 LTCGTaxMicros int64
194- // TotalTaxMicros is the total estimated tax in micros.
194+ // TotalTaxMicros is the total estimated pregnant (unrealized) tax in micros.
195195 TotalTaxMicros int64
196- // AfterTaxMicros is the after-tax portfolio value in micros.
197- AfterTaxMicros int64
198196}
199197
200198// YTDTaxSummary holds computed YTD realized income and capital gains tax amounts.
@@ -236,16 +234,13 @@ func ComputeValueSummary(holdings []*ibctlholdings.HoldingOverview, config *ibct
236234 stcgTaxMicros := int64 (math .Round (float64 (totalSTCGMicros ) * config .TaxRateSTCG ))
237235 ltcgTaxMicros := int64 (math .Round (float64 (totalLTCGMicros ) * config .TaxRateLTCG ))
238236 totalTaxMicros := stcgTaxMicros + ltcgTaxMicros
239- // After-tax value = portfolio value - total taxes.
240- afterTaxMicros := totalValueMicros - totalTaxMicros
241237 return & ValueSummary {
242238 TotalValueMicros : totalValueMicros ,
243239 TotalSTCGMicros : totalSTCGMicros ,
244240 STCGTaxMicros : stcgTaxMicros ,
245241 TotalLTCGMicros : totalLTCGMicros ,
246242 LTCGTaxMicros : ltcgTaxMicros ,
247243 TotalTaxMicros : totalTaxMicros ,
248- AfterTaxMicros : afterTaxMicros ,
249244 }
250245}
251246
@@ -306,35 +301,40 @@ func ComputeYTDTaxSummary(
306301 }, nil
307302}
308303
309- // WriteValueSummary writes the portfolio value summary as formatted text.
304+ // WriteValueSummary writes the portfolio value summary with pregnant (unrealized) tax as formatted text.
310305func WriteValueSummary (writer io.Writer , summary * ValueSummary , config * ibctlconfig.Config , formatBaseMicros func (int64 ) string ) {
311- fmt .Fprintf (writer , "Portfolio Value: %s\n " , formatBaseMicros (summary .TotalValueMicros ))
306+ fmt .Fprintf (writer , "Portfolio Value: %s\n " , formatBaseMicros (summary .TotalValueMicros ))
312307 fmt .Fprintf (writer , "\n " )
313- fmt .Fprintf (writer , "STCG: %s\n " , formatBaseMicros (summary .TotalSTCGMicros ))
314- fmt .Fprintf (writer , "STCG Tax (%.1f%%): %s\n " , config .TaxRateSTCG * 100 , formatBaseMicros (summary .STCGTaxMicros ))
315- fmt .Fprintf (writer , "LTCG: %s\n " , formatBaseMicros (summary .TotalLTCGMicros ))
316- fmt .Fprintf (writer , "LTCG Tax (%.1f%%): %s\n " , config .TaxRateLTCG * 100 , formatBaseMicros (summary .LTCGTaxMicros ))
317- fmt .Fprintf (writer , "Total Tax: %s\n " , formatBaseMicros (summary .TotalTaxMicros ))
318- fmt .Fprintf (writer , "\n " )
319- fmt .Fprintf (writer , "After-Tax Value: %s\n " , formatBaseMicros (summary .AfterTaxMicros ))
308+ fmt .Fprintf (writer , "Pregnant STCG: %s\n " , formatBaseMicros (summary .TotalSTCGMicros ))
309+ fmt .Fprintf (writer , "Pregnant STCG Tax (%.1f%%): %s\n " , config .TaxRateSTCG * 100 , formatBaseMicros (summary .STCGTaxMicros ))
310+ fmt .Fprintf (writer , "Pregnant LTCG: %s\n " , formatBaseMicros (summary .TotalLTCGMicros ))
311+ fmt .Fprintf (writer , "Pregnant LTCG Tax (%.1f%%): %s\n " , config .TaxRateLTCG * 100 , formatBaseMicros (summary .LTCGTaxMicros ))
312+ fmt .Fprintf (writer , "Total Pregnant Tax: %s\n " , formatBaseMicros (summary .TotalTaxMicros ))
320313}
321314
322315// WriteYTDTaxSummary writes the YTD realized income tax summary as formatted text.
323316func WriteYTDTaxSummary (writer io.Writer , summary * YTDTaxSummary , config * ibctlconfig.Config , formatBaseMicros func (int64 ) string ) {
324- fmt .Fprintf (writer , "YTD Realized Income Tax:\n " )
317+ fmt .Fprintf (writer , "YTD Realized Tax:\n " )
325318 fmt .Fprintf (writer , "\n " )
326- fmt .Fprintf (writer , "Dividends: %s\n " , formatBaseMicros (summary .DividendMicros ))
327- fmt .Fprintf (writer , "Dividend Tax (%.1f%%): %s\n " , config .TaxRateDividend * 100 , formatBaseMicros (summary .DividendTaxMicros ))
328- fmt .Fprintf (writer , "Interest: %s\n " , formatBaseMicros (summary .InterestMicros ))
329- fmt .Fprintf (writer , "Interest Tax (%.1f%%): %s\n " , config .TaxRateInterest * 100 , formatBaseMicros (summary .InterestTaxMicros ))
330- fmt .Fprintf (writer , "Realized STCG: %s\n " , formatBaseMicros (summary .STCGMicros ))
331- fmt .Fprintf (writer , "STCG Tax (%.1f%%): %s\n " , config .TaxRateSTCG * 100 , formatBaseMicros (summary .STCGTaxMicros ))
332- fmt .Fprintf (writer , "Realized LTCG: %s\n " , formatBaseMicros (summary .LTCGMicros ))
333- fmt .Fprintf (writer , "LTCG Tax (%.1f%%): %s\n " , config .TaxRateLTCG * 100 , formatBaseMicros (summary .LTCGTaxMicros ))
319+ fmt .Fprintf (writer , "Dividends: %s\n " , formatBaseMicros (summary .DividendMicros ))
320+ fmt .Fprintf (writer , "Dividend Tax (%.1f%%): %s\n " , config .TaxRateDividend * 100 , formatBaseMicros (summary .DividendTaxMicros ))
321+ fmt .Fprintf (writer , "Interest: %s\n " , formatBaseMicros (summary .InterestMicros ))
322+ fmt .Fprintf (writer , "Interest Tax (%.1f%%): %s\n " , config .TaxRateInterest * 100 , formatBaseMicros (summary .InterestTaxMicros ))
323+ fmt .Fprintf (writer , "Realized STCG: %s\n " , formatBaseMicros (summary .STCGMicros ))
324+ fmt .Fprintf (writer , "STCG Tax (%.1f%%): %s\n " , config .TaxRateSTCG * 100 , formatBaseMicros (summary .STCGTaxMicros ))
325+ fmt .Fprintf (writer , "Realized LTCG: %s\n " , formatBaseMicros (summary .LTCGMicros ))
326+ fmt .Fprintf (writer , "LTCG Tax (%.1f%%): %s\n " , config .TaxRateLTCG * 100 , formatBaseMicros (summary .LTCGTaxMicros ))
334327 fmt .Fprintf (writer , "\n " )
335- fmt .Fprintf (writer , "Total Tax Owed: %s\n " , formatBaseMicros (summary .TotalTaxOwedMicros ))
336- fmt .Fprintf (writer , "Tax Paid: %s\n " , formatBaseMicros (summary .TaxPaidMicros ))
337- fmt .Fprintf (writer , "Tax Remaining: %s\n " , formatBaseMicros (summary .TaxRemainingMicros ))
328+ fmt .Fprintf (writer , "YTD Tax Owed: %s\n " , formatBaseMicros (summary .TotalTaxOwedMicros ))
329+ fmt .Fprintf (writer , "YTD Tax Paid: %s\n " , formatBaseMicros (summary .TaxPaidMicros ))
330+ fmt .Fprintf (writer , "YTD Tax Remaining: %s\n " , formatBaseMicros (summary .TaxRemainingMicros ))
331+ }
332+
333+ // WriteAfterTaxValue writes the combined after-tax portfolio value.
334+ // After-tax value = portfolio value - pregnant tax - YTD tax remaining.
335+ func WriteAfterTaxValue (writer io.Writer , valueSummary * ValueSummary , ytdSummary * YTDTaxSummary , formatBaseMicros func (int64 ) string ) {
336+ afterTaxMicros := valueSummary .TotalValueMicros - valueSummary .TotalTaxMicros - ytdSummary .TaxRemainingMicros
337+ fmt .Fprintf (writer , "After-Tax Value: %s\n " , formatBaseMicros (afterTaxMicros ))
338338}
339339
340340// WriteHoldingListTable writes the holding list as a table with securities,
0 commit comments