Python · 39 строк
Бухгалтер компании выгружает из 1С реестр на зарплату: CSV в cp1251 с заголовком «ФИО;Счёт;Сумма», суммы вида 45 000,50. Функция проверяет баланс компании, зачисляет деньги сотрудникам на счета в банке и списывает сумму с компании.
В реестре до 3 000 строк. credit_account сразу переводит деньги на счёт, get_connection — psycopg2. Если импорт упал, бухгалтер загружает тот же файл ещё раз. Отметьте строки с ошибками.
В работе: Альфа-Бизнес Онлайн: «Зарплатный проект» → «Загрузить реестр» 5-го и 20-го числа.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Альфа-Банка: зарплатный проект для бизнеса. Условие пересказано своими словами.
Давали на собеседовании?
import csvimport loggingfrom .bank import credit_accountfrom .db import get_connectionlog = logging.getLogger(__name__)def import_payroll(path, company_id):"""Зарплатный реестр от бухгалтерии клиента: ФИО;счёт;сумма."""total = 0rows = []f = open(path)for line in csv.reader(f, delimiter=";"):name, account, amount = linerows.append((name, account, float(amount)))total += float(amount)conn = get_connection()cur = conn.cursor()cur.execute("SELECT balance FROM companies WHERE id = %s", (company_id,))balance = cur.fetchone()[0]if total > balance:raise ValueError("Недостаточно средств на счёте компании")for name, account, amount in rows:cur.execute("SELECT id FROM employees WHERE account = %s", (account,))emp = cur.fetchone()if emp is None:log.warning("Сотрудник не найден: %s", line)continuecredit_account(account, amount)cur.execute("UPDATE companies SET balance = balance - %s WHERE id = %s", (amount, company_id))conn.commit()log.info("Реестр %s: %d строк, %s ₽", path, len(rows), total)return total