Загрузка данных


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([Конец])