TL;DR (За забързаните)
🎯 rs-ac-bg е създадена специално за онлайн и дистанционни счетоводни услуги!
- ✅ Потребителска група „Наблюдател“ – пълен достъп само за четене за клиентите
- ✅ Експорт на всички справки в PDF и Excel формат
- ✅ Реално време достъп до счетоводна информация 24/7
- ✅ Multi-tenant архитектура – множество клиенти в една система
- ✅ GraphQL API за интеграции с външни системи
- ✅ Нулеви разходи за хардуер при клиента
- ✅ Сигурност на ниво банка – JWT автентикация, роли, audit log
- ✅ Автоматични бекъпи и архивиране на данни
- ✅ Мобилен достъп – работи на всяко устройство с браузър
Защо rs-ac-bg е Идеална за Дистанционно Счетоводство?
Традиционният Модел е Остарял
Преди:
Клиент → 📦 Кашон с документи → 🚗 Физическа доставка
→ 📋 Ръчно въвеждане → 📞 Обаждане за справки
→ 📄 Разпечатване → 📬 Пощенска доставка
Време: 5-7 дни
Грешки: Високи (загубени документи, забавяния)
Разходи: Куриер, хартия, принтер, време
С rs-ac-bg:
Клиент → 📸 Снимка/скан на фактура → 🤖 AI обработка
→ ✅ Автоматично счетоводно записване
→ 📊 Моментален достъп до справки онлайн
→ 💾 Експорт в PDF/Excel по желание
Време: 10-30 минути
Грешки: Минимални (AI + автоматични проверки)
Разходи: Без физически разходи
Потребителска Група „Наблюдател“ – Ключова Функция
Какво е потребителят „Наблюдател“?
Наблюдател (Observer/Read-Only User) е специална потребителска роля, създадена точно за дистанционното счетоводство:
┌─────────────────────────────────────────┐
│ Счетоводна фирма "Експерт ЕООД" │
│ ↓ │
│ Администратор (пълен достъп) │
│ - Въвеждане на данни │
│ - Коригиране │
│ - Затваряне на периоди │
│ - Генериране на декларации │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ Клиент "Строител 123" ЕООД │
│ ↓ │
│ Наблюдател (само четене) │
│ ✅ Преглед на всички справки │
│ ✅ Експорт в PDF/Excel │
│ ✅ Филтриране по период/контрагент │
│ ✅ Печат на документи │
│ ❌ Промяна на данни │
│ ❌ Изтриване │
│ ❌ Настройки │
└─────────────────────────────────────────┘
Технически Детайли
Backend роля дефиниция:
pub enum UserRole {
Admin, // Пълен достъп
Accountant, // Счетоводни операции
Observer, // САМО ЧЕТЕНЕ ← Тук!
Limited, // Частичен достъп
}
impl UserRole {
pub fn can_modify_data(&self) -> bool {
match self {
UserRole::Admin => true,
UserRole::Accountant => true,
UserRole::Observer => false, // Не може!
UserRole::Limited => false,
}
}
pub fn can_export_reports(&self) -> bool {
match self {
UserRole::Admin => true,
UserRole::Accountant => true,
UserRole::Observer => true, // Може!
UserRole::Limited => true,
}
}
}
GraphQL проверки:
# Позволени query-та за Observer
query {
# ✅ Преглед на справки
balanceSheet(companyId: 1, period: "2024-10")
profitAndLoss(companyId: 1, startDate: "2024-01-01")
generalLedger(account: "411001")
# ✅ Експорт
exportBalanceSheetPDF(companyId: 1)
exportProfitAndLossExcel(startDate: "2024-01-01")
# ✅ Контрагенти
suppliers(companyId: 1) { name, balance }
customers(companyId: 1) { name, balance }
}
# ❌ Забранени mutation-и
mutation {
# ❌ НЕ МОЖЕ - грешка "Insufficient permissions"
createInvoice(...)
updateTransaction(...)
deleteDocument(...)
}
Какво Може Клиентът да Вижда?
1. Баланс и Финансови Отчети
Моментален достъп до:
- 📊 Баланс (активи, пасиви, собствен капитал)
- 💰 Отчет за приходи и разходи
- 💵 Касова книга
- 🏦 Банкови сметки и салда
- 📈 Обороти по сметки
Пример – Преглед на баланс:
┌────────────────────────────────────────┐
│ БАЛАНС към 31.10.2024 │
│ "Строител 123" ЕООД │
├────────────────────────────────────────┤
│ АКТИВИ │
│ Дълготрайни активи 125,000 лв │
│ Материални запаси 45,000 лв │
│ Вземания от клиенти 78,500 лв │
│ Банкови сметки 32,450 лв │
│ Каса 1,250 лв │
│ ──────────────────────────────────── │
│ ОБЩО АКТИВИ 282,200 лв │
│ │
│ ПАСИВИ │
│ Собствен капитал 150,000 лв │
│ Задължения към доставчици 95,200 лв │
│ Банкови кредити 30,000 лв │
│ ДДС за внасяне 7,000 лв │
│ ──────────────────────────────────── │
│ ОБЩО ПАСИВИ 282,200 лв │
│ │
│ [📥 Експорт PDF] [📥 Експорт Excel] │
└────────────────────────────────────────┘
2. ДДС Отчетност
Пълна прозрачност за:
- 📋 Дневник покупки (входящ ДДС)
- 📋 Дневник продажби (изходящ ДДС)
- 📋 Справка-декларация по чл. 125
- 🇪🇺 VIES декларация
- 🌍 INTRASTAT отчет
Пример – Дневник покупки октомври 2024:
┌─────────────────────────────────────────────────────────────┐
│ ДНЕВНИК ПОКУПКИ - Октомври 2024 │
├──────┬────────────┬──────────────────┬─────────┬────────────┤
│ Дата │ Фактура № │ Доставчик │ База │ ДДС │
├──────┼────────────┼──────────────────┼─────────┼────────────┤
│ 03.10│ 2024-0451 │ Метал ООД │ 5,000 │ 1,000 │
│ 08.10│ 2024-0783 │ Електро ЕООД │ 3,200 │ 640 │
│ 15.10│ INV-12345 │ Tools Ltd (UK) │ 8,500 │ 0 (R) │
│ 22.10│ 2024-0891 │ Транспорт АД │ 1,800 │ 360 │
│ 28.10│ 2024-1024 │ Офис Депо │ 850 │ 170 │
├──────┴────────────┴──────────────────┼─────────┼────────────┤
│ ОБЩО │ 19,350 │ 2,170 │
└──────────────────────────────────────┴─────────┴────────────┘
[📥 Експорт PDF] [📥 Експорт Excel]
3. Контрагентски Справки
Детайлна информация за:
- 👥 Клиенти – вземания, фактури, плащания
- 🏢 Доставчици – задължения, документи, погасявания
- 📊 Оборот по контрагенти
- ⚖️ Сверки на салда
Пример – Клиент „Строежи АД“:
┌─────────────────────────────────────────────────────┐
│ СПРАВКА ЗА КЛИЕНТ: Строежи АД │
│ ЕИК: 123456789 │ ДДС: BG123456789 │
├─────────────────────────────────────────────────────┤
│ ВЗЕМАНИЯ към 31.10.2024: 15,600 лв │
│ │
│ ФАКТУРИ: │
│ 2024-0123 │ 15.09.2024 │ 12,000 лв │ ✅ Пл.│
│ 2024-0156 │ 10.10.2024 │ 8,400 лв │ ❌ │
│ 2024-0178 │ 25.10.2024 │ 7,200 лв │ ❌ │
│ │
│ ПЛАЩАНИЯ: │
│ БИ-001234 │ 20.09.2024 │ 12,000 лв │
│ │
│ НЕПОГАСЕНИ: 15,600 лв (2 фактури) │
│ - 2024-0156: 22 дни просрочие │
│ - 2024-0178: в срок (до 10.11.2024) │
│ │
│ [📥 Експорт PDF сверка] [📧 Изпращане по имейл] │
└─────────────────────────────────────────────────────┘
4. Оборотна Ведомост
Пълна оборотна ведомост:
- 📈 Начално салдо
- 📊 Дебитен оборот
- 📊 Кредитен оборот
- 💰 Крайно салдо
Филтри:
- По период (месец, тримесечие, година)
- По клас сметки (1, 2, 3, 4, 5, 6, 7, 8)
- По конкретна сметка
Експорт:
- PDF (форматиран за печат)
- Excel (за анализ и pivot таблици)
5. Главна Книга
Детайлни записи по сметка:
┌─────────────────────────────────────────────────────────┐
│ ГЛАВНА КНИГА - Сметка 411001 "Клиенти - България" │
│ Период: 01.10.2024 - 31.10.2024 │
├──────┬────────────┬─────────────┬─────────┬─────────────┤
│ Дата │ Док. № │ Основание │ Дебит │ Кредит │
├──────┼────────────┼─────────────┼─────────┼─────────────┤
│ │ │ Нач. салдо │ 45,200 │ │
│ 05.10│ Ф-2024-123 │ Продажба │ 12,000 │ │
│ 08.10│ БИ-001234 │ Плащане │ │ 8,500 │
│ 12.10│ Ф-2024-135 │ Продажба │ 9,600 │ │
│ 20.10│ КО-00045 │ Прихващане │ │ 3,200 │
│ 25.10│ Ф-2024-156 │ Продажба │ 15,800 │ │
├──────┴────────────┴─────────────┼─────────┼─────────────┤
│ ОБОРОТИ │ 37,400 │ 11,700 │
│ КРАЙНО САЛДО (Дебит) │ 70,900 │ │
└─────────────────────────────────┴─────────┴─────────────┘
[📥 PDF] [📥 Excel] [🔍 Детайли по документ]
Експорт в PDF и Excel – Как Работи?
PDF Експорт
Професионално форматиран PDF:
- 📄 Официална шапка с лого и данни на фирмата
- 📋 Таблици с правилно форматиране
- 🔢 Валутни суми с 2 знака след десетичната запетая
- 📅 Дата на генериране и потребител
- 🔐 Водни знаци „СПРАВКА – НЕ Е ОФИЦИАЛЕН ДОКУМЕНТ“
Backend имплементация:
use printpdf::*;
pub async fn export_balance_sheet_pdf(
company_id: i32,
period: &str,
user_role: UserRole,
) -> Result<Vec<u8>, Error> {
// Проверка за права (Observer може!)
if !user_role.can_export_reports() {
return Err(Error::PermissionDenied);
}
// Зареждане на данни
let balance = fetch_balance_sheet(company_id, period).await?;
// Генериране на PDF
let (doc, page1, layer1) = PdfDocument::new(
"Баланс",
Mm(210.0),
Mm(297.0),
"Layer 1"
);
// Добавяне на съдържание
write_header(&doc, &company, period)?;
write_balance_table(&doc, &balance)?;
write_footer(&doc, user_name)?;
// Връщане на байтове
Ok(doc.save_to_bytes()?)
}
GraphQL мутация:
query {
exportBalanceSheetPDF(
companyId: 1
period: "2024-10"
) {
fileName # "balance_2024-10.pdf"
fileContent # Base64 encoded PDF
fileSize # 245678 bytes
}
}
Frontend автоматично сваляне:
const handleExportPDF = async () => {
const { data } = await client.query({
query: EXPORT_BALANCE_PDF,
variables: { companyId: 1, period: "2024-10" }
});
// Decode base64
const blob = base64ToBlob(data.exportBalanceSheetPDF.fileContent);
// Auto download
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = data.exportBalanceSheetPDF.fileName;
a.click();
};
Excel Експорт
Детайлен Excel файл (.xlsx):
- 📊 Множество листове (Баланс, ОПР, Обороти, и т.н.)
- 🎨 Форматиране на клетки (цветове, шрифтове, граници)
- 🔢 Формули (автоматични сумирания)
- 📈 Готови данни за pivot таблици
- 💾 Запазване на типове данни (дати, числа, текст)
Rust библиотека – rust_xlsxwriter:
use rust_xlsxwriter::*;
pub async fn export_profit_loss_excel(
company_id: i32,
start_date: &str,
end_date: &str,
) -> Result<Vec<u8>, Error> {
let mut workbook = Workbook::new();
// Sheet 1: Приходи и Разходи
let worksheet = workbook.add_worksheet();
worksheet.set_name("ОПР")?;
// Header
let header_format = Format::new()
.set_bold()
.set_background_color(Color::RGB(0x4472C4))
.set_font_color(Color::White);
worksheet.write_string_with_format(0, 0, "Сметка", &header_format)?;
worksheet.write_string_with_format(0, 1, "Наименование", &header_format)?;
worksheet.write_string_with_format(0, 2, "Сума", &header_format)?;
// Данни
let pl_data = fetch_profit_loss(company_id, start_date, end_date).await?;
let mut row = 1;
for item in pl_data {
worksheet.write_string(row, 0, &item.account)?;
worksheet.write_string(row, 1, &item.name)?;
worksheet.write_number(row, 2, item.amount)?;
row += 1;
}
// Auto-fit колони
worksheet.autofit();
// Връщане на байтове
let buffer = workbook.save_to_buffer()?;
Ok(buffer)
}
Примерен резултат:
┌──────────────────────────────────────────────────────┐
│ Sheet: ОПР │
├──────────┬───────────────────────────┬───────────────┤
│ Сметка │ Наименование │ Сума │
├──────────┼───────────────────────────┼───────────────┤
│ 701 │ Приходи от продажби │ 125,000.00 │
│ 702 │ Приходи от услуги │ 45,600.00 │
│ 601 │ Разходи за материали │ -32,000.00 │
│ 602 │ Разходи за външни услуги │ -18,500.00 │
│ 60 │ ОБЩО РАЗХОДИ │ -50,500.00 │
│ │ ════════════════════════ │ ═══════════ │
│ │ ФИНАНСОВ РЕЗУЛТАТ │ 120,100.00 │
└──────────┴───────────────────────────┴───────────────┘
Предимства на Excel експорт:
- ✅ Клиентът може да прави свои анализи
- ✅ Pivot таблици за визуализация
- ✅ Съпоставка с предходни периоди
- ✅ Експорт към други системи
- ✅ Споделяне с консултанти/одитори
Multi-Tenant Архитектура – Множество Клиенти
Как Работи?
Един сървър → Множество счетоводни къщи → Хиляди клиенти
┌────────────────────────────────────────────────────┐
│ rs-ac-bg Server (Cloud або Self-hosted) │
├────────────────────────────────────────────────────┤
│ │
│ Счетоводна фирма "Експерт" ЕООД │
│ ├─ Клиент 1: "Строител 123" ЕООД (5 служители) │
│ ├─ Клиент 2: "IT Solutions" ООД (12 служители) │
│ ├─ Клиент 3: "Ресторант Вкус" (3 служители) │
│ └─ ... (50+ клиента) │
│ │
│ Счетоводна фирма "Финанси Плюс" ООД │
│ ├─ Клиент 1: "Лекарска Практика д-р Иванов" │
│ ├─ Клиент 2: "Автосервиз Бързи" ЕООД │
│ └─ ... (30+ клиента) │
│ │
│ Счетоводна фирма "Консулт 365" АД │
│ └─ ... (200+ клиента) │
│ │
└────────────────────────────────────────────────────┘
Изолация на Данни
Пълна изолация на ниво база данни:
-- Всяка заявка автоматично филтрира по company_id
SELECT * FROM transactions
WHERE company_id = 1 -- Само за текущата фирма!
AND user_has_access(current_user_id, company_id);
Rust ORM с SeaORM:
// Автоматично добавяне на филтър
impl Transaction {
pub async fn find_for_company(
db: &DatabaseConnection,
company_id: i32,
user: &User,
) -> Result<Vec<Self>, DbErr> {
// Проверка за достъп
if !user.can_access_company(company_id) {
return Err(DbErr::Custom("Access denied".into()));
}
// Филтрирана заявка
Entity::find()
.filter(Column::CompanyId.eq(company_id))
.all(db)
.await
}
}
Гаранции:
- 🔒 Клиент А никога не вижда данни на Клиент Б
- 🔐 JWT токени с вградено
company_id - 🛡️ Row-level security в PostgreSQL
- 📊 Audit log на всички достъпи
Управление на Потребители
Йерархия:
Суперадминистратор (Platform Owner)
↓
Счетоводна фирма "Експерт" (Tenant)
↓
├─ Администратор (Главен счетоводител)
├─ Счетоводител 1 (Пълен достъп)
├─ Счетоводител 2 (Пълен достъп)
└─ Клиенти (Observer роля)
├─ "Строител 123" - Петър Петров (Собственик)
├─ "IT Solutions" - Мария Иванова (Финансов директор)
└─ "Ресторант Вкус" - Иван Георгиев (Мениджър)
GraphQL заявка за създаване на Observer:
mutation {
createUser(input: {
email: "petar@stroitel123.bg"
name: "Петър Петров"
role: OBSERVER
companyId: 1 # "Строител 123" ЕООД
permissions: {
canViewReports: true
canExportPDF: true
canExportExcel: true
canViewTransactions: true
canModifyData: false # ← Критично!
}
}) {
id
email
role
accessToken # За автоматичен вход
}
}
Сигурност и Защита на Данните
JWT Автентикация
Защитен токен с вградена информация:
use jsonwebtoken::{encode, decode, Header, Validation};
#[derive(Serialize, Deserialize)]
struct Claims {
sub: i32, // User ID
company_id: i32, // Фирма
role: UserRole, // Роля (Observer/Admin/...)
exp: usize, // Expiration (24 часа)
}
pub fn generate_token(user: &User) -> Result<String, Error> {
let claims = Claims {
sub: user.id,
company_id: user.company_id,
role: user.role.clone(),
exp: (Utc::now() + Duration::hours(24)).timestamp() as usize,
};
encode(
&Header::default(),
&claims,
&EncodingKey::from_secret(SECRET_KEY)
)
}
Всяка заявка проверява токена:
// Frontend - автоматично добавяне в headers
const client = new ApolloClient({
link: new HttpLink({
uri: 'https://api.rs-ac-bg.com/graphql',
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`
}
})
});
Audit Log
Пълна история на действията:
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
company_id INT NOT NULL,
action VARCHAR(100) NOT NULL, -- "EXPORT_PDF", "VIEW_BALANCE", ...
resource VARCHAR(255), -- "balance_sheet", "invoice_123"
ip_address INET,
user_agent TEXT,
timestamp TIMESTAMPTZ DEFAULT NOW()
);
Автоматично логване:
pub async fn log_action(
db: &DatabaseConnection,
user_id: i32,
action: &str,
resource: &str,
) -> Result<(), DbErr> {
audit_log::ActiveModel {
user_id: Set(user_id),
company_id: Set(get_user_company(user_id).await?),
action: Set(action.to_string()),
resource: Set(resource.to_string()),
ip_address: Set(get_client_ip()),
user_agent: Set(get_user_agent()),
..Default::default()
}
.insert(db)
.await?;
Ok(())
}
Примерен log:
2024-10-21 10:23:45 | User: petar@stroitel123.bg (ID: 45) | Observer
Action: EXPORT_PDF | Resource: balance_sheet_2024-10
IP: 93.123.45.67 | Browser: Chrome 118 / Windows 10
Status: SUCCESS
Шифроване на Данни
Защита на чувствителни данни:
use aes_gcm::{Aes256Gcm, Key, Nonce};
use aes_gcm::aead::{Aead, NewAead};
// Шифроване на IBAN номера
pub fn encrypt_iban(iban: &str) -> Result<String, Error> {
let key = Key::from_slice(ENCRYPTION_KEY);
let cipher = Aes256Gcm::new(key);
let nonce = Nonce::from_slice(random_nonce());
let encrypted = cipher.encrypt(nonce, iban.as_bytes())?;
Ok(base64::encode(encrypted))
}
// Дешифроване при четене
pub fn decrypt_iban(encrypted: &str) -> Result<String, Error> {
let key = Key::from_slice(ENCRYPTION_KEY);
let cipher = Aes256Gcm::new(key);
let encrypted_bytes = base64::decode(encrypted)?;
let decrypted = cipher.decrypt(nonce, encrypted_bytes.as_ref())?;
Ok(String::from_utf8(decrypted)?)
}
Какво се шифрова:
- 🔐 IBAN номера
- 🔐 ЕГН/ЛНЧ на физически лица
- 🔐 Банкови данни
- 🔐 Сесийни токени
Реален Работен Процес
Сценарий: Дистанционна Счетоводна Услуга
Действащи лица:
- Счетоводна фирма: „Експерт Консулт“ ЕООД
- Клиент: „Строител 123“ ЕООД (строителна фирма)
- Собственик на клиента: Петър Петров (Observer потребител)
Месечен цикъл:
Ден 1-5: Събиране на Документи
Традиционно:
Петър → Събира хартиени фактури в кашон
→ Обажда се на куриер
→ Чака куриера (1-2 дни)
→ Счетоводителят получава кашона
С rs-ac-bg:
Петър → Отваря мобилното приложение
→ Снима всяка фактура
→ AI автоматично обработва данните
→ Счетоводителят вижда всичко real-time
AI обработка на фактура:
// Петър качва снимка
uploadInvoice({
file: "фактура_доставчик_15_10.jpg",
companyId: 1
});
// AI извлича данни за ~5 секунди
{
"supplier": "Метал България ЕООД",
"taxNumber": "BG123456789",
"invoiceNumber": "2024-0451",
"invoiceDate": "2024-10-15",
"items": [
{
"description": "Арматура ф12 - 6м",
"quantity": 150,
"unit": "бр",
"unitPrice": 25.00,
"totalPrice": 3750.00,
"vatRate": 20
}
],
"totalAmount": 4500.00,
"vatAmount": 900.00,
"grandTotal": 5400.00
}
// Счетоводителят одобрява/коригира
// Автоматично генериране на счетоводен запис
Ден 6-10: Счетоводна Обработка
Счетоводителят от „Експерт Консулт“:
- Вижда всички качени документи в реално време
- Проверява AI обработката (точност ~95%)
- Коригира ако е нужно
- Генерира записи
- Затваря периода
Петър (Observer) вижда всичко паралелно:
- ✅ Актуално салдо по банкова сметка
- ✅ Вземания от клиенти
- ✅ Задължения към доставчици
- ✅ ДДС за внасяне/възстановяване
Ден 11-15: Справки и Контрол
Петър иска да види печалбата за октомври:
// Влиза в rs-ac-bg от мобилен/desktop
// Отива в "Отчети" → "Приходи и Разходи"
┌─────────────────────────────────────────┐
│ ОТЧЕТ ЗА ПРИХОДИ И РАЗХОДИ │
│ Октомври 2024 │
├─────────────────────────────────────────┤
│ ПРИХОДИ │
│ Приходи от продажби 125,000 лв │
│ Приходи от услуги 45,600 лв │
│ ──────────────────────────────────── │
│ ОБЩО ПРИХОДИ 170,600 лв │
│ │
│ РАЗХОДИ │
│ Материали -32,000 лв │
│ Външни услуги -18,500 лв │
│ Заплати и осигуровки -55,000 лв │
│ Амортизации -3,200 лв │
│ Други разходи -8,900 лв │
│ ──────────────────────────────────── │
│ ОБЩО РАЗХОДИ -117,600 лв │
│ │
│ ФИНАНСОВ РЕЗУЛТАТ 53,000 лв │
│ │
│ [📥 Експорт PDF] [📥 Експорт Excel] │
└─────────────────────────────────────────┘
Петър натиска „Експорт Excel“:
- ⏱️ Файлът се генерира за 2 секунди
- 📥 Автоматично се сваля:
opr_oktomvri_2024.xlsx - 📧 Може да го изпрати на банката за кредит
Ден 16-20: Данъчни Задължения
Счетоводителят генерира ДДС декларация:
mutation {
generateVATDeclaration(
companyId: 1
period: "2024-10"
) {
taxPayable # 12,500 лв (за внасяне)
taxReceivable # 8,200 лв (входящ ДДС)
netTax # 4,300 лв (за плащане)
dueDate # "2024-11-14"
}
}
Петър (Observer) вижда:
┌────────────────────────────────────────┐
│ ДДС ЗАДЪЛЖЕНИЕ - Октомври 2024 │
├────────────────────────────────────────┤
│ Изходящ ДДС (продажби) 12,500 лв │
│ Входящ ДДС (покупки) -8,200 лв │
│ ──────────────────────────────────── │
│ ЗА ВНАСЯНЕ 4,300 лв │
│ │
│ Краен срок: 14.11.2024 │
│ │
│ ⚠️ Моля осигурете средства! │
└────────────────────────────────────────┘
Петър:
- 💰 Знае точно колко пари да остави за ДДС
- 📅 Вижда крайния срок
- 📊 Може да планира cash flow
Ден 21-31: Анализ и Планиране
Петър сравнява месеците:
┌───────────────────────────────────────────────────┐
│ ТРИМЕСЕЧЕН АНАЛИЗ (Q4 2024) │
├───────────┬────────────┬────────────┬─────────────┤
│ │ Октомври │ Ноември │ Декември │
├───────────┼────────────┼────────────┼─────────────┤
│ Приходи │ 170,600 │ 185,200 │ 195,000 │
│ Разходи │ 117,600 │ 125,400 │ 130,200 │
│ Печалба │ 53,000 │ 59,800 │ 64,800 │
├───────────┴────────────┴────────────┴─────────────┤
│ ОБЩО Q4: Приходи 550,800 | Печалба 177,600 │
└───────────────────────────────────────────────────┘
[📈 Графика] [📥 Експорт Excel за анализ]
Петър експортва в Excel:
- 📊 Прави pivot таблици
- 📈 Анализира тенденции
- 💡 Планира инвестиции за 2025
Предимства за Счетоводната Фирма
1. Мащабируемост
Един служител може да обслужва повече клиенти:
| Традиционно | С rs-ac-bg |
|---|---|
| 15-20 клиента на счетоводител | 40-50 клиента |
| 40 часа/седмица | 40 часа/седмица |
| Много ръчна работа | Автоматизация |
Защо?
- 🤖 AI обработка на фактури → -60% време
- 📊 Автоматични справки → -30% време
- 📧 Нулева физическа логистика → -10% време
2. По-Доволни Клиенти
Клиентите обичат прозрачността:
- ✅ 24/7 достъп до данни
- ✅ Моментални справки
- ✅ Експорт когато им трябва
- ✅ Нулево чакане
Резултат:
- 📈 По-висока retention rate (клиентите остават)
- 🌟 Положителни отзиви
- 🤝 Препоръки към други фирми
3. По-Ниски Разходи
Спестявания:
| Традиционни разходи | rs-ac-bg |
|---|---|
| Хартия и печат: 200 лв/месец | 0 лв |
| Куриери: 500 лв/месец | 0 лв |
| Физическо архивиране: 300 лв/месец | 0 лв (цифрово) |
| Допълнителен софтуер: 150 лв/месец | 0 лв (all-in-one) |
| ОБЩО: 1,150 лв/месец | 0 лв |
Годишни спестявания: ~13,800 лв!
4. Конкурентно Предимство
Marketing съобщение:
┌────────────────────────────────────────────┐
│ Счетоводна фирма "Експерт Консулт" ЕООД │
│ ────────────────────────────────────── │
│ ✅ Пълна онлайн прозрачност 24/7 │
│ ✅ AI обработка на фактури │
│ ✅ Експорт на всички справки в PDF/Excel │
│ ✅ Мобилно приложение │
│ ✅ Нулев хартиен документооборот │
│ ✅ Реално време данни │
│ │
│ Защо да избирате остарял софтуер? │
│ Присъединете се към дигиталното бъдеще! │
│ │
│ 📞 0888 123 456 | 📧 info@expert.bg │
└────────────────────────────────────────────┘
Технологичен Stack
Backend (Rust)
// Основни библиотеки
[dependencies]
actix-web = „4.4“ # HTTP сървър async-graphql = „7.0“ # GraphQL API sea-orm = „0.12“ # Database ORM jsonwebtoken = „9.2“ # JWT auth printpdf = „0.7“ # PDF generation rust_xlsxwriter = „0.60“ # Excel export
Защо Rust?
- ⚡ Скорост – 10x по-бързо от PHP/Python
- 🔒 Сигурност – memory-safe, няма buffer overflow
- 💰 Ефективност – по-малко сървъри нужни
- 🚀 Конкурентност – async/await built-in
Frontend (React)
// Основни пакети
{
"dependencies": {
"react": "^18.2.0",
"@apollo/client": "^3.8.0", // GraphQL client
"tailwindcss": "^3.3.0", // CSS framework
"react-pdf": "^7.5.0", // PDF preview
"xlsx": "^0.18.5" // Excel handling (client-side)
}
}
Database (PostgreSQL 14+)
Оптимизирана структура:
-- Индекси за бързи заявки
CREATE INDEX idx_transactions_company_date
ON transactions(company_id, transaction_date);
CREATE INDEX idx_users_company_role
ON users(company_id, role);
-- Row-level security
ALTER TABLE transactions ENABLE ROW LEVEL SECURITY;
CREATE POLICY transactions_company_isolation ON transactions
USING (company_id = current_setting('app.current_company_id')::int);
Deployment Опции
1. Cloud Hosting (Препоръчително)
DigitalOcean / AWS / Google Cloud:
# docker-compose.yml
version: '3.8'
services:
backend:
image: rs-ac-bg:latest
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://user:pass@db/rs_ac_bg
JWT_SECRET: ${JWT_SECRET}
depends_on:
- db
db:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: rs_ac_bg
POSTGRES_USER: rsacbg
POSTGRES_PASSWORD: ${DB_PASSWORD}
frontend:
image: rs-ac-bg-frontend:latest
ports:
- "80:80"
- "443:443"
depends_on:
- backend
volumes:
postgres_data:
Разходи:
- 💵 Droplet/Instance: $40-80/месец (4GB RAM)
- 💵 Managed DB: $15-30/месец
- 💵 Backups: $5-10/месец
- ОБЩО: ~$60-120/месец за 100+ клиента
2. Self-Hosted (За по-големи фирми)
Собствен сървър:
- 🖥️ Сървър: Dell PowerEdge T340 (~$1,500 еднократно)
- 🌐 Фиксиран IP и домейн
- 🔐 SSL сертификат (Let’s Encrypt безплатно)
- ⚡ Месечни разходи: Електричество (~$20-30)
Предимства:
- ✅ Пълен контрол върху данните
- ✅ Нулеви месечни cloud разходи
- ✅ По-бърз достъп (локална мрежа)
Недостатъци:
- ❌ Нужда от IT администратор
- ❌ Рискове при хардуерна повреда
- ❌ По-сложно мащабиране
Roadmap за Дистанционни Услуги
Q4 2025 (Текущо)
- ✅ Observer роля с пълен достъп само за четене
- ✅ PDF/Excel експорт на всички справки
- ✅ Multi-tenant архитектура
- ✅ JWT автентикация
- ✅ Audit log
- 🚧 Мобилно приложение (React Native)
- 🚧 Push notifications за ключови събития
Q1 2026
- 📝 Email notifications (автоматични седмични справки)
- 📝 Custom дашборд за Observer (KPI-та по избор)
- 📝 Scheduled exports (автоматично генериране и изпращане)
- 📝 API webhooks (интеграция с ERP системи на клиенти)
- 📝 Advanced фиgури (trend analysis, прогнози)
Q2 2026
- 📝 WhatsApp/Telegram бот за бързи справки
- 📝 Voice assistant (AI озвучаване на справки)
- 📝 Collaborative features (коментари, notes)
- 📝 Client portal (персонализиран за всеки клиент)
Често Задавани Въпроси
1. Колко клиента може да обслужва една инсталация?
Отговор: Практически неограничено.
rs-ac-bg е проектирана за multi-tenancy:
- ✅ Тестваkо с 500+ компании в една база
- ✅ PostgreSQL скалира до милиони записи
- ✅ Horizontal scaling (multiple servers) възможен
Препоръка:
- До 100 клиента → Един сървър (4GB RAM)
- 100-500 клиента → По-голям сървър (8GB RAM)
- 500+ клиента → Cluster setup
2. Може ли клиентът да разваля данни?
Отговор: НЕ! Observer роля е read-only.
Клиентът може само:
- ✅ Да гледа
- ✅ Да експортва
- ✅ Да филтрира
Клиентът НЕ МОЖЕ:
- ❌ Да променя транзакции
- ❌ Да трие документи
- ❌ Да добавя записи
- ❌ Да променя настройки
Допълнително: Всички действия се логват в Audit log.
3. Какво става при грешка на сървъра?
Отговор: Автоматични backups + high availability.
Backup стратегия:
- 🔄 Hourly snapshots (последните 24 часа)
- 🔄 Daily backups (последните 30 дни)
- 🔄 Monthly archives (5 години)
Recovery time:
- Критична повреда → 15-30 минути (restore от backup)
- Загуба на данни → Максимум 1 час (последен snapshot)
4. Колко струва rs-ac-bg за дистанционни услуги?
Отговор: €0 за софтуера!
rs-ac-bg е open source – безплатен за употреба.
Разходи:
- ✅ Софтуер: €0
- 💵 Hosting (cloud): $60-120/месец (за 100+ клиента)
- 💵 SSL certificate: $0 (Let’s Encrypt)
- 💵 Домейн: ~$10/година
Сравнение с алтернативи:
- Commercial solution: €50-150 на клиент месечно
- rs-ac-bg: €0 + hosting (споделен между всички клиенти)
5. Как се обучават клиентите?
Отговор: Интуитивен UI + документация.
Обучение:
- 📹 Video tutorials (coming soon)
- 📖 User guide (стъпка по стъпка)
- 💬 In-app помощ (tooltips)
- 📧 Email support от счетоводителя
Време за обучение:
- Основни справки: 10 минути
- Експорт PDF/Excel: 5 минути
- Пълна функционалност: 30-60 минути
Реалност: Повечето клиенти научават за <15 минути.
Заключение
rs-ac-bg е създадена точно за това – дистанционни счетоводни услуги на ново ниво.
Ключови предимства:
- 🎯 Observer роля – безопасен достъп само за четене
- 📊 PDF/Excel експорт – пълна прозрачност
- 🌐 24/7 достъп – от всяко устройство
- 🤖 AI автоматизация – по-малко ръчна работа
- 💰 Нулева цена – open source
- 🔒 Сигурност – JWT, audit log, encryption
- 🚀 Мащабируемост – стотици клиенти на един сървър
За счетоводни фирми:
- ✅ Обслужвайте 2-3x повече клиенти
- ✅ Намалете разходи с 80%
- ✅ Доволни клиенти = retention + препоръки
- ✅ Конкурентно предимство на пазара
За клиенти:
- ✅ Пълна прозрачност 24/7
- ✅ Експорт на справки когато са нужни
- ✅ Нулево чакане
- ✅ Мобилен достъп
Започнете Днес
За Счетоводни Фирми
- Клонирайте репозиторията:
git clone https://github.com/katehonz/rs-ac_contragent.git
cd rs-ac-bg
- Настройте cloud hosting:
- DigitalOcean droplet ($40/месец)
- PostgreSQL managed database ($15/месец)
- Domain + SSL certificate
- Добавете първи клиент:
mutation {
createCompany(name: "Тест Клиент ЕООД", taxNumber: "BG123456789")
createUser(email: "klient@test.bg", role: OBSERVER, companyId: 1)
}
- Споделете достъп:
- Изпратете login линк до клиента
- 5-минутна демонстрация по Zoom
- Готово!
Поддръжка
- 📧 Email: info@rs-ac-bg.com
- 💬 GitHub Issues
- 📱 Community (coming soon)
#DistancionnoSchetovodstvo #OnlineAccounting #ObserverRole #PDFExport #ExcelExport #MultiTenant #CloudAccounting #rs-ac-bg #OpenSource #Rust #DigitalTransformation #Bulgaria
rs-ac-bg – Счетоводството на бъдещето. Създадено за дистанционни услуги от първия ден.
Open source. Безплатно. Мощно. Сигурно.
Създадено с ❤️ за българските счетоводни фирми и техните клиенти.