Appearance
Piotroski F-Score
Nine-point fundamentals scorecard (Piotroski 2000). 7-9 = strong, 4-6 = mid, 0-3 = weak. Four profitability checks (NI > 0, OCF > 0, ROA improving, OCF > NI), three leverage/liquidity checks (LT debt down, current ratio up, no dilution), two efficiency checks (gross margin up, asset turnover up).
Direction: Higher better Category: forensic
Inputs (XBRL fallback chains):
- assets:
Assets - cost_of_revenue:
CostOfRevenue->CostOfGoodsAndServicesSold->CostOfGoodsSold->CostOfServices - current_assets:
AssetsCurrent - current_liabilities:
LiabilitiesCurrent - long_term_debt:
LongTermDebt->LongTermDebtNoncurrent - net_income:
NetIncomeLoss->ProfitLoss - operating_cash_flow:
NetCashProvidedByUsedInOperatingActivities - revenue:
Revenues->RevenueFromContractWithCustomerExcludingAssessedTax->RevenueFromContractWithCustomerIncludingAssessedTax->SalesRevenueNet->SalesRevenueGoodsNet - shares_outstanding:
EntityCommonStockSharesOutstanding->CommonStockSharesOutstanding - weighted_avg_shares_basic:
WeightedAverageNumberOfSharesOutstandingBasic - weighted_avg_shares_diluted:
WeightedAverageNumberOfDilutedSharesOutstanding
Returns None when: Returns None when prior-year anchor isn't reachable — six of the nine points are YoY-anchored. Score is integer 0-9 returned as Decimal.
Source code
Implementation: piotroski_f_score in src/eqtytrk/metrics/ratios.py (or valuation.py for multiples).
See also
For full methodology — decomposition, thresholds, when each score lights up vs the others, citations to original papers — see the Forensic screening essay.