From 94a962bf8e87a4624f47221715cc13f7cbe355c4 Mon Sep 17 00:00:00 2001 From: francy51 Date: Sun, 1 Mar 2026 19:27:06 -0500 Subject: [PATCH] Transpose financials tables and expose company KPI metrics --- lib/server/api/filing-redaction.test.ts | 3 ++- lib/server/api/filing-redaction.ts | 10 +++++++--- lib/types.ts | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/server/api/filing-redaction.test.ts b/lib/server/api/filing-redaction.test.ts index 2d6032e..6df9356 100644 --- a/lib/server/api/filing-redaction.test.ts +++ b/lib/server/api/filing-redaction.test.ts @@ -44,12 +44,13 @@ function filingWithExtraction(): Filing { } describe('filing response redaction', () => { - it('removes internal extraction fields while preserving public analysis fields', () => { + it('removes internal extraction fields while preserving public fields and company metrics', () => { const redacted = redactInternalFilingAnalysisFields(filingWithExtraction()); expect(redacted.analysis?.provider).toBe('zhipu'); expect(redacted.analysis?.model).toBe('glm-4.7-flashx'); expect(redacted.analysis?.text).toBe('Report text'); + expect(redacted.analysis?.companyMetrics).toEqual(['g']); expect(redacted.analysis?.extraction).toBeUndefined(); expect(redacted.analysis?.extractionMeta).toBeUndefined(); }); diff --git a/lib/server/api/filing-redaction.ts b/lib/server/api/filing-redaction.ts index 0a69c66..87ec94a 100644 --- a/lib/server/api/filing-redaction.ts +++ b/lib/server/api/filing-redaction.ts @@ -5,11 +5,15 @@ export function redactInternalFilingAnalysisFields(filing: Filing): Filing { return filing; } - const { extraction: _extraction, extractionMeta: _extractionMeta, ...analysis } = filing.analysis; - const hasPublicFields = Object.keys(analysis).length > 0; + const { extraction, extractionMeta: _extractionMeta, ...analysis } = filing.analysis; + const companyMetrics = (extraction?.companySpecificData ?? []).filter((item) => item.trim().length > 0); + const publicAnalysis = companyMetrics.length > 0 + ? { ...analysis, companyMetrics } + : analysis; + const hasPublicFields = Object.keys(publicAnalysis).length > 0; return { ...filing, - analysis: hasPublicFields ? analysis : null + analysis: hasPublicFields ? publicAnalysis : null }; } diff --git a/lib/types.ts b/lib/types.ts index 0604170..f32192b 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -80,6 +80,7 @@ export type Filing = { model?: string; text?: string; legacyInsights?: string; + companyMetrics?: string[]; extraction?: FilingExtraction; extractionMeta?: FilingExtractionMeta; } | null;