graph TD
User[Пользователь] -->|команды, данные| Add[1. Добавить операцию]
User --> Show[2. Показать все]
User --> Filter[3. Фильтрация]
User --> Report[4. Отчёт]
Add -->|запись| Ledger[(Ledger\nсписок словарей)]
Show -->|чтение| Ledger
Filter -->|чтение| Ledger
Report -->|чтение| Ledger
Show -->|вывод списка| User
Filter -->|вывод отфильтрованного списка| User
Report -->|вывод итогов| User
graph TD
User[Пользователь] --> Add[1. Добавить операцию]
subgraph Add [Процесс 1: Добавить операцию]
direction TB
V1[1.1 Валидация типа income/expense]
V2[1.2 Валидация суммы >0]
V3[1.3 Валидация формата даты]
V4[1.4 Валидация непустой категории]
V1 --> V2 --> V3 --> V4
end
User --> Show[2. Показать все]
User --> Filter[3. Фильтрация]
User --> Report[4. Отчёт]
Add -->|запись объекта Transaction| Ledger[(Ledger\nList[Transaction])]
Show -->|чтение| Ledger
Filter -->|чтение| Ledger
Report -->|чтение| Ledger
Show -->|вывод списка| User
Filter -->|вывод отфильтрованного списка| User
Report -->|вывод итогов| User
flowchart TD
Start([Начало]) --> InputType[Ввести тип операции]
InputType --> CheckType{Тип = income/expense?}
CheckType -- Нет --> InputType
CheckType -- Да --> InputAmount[Ввести сумму]
InputAmount --> CheckAmount{Сумма > 0 и число?}
CheckAmount -- Нет --> InputAmount
CheckAmount -- Да --> InputCat[Ввести категорию]
InputCat --> CheckCat{Категория не пуста?}
CheckCat -- Нет --> InputCat
CheckCat -- Да --> InputDate[Ввести дату YYYY-MM-DD]
InputDate --> CheckDate{Формат корректен?}
CheckDate -- Нет --> InputDate
CheckDate -- Да --> InputComment[Ввести комментарий (опционально)]
InputComment --> CreateObj[Создать запись<br>словарь / объект Transaction]
CreateObj --> AddToList[Добавить в ledger]
AddToList --> End([Конец])
style CheckType fill:#f9f,stroke:#333
style CheckAmount fill:#f9f,stroke:#333
style CheckCat fill:#f9f,stroke:#333
style CheckDate fill:#f9f,stroke:#333
flowchart TD
Start([Начало]) --> InputDateFrom[Ввести дату 'с' (опционально)]
InputDateFrom --> InputDateTo[Ввести дату 'по' (опционально)]
InputDateTo --> InputCat[Ввести категорию (опционально)]
InputCat --> InputType[Ввести тип (опционально)]
InputType --> InitResult[Создать пустой список result]
InitResult --> Loop{Для каждой tx в ledger}
Loop -->|есть tx| CheckDateFrom{date_from задана<br>и tx.date < date_from?}
CheckDateFrom -- Да --> Loop
CheckDateFrom -- Нет --> CheckDateTo{date_to задана<br>и tx.date > date_to?}
CheckDateTo -- Да --> Loop
CheckDateTo -- Нет --> CheckCat{category задана<br>и tx.category (lower) != category (lower)?}
CheckCat -- Да --> Loop
CheckCat -- Нет --> CheckType{type задан<br>и tx.type != type?}
CheckType -- Да --> Loop
CheckType -- Нет --> Append[Добавить tx в result]
Append --> Loop
Loop -->|нет операций| Show[Вывести result]
Show --> End([Конец])