# kusumachan/friday-screener architecture

> Architecture diagram of the GitHub repository kusumachan/friday-screener, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kusumachan/friday-screener
- Repository: https://github.com/kusumachan/friday-screener

## Overview

Friday Screener is a CLI for screening and comparing Indonesian stocks. The main workflow starts with a user command, fetches market data, optionally adds news and corporate actions, analyzes fundamentals into weighted category scores and insights, then displays a result or comparison. The analyzer uses configurable screening criteria; the data and result models define the handoff between acquisition, analysis, and presentation. README-described capabilities guide the map where excerpts are incomplete; unsampled command wiring is not inferred beyond documented workflows.

Main entry points: [`src/cli/commands.py`](https://github.com/kusumachan/friday-screener/blob/main/src/cli/commands.py) (Commands and output), [`src/analyzers/fundamental_analyzer.py`](https://github.com/kusumachan/friday-screener/blob/main/src/analyzers/fundamental_analyzer.py) (Fundamental analyzer), [`src/services/yahoo_finance_service.py`](https://github.com/kusumachan/friday-screener/blob/main/src/services/yahoo_finance_service.py) (Market data service), [`src/models/stock_data.py`](https://github.com/kusumachan/friday-screener/blob/main/src/models/stock_data.py) (Stock data model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI workflow"]
  node_main["Application entry<br/>[main.py]"]
  node_cli["Commands and output<br/>[commands.py]"]
end

subgraph group_acquisition["Data acquisition"]
  node_yahoo_service["Market data service"]
  node_news_service["News and actions"]
end

subgraph group_analysis["Screening analysis"]
  node_analyzer["Fundamental analyzer"]
  node_settings["Screening criteria<br/>[settings.py]"]
end

subgraph group_contracts["Domain models"]
  node_stock_data["Stock data model<br/>[stock_data.py]"]
  node_screening_result["Screening result"]
end

node_user(("Investor or analyst"))
node_yahoo["Yahoo Finance"]

node_user -->|"starts"| node_main
node_main -->|"dispatches"| node_cli
node_cli -->|"fetches data"| node_yahoo_service
node_yahoo_service -->|"requests data"| node_yahoo
node_yahoo_service -->|"builds"| node_stock_data
node_cli -.->|"fetches news"| node_news_service
node_news_service -->|"requests news"| node_yahoo
node_cli -.->|"attaches news"| node_stock_data
node_cli -->|"analyzes"| node_analyzer
node_analyzer -->|"reads metrics"| node_stock_data
node_analyzer -->|"uses thresholds"| node_settings
node_analyzer -->|"produces"| node_screening_result
node_cli -->|"displays results"| node_screening_result

click node_main "https://github.com/kusumachan/friday-screener/blob/main/src/main.py"
click node_cli "https://github.com/kusumachan/friday-screener/blob/main/src/cli/commands.py"
click node_yahoo_service "https://github.com/kusumachan/friday-screener/blob/main/src/services/yahoo_finance_service.py"
click node_news_service "https://github.com/kusumachan/friday-screener/blob/main/src/services/news_scraper_service.py"
click node_analyzer "https://github.com/kusumachan/friday-screener/blob/main/src/analyzers/fundamental_analyzer.py"
click node_settings "https://github.com/kusumachan/friday-screener/blob/main/src/config/settings.py"
click node_stock_data "https://github.com/kusumachan/friday-screener/blob/main/src/models/stock_data.py"
click node_screening_result "https://github.com/kusumachan/friday-screener/blob/main/src/models/screening_result.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_cli toneBlue
class node_yahoo_service,node_news_service toneAmber
class node_analyzer,node_settings toneMint
class node_stock_data,node_screening_result toneRose
class node_user,node_yahoo toneIndigo
```

## Components

### CLI workflow

- [Application entry](https://github.com/kusumachan/friday-screener/blob/main/src/main.py): `src/main.py`
- [Commands and output](https://github.com/kusumachan/friday-screener/blob/main/src/cli/commands.py): `src/cli/commands.py`

### Data acquisition

- [Market data service](https://github.com/kusumachan/friday-screener/blob/main/src/services/yahoo_finance_service.py): `src/services/yahoo_finance_service.py`
- [News and actions](https://github.com/kusumachan/friday-screener/blob/main/src/services/news_scraper_service.py): `src/services/news_scraper_service.py`

### Screening analysis

- [Fundamental analyzer](https://github.com/kusumachan/friday-screener/blob/main/src/analyzers/fundamental_analyzer.py): `src/analyzers/fundamental_analyzer.py`
- [Screening criteria](https://github.com/kusumachan/friday-screener/blob/main/src/config/settings.py): `src/config/settings.py`

### Domain models

- [Stock data model](https://github.com/kusumachan/friday-screener/blob/main/src/models/stock_data.py): `src/models/stock_data.py`
- [Screening result](https://github.com/kusumachan/friday-screener/blob/main/src/models/screening_result.py): `src/models/screening_result.py`

### Other components

- **Investor or analyst**
- **Yahoo Finance**

## Connections

- Investor or analyst → Application entry: starts
- Application entry → Commands and output: dispatches
- Commands and output → Market data service: fetches data
- Market data service → Yahoo Finance: requests data
- Market data service → Stock data model: builds
- Commands and output → News and actions: fetches news
- News and actions → Yahoo Finance: requests news
- Commands and output → Stock data model: attaches news
- Commands and output → Fundamental analyzer: analyzes
- Fundamental analyzer → Stock data model: reads metrics
- Fundamental analyzer → Screening criteria: uses thresholds
- Fundamental analyzer → Screening result: produces
- Commands and output → Screening result: displays results
