尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Automated financial statement analysis - ratios, health score, trend intelligence and live valuation. Reads a company's Balance Sheet, P&L and Cash Flow statements and produces:查看完整 README ↗
Automated financial statement analysis - ratios, health score, trend intelligence and live valuation.
Reads a company's Balance Sheet, P&L and Cash Flow statements and produces:
Search any company by name or ticker:
RELIANCE.NS, 500325.BO), LSE (.L), TSX (.TO) and more.In Auto mode, US tickers try SEC first and fall back to Yahoo, and the report notes when that happens. You can also upload your own statements.
Each company page has:
These tabs are built for finance students. Each one answers one question about the share price and explains the finance behind the answer.
Stock drivers: eight factors, each scored −2 (headwind) to +2 (tailwind) from explicit, inspectable rules:
Every factor lists the evidence behind its score, explains why it moves share prices, and says what to watch. The factors combine into an overall tilt, a bull case vs bear case, and a watch list.
Sensitivities: what moves the price. These estimate how much EPS or value changes for:
Price attribution: splits the share-price change between fiscal year-ends into EPS growth vs P/E re-rating, using ln(P₁/P₀) = ln(EPS₁/EPS₀) + ln(PE₁/PE₀). Stock splits are detected and share counts restated.
Valuation lab:
Price & risk:
Scorecards: Piotroski F-Score (9 signals), Altman Z-Score (original, using market value) and Z''-Score (using book equity), and the Beneish M-Score (8 indices, with flags). Every component is shown with its explanation.
Mixed currencies: if a share trades in a different currency from its accounts (e.g. Infosys: NSE price in INR, accounts in USD, or London prices in pence), prices are converted at the prevailing exchange rate before any multiple is computed.
Uploaded statements: these get the fundamental factors, the scorecards and a DCF. Enter shares and price to get per-share values.
This is a rules-based reading of reported data for learning purposes, not investment advice.
pip install -r requirements-dev.txt
python -m uvicorn api.index:app --reload # http://localhost:8000 (API docs at /api/docs)
The repo is ready to deploy as is:
api/index.py is a FastAPI app that runs as a Python serverless function.public/ is the static frontend, served from Vercel's CDN.vercel.json routes /api/* to the function, with a 60s max duration and 1 GB memory.Two ways to deploy:
npm i -g vercel
vercel login
vercel # preview deployment
vercel --prod # production
Set this environment variable under Settings → Environment Variables:
| Variable | Why |
|---|---|
SEC_USER_AGENT | The SEC asks automated clients to identify themselves, e.g. YourApp [email protected]. A generic default is used if it isn't set. |
Production notes:
s-maxage 30 min, stale-while-revalidate 1 day), quotes for 15s, and searches for 1 day. Warm function instances also keep an in-memory cache, so repeat lookups are fast and stay within upstream rate limits.finanalyx/providers/ (same CompanyData interface).python -m pytest. The API tests stub the data providers, so they run offline.pip install -r requirements-dev.txt
python samples/generate_samples.py # writes the two sample companies
python -m finanalyx analyze samples/northwind --company "Northwind Industries" \
--html output/northwind.html --xlsx output/northwind.xlsx --json output/northwind.json
python -m finanalyx analyze samples/meridian_retail_financials.xlsx -v
| Command | Purpose |
|---|---|
analyze INPUTS... [--html F] [--json F] [--xlsx F] | Analyze files or folders |
--company NAME | Report title (default: guessed from the file name) |
--mapping map.json | Map unusual labels: {"Net turnover from ops": "revenue"} |
--basis average|ending | Balance used in ROE/ROA/turnover ratios (default average) |
-v / -q | Verbose output (all findings, YoY, line items) / no terminal output |
template DIR | Write blank CSV templates to fill in |
items | List recognised line items and their keys (for --mapping) |
Python API: from finanalyx import analyze; a = analyze(["statements/"]), which returns a.data, a.ratios and a.trends.
Supported: CSV/TSV, Excel (.xlsx, .xlsm, .xls, one sheet per statement or one sheet per file), and text-based PDF (best-effort; scanned PDFs need OCR first). A folder is read recursively.
Layout: line items in the first column and one column per fiscal year. The parser also handles:
FY25, FY2025, FY 2024-25 (counted as FY25), 2025, Mar-25, 31-03-2025, real Excel dates, Year ended 31 March 2025. Quarterly, TTM and "YoY %" columns are ignored,(1,234) negatives, currency symbols, - or nil (read as 0) versus blank or n/a (read as missing),The statement type comes from the file or sheet name (e.g. balance_sheet.csv, sheet P&L). Failing that, it is inferred from the line items. Labels are matched against about 300 synonyms (US GAAP, IFRS and Ind-AS wording), with a cautious fuzzy fallback for typos. "Total non-current assets" is never mistaken for "Total current assets". Every mapping is listed in the HTML report's audit section.
| Category | Metric | Formula | Healthy / Weak |
|---|---|---|---|
| Liquidity | Current Ratio | Current Assets / Current Liabilities | ≥1.5x / <1.0x |
| Quick Ratio | (Current Assets − Inventory) / Current Liabilities | ≥1.0x / <0.7x | |
| Solvency | Debt/Equity | Total Debt / Total Equity | ≤1.0x / >2.0x |
| Debt Ratio | Total Debt / Total Assets | ≤0.4 / >0.6 | |
| Interest Coverage | EBIT / Interest Expense | ≥5x / <2x | |
| Profitability | ROE | Net Income / Avg Equity | ≥15% / <8% |
| ROA | Net Income / Avg Total Assets | ≥7% / <3% | |
| Net Profit Margin | Net Income / Revenue | ≥10% / <5% | |
| EBITDA Margin | (EBIT + D&A) / Revenue | ≥20% / <10% | |
| Efficiency | Inventory Turnover | COGS / Avg Inventory | – |
| Receivable Turnover | Revenue / Avg Receivables | – | |
| Asset Turnover | Revenue / Avg Total Assets | – | |
| Growth | Revenue, Profit, Asset CAGR | (End / Start)^(1/years) − 1 | ≥10% / <0% |
| YoY growth (revenue, profit, assets) | Value_t / Value_t−1 − 1 |
Supporting metrics (these feed the narrative): gross margin, EBIT margin, opex/revenue, DSO, DIO, OCF/net income, FCF margin, capex/revenue, net debt/EBITDA, equity multiplier.
Thresholds are generic rules of thumb that apply across industries. Compare against sector peers before drawing conclusions.
Every assumption that is actually applied is listed in the report's "Assumptions" section.
--basis ending to use closing balances throughout.(600) COGS or capex) are converted to positive amounts.These run whenever there are at least 2 years of data. Detectors that look for multi-year patterns need 3–4 or more. Each finding has a severity (concern, watch, positive or note) and a score. Findings that involve the latest year rank higher.
| Detector | Examples of what it finds |
|---|---|
| Revenue | Unbroken growth, a year that broke a growth streak, recovery after a dip, growth accelerating or decelerating |
| Cost structure | Opex or COGS growing faster than revenue in specific years, and the effect on margins (e.g. "Revenue increased consistently, but operating expenses grew faster than revenue in FY25") |
| Margins | Expanding or contracting every year, or peak-and-fade and trough-and-recovery inflection points |
| Profit vs revenue | Profit CAGR vs revenue CAGR, net income falling while revenue rose, below-the-line divergence from EBIT |
| Returns | ROE change broken down with DuPont analysis (margin × turnover × leverage), flagging ROE gains that come from leverage |
| Working capital | Receivables or inventory growing faster than sales or COGS, and DSO/DIO moving by more than a few days |
| Leverage | Debt jumps (and whether capex was debt-funded), D/E trend, interest coverage deterioration, net debt/EBITDA |
| Liquidity, efficiency | Current ratio crossing 1.5x or 1.0x, assets growing faster than revenue |
| Cash flow | OCF/NI conversion, profit vs cash divergence, negative FCF, dividends larger than FCF |
| Anomalies | One-off spike-and-reverse moves, statistical outliers |
api/index.py FastAPI app (Vercel serverless function; also serves public/ locally)
public/ web UI: index.html, assets/app.js + research.js (panels), app.css + research.css, samples/
vercel.json routing, function limits, security headers
finanalyx/
providers/ live data: sec.py (SEC EDGAR XBRL), yahoo.py (Yahoo Finance), base.py (HTTP, cache)
research.py orchestrates market data, scorecards, valuation and drivers (with FX conversion)
drivers.py 8-factor stock-driver scorecard, bull/bear case, watch list
valuation.py WACC (CAPM), two-stage DCF, reverse DCF, scenarios, EPS-vs-P/E attribution, sensitivities
market.py returns, beta, volatility, Sharpe/Sortino, drawdown, moving averages, RSI
scores.py Piotroski F-Score, Altman Z / Z'', Beneish M-Score
ingest.py file reading, header/period/number parsing, units, statement detection
schema.py canonical line items + synonyms
mapping.py label -> line-item matching (exact, override, guarded fuzzy)
model.py merge tables, sign normalisation, derivations, validation
ratios.py metric definitions, thresholds, calculation
trends.py narrative trend detectors, executive summary, YoY commentary
report_text.py terminal dashboard report_html.py HTML dashboard
export.py JSON / Excel cli.py, analyzer.py entry points
samples/ generator + two sample companies (clean CSVs, messy Ind-AS workbook)
tests/ pytest suite (python -m pytest)