phase-2: extract shared utils

This commit is contained in:
Kazuma
2026-06-04 11:06:30 -04:00
committed by Kazuma
parent 96e48aebe5
commit f5a338fc4e
49 changed files with 299 additions and 120 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { BondScorer } from '../src/screener/scorers/BondScorer.js';
import { BondScorer } from '../server/screener/scorers/BondScorer.js';
// ytm is stored as a percentage value (e.g. 6.5 = 6.5%), matching how DataMapper outputs it.
// BondScorer._sanitize divides by 100 to convert to decimal before spread calculation.
+1 -1
View File
@@ -1,6 +1,6 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { mapToStandardFormat } from '../src/screener/DataMapper.js';
import { mapToStandardFormat } from '../server/screener/DataMapper.js';
const base = {
price: { quoteType: 'EQUITY', regularMarketPrice: 150 },
+1 -1
View File
@@ -1,6 +1,6 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { EtfScorer } from '../src/screener/scorers/EtfScorer.js';
import { EtfScorer } from '../server/screener/scorers/EtfScorer.js';
const rules = {
gates: { maxExpenseRatio: 0.5 },
+2 -2
View File
@@ -1,7 +1,7 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { MarketRegime } from '../src/market/MarketRegime.js';
import { SECTOR, ASSET_TYPE } from '../src/config/constants.js';
import { MarketRegime } from '../server/market/MarketRegime.js';
import { SECTOR, ASSET_TYPE } from '../server/config/constants.js';
const regime = (benchmarks, extra = {}) => new MarketRegime({ benchmarks, ...extra });
+2 -2
View File
@@ -1,7 +1,7 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { PortfolioAdvisor } from '../src/finance/PortfolioAdvisor.js';
import { SIGNAL } from '../src/config/constants.js';
import { PortfolioAdvisor } from '../server/finance/PortfolioAdvisor.js';
import { SIGNAL } from '../server/config/constants.js';
const advisor = new PortfolioAdvisor();
+2 -2
View File
@@ -1,7 +1,7 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { RuleMerger } from '../src/screener/RuleMerger.js';
import { SCORE_MODE } from '../src/config/constants.js';
import { RuleMerger } from '../server/screener/RuleMerger.js';
import { SCORE_MODE } from '../server/config/constants.js';
const ctx = {
benchmarks: { marketPE: 25, techPE: 32, reitYield: 3.8, igSpread: 1.2 },
+1 -1
View File
@@ -1,6 +1,6 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { CREDIT_RATING_SCALE, ScoringRules } from '../src/config/ScoringConfig.js';
import { CREDIT_RATING_SCALE, ScoringRules } from '../server/config/ScoringConfig.js';
test('CREDIT_RATING_SCALE covers full spectrum', () => {
assert.equal(CREDIT_RATING_SCALE.AAA, 10);
+1 -1
View File
@@ -1,6 +1,6 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { StockScorer } from '../src/screener/scorers/StockScorer.js';
import { StockScorer } from '../server/screener/scorers/StockScorer.js';
const baseRules = {
gates: { maxDebtToEquity: 3.0, minQuickRatio: 0.5, maxPERatio: 20, maxPegGate: 1.5 },