Signals are intermediate computations stored in a unified signal store with TTL-based expiration (typically 7 days). Each signal produces a 0–100 score and a categorical label. Signals feed into the four conviction dimensions as components.
All signals are written to ticker_signals with a valid_days TTL. Expired signals are excluded from conviction scoring. Most signals refresh on a 7-day cycle.
Tracks how consensus NTM (next twelve month) estimates have shifted across three lookback windows. Uses annual-period estimates only.
| Window | Lookback | Source |
|---|---|---|
| 7-day | today − 7d | Nearest estimate_snapshots row on or before cutoff |
| 30-day | today − 30d | Same |
| 90-day | today − 90d | Same |
| Label | Condition |
|---|---|
| Rising | composite > +1% |
| Stable | −1% to +1% |
| Falling | composite < −1% |
Feeds into Fundamental → Estimate Trajectory component.
Measures the velocity and acceleration of P/E ratio changes to detect valuation compression or expansion trends. Uses COALESCE(forward_pe, trailing_pe) from PE snapshots at four time points.
Acceleration adjusts the base score based on the regime:
| Regime | Velocity | Acceleration | Adjustment | Interpretation |
|---|---|---|---|---|
| Decelerating compression | < 0 | < 0 | +up to 10 pts | Bottoming signal |
| Accelerating expansion | > 0 | > 0 | −up to 10 pts | Getting frothy |
| Decelerating expansion | > 0 | < 0 | +up to 8 pts | Cooling off (mild positive) |
| Accelerating compression | < 0 | > 0 | −up to 8 pts | Bearish |
| Label | Condition |
|---|---|
| Compressing | velocity < −3% and accel > 0 |
| Bottoming | velocity < −3% and accel ≤ 0 |
| Expanding | velocity > +3% and accel > 0 |
| Peaking | velocity > +3% and accel ≤ 0 |
| Stable | −3% to +3% |
Feeds into Valuation → PE Momentum component.
Classifies each theme detected for a ticker by its lifecycle stage, then aggregates to produce a health score reflecting the balance of accelerating vs decaying themes.
Each (ticker, theme) pair is evaluated in priority order:
| Label | Condition | Meaning |
|---|---|---|
| Decaying | Last seen > 30 days ago | Theme fading from narrative |
| New | First seen ≤ 14 days ago | Emerging theme |
| Accelerating | ≥2 sources OR ≥3 total occurrences | Multi-source reinforcement |
| Stable | Default | Mentioned but not intensifying |
Feeds into Thematic → Theme Health component.
Tracks net analyst upgrades and downgrades from rating_changes across 30-day and 90-day windows.
| Label | Conditions (any trigger) |
|---|---|
| Bullish | net_30 ≥ 2, OR net_90 ≥ 3, OR upgrades > 0 with zero downgrades |
| Bearish | net_30 ≤ −2, OR net_90 ≤ −3, OR downgrades > 0 with zero upgrades |
| Neutral | Otherwise |
Feeds into Catalyst → Rating Momentum component.
Ranks companies within their peer group across five weighted dimensions. Each dimension is a percentile rank (0–100) computed among peers with ≥3 members.
| Dimension | Weight | Raw Metric | Direction |
|---|---|---|---|
| Earnings Quality | 30% | blended_beat * 0.5 + min(blended_surprise, 15) * (100/15) * 0.5beat = eps_beat_rate * 0.6 + rev_beat_rate * 0.4 |
Higher = better |
| AI Exposure | 25% | AI composite score (prefers composite > revenue_catalyst > revenue_exposure) | Higher = better |
| Valuation | 20% | Forward P/E | Lower = better |
| Estimate Momentum | 15% | 50 + (eps_pct_30d * 0.6 + rev_pct_30d * 0.4) * 5 |
Higher = better |
| Price Momentum | 10% | ytd_pct * 0.4 + qtd_pct * 0.4 + rating_net * 2 * 0.2 |
Higher = better |
A peer_rank_bottom alert fires when a ticker's composite falls below the 25th percentile of its peer group.
Feeds into Thematic → Peer Standing component.
Starts at 100 and deducts penalties for contradictions between thesis conviction and observed signals. Ensures high-conviction calls are supported by data.
| Check | Trigger | Penalty | Severity |
|---|---|---|---|
| Estimate contradiction | Conviction ≥ 7 AND estimates falling | −25 | High |
| Price below bear case | Price < bear_EPS × bear_PE × 0.9 | −20 | High |
| Rating divergence | Conviction ≥ 7 AND rating bearish | −15 | Medium |
| Price above bull case | Price > bull_EPS × bull_PE × 1.1 | −15 | Medium |
| Peer rank divergence | Conviction ≥ 7 AND peer rank < 30th pct | −15 | Medium |
| Stale thesis opportunity | Conviction ≤ 4 AND estimates rising | −10 | Medium |
| Rating opportunity | Conviction ≤ 4 AND rating bullish | −10 | Medium |
| Thesis staleness | Thesis age > 30 days | −1 per 15d, max −15 | Low (<60d) / Medium (≥60d) |
| Label | Score |
|---|---|
| Healthy | ≥80 |
| Warning | ≥50 |
| Critical | <50 |
Feeds into Catalyst → Thesis Consistency component. Consistency flags also modify the thesis conviction score via cross-signal penalties (see Conviction Score).
Measures what fraction of a company's detected themes are AI-related, as an indicator of narrative concentration risk or AI exposure depth.
| Label | Threshold | Interpretation |
|---|---|---|
| High | >30% | AI-dominant narrative; deep exposure but concentration risk |
| Moderate | 15–30% | Meaningful AI presence balanced with other themes |
| Low | ≤15% | AI is peripheral to the investment narrative |
High AI theme concentration triggers a theme_concentration risk flag (medium severity) in the risk module. This doesn't directly penalize conviction but surfaces in risk reports and alerts.
Used in AI deep-dive reports and risk monitoring. Indirectly influences the Thematic dimension through theme health calculations.