EBRS v7.0.0 · technical annex

Lietuviška versija

Algorithms and formulas

The formal annex to the methodology: all 13 reputation signals with their mathematical formulas, data sources and weights, the coverage correction, terminal states, the verdict floor and the score archive. Written for analysts, developers and institutions assessing whether the method is sound.

Signals
13
Signals
Axes
4
Axes
Source groups used for scoring
8
Source groups used for scoring
Algorithm version
v7.0.0
Algorithm version

Engine

1. Scoring engine

EBRS (European Business Reputation Standard) v7.0.0 is built from signals. Each signal is an independent scoring function that receives the company's data and returns:

  • score (0-10): the signal score;
  • confidence (0-1): how reliable the data are;
  • dataPoints: how many data points were used;
  • null: when the data are insufficient (the signal takes no part).

The overall score is calculated as follows:

// 1. Run all 13 signals
for (signal of SIGNAL_REGISTRY) {
  result = signal.compute(companyData)
  if (result !== null) activeSignals.push(result)
}

// 2. Renormalise the weights (active signals only)
totalWeight = sum(activeSignals.map(s => s.weight))
for (sig of activeSignals) {
  sig.normalizedWeight = sig.weight / totalWeight
}

// 3. Weighted mean (raw)
raw = sum(sig.score × sig.normalizedWeight)  // 0-10

// 4. Coverage correction since v5.3 (section 11)
//    Each missing signal = a neutral pseudo-observation of weight 0.5
missing = 13 - activeSignals.length
priorWeight = missing × 0.5
overall = (raw × activeSignals.length + 5.0 × priorWeight)
          / (activeSignals.length + priorWeight)

// 5. Terminal-state cap since v6.0 (section 12), applied AFTER the correction
if (bankruptcy || intentional_bankruptcy) overall = min(overall, 2.9)   // capApplied = 'bankruptcy'
if (restructuring)                         overall = min(overall, 4.9)   // capApplied = 'restructuring'

// 6. Verdict floor since v6.0 (section 13)
scoreState = activeSignals.length < 5 ? 'insufficient_data' : 'ok'

// 7. Confidence = weighted mean confidence × signal coverage
coverage = activeSignals.length / 13
confidence = avg(sig.confidence × sig.normalizedWeight) × coverage × 100  // 0-100%

Weights

2. Weight table

The weights are defaults (defaultWeight). Since v6.0 the published weights add up to exactly 100% (18.6 + 27.91 + 16.28 + 37.21). When not every signal is active, the weights of the active signals are renormalised so that they add up to 1.0.

AxisSignalWeightMain source
Continuity (18.6%)Continuity capital9.3%RC JAR JuridinisAsmuo (data.gov.lt)
Legal standing9.3%RC JAR JuridinisAsmuo (data.gov.lt)
Financial discipline (27.91%)Financial strength9.3%company_yearly_data
Growth trajectory5.81%company_yearly_data
Profitability trend5.81%company_yearly_data
Tax discipline6.98%VMI ja_mokesciai (data.gov.lt)
Resilience (16.28%)Business resilience8.14%company_yearly_data
Workforce health8.14%company_yearly_data
Transparency (37.21%)Data completeness2.33%company_yearly_data
Public procurement integrity10.47%VPT Atn1TendererList (data.gov.lt)
Reporting compliance11.63%RC JAR fa_dokumentu_nepateike (data.gov.lt)
Governance quality6.98%RC JAR valdymo_organai (registrucentras.lt)
Ownership transparency5.81%JADIS dalyviai / dalyviu_sarasas (data.gov.lt)
Total13 signals100%exactly 100% since v6.0

Axis · 18.6%

3. Continuity

Total weight: 18.6%. Longevity, legal status and stability, assessed from objective data only: the registration date, the length of operation and the continuity of financial data. Activation on the platform has no effect. (Lithuanian: Tęstinumas)

Continuity capital

weight 9.3% · continuity_capital

Measures longevity with two objective sub-indicators: the age of the company (logarithmic scale, 30 years or more = 10/10) and the continuity of financial data (the longest unbroken run of years with revenue). Since v5.1 consistency on the TOP list is no longer part of this signal: it is a platform metric, not an objective indicator of continuity.

Formula

age_score = log2(years + 1) / log2(32) × 10
data_continuity = min(longest_run / 10 × 10, 10)
score = age × 0.55 + data × 0.45

