Технічне завдання: інструмент звірки рахунків з банком, картами та бухгалтером
Загальна мета
Потрібен локальний інструмент (скрипт/невеликий додаток на Python), який запускається вручну раз на 1-2 місяці на моєму комп'ютері і робить звірку між:
- Рахунками, які я виставив клієнтам і отримав від постачальників (PDF-файли та фото квитанцій, що лежать у пошті Gmail)
- Банківською випискою (Excel)
- Витратами по кредитним картам (Excel, може бути кілька файлів — кілька карт)
- Excel-файлом від бухгалтера, в який він вносить рахунки для звітності в податкову та ПДВ
Що повинен робити інструмент
1. Збір рахунків з пошти (Gmail)
- Підключення через Gmail API (OAuth)
- Пошук листів за заданий період (наприклад, останні 2 місяці) з вкладеннями
- Завантаження вкладень: PDF-файли та зображення (фото квитанцій/чеків)
- Розпізнавання даних з кожного рахунка: дата, сума, назва постачальника/клієнта, номер рахунка (якщо є)
- Для PDF — витягування тексту безпосередньо
- Для зображень — розпізнавання тексту (OCR), включаючи текст на івриті
2. Читання Excel-файлів
- Банківська виписка (доходи та витрати)
- Один або кілька файлів витрат по кредитним картам
- Excel від бухгалтера зі списком внесених рахунків (в ньому є тільки сума + дата + назва контрагента, єдиного номера рахунка для співставлення немає)
3. Логіка співставлення
Співставлення записів між джерелами за комбінацією: сума + дата (з допустимим відхиленням) + назва контрагента (нечітке порівняння тексту, оскільки назви можуть трохи відрізнятися).
4. Перевірки, які потрібно виконати
A. Виставлені рахунки на всі доходиДля кожного надходження грошей у банку — перевірити, чи є відповідний рахунок, який я виставив. Якщо немає — позначити як "доходи без виставленого рахунка".
B. Збережені рахунки на всі визнані витратиДля кожного витрату в банку/на картах, який відноситься до категорії визнаних витрат — перевірити, чи є збережений рахунок. Якщо немає — позначити як "витрата без збереженого рахунка".
C. Звірка зі списком бухгалтераПорівняти список рахунків, які я зібрав (з пошти), зі списком, який бухгалтер вніс і відправив у податкову/ПДВ. Позначити:
- Рахунки, які я зібрав, але яких немає у файлі бухгалтера (можливо, не були передані або не внесені)
- Записи у файлі бухгалтера, для яких не знайшовся відповідний рахунок у моїй колекції
D. Перевірка зарплатного листкаПеревірити, що сума, зазначена в зарплатному листку, відповідає сумі, яка фактично списана/надійшла в банку.
5. Підсумковий звіт
Результат — один Excel-файл з кількома листами:
- Доходи без виставленого рахунка
- Витрати без збереженого рахунка
- Рахунки, відсутні у бухгалтера
- Записи бухгалтера без відповідного рахунка
- Звірка зарплатного листка з банком
Несумісності/проблемні рядки повинні бути візуально виділені (кольором).
Технічні деталі
- Мова: Python
- Excel: pandas + openpyxl
- PDF: витягування тексту (pdfplumber/PyMuPDF)
- OCR зображень: з підтримкою івриту (бажано використовувати Claude API з підтримкою зображень замість класичного Tesseract, для кращої точності з івритом)
- Gmail API: google-api-python-client, OAuth (потрібно буде створити проект у Google Cloud Console — це буде зроблено замовником/виконавцем спільно)
- Результат зберігається як Excel-файл локально на комп'ютері
- Інтерфейс: достатньо командного рядка (CLI), без необхідності у веб-інтерфейсі
Формат здачі
- Вихідний код проекту
- Коротка інструкція по запуску (включаючи, як підключити свій Gmail і де покласти вхідні Excel-файли)
- Інструкція по створенню credentials у Google Cloud Console, якщо це не було зроблено заздалегідь
Додатково
Готовий надати приклади структури Excel-файлів (банк, карти, файл бухгалтера) та приклади рахунків (PDF і фото) для тестування.