Skip to content

Commit 960e033

Browse files
committed
Align all holding value labels to fixed column width
1 parent 645ee6a commit 960e033

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

cmd/ibctl/internal/ibctlcmd/holdingsdata.go

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -303,35 +303,44 @@ func ComputeYTDTaxSummary(
303303

304304
// WriteValueSummary writes the portfolio value summary with pregnant (unrealized) tax as formatted text.
305305
func WriteValueSummary(writer io.Writer, summary *ValueSummary, config *ibctlconfig.Config, formatBaseMicros func(int64) string) {
306-
fmt.Fprintf(writer, "Portfolio Value: %s\n", formatBaseMicros(summary.TotalValueMicros))
307-
fmt.Fprintf(writer, "\n")
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))
306+
writeValueLine(writer, "Portfolio Value", formatBaseMicros(summary.TotalValueMicros))
307+
fmt.Fprintln(writer)
308+
writeValueLine(writer, "Pregnant STCG", formatBaseMicros(summary.TotalSTCGMicros))
309+
writeValueLine(writer, fmt.Sprintf("Pregnant STCG Tax (%.1f%%)", config.TaxRateSTCG*100), formatBaseMicros(summary.STCGTaxMicros))
310+
writeValueLine(writer, "Pregnant LTCG", formatBaseMicros(summary.TotalLTCGMicros))
311+
writeValueLine(writer, fmt.Sprintf("Pregnant LTCG Tax (%.1f%%)", config.TaxRateLTCG*100), formatBaseMicros(summary.LTCGTaxMicros))
312+
writeValueLine(writer, "Total Pregnant Tax", formatBaseMicros(summary.TotalTaxMicros))
313313
}
314314

315315
// WriteYTDTaxSummary writes the YTD realized income tax summary as formatted text.
316316
func WriteYTDTaxSummary(writer io.Writer, summary *YTDTaxSummary, config *ibctlconfig.Config, formatBaseMicros func(int64) string) {
317-
fmt.Fprintf(writer, "YTD Realized Dividends: %s\n", formatBaseMicros(summary.DividendMicros))
318-
fmt.Fprintf(writer, "YTD Realized Dividend Tax (%.1f%%): %s\n", config.TaxRateDividend*100, formatBaseMicros(summary.DividendTaxMicros))
319-
fmt.Fprintf(writer, "YTD Realized Interest: %s\n", formatBaseMicros(summary.InterestMicros))
320-
fmt.Fprintf(writer, "YTD Realized Interest Tax (%.1f%%): %s\n", config.TaxRateInterest*100, formatBaseMicros(summary.InterestTaxMicros))
321-
fmt.Fprintf(writer, "YTD Realized STCG: %s\n", formatBaseMicros(summary.STCGMicros))
322-
fmt.Fprintf(writer, "YTD Realized STCG Tax (%.1f%%): %s\n", config.TaxRateSTCG*100, formatBaseMicros(summary.STCGTaxMicros))
323-
fmt.Fprintf(writer, "YTD Realized LTCG: %s\n", formatBaseMicros(summary.LTCGMicros))
324-
fmt.Fprintf(writer, "YTD Realized LTCG Tax (%.1f%%): %s\n", config.TaxRateLTCG*100, formatBaseMicros(summary.LTCGTaxMicros))
325-
fmt.Fprintf(writer, "YTD Realized Tax Owed: %s\n", formatBaseMicros(summary.TotalTaxOwedMicros))
326-
fmt.Fprintf(writer, "YTD Realized Tax Paid: %s\n", formatBaseMicros(summary.TaxPaidMicros))
327-
fmt.Fprintf(writer, "YTD Realized Tax Remaining: %s\n", formatBaseMicros(summary.TaxRemainingMicros))
317+
writeValueLine(writer, "YTD Realized Dividends", formatBaseMicros(summary.DividendMicros))
318+
writeValueLine(writer, fmt.Sprintf("YTD Realized Dividend Tax (%.1f%%)", config.TaxRateDividend*100), formatBaseMicros(summary.DividendTaxMicros))
319+
writeValueLine(writer, "YTD Realized Interest", formatBaseMicros(summary.InterestMicros))
320+
writeValueLine(writer, fmt.Sprintf("YTD Realized Interest Tax (%.1f%%)", config.TaxRateInterest*100), formatBaseMicros(summary.InterestTaxMicros))
321+
writeValueLine(writer, "YTD Realized STCG", formatBaseMicros(summary.STCGMicros))
322+
writeValueLine(writer, fmt.Sprintf("YTD Realized STCG Tax (%.1f%%)", config.TaxRateSTCG*100), formatBaseMicros(summary.STCGTaxMicros))
323+
writeValueLine(writer, "YTD Realized LTCG", formatBaseMicros(summary.LTCGMicros))
324+
writeValueLine(writer, fmt.Sprintf("YTD Realized LTCG Tax (%.1f%%)", config.TaxRateLTCG*100), formatBaseMicros(summary.LTCGTaxMicros))
325+
writeValueLine(writer, "YTD Realized Tax Owed", formatBaseMicros(summary.TotalTaxOwedMicros))
326+
writeValueLine(writer, "YTD Realized Tax Paid", formatBaseMicros(summary.TaxPaidMicros))
327+
writeValueLine(writer, "YTD Realized Tax Remaining", formatBaseMicros(summary.TaxRemainingMicros))
328328
}
329329

330330
// WriteAfterTaxValue writes the combined after-tax portfolio value.
331331
// After-tax value = portfolio value - pregnant tax - YTD tax remaining.
332332
func WriteAfterTaxValue(writer io.Writer, valueSummary *ValueSummary, ytdSummary *YTDTaxSummary, formatBaseMicros func(int64) string) {
333333
afterTaxMicros := valueSummary.TotalValueMicros - valueSummary.TotalTaxMicros - ytdSummary.TaxRemainingMicros
334-
fmt.Fprintf(writer, "After-Tax Value: %s\n", formatBaseMicros(afterTaxMicros))
334+
writeValueLine(writer, "After-Tax Value", formatBaseMicros(afterTaxMicros))
335+
}
336+
337+
// valueLabelWidth is the fixed column width for value summary labels, sized to accommodate
338+
// the longest label ("YTD Realized Dividend Tax (XX.X%)").
339+
const valueLabelWidth = 36
340+
341+
// writeValueLine writes a single label-value line with consistent column alignment.
342+
func writeValueLine(writer io.Writer, label string, value string) {
343+
fmt.Fprintf(writer, "%-*s %s\n", valueLabelWidth, label+":", value)
335344
}
336345

337346
// WriteHoldingListTable writes the holding list as a table with securities,

0 commit comments

Comments
 (0)