Null condition (the signal takes no part)

Returns null when neither the company age nor any financial data is available.

Confidence

0.5 (when the age is known) + 0.5 (when there are at least 3 years of financial data). The registration date in the Register of Legal Entities takes precedence as the authoritative source.

Data sources

  • RC JAR JuridinisAsmuo (data.gov.lt)
  • company_yearly_data

Axis · 27.91%

4. Financial discipline

Total weight: 27.91%. Scale of revenue, profitability, growth trajectory and tax discipline. A financially healthy company earns, grows consistently and has no tax debts. (Lithuanian: Finansinė drausmė)

Financial strength

weight 9.3% · financial_strength

Assesses the financial size and profitability of the company. Revenue is normalised logarithmically over the range of the whole dataset (€11,504 - €4,625,124,000). The profit margin is scored against percentiles from 78,850 company-year records. SODRA and VMI debts are applied as penalties.

Formula

revenue_score = (log10(revenue) - log10(11504)) / (log10(4.6B) - log10(11504)) × 10
margin_score = percentile_score(margin%, [0.6, 2.3, 6.2, 13.2, 24.4])
sodra_penalty = -min(3, log10(debt + 1) / 2)   // when SODRA debt > 0
vmi_penalty = -min(3, log10(vmi_debt + 1) / 2)  // when overdue VMI debt > 0
score = clamp(revenue_score × 0.35 + margin_score × 0.65 + sodra_penalty + vmi_penalty, 0, 10)

Null condition (the signal takes no part)

Returns null when there are no revenue data (revenue = null or 0).

Confidence

Base 0.6 + 0.2 (profit data) + 0.1 (SODRA data) + 0.1 (VMI data). Age penalties: -0.1 when the data are 2 or more years old, -0.2 when 3 or more.

Data sources

  • company_yearly_data
  • VMI tax data (data.gov.lt)

Growth trajectory

weight 5.81% · growth_trajectory

Measures long-term growth through CAGR (compound annual growth rate), the consistency of growth (direction ratio: the share of years that kept growing) and momentum (growth over the last 2 years against the earlier average).

Formula

CAGR = (latest_revenue / first_revenue)^(1/years) - 1
CAGR_score = sigmoid(CAGR%, centre=5%, steepness=0.15)
direction_ratio = (years with growth ≥ -2%) / all_years
if mean > 0: consistency = clamp(4 + direction_ratio × 6, 0, 10)
if mean ≤ 0: consistency = clamp(2 + direction_ratio × 4, 0, 6)
momentum = 5 + (mean_of_last_2y - earlier_mean) × 0.2
score = CAGR_score × 0.50 + consistency × 0.25 + momentum × 0.25

Null condition (the signal takes no part)

Returns null when there are fewer than 2 years of revenue data.

Confidence

years_factor × 0.6 + growth_points_factor × 0.4. Full confidence requires 9 years of data.

Data sources

  • company_yearly_data

Profitability trend

weight 5.81% · profitability_trend

Analyses the change in profit margin over time (linear regression), the run of consecutive profitable years and net-profit efficiency (net profit / gross profit).

Formula

margin_change_score = 5 + regression_slope × 2   // percentage points a year
run_score = min(10, profitable_years × 1.25)        // 8 or more years = 10/10
efficiency_score = (net_profit / gross_profit) × 10
score = margin_change × 0.50 + run × 0.30 + efficiency × 0.20

Null condition (the signal takes no part)

Returns null when there are no revenue data at all.

Confidence

Depends on the number of margin data points (at most 8) and on the availability of net profit.

Data sources

  • company_yearly_data

Tax discipline

weight 6.98% · tax_discipline

Assesses tax discipline from VMI data. The base score depends on the size of overdue tax arrears (continuous logarithmic scale). Only the objective state of the debt is assessed.

Formula

base = 9.5   // when there is no debt or the overdue amount = 0
base = clamp(9.5 − (log10(overdue_debt) − 2) × 2, 0, 9.5)
The tax-growth bonus was removed in v5.2 (cumulative year-to-date VMI data do not allow periods to be compared reliably)
score = clamp(base, 0, 10)

Null condition (the signal takes no part)

Returns null when there are no VMI tax data.

Confidence

