Files
sales-data-analysis/.cursor/rules/ltm_methodology.md
Jonathan Pressnell cf0b596449 Initial commit: sales analysis template
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 09:16:34 -05:00

90 lines
2.3 KiB
Markdown

# LTM (Last Twelve Months) Methodology Rules
## ⭐ RECOMMENDED: Use analysis_utils.py
**Prefer utility functions:**
```python
from analysis_utils import get_ltm_period_config, get_annual_data, calculate_annual_metrics
from config import get_ltm_period, get_ltm_label
ltm_start, ltm_end = get_ltm_period_config()
year_data, year_label = get_annual_data(df, 2025, ltm_start, ltm_end)
```
## What is LTM?
**LTM (Last Twelve Months)** = Rolling 12-month period for the most recent partial year
- **Purpose:** Apples-to-apples comparison with full calendar years
- **Example:** If latest data is through September 2025, use Oct 2024 - Sep 2025 (12 months)
## When to Use LTM
- **Full calendar years (2021-2024):** Use complete year data
- **Most recent partial year (2025):** Use LTM if you only have partial year data
- **Complete years only:** Disable LTM in config if all years are complete
## Configuration
**Configure in config.py:**
```python
LTM_ENABLED = True # Set to False if all years are complete
LTM_START_MONTH = 10 # Month number (1-12)
LTM_START_YEAR = 2024
LTM_END_MONTH = 9
LTM_END_YEAR = 2025
```
## Implementation Pattern
```python
from analysis_utils import get_ltm_period_config, get_annual_data
ltm_start, ltm_end = get_ltm_period_config()
for year in sorted(df['Year'].unique()):
year_data, year_label = get_annual_data(df, year, ltm_start, ltm_end)
# year_label will be "2025 (LTM 9/2025)" for LTM year, or "2025" for regular year
```
## Labeling Requirements
**ALWAYS label LTM year with notation in:**
- Chart titles
- Chart x-axis labels
- Table headers
- Print statements
- Report text
**Example:**
```python
from config import get_ltm_label
ltm_label = get_ltm_label() # Returns "2025 (LTM 9/2025)" or None
if ltm_label:
title = f'Annual Revenue Trend\n({ltm_label})'
```
## Common Mistakes
**WRONG:**
```python
year_2025_data = df[df['Year'] == 2025] # Uses partial year (not comparable)
```
**CORRECT:**
```python
from analysis_utils import get_annual_data
ltm_start, ltm_end = get_ltm_period_config()
year_2025_data, year_label = get_annual_data(df, 2025, ltm_start, ltm_end)
```
## Disabling LTM
If all years in your analysis are complete calendar years:
```python
# In config.py:
LTM_ENABLED = False
```
Then all years will be treated as full calendar years.