Найти в Дзене

Разработка системы автоматизации выставления счетов и напоминаний об оплате на Cloudflare Serverless

Для компаний, обслуживающих десятки или сотни клиентов, выставление счетов часто превращается в источник хаоса и стресса. Мы, в составе команды Coders Club After-AI являлись исполителями интересного заказа для компании GTO-service, которая занимаетсяя регламентным обслуживанием коммерческих автопарков в Европе. Проблема оказалась типичной: счета выставлялись вручную, напоминания об оплате отправлялись нерегулярно, а начисление пеней вызывало внутренние этические споры. В итоге — задержки платежей, непредсказуемый денежный поток и перегруженный бухгалтерский отдел. Наш руководитель Александр Шаман и менеджер цифровой трансформации расскажет про то, как мы за 100 часов построили полностью автоматизированную систему на Node.js + TypeScript, задеплоенную на Cloudflare Serverless, которая связала CRM клиента с SAP и автоматически управляет: Результат — +70% своевременных платежей и +€12 000 дополнительного дохода за счёт автоматических начислений. Компания обслуживает более 400 корпоративны
Оглавление

Для компаний, обслуживающих десятки или сотни клиентов, выставление счетов часто превращается в источник хаоса и стресса.

Мы, в составе команды Coders Club After-AI являлись исполителями интересного заказа для компании GTO-service, которая занимаетсяя регламентным обслуживанием коммерческих автопарков в Европе.

Проблема оказалась типичной: счета выставлялись вручную, напоминания об оплате отправлялись нерегулярно, а начисление пеней вызывало внутренние этические споры.

Разработка системы автоматизации выставления счетов
Разработка системы автоматизации выставления счетов

В итоге — задержки платежей, непредсказуемый денежный поток и перегруженный бухгалтерский отдел.

Наш руководитель Александр Шаман и менеджер цифровой трансформации расскажет про то, как мы за 100 часов построили полностью автоматизированную систему на Node.js + TypeScript, задеплоенную на Cloudflare Serverless, которая связала CRM клиента с SAP и автоматически управляет:

  • выставлением счетов,
  • напоминаниями об оплате,
  • и формированием пеней за просрочку.

Результат — +70% своевременных платежей и +€12 000 дополнительного дохода за счёт автоматических начислений.

Проблема

Исходные данные

Компания обслуживает более 400 корпоративных клиентов, управляя плановыми ТО, заменой запчастей и проверками автопарков.

Каждый контракт имеет собственные сроки оплаты — от 14 до 60 дней.

Все счета создавались вручную в CRM, а данные переносились в SAP через экспорт CSV.

Основные сложности

  • Хаос в выставлении счетов — дубли, пропуски, несвоевременные отправки.
  • 🕒 Просрочки по оплатам — около 45% счетов оплачивались с задержкой.
  • 📧 Напоминания вручную — бухгалтеры тратили по 10–15 часов в неделю.
  • ⚖️ Этический конфликт — менеджеры стеснялись напоминать о долгах и начислять пени.
  • 🔄 CRM и SAP не синхронизированы — отчёты не совпадали, что мешало аудиту.

Цели проекта

Мы поставили перед собой четыре задачи:

  1. Автоматически синхронизировать счета между CRM и SAP.
  2. Автоматизировать напоминания об оплате до и после срока.
  3. Автоматически начислять пени и формировать отдельный счёт.
  4. Сделать всё это без серверов и обслуживания инфраструктуры, используя Cloudflare Serverless.

План по времени:

  • 10 часов — анализ и проектирование
  • 40 часов — разработка
  • 30 часов — тестирование и корректировки
  • 20 часов — внедрение и обучение

Итоговая стоимость: €5000

Решение

Мы реализовали серверлесс-коннектор между CRM и SAP, работающий на Cloudflare Workers и использующий встроенные инструменты Cloudflare:

  • Workers — основной API и бизнес-логика;
  • KV Storage — хранилище для статусов счетов;
  • Cron Triggers — планировщики напоминаний и синхронизации;
  • Pages — фронтенд-панель для бухгалтерии.
Архитектура системы автоматизации выставления счетов и напоминаний об оплате
Архитектура системы автоматизации выставления счетов и напоминаний об оплате

Почему именно Cloudflare Serverless

  1. Никаких серверов или Docker-контейнеров — всё на edge-инфраструктуре Cloudflare.
  2. Мгновенные реакции — напоминания рассылаются с ближайшего узла пользователю.
  3. Cron-триггеры позволяют выполнять код по расписанию без внешних задач.
  4. Минимальные расходы — система работает в пределах бесплатного тарифа.

Бэкенд на TypeScript

1. Синхронизация счетов

Каждый час Worker опрашивает CRM и передаёт новые счета в SAP.

// src/worker.ts
import { fetchCRMInvoices, updateSAPInvoice } from './services';

export default {
async scheduled(event, env) {
const invoices = await fetchCRMInvoices(env);
for (const inv of invoices) {
await updateSAPInvoice(inv, env);
}
console.log(`[SYNC] Синхронизировано ${invoices.length} счетов`);
},
};

2. Ежедневные напоминания

Напоминания запускаются Cloudflare Cron Trigger’ом каждый день в 07:00.

// src/reminder.ts
import { sendReminderEmail } from './services';
import { getOverdueInvoices } from './store';

export async function handleReminders(env) {
const overdue = await getOverdueInvoices(env);
for (const inv of overdue) {
await sendReminderEmail(inv, env);
}
console.log(`Отправлено ${overdue.length} напоминаний`);
}

Типы напоминаний:

  1. За 3 дня до срока — дружеское письмо.
  2. В день срока — официальное уведомление.
  3. Через 5 дней — предупреждение с упоминанием пени.

3. Автоматическое начисление пеней

Через 7 дней после просрочки создаётся новый счёт с пеней и синхронизируется в SAP.

// src/penalty.ts
export async function createPenaltyInvoice(inv, env) {
const daysLate = Math.floor(
(Date.now() - new Date(inv.dueDate).getTime()) / 86400000
);
const weeksLate = Math.ceil(daysLate / 7);
const penalty = inv.total * 0.02 * weeksLate;

const penaltyInvoice = {
reference: inv.number,
amount: penalty,
description: `Пени за просрочку (${weeksLate} нед.)`,
customerId: inv.customerId,
};

await fetch(`${env.SAP_URL}/InvoiceCreate`, {
method: 'POST',
headers: { Authorization: `Basic ${env.SAP_TOKEN}` },
body: JSON.stringify(penaltyInvoice),
});
}

Фронтенд (React + Cloudflare Pages)

Мы сделали простую панель для бухгалтерии: просмотр счетов, фильтрация, ручной запуск синхронизации и просмотр истории напоминаний.

// src/components/InvoiceTable.tsx
import React, { useEffect, useState } from "react";
import { getInvoices } from "../api";

export const InvoiceTable = () => {
const [invoices, setInvoices] = useState([]);

useEffect(() => {
getInvoices().then(setInvoices);
}, []);

return (
<table>
<thead>
<tr>
<th>№</th><th>Клиент</th><th>Сумма</th><th>Срок</th><th>Статус</th>
</tr>
</thead>
<tbody>
{invoices.map(inv => (
<tr key={inv.id} className={inv.isOverdue ? "overdue" : ""}>
<td>{inv.number}</td>
<td>{inv.client}</td>
<td>€{inv.total}</td>
<td>{inv.dueDate}</td>
<td>{inv.status}</td>
</tr>
))}
</tbody>
</table>
);
};

Хранилище на Cloudflare KV

Cloudflare KV используется для хранения состояния счетов и журналов:

  • Дата последнего напоминания
  • Сумма и срок
  • Признак «пени начислены»
// src/store.ts
export async function getOverdueInvoices(env) {
const all = await env.INVOICES.list();
return Object.values(all.keys)
.map((k) => JSON.parse(k.metadata))
.filter((inv) => new Date(inv.dueDate) < new Date());
}

KV работает молниеносно и не требует отдельной базы данных.

Интеграция с CRM и SAP

  • CRM: REST API + OAuth2
  • SAP: SOAP / OData

Маппинг данных выполняется внутри Worker’а:

// src/transform.ts
export const crmToSapInvoice = (crmInv) => ({
SAPInvoiceId: crmInv.id,
CustomerCode: crmInv.clientId,
Amount: crmInv.amount,
DueDate: crmInv.dueDate,
Description: crmInv.notes || "Регламентное обслуживание",
});

Cloudflare Deployment

Развёртывание занимало считанные секунды:

npm run build
npx wrangler deploy

wrangler.toml:

name = "invoice-automation"
main = "dist/worker.js"
compatibility_date = "2025-10-01"

kv_namespaces = [
{ binding = "INVOICES", id = "xxxx-yyyy-zzzz" }
]

[triggers]
crons = ["0 * * * *", "0 7 * * *"]

  • каждый час — синхронизация счетов
  • каждый день в 07:00 — рассылка напоминаний

Мониторинг и отчётность

  • Логи доступны через wrangler tail
  • Slack-уведомления о просроченных счетах
  • Ежедневный отчёт по e-mail для бухгалтерии

Этика и прозрачность

Автоматизация не должна превращаться в “жёсткий сбор долгов”.

Мы реализовали
гибкую систему напоминаний, где сначала отправляется дружеское уведомление, а пени начисляются только после трёх предупреждений.

Пример письма:

Тема: Напоминание об оплате счёта №4312

Здравствуйте, Иван!

Наши записи показывают, что счёт №4312 (от 30 сентября, €2100)
пока не оплачен. Пожалуйста, произведите оплату до 7 октября,
чтобы избежать начисления пени (2% за неделю просрочки).

Если вы уже оплатили, просто проигнорируйте это письмо.

С уважением,
Отдел расчётов Fleet Maintenance Services

Результаты

После двух месяцев эксплуатации:

МетрикаДоПослеОплата в срок55%93%Средняя просрочка9 дней2 дняРучные напоминания15 ч/нед6 ч/недДоп. доход от пеней—€12 000+Надёжность системы92%99.999%

Система полностью окупилась за два месяца.

Технические выводы

  1. Serverless идеально подходит для периодических задач — без cron-серверов и контейнеров.
  2. Cloudflare KV заменил полноценную базу для кэша и логов.
  3. Прозрачные уведомления повысили доверие клиентов — никто не оспаривал начисленные пени.
  4. Отделение логики от интеграций упростило поддержку.
  5. Cron Triggers Cloudflare оказались промышленным решением для финансовых задач.

Экономический эффект

ПоказательЗначениеЗатраты на разработку€5000Ежемесячная экономия на ручной работе~€2000Дополнительный доход от пеней€12 000+ROI за 3 месяца+220%

Этот проект в очередной раз подчеркнул: автоматизация может быть и выгодной, и этичной.

Серверлесс-архитектура позволила построить полностью автономную систему,

которая не требует серверов, обслуживается за минуты и приносит компании ощутимый результат.

100 часов работы → 70% рост своевременных платежей → ноль инфраструктурных забот.

Планы заказчика на будущее

  • Интеграция с WhatsApp Business API для мгновенных уведомлений.
  • Прогнозирование задержек на основе ML-модели.
  • Локализация напоминаний для разных стран.
  • Автоматическая сверка оплат с банковскими выписками.

За кодом - только к нам! Мы не скрываем использование AI, но пользуемся им максимально эффективно!