Fixed at 0.7: only the state of the debt is assessed, without a year-on-year comparison.

Data sources

  • VMI ja_mokesciai (data.gov.lt)
  • VMI mokestiniu_nepriemoku_sarasas (data.gov.lt)

Axis · 16.28%

5. Resilience

Total weight: 16.28%. The ability to withstand market fluctuations: workforce stability, salary level and the speed of recovery after downturns. (Lithuanian: Atsparumas)

Business resilience

weight 8.14% · resilience

Assesses revenue stability (direction ratio plus smoothness of growth rates), the speed of recovery after downturns (revenue falls of more than 5%) and a bonus for never having made a loss that grows with the length of the record.

Formula

direction_ratio = (years with growth ≥ -2%) / all_years
smoothness_score = clamp(10 - standard_deviation × 20, 2, 10)
stability_score = clamp(direction_ratio × 10 × 0.6 + smoothness_score × 0.4, 0, 10)
recovery_score:
  after downturns → 5 + mean_recovery × 30
  without downturns → 5 + depth_factor × 3
no_loss_bonus = depth_factor × 0.5   // when the company has never made a loss
score = stability × 0.50 + recovery × 0.50 + bonus

Null condition (the signal takes no part)

Returns null when there are fewer than 3 years of revenue data: resilience needs a history.

Confidence

Years / 9 × 0.7 + availability of profit data × 0.3. A short history means lower confidence in resilience.

Data sources

  • company_yearly_data

Workforce health

weight 8.14% · workforce_health

Three sub-indicators: salary level (against Lithuanian market percentiles), salary growth (CAGR) and headcount stability. A penalty for SODRA debt.

Formula

salary_score = percentile_score(salary, [834, 1038, 1383, 1979, 2821])
growth_score = sigmoid(salary_CAGR%, centre=3%, steepness=0.2)
stability_score:
  if mean > 2%: clamp(5 + direction_ratio × 5, 5, 10)
  if mean > -2%: clamp(6 + direction_ratio × 2, 4, 8)
  otherwise: clamp(2 + direction_ratio × 3, 0, 5)
sodra_penalty = -min(3, log10(debt + 1) / 2)
score = weighted_mean(available_sub_indicators) + sodra_penalty

Null condition (the signal takes no part)

Returns null when there are neither salary nor headcount data.

Confidence

The share of the 3 sub-indicators that are available: all 3 → 1.0, 2 → 0.67, 1 → 0.33.

Data sources

  • company_yearly_data

Axis · 37.21%

6. Transparency

Total weight: 37.21%. Reporting, governance quality, ownership transparency and reliability in public procurement. The heaviest axis: it rests on state register data, not on activity on the platform. (Lithuanian: Skaidrumas)

Data completeness

weight 2.33% · transparency

Measures how complete the company’s financial data are (revenue, profit, employees, salary, SODRA debt). Since v5.0 this signal no longer assesses the activation status on the platform, only the objective completeness of the data.

Formula

completeness_ratio = filled_fields / (years × 6_possible_fields)
completeness_score = completeness_ratio × 10
year_coverage = min(years / 10 × 10, 10)
score = completeness_score × 0.60 + year_coverage × 0.40

Null condition (the signal takes no part)

Returns null when there are 0 annual financial records.

Confidence

min(years / 5, 1).

Data sources

  • company_yearly_data

Public procurement integrity

weight 10.47% · procurement_integrity

An adaptation of the DIGIWHIST (EU Horizon 2020) methodology. Six sub-indicators: participation frequency, win ratio, procedure type (open = more transparent), rejection rate, recency and subcontractor status.

Formula

participation_score = clamp(3 + log2(participations) × 2, 3, 9)
win_score: >80% → 7 (suspiciously high), 50-80% → 9, 20-50% → 8, 1-20% → 5, 0% → 2
procedure_score: from avgProcedureScore, or 7 by default
rejection_score: >50% → 3, >20% → 5, >1% → 7, 0% → 9
recency_score: <1y → 10, <2y → 7, <3y → 5, <5y → 3, >5y → 1
subcontractor_bonus: +0.5 (when the company is a subcontractor)
score = participation × 0.20 + wins × 0.25 + procedure × 0.20 + rejection × 0.20 + recency × 0.15 + bonus

Null condition (the signal takes no part)

Returns null when the company has 0 participations in public procurement.

Confidence

clamp(participations / 10, 0.3, 1.0). 10 or more participations = full confidence.

Data sources

  • VPT Atn1TendererList (data.gov.lt)
  • VPT Atn1ContractedCandidateList (data.gov.lt)
  • VPT Atn1RejectedCandidateList (data.gov.lt)
  • VPT Atn1SubcontractorsConcludedTendererList (data.gov.lt)

Reporting compliance

weight 11.63% · reporting_compliance

Checks whether the company is on three state lists: companies that have not filed financial statements (about 55,000), companies that file late (about 20,000) and companies that have not filed an auditor’s report (about 5,000).

Formula

starting_score = 10 (clean)
IF statements not filed:
  ≤1 year → 0
  ≤2 years → 2
  ≤3 years → 4
  ≤5 years → 6
  >5 years → 7
IF filed late (but filed) → 4
IF auditor’s report not filed:
  within 2 years → min(score, 2)
  earlier → min(score, 5)

Null condition (the signal takes no part)

Returns null when there are no RC JAR reporting data.

Confidence

Fixed at 0.9: the state lists are highly reliable.

Data sources

  • RC JAR fa_dokumentu_nepateike (data.gov.lt)
  • RC JAR fa_veluojantys (data.gov.lt)
  • RC JAR fa_auditoriu_isvadu_nepateike (data.gov.lt)

Governance quality

weight 6.98% · governance_quality

Assesses how many layers the management structure has (manager, board, supervisory council, other bodies) and the stability of the manager’s tenure.

Formula

structure_score = 0
  + 6 (when there is a manager)
  + 2 (when there is a board)
  + 1.5 (when there is a supervisory council)
  + 0.5 (when there are other bodies)
  Maximum: 10
tenure_score = clamp(4 + log2(max(years, 0.25) + 1) × 2, 3, 10)
score = structure × 0.60 + tenure × 0.40

Null condition (the signal takes no part)

Returns null when there are no RC JAR data on management bodies.

Confidence

Fixed at 0.85.

Data sources

  • RC JAR valdymo_organai (registrucentras.lt)

Ownership transparency

weight 5.81% · ownership_transparency

Since v6.0: assesses how complete the JADIS declaration is and how traceable the ultimate beneficiaries are, not the owners’ nationality. Natural persons (of any country) are final points of the declaration; legal entities (of any country) add one more step before the beneficiary is reached. The owners’ nationality or residence has no effect on the score: jurisdiction is not a sign of opacity.

Formula

natural = LT_natural + foreign_natural
legal = LT_legal + foreign_legal
participants = natural + legal

IF participants = 0 → 3   // declaration without participants
IF natural persons only → 9   // beneficiaries traceable directly
IF natural + legal → 8   // mixed structure
IF legal entities only → 7   // one more step before the beneficiaries

The owners’ nationality (Lithuanian / foreign) does not change the score.

Null condition (the signal takes no part)

Returns null when there are no JADIS data or hasJadisData = false.

Confidence

Fixed at 0.80.

Data sources

  • JADIS dalyviai / dalyviu_sarasas (data.gov.lt)

Inputs

7. Data sources

EBRS v7.0 uses 8 source groups, grouped by institution in the tables below. 8 of them are state register data, of which 6 are available through the data.gov.lt REST API (free, without authentication, a rate limit of about 2 requests a second); SODRA and the Centre of Registers financial statements are taken directly from the institutions. Record counts are approximate.

AVNT and SODRA

DatasetDescriptionRecordsUsed for
company_bankruptcy_dataInsolvency proceedings and the dates they endedvariesLegal status and caps on the overall score; read together with the RC status
company_sodra_dailyDated SODRA debt rowvariesLatest net overdue debt; a missing value is not treated as zero

VMI (State Tax Inspectorate)

DatasetDescriptionRecordsUsed for
ja_mokesciaiAnnual tax totals of legal entities~200,000Tax discipline signal
mokestiniu_nepriemoku_sarasasTax arrears (overdue debts)~15,000Tax discipline and financial strength signals, debt penalties

VPT (Public Procurement Office)

DatasetDescriptionRecordsUsed for
Atn1TendererListAll participants in public procurement (bids)~226,000Procurement integrity: participation and procedure sub-indicators
Atn1ContractedCandidateListWinners of public procurement (contracts)~377,000Procurement integrity: win ratio and value
Atn1RejectedCandidateListRejected participants (with reasons)~25,000Procurement integrity: rejection rate
Atn1SubcontractorsConcludedTendererListSubcontractors in public procurement~8,000Procurement integrity: subcontractor bonus

RC JAR (Centre of Registers, Register of Legal Entities)

DatasetDescriptionRecordsUsed for
JuridinisAsmuoMain register of legal entities~300,000Legal standing signal, authoritative registration date
fa_dokumentu_nepateikeLegal entities that have not filed financial statements~55,000Reporting compliance signal
fa_veluojantysLegal entities that file financial statements late~20,000Reporting compliance signal
fa_auditoriu_isvadu_nepateikeLegal entities that have not filed an auditor’s report~5,000Reporting compliance signal
valdymo_organai (JAR_VALDYMAS.csv)Management bodies (managers, boards, councils)~300,000Governance quality signal (structure and tenure)

JADIS (Information System of Participants of Legal Entities)

DatasetDescriptionRecordsUsed for
dalyviai / dalyviu_sarasasDeclared participants (owners) of legal entities~172,000Ownership transparency signal

Internal (Lithuanian TOP Companies Registry)

DatasetDescriptionRecordsUsed for
company_yearly_dataAnnual financial data (revenue, profit, employees, salaries, SODRA debt), 9 years of history (2017-2025)~78,850 company-year recordsFinancial strength, growth, profitability, workforce, resilience, continuity and data completeness signals

Missing data

8. The null-exclusion principle

A signal that returns null is removed from the assessment entirely: it is not set to 5.0 and it is not penalised. The weights of the remaining signals are renormalised so that they still add up to 1.0. This means that:

  • a company without public procurement data does not get 0 for procurement: the signal simply takes no part;
  • a company with no procurement history is not assessed on procurement integrity;
  • the overall score reflects only signals with real data;
  • confidence falls in proportion to the number of missing signals, through signal_coverage = active / 13.

Reliability

9. Confidence

Overall confidence is the product of two factors:

// Factor 1: internal quality of the signals
avg_confidence = sum(sig.confidence × sig.normalizedWeight)

// Factor 2: signal coverage
coverage = active_signals / 13

// Overall
overall_confidence = avg_confidence × coverage × 100

// Example:
//   8 active signals with mean confidence 0.75
//   → 0.75 × (8/13) × 100 ≈ 46%
//
//   13 active signals with mean confidence 0.90
//   → 0.90 × (13/13) × 100 = 90%

A company with partial data therefore receives a lower confidence even when its score is high. Confidence does not say whether the company is good; it says how reliable the assessment itself is.

Since v5.3

10. Coverage correction

The null-exclusion principle has a side effect that statistics calls survivorship bias: when a company is missing precisely the adverse signals (tax debt, reporting failures, insolvency proceedings, opaque ownership), renormalising the weights among the remaining signals inflates its score. A company that had not been examined could overtake one that had been examined in full, not because it was in better shape but because it had not been checked.

Since v5.3 the final score is regressed towards a neutral prior: each missing signal acts in the model as a neutral pseudo-observation of half weight (prior value 5.0). The correction reduces the effect of limited data coverage; user ratings are not part of EBRS.

// Constants (lib/reputation/core.ts)
COVERAGE_PRIOR = 5.0                      // neutral prior
COVERAGE_PRIOR_WEIGHT_PER_MISSING = 0.5   // weight of one pseudo-observation

// Correction
missing     = 13 - n_active
priorWeight = missing × 0.5
overall     = (raw × n_active + 5.0 × priorWeight) / (n_active + priorWeight)

// Example: a strong but thinly examined company
//   n_active = 9, raw = 8.0  →  missing = 4, priorWeight = 2.0
//   overall  ≈ 7.5
//
// Full coverage: n_active = 13 → priorWeight = 0 → overall = raw (unchanged)

Properties. The correction is monotonic (more active signals, smaller shift), bounded to 0-10 and zero at full coverage. Only the published overall score is corrected; the individual signal and axis scores stay raw, because they describe measured dimensions, not the completeness of the evidence. Both constants are public, documented parameters; a sensitivity analysis is part of the improvement plan.

Since v6.0

11. Terminal-state caps

A composite weighted mean has a structural weakness: many healthy historical signals can outweigh one catastrophic register state. Before v6.0 a company in active bankruptcy could keep a score of about 6.3 (“Reliable”) only because the legal standing signal carried about 8% of the weight. That misleads the reader: registered insolvency is not one signal among many, it is the state of the whole company.

v6.0 treats registered insolvency as a cap, not a vote: active bankruptcy (including intentional bankruptcy) caps the overall score from above, however strong the historical signals are. The cap is applied after the coverage correction, before rounding, and it is always declared through the capApplied field, never silently.

// Constants (lib/reputation/core.ts)
BANKRUPTCY_CAP = 2.9      // active / intentional bankruptcy
RESTRUCTURING_CAP = 4.9   // restructuring

// Applied after the coverage correction, before rounding
if (status ∈ {bankruptcy, intentional_bankruptcy}) {
  overall = min(overall, 2.9);  capApplied = 'bankruptcy'
} else if (status = restructuring) {
  overall = min(overall, 4.9);  capApplied = 'restructuring'
}

Properties. The cap only works from above: it never raises a lower score. The data source is the AVNT insolvency register (data.gov.lt), read together with the legal status in the Register of Legal Entities. Individual signal and axis scores stay raw; only the published overall score is capped, and an applied cap is always visible in the assessment. The restructuring cap (4.9) is deliberately milder: restructuring is a legal rehabilitation procedure, not a liquidation.

Since v6.0

12. Verdict floor

A verdict based on less than a third of the evidence is not a verdict. When fewer than 5 of 13 signals can be computed for a company (MIN_SIGNALS_FOR_VERDICT = 5), no reliability category is published: a neutral “Insufficient data” state is shown instead of a coloured band, and the public profile shows no number. A numeric score is still calculated for internal purposes (ordering, trends).

The floor is implemented through the scoreState field ('ok' | 'insufficient_data') and the mirrored rule in lib/reputation/labels.ts → getScoreBandWithCoverage(), so every screen behaves the same way, the English company profiles included.

Since v6.0

13. Score archive

Since v6.0 every score is archived in the append-only archive ebrs_score_vintages: (a) before every recalculation for a new algorithm version and (b) weekly on a schedule. Archived records are never corrected or deleted, so the question “what did EBRS say about company X on day D?” always has a verifiable answer. This makes the claims of the method falsifiable: history is checked, not rewritten.

Each archived record holds the algorithm version, the overall score, confidence, risk class, the number of active signals, the axis scores, the calculation and archiving times and the reason for archiving (for example algorithm-change-v7.0.0 or weekly; records archived before 24 August 2026 under the same weekly schedule carry monthly).

Change log

14. Version history

Every published version of the method, newest first. Entries for earlier versions describe the model as it was at the time (for example 15 signals on 5 axes before v7.0.0); they are a record, not the current method. Scores from different versions are not directly comparable.

  1. v7.0.0 (2026-09-25), current

    • 13 signals, 4 axes. market_presence and community_trust removed; mentions, their sentiment, ratings and TOP history have no effect on the score.
    • Every remaining base weight divided by 0.86. The ratios between the other signals stayed the same.
    • Coverage denominator: 13. Fewer than 5 computable signals means that no verdict is published. The insolvency caps were kept.
    • The public algorithm aligned with the production code, including the current SODRA debt, the choice of profit data and the date checks on insolvency states.
    • Scores of the previous version are kept. A difference between methodology versions is not a change in reputation.
  2. v6.0.0 (2026-07-17), previous edition

    • Terminal-state caps: active bankruptcy (including intentional bankruptcy) caps the overall score at 2.9 ("Critical"), restructuring at 4.9 ("High"). The cap is applied after the coverage correction and always declared through the capApplied field: registered insolvency caps the score instead of voting alongside the historical signals.
    • The published weights add up to exactly 100% (previously 96% with a silent renormalisation): legal standing 7%→8%, tax discipline 5%→6%, growth trajectory 4%→5%, profitability trend 4%→5%. Axes: Continuity 16, Financial discipline 24, Market reliability 14, Resilience 14, Transparency 32.
    • Ownership transparency signal rewritten: it assesses the completeness of the JADIS declaration and the traceability of beneficiaries (0 participants = 3, natural persons only = 9, mixed structure = 8, legal entities only = 7); the owners’ nationality no longer affects the score.
    • Verdict floor: below 5 computable signals out of 15 the category is not published and "Insufficient data" is shown instead (MIN_SIGNALS_FOR_VERDICT = 5).
    • Score archive: before every recalculation, and on a weekly schedule, the scores are archived in the append-only ebrs_score_vintages archive, so history is checked rather than rewritten. All registry companies were recalculated with the v6.0 algorithm.
  3. v5.3 (2026-06-12)

    • Coverage correction (coverage shrinkage): the final score is regressed towards a neutral prior of 5.0 in proportion to the number of missing signals (a pseudo-observation of weight 0.5 each). This corrected a survivorship bias that made the scores of thinly researched companies artificially high.
    • Input guard: impossible year rows (before 1990 or in the future) are removed; NaN, infinite and negative financial values are replaced with null before they reach the signals.
    • All registry companies recalculated with the v5.3 algorithm; the individual signal and axis scores did not change.
  4. v5.2 (2026-04-03)

    • financial_strength: revenue/margin weights changed from 0.50/0.50 to 0.35/0.65, so profitability matters more than scale.
    • growth_trajectory: the consistency formula changed from a coefficient-of-variation formula to a direction-based one.
    • tax_discipline: changed from a stepped formula to a continuous log10 scale; the tax-growth bonus removed (cumulative year-to-date VMI data).
    • resilience: the stability formula changed from the coefficient of variation to a mix of direction ratio and standard deviation (0.6/0.4).
    • workforce_health: headcount stability now uses the direction ratio instead of the standard deviation.
    • governance_quality: structure weights 3+3+2+1 → 6+2+1.5+0.5, overall weights 0.70/0.30 → 0.60/0.40, a log2 formula for tenure.
    • procurement_integrity: participation frequency changed from a stepped formula to a log2 formula.
    • reporting_compliance: late filers 5→4, non-filer tiers changed (0/2/4/6/7).
    • community_trust: capped at 7 when there are no ratings (previously uncapped).
  5. v5.1 (2026-03-16)

    • Continuity axis reduced (21% → 15%): the TOP list was removed from continuity_capital, because a platform subscription must not affect the objective assessment of continuity.
    • Weight of the TOP list within the community_trust signal reduced (50% → 30%); user ratings dominate (70%).
    • The freed 6% moved to the Transparency axis (state data): public procurement 7%→9%, reporting 8%→10%, governance 5%→6%, ownership 4%→5%.
    • Transparency axis strengthened (26% → 32%), as the most objective basis of the assessment.
  6. v5.0 (2026-03-15)

    • 6 new signals from data.gov.lt (VPT, VMI, RC JAR, JADIS).
    • Transparency became the heaviest axis (26%), based on state data.
    • The old transparency signal demoted (20% → 2%); the assessment of activation removed.
    • Financial strength extended with VMI penalties.
    • Continuity capital uses the RC JAR registration date.
    • In total: 9 → 15 signals.
  7. v4.0 (2026-03-01)

    • The EBRS five-axis model (Continuity, Financial discipline, Market reliability, Resilience, Transparency).
    • 9 signals with percentile-based scoring.
    • Bayesian smoothing of ratings.
    • A sigmoid function for scoring growth.

Transparency

15. Open source

The whole EBRS scoring algorithm is available as an open-source package: the mathematical formula, weights and calculation logic of every signal are public and can be audited independently. It is published under the MIT licence, free to use, modify and integrate.

Source code of EBRS v7.0.0 · Methodology overview · What an EBRS score means

Disclaimer

The EBRS algorithm is experimental and has not yet been independently audited or verified by a third party. It is published for public review, for transparency and independent assessment. Use in production systems is at the user's own responsibility. An independent foundation is planned to verify and maintain the standard. This English text is a translation; where it differs from the Lithuanian annex, the Lithuanian text and the published source code prevail.

Trust pages

How the registry is run

  • About the operatorWho runs the registry, how to reach us and why the score cannot be bought.
  • Corrections processHow to report an error in a company profile and what happens next.
  • Data statusWhen each data source was last updated, checked against its schedule.
  • Privacy policy (summary)How personal data are handled. An informative English summary; the Lithuanian text prevails.
  • Terms of use (summary)The rules for using the registry. An informative English summary; the Lithuanian text prevails.