Свободата на Импорт/Експорт: Защо Ръст-АС rs-ac-bg Сложи Край на Скъпите Консултации


Категория: Import/Export, Integration, Open Standards


Проблемът с Комерсиалните Софтуери в България

Манипулацията, Която Всички Знаят (Но Никой Не Говори)

Ако сте се опитвали да интегрирате складова програма с Microinvest, Бизнес Навигатор, или друг български счетоводен софтуер, вероятно сте преживели следното:

Вие:     "Искам да импортирам данни от нашата складова система."
Support: "Разбира се! Просто ни изпратете файла в нашия формат."
Вие:     "Какъв е форматът? Имате ли документация?"
Support: "Да, имаме. Но за интеграция ще ви трябва консултация."
Вие:     "Консултация?"
Support: "Да, 150 лв/час. Или пакет от 1500 лв за пълна интеграция."
Вие:     "Но аз само искам да разбера форматаto..."
Support: "За това са нужни специални познания. Ще ви свържем с консултант."

Резултат:

  • 💸 1,500-3,000 лв за „консултации“
  • ⏱️ 2-4 седмици чакане
  • 📄 Проприетарен формат, който не можете да използвате другаде
  • 🔒 Vendor lock-in – завързани сте за този софтуер завинаги

Истината за „Специалните Формати“

Какво Всъщност Правят Комерсиалните Софтуери?

Нека разкрием завесата. Ето какво е типичният „специален“ импорт формат:

Пример от реален български счетоводен софтуер:

DOC|2024-10-21|INV-001|1500.00|300.00|1800.00|BG123456789
LINE|601|DEBIT|1500.00|Разходи за материали
LINE|4531|DEBIT|300.00|ДДС
LINE|401|CREDIT|1800.00|Доставчици

Това е! Обикновен CSV с pipe delimiter. Нищо специално. Нищо сложно.

Но софтуерните къщи:

  1. НЕ документират формата публично
  2. Променят формата между версии (без обратна съвместимост)
  3. Крият зад „необходимост от консултация“
  4. Взимат хиляди левове за „специализирана интеграция“

Защо Не Използват XML/JSON/Стандарти?

Отговорът е прост: ПАРИ.

Ако използваха стандартни формати:

  • ❌ Клиентите биха могли да мигрират към друг софтуер
  • ❌ Конкуренцията би била по-лесна
  • ❌ Нямаше да има приходи от „консултации“
  • ❌ Интеграциите биха били безплатни

Затова:

  • ✅ Измислят „специални“ формати
  • ✅ Пазят документацията в тайна
  • ✅ Продават „експертиза“ за интеграция
  • ✅ Правят vendor lock-in стратегия

rs-ac-bg: Революцията на Отворените Стандарти

Нашата Философия

// rs-ac-bg подход към импорт/експорт
pub struct ImportExportPhilosophy {
    open_standards: true,      // XML, JSON, CSV
    full_documentation: true,  // Пълна публична документация
    no_consultations: true,    // Нулеви такси за интеграция
    backward_compatible: true, // Винаги съвместимо
}

Няма скрити формати. Няма скъпи консултации. Само отворени стандарти.


📥 Импорт Възможности

1. Универсален JSON Import/Export

Пълна документация. Безплатна. Публична.

Експорт на всичко в JSON

mutation {
  exportUniversalJson(input: {
    companyId: 1
    includeDocuments: true
    includeJournalEntries: true
  })
}

Резултат:

{
  "version": "2.0",
  "company": {
    "id": 1,
    "name": "Примерна ЕООД",
    "taxNumber": "BG123456789"
  },
  "chartOfAccounts": [
    {
      "code": "102",
      "name": "Каса в BGN",
      "type": "ASSETS",
      "isAnalytical": true,
      "parent": "10"
    },
    {
      "code": "201",
      "name": "Разплащателна сметка",
      "type": "ASSETS",
      "isAnalytical": true,
      "parent": "20"
    }
  ],
  "vatRates": [
    {
      "rate": 20.0,
      "code": "STD",
      "isActive": true
    },
    {
      "rate": 9.0,
      "code": "RED",
      "isActive": true
    }
  ],
  "counterparts": [
    {
      "name": "Доставчик ООД",
      "taxNumber": "123456789",
      "vatNumber": "BG123456789",
      "address": "София, ул. Витоша 1",
      "isSupplier": true,
      "isCustomer": false
    }
  ],
  "journalEntries": [
    {
      "entryNumber": "JE-2024-001",
      "documentDate": "2024-10-21",
      "documentNumber": "INV-001",
      "description": "Покупка на материали",
      "lines": [
        {
          "account": "601",
          "debit": 1500.00,
          "credit": 0.00,
          "description": "Разходи за материали"
        },
        {
          "account": "4531",
          "debit": 300.00,
          "credit": 0.00,
          "description": "ДДС за възстановяване"
        },
        {
          "account": "401",
          "debit": 0.00,
          "credit": 1800.00,
          "description": "Доставчици",
          "counterpart": "Доставчик ООД"
        }
      ],
      "vatData": {
        "vatRegister": "PURCHASE",
        "vatOperationCode": "пок10",
        "taxBase": 1500.00,
        "vatRate": 20.0,
        "vatAmount": 300.00
      }
    }
  ]
}

Това е ВСЕ! Никакви тайни. Никакви консултации. JSON е JSON.

Импорт обратно

mutation {
  importUniversalJson(input: {
    companyId: 1
    jsonData: "{ ... }"  # Същият JSON формат
  }) {
    success
    accountsImported
    vatRatesImported
    counterpartsImported
    journalEntriesImported
    errors
    warnings
  }
}

Резултат:

{
  "success": true,
  "accountsImported": 120,
  "vatRatesImported": 3,
  "counterpartsImported": 45,
  "journalEntriesImported": 234,
  "errors": [],
  "warnings": [
    "Account 999 not found, created automatically"
  ]
}

2. XML Import (Controlisy & Стандартен)

Controlisy XML – Пълна Поддръжка

Безплатна интеграция с Controlisy платформата!

<?xml version="1.0" encoding="utf-8"?>
<ExportedData>
  <Contractors>
    <Contractor
      contractorName="Примерна фирма ООД"
      contractorEIK="123456789"
      contractorVATNumber="BG123456789"
      contractorAddress="София, ул. Витоша 1"
    />
  </Contractors>
  <Documents>
    <Document
      accountingMonth="2024-10-01"
      vatMonth="2024-10-01"
      documentDate="2024-10-21"
      documentNumber="INV-2024-001"
      reason="Продажба на стоки"
      netAmountBGN="1000.00"
      vatAmountBGN="200.00"
      totalAmountBGN="1200.00"
    >
      <Accountings>
        <Accounting amountBGN="1200.00">
          <AccountingDetail
            direction="Debit"
            accountNumber="411"
            accountName="Клиенти"
            contractorName="Примерна фирма ООД"
          />
          <AccountingDetail
            direction="Credit"
            accountNumber="701"
            accountName="Приходи от продажби"
          />
          <AccountingDetail
            direction="Credit"
            accountNumber="4532"
            accountName="ДДС за внасяне"
          />
        </Accounting>
      </Accountings>
      <VATData vatRegister="2">
        <VAT
          taxBase="1000.00"
          vatRate="20"
          vatAmountBGN="200.00"
          vatOperationIden="1"
        />
      </VATData>
    </Document>
  </Documents>
</ExportedData>

Автоматично разпознаване:

  • ✅ Тип документ (покупка/продажба) – чрез vatRegister
  • ✅ ДДС операции – автоматично мапиране
  • ✅ Контрагенти – създаване или актуализация
  • ✅ Счетоводни записи – балансирани и валидни

GraphQL импорт:

mutation {
  importControlisyXml(input: {
    companyId: 1
    xmlContent: "<?xml version...>"
  }) {
    success
    documentsImported
    journalEntriesCreated
    counterpartsCreated
    errors
  }
}

3. Банкови Извлечения (MT940, CSV, XML)

Поддържани Банкови Формати

Без консултации. Без допълнителни такси.

MT940 (SWIFT Стандарт)
:20:STATEMENT-001
:25:BG80BNBG96611020345678
:28C:00001/001
:60F:C241021BGN50000,00
:61:2410211021D10000,00NTRFNONREF//PAYMENT-001
:86:Плащане на доставчик
Фактура INV-2024-123
ООД "Метал България"
:62F:C241021BGN40000,00

Автоматично парсване:

  • ✅ Номер на сметка (:25:)
  • ✅ Начално салдо (:60F:)
  • ✅ Транзакции (:61:)
  • ✅ Описания (:86:)
  • ✅ Крайно салдо (:62F:)
CSV Формат (UniCredit, DSK, Fibank, УББ)
Date,Reference,Description,Debit,Credit,Balance
2024-10-21,PMT-001,"Плащане фактура INV-123",10000.00,,40000.00
2024-10-22,INC-001,"Постъпление от клиент",,15000.00,55000.00

Автоматично разпознаване на:

  • ✅ Входящи плащания
  • ✅ Изходящи плащания
  • ✅ Банкови такси
  • ✅ Валутни операции
XML Банкови Формати
<BankStatement>
  <Account>BG80BNBG96611020345678</Account>
  <Currency>BGN</Currency>
  <OpeningBalance>50000.00</OpeningBalance>
  <Transactions>
    <Transaction>
      <Date>2024-10-21</Date>
      <Amount>-10000.00</Amount>
      <Description>Плащане на доставчик</Description>
      <Reference>PMT-001</Reference>
      <Counterparty>
        <Name>Метал България ООД</Name>
        <IBAN>BG12UNCR70001234567890</IBAN>
      </Counterparty>
    </Transaction>
  </Transactions>
  <ClosingBalance>40000.00</ClosingBalance>
</BankStatement>

AI Parsing на Описания:

rs-ac-bg използва AI за автоматично разпознаване на контрагенти и документи от банкови описания:

Input: "ПЛАЩАНЕ ФАКТУРА 2024-123 ОТ ACME CORP"

AI извлича:
├── Тип: Входящо плащане
├── Документ: "Фактура 2024-123"
├── Контрагент: "ACME CORP"
└── Предлага запис:
    Дт 201 (Банкова сметка)
    Кт 411 (Клиенти / ACME CORP)

4. Excel/CSV Импорт с Гъвкаво Мапиране

За складови програми, CRM системи, всичко!

Custom Mapping Interface

// Frontend - UniversalImport.jsx
const mappingPresets = {
  "Складова програма A": {
    dateColumn: "Дата",
    documentColumn: "Док. №",
    accountColumn: "Сметка",
    debitColumn: "Дебит",
    creditColumn: "Кредит"
  },
  "CRM система B": {
    dateColumn: "Date",
    accountColumn: "Account Code",
    amountColumn: "Amount",
    typeColumn: "Type"  // "Debit" или "Credit"
  },
  "Custom": {
    // Ръчно мапиране
  }
}

Пример Excel файл от складова програма:

| Дата       | Документ  | Операция         | Сметка | Сума    | Тип    |
|------------|-----------|------------------|--------|---------|--------|
| 21.10.2024 | DOC-001   | Покупка материал | 601    | 1500.00 | Дебит  |
| 21.10.2024 | DOC-001   | ДДС              | 4531   |  300.00 | Дебит  |
| 21.10.2024 | DOC-001   | Доставчик        | 401    | 1800.00 | Кредит |

GraphQL импорт с мапиране:

mutation {
  importExcelWithMapping(input: {
    companyId: 1
    excelContent: "base64_encoded_excel"
    mapping: {
      dateColumn: "Дата"
      documentColumn: "Документ"
      accountColumn: "Сметка"
      amountColumn: "Сума"
      typeColumn: "Тип"
    }
  }) {
    success
    rowsImported
    errors
  }
}

Резултат: Импортът работи БЕЗ консултации, БЕЗ програмист, БЕЗ такси!


📤 Експорт Възможности

1. ДДС Файлове за НАП (Windows-1251, Fixed-Width)

Пълна съвместимост с НАП изисквания!

mutation {
  exportVatNap(input: {
    companyId: 1
    period: "2024-10"
  }) {
    deklarTxt    # DEKLAR.TXT
    prodagbiTxt  # PRODAGBI.TXT
    pokupkiTxt   # POKUPKI.TXT
  }
}

DEKLAR.TXT:

01BG123456789  2024100000012345600000098760...

PRODAGBI.TXT:

022024-10-05INV-001    BG987654321Клиент ООД          0000100000000020000000120000...
022024-10-12INV-002    BG555666777Друг клиент         0000150000000030000000180000...

POKUPKI.TXT:

032024-10-03SUP-123    BG111222333Доставчик ЕООД      0000050000000010000000060000...

Формат: Windows-1251 кодировка, fixed-width според НАП спецификация PPDDS_2025

2. SAF-T v1.0.1 Експорт

Готовност за НАП изискванията от 2026!

mutation {
  exportSaft(input: {
    companyId: 1
    periodStart: 1
    periodStartYear: 2024
    periodEnd: 12
    periodEndYear: 2024
    fileType: "Annual"      # Annual, Monthly, OnDemand
    taxAccountingBasis: "A" # A=Търговско, B=Бюджетно, C=Банково
  }) {
    fileName
    fileContent  # Base64
    fileSize
  }
}

SAF-T XML структура:

<?xml version="1.0" encoding="UTF-8"?>
<AuditFile xmlns="mf:nra:dgti:dxxxx:declaration:v1">
  <Header>
    <AuditFileVersion>1.0.1</AuditFileVersion>
    <AuditFileCountry>BG</AuditFileCountry>
    <CompanyID>BG123456789</CompanyID>
    <TaxRegistrationNumber>123456789</TaxRegistrationNumber>
    <TaxAccountingBasis>A</TaxAccountingBasis>
    <CompanyName>Примерна ЕООД</CompanyName>
    <FiscalYear>2024</FiscalYear>
  </Header>

  <MasterFiles>
    <GeneralLedgerAccounts>
      <Account>
        <AccountID>102</AccountID>
        <AccountDescription>Каса в BGN</AccountDescription>
        <AccountType>GL</AccountType>
        <OpeningDebitBalance>5000.00</OpeningDebitBalance>
      </Account>
    </GeneralLedgerAccounts>

    <Customers>
      <Customer>
        <CustomerID>1</CustomerID>
        <CustomerTaxID>BG987654321</CustomerTaxID>
        <CompanyName>Клиент ООД</CompanyName>
        <BillingAddress>
          <City>София</City>
          <Country>BG</Country>
        </BillingAddress>
      </Customer>
    </Customers>
  </MasterFiles>

  <GeneralLedgerEntries>
    <Journal>
      <Transaction>
        <TransactionID>JE-2024-001</TransactionID>
        <TransactionDate>2024-10-21</TransactionDate>
        <Description>Продажба на стоки</Description>
        <Line>
          <AccountID>411</AccountID>
          <DebitAmount>1200.00</DebitAmount>
          <CustomerID>1</CustomerID>
        </Line>
        <Line>
          <AccountID>701</AccountID>
          <CreditAmount>1000.00</CreditAmount>
        </Line>
        <Line>
          <AccountID>4532</AccountID>
          <CreditAmount>200.00</CreditAmount>
        </Line>
      </Transaction>
    </Journal>
  </GeneralLedgerEntries>

  <SourceDocuments>
    <SalesInvoices>
      <Invoice>
        <InvoiceNo>INV-2024-001</InvoiceNo>
        <InvoiceDate>2024-10-21</InvoiceDate>
        <CustomerID>1</CustomerID>
        <Line>
          <LineNumber>1</LineNumber>
          <ProductDescription>Лаптоп Dell XPS 15</ProductDescription>
          <Quantity>2.00</Quantity>
          <UnitOfMeasure>бр</UnitOfMeasure>
          <UnitPrice>500.00</UnitPrice>
          <TaxBase>1000.00</TaxBase>
          <Tax>
            <TaxType>VAT</TaxType>
            <TaxPercentage>20.00</TaxPercentage>
            <TaxAmount>200.00</TaxAmount>
          </Tax>
        </Line>
        <DocumentTotals>
          <TaxPayable>200.00</TaxPayable>
          <NetTotal>1000.00</NetTotal>
          <GrossTotal>1200.00</GrossTotal>
        </DocumentTotals>
      </Invoice>
    </SalesInvoices>
  </SourceDocuments>
</AuditFile>

Ред по ред количествено отчитане! Пълна съвместимост с НАП SAF-T v1.0.1.

3. INTRASTAT XML Експорт

Автоматични декларации за вътреобщностна търговия!

mutation {
  exportIntrastat(input: {
    companyId: 1
    period: "2024-10"
    flowType: "DISPATCH"  # DISPATCH или ARRIVAL
  }) {
    xmlContent
    fileName
    transactionCount
  }
}

INTRASTAT XML:

<?xml version="1.0" encoding="UTF-8"?>
<INTRASTAT_Declaration xmlns="...">
  <Header>
    <DeclarationId>INTRA-2024-10</DeclarationId>
    <ReportingPeriod>2024-10</ReportingPeriod>
    <FlowType>Dispatch</FlowType>
    <ReportingCountry>BG</ReportingCountry>
    <PSIId>BG123456789</PSIId>
  </Header>
  <Body>
    <Item>
      <ItemNumber>1</ItemNumber>
      <CN8Code>85171231</CN8Code>
      <CountryOfDestination>DE</CountryOfDestination>
      <NatureOfTransaction>11</NatureOfTransaction>
      <ModeOfTransport>3</ModeOfTransport>
      <InvoicedAmount>5000.00</InvoicedAmount>
      <NetMass>150</NetMass>
      <SupplementaryUnits>10</SupplementaryUnits>
    </Item>
  </Body>
</INTRASTAT_Declaration>

4. Универсален Експорт в Excel

За анализ, архивиране, миграция!

mutation {
  exportToExcel(input: {
    companyId: 1
    exportType: "JOURNAL_ENTRIES"  # или BALANCE_SHEET, TRIAL_BALANCE, и т.н.
    periodStart: "2024-01-01"
    periodEnd: "2024-12-31"
  }) {
    excelContent  # Base64
    fileName
  }
}

Excel структура:

Sheet 1: Дневник
─────────────────────────────────────────────────────────────
| Дата       | Док. № | Описание    | Сметка | Дт      | Кт      |
|------------|--------|-------------|--------|---------|---------|
| 21.10.2024 | JE-001 | Покупка     | 601    | 1500.00 |         |
| 21.10.2024 | JE-001 | ДДС         | 4531   |  300.00 |         |
| 21.10.2024 | JE-001 | Доставчик   | 401    |         | 1800.00 |

Sheet 2: Контрагенти
─────────────────────────────────────────────────────────────
| Име             | ЕИК       | ДДС №       | Адрес          |
|-----------------|-----------|-------------|----------------|
| Доставчик ООД   | 123456789 | BG123456789 | София, ул. ... |

Sheet 3: Сметкоплан
─────────────────────────────────────────────────────────────
| Код | Име                    | Тип    | Родител |
|-----|------------------------|--------|---------|
| 102 | Каса в BGN             | Актив  | 10      |
| 201 | Разплащателна сметка   | Актив  | 20      |

🆚 Сравнение: rs-ac-bg vs Комерсиален Софтуер

Функцияrs-ac-bgMicroinvestБизнес НавигаторДруги
JSON Import/Export✅ Пълна поддръжка
XML Import (стандарт)⚠️ Проприетарен⚠️ Проприетарен⚠️
Excel Import с мапиране✅ Гъвкаво⚠️ Фиксиран формат⚠️⚠️
Банкови извлечения✅ MT940, CSV, XML⚠️ Ограничени⚠️⚠️
SAF-T v1.0.1✅ Пълен⚠️ Частичен⚠️
INTRASTAT XML⚠️
ДДС за НАП
Документация✅ Публична, пълна❌ Платена❌ Платена
Консултации за интеграция€0€150-300/час€200/час€100-250/час
API достъп✅ GraphQL (безплатно)⚠️ Платен модул⚠️ Платен⚠️
Backward compatibility✅ Гарантирана
Vendor lock-in❌ Нулев✅ Висок✅ Висок

💸 Колко Струва Интеграцията?

Традиционен Софтуер

Пример: Интеграция на складова програма с Microinvest

Консултация за анализ:         300 лв
Разработка на експорт модул:  1200 лв
Тестове и debug:               500 лв
Обучение на персонал:          400 лв
Поддръжка (годишна):           600 лв/година
────────────────────────────────────
ОБЩО първа година:            3000 лв
Всяка следваща година:         600 лв

Ако смените софтуера след 3 години:

Нова интеграция:              3000 лв (отначало!)
────────────────────────────────────
ОБЩО за 3 години:        3000 + 600 + 600 + 3000 = 7200 лв

rs-ac-bg

Консултация:                     0 лв (документацията е публична)
Разработка:                      0 лв (използвате стандартен JSON)
Тестове:                         0 лв (предоставяме примери)
Обучение:                        0 лв (видео уроци безплатно)
Поддръжка:                       0 лв (open source community)
────────────────────────────────────
ОБЩО:                            0 лв

Ако смените софтуера:

Експортирате JSON → 2 минути
Импортирате в нов софтуер → 5 минути
────────────────────────────────────
ОБЩО: 7 минути, 0 лв

СПЕСТЯВАНИЯ: 7,200 лв за 3 години!


🔓 Реални Примери за Интеграция

Пример 1: Интеграция със Складова Програма

Сценарий: Имате собствена складова програма. Искате да изпращате данни към счетоводството.

Стъпка 1: Експорт от складовата програма

# Python скрипт във вашата складова програма
import json
import requests

# Вашите данни от склада
warehouse_invoice = {
    "date": "2024-10-21",
    "document_number": "WH-001",
    "supplier": "Доставчик ООД",
    "items": [
        {"name": "Стока А", "quantity": 10, "price": 50, "vat_rate": 20},
        {"name": "Стока Б", "quantity": 5, "price": 100, "vat_rate": 20}
    ]
}

# Конвертиране в rs-ac-bg формат
journal_entry = {
    "entryNumber": f"WH-{warehouse_invoice['document_number']}",
    "documentDate": warehouse_invoice['date'],
    "documentNumber": warehouse_invoice['document_number'],
    "description": f"Покупка от {warehouse_invoice['supplier']}",
    "lines": []
}

# Изчисляване на суми
total_net = sum(item['quantity'] * item['price'] for item in warehouse_invoice['items'])
total_vat = total_net * 0.20
total_gross = total_net + total_vat

# Дебит: Стоки (сметка 302)
journal_entry['lines'].append({
    "account": "302",
    "debit": total_net,
    "credit": 0,
    "description": "Стоки"
})

# Дебит: ДДС (сметка 4531)
journal_entry['lines'].append({
    "account": "4531",
    "debit": total_vat,
    "credit": 0,
    "description": "ДДС за възстановяване"
})

# Кредит: Доставчици (сметка 401)
journal_entry['lines'].append({
    "account": "401",
    "debit": 0,
    "credit": total_gross,
    "description": warehouse_invoice['supplier'],
    "counterpart": warehouse_invoice['supplier']
})

# Импорт в rs-ac-bg
graphql_query = """
mutation {
  importUniversalJson(input: {
    companyId: 1
    jsonData: "%s"
  }) {
    success
    journalEntriesImported
    errors
  }
}
""" % json.dumps({"journalEntries": [journal_entry]})

response = requests.post(
    "https://your-rs-ac-bg.com/graphql",
    json={"query": graphql_query},
    headers={"Authorization": "Bearer YOUR_JWT_TOKEN"}
)

print(response.json())

Резултат: Интеграцията работи за 10 минути, 0 лв разходи!

Пример 2: Миграция от Друг Софтуер

Сценарий: Искате да мигрирате от Microinvest към rs-ac-bg.

Стъпка 1: Експорт от Microinvest

Microinvest → Експорт → Excel
(ако имате късмет и Microinvest позволява експорт)

Стъпка 2: Конвертиране в JSON

import pandas as pd
import json

# Четене на Excel от Microinvest
df = pd.read_excel("microinvest_export.xlsx")

# Конвертиране в rs-ac-bg JSON формат
journal_entries = []

for idx, row in df.iterrows():
    entry = {
        "entryNumber": row['Документ №'],
        "documentDate": row['Дата'].strftime("%Y-%m-%d"),
        "documentNumber": row['Документ №'],
        "description": row['Описание'],
        "lines": [
            {
                "account": row['Дебит сметка'],
                "debit": row['Дебит сума'],
                "credit": 0,
                "description": row['Описание дебит']
            },
            {
                "account": row['Кредит сметка'],
                "debit": 0,
                "credit": row['Кредит сума'],
                "description": row['Описание кредит']
            }
        ]
    }
    journal_entries.append(entry)

# Запис в JSON
with open("migration_data.json", "w", encoding="utf-8") as f:
    json.dump({"journalEntries": journal_entries}, f, ensure_ascii=False, indent=2)

print(f"Експортирани {len(journal_entries)} записа")

Стъпка 3: Импорт в rs-ac-bg

mutation {
  importUniversalJson(input: {
    companyId: 1
    jsonData: "{ ... }"  # Съдържанието на migration_data.json
  }) {
    success
    journalEntriesImported
    errors
  }
}

Резултат: Миграция на 5 години данни за 30 минути, 0 лв разходи!

Пример 3: Автоматична Синхронизация

Сценарий: Автоматично изпращане на данни от CRM към счетоводството всеки ден.

# cron job - ежедневно в 23:00
import requests
import json
from datetime import datetime, timedelta

# Данни от CRM (продажби за деня)
yesterday = datetime.now() - timedelta(days=1)
crm_sales = get_sales_from_crm(yesterday)  # Ваша CRM функция

# Конвертиране в rs-ac-bg формат
entries = []
for sale in crm_sales:
    entry = {
        "entryNumber": f"CRM-{sale['id']}",
        "documentDate": sale['date'],
        "documentNumber": sale['invoice_number'],
        "description": f"Продажба към {sale['customer']}",
        "lines": [
            {
                "account": "411",
                "debit": sale['total_with_vat'],
                "credit": 0,
                "description": "Клиенти",
                "counterpart": sale['customer']
            },
            {
                "account": "701",
                "debit": 0,
                "credit": sale['total_net'],
                "description": "Приходи от продажби"
            },
            {
                "account": "4532",
                "debit": 0,
                "credit": sale['vat_amount'],
                "description": "ДДС за внасяне"
            }
        ],
        "vatData": {
            "vatRegister": "SALE",
            "vatOperationCode": "про11",
            "taxBase": sale['total_net'],
            "vatRate": 20.0,
            "vatAmount": sale['vat_amount']
        }
    }
    entries.append(entry)

# Импорт в rs-ac-bg
graphql_mutation = """
mutation($jsonData: String!) {
  importUniversalJson(input: {
    companyId: 1
    jsonData: $jsonData
  }) {
    success
    journalEntriesImported
    errors
  }
}
"""

response = requests.post(
    "https://your-rs-ac-bg.com/graphql",
    json={
        "query": graphql_mutation,
        "variables": {
            "jsonData": json.dumps({"journalEntries": entries})
        }
    },
    headers={"Authorization": "Bearer YOUR_JWT_TOKEN"}
)

result = response.json()
if result['data']['importUniversalJson']['success']:
    print(f"✅ Импортирани {result['data']['importUniversalJson']['journalEntriesImported']} записа")
else:
    print(f"❌ Грешки: {result['data']['importUniversalJson']['errors']}")

Резултат: Автоматична синхронизация, 0 лв месечни разходи!


📖 Пълна Документация (Безплатна!)

JSON Schema

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "rs-ac-bg Universal Import/Export Format v2.0",
  "type": "object",
  "properties": {
    "version": {
      "type": "string",
      "const": "2.0"
    },
    "company": {
      "type": "object",
      "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "taxNumber": {"type": "string"}
      },
      "required": ["name", "taxNumber"]
    },
    "chartOfAccounts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "code": {"type": "string"},
          "name": {"type": "string"},
          "type": {
            "type": "string",
            "enum": ["ASSETS", "LIABILITIES", "EQUITY", "REVENUE", "EXPENSES"]
          },
          "isAnalytical": {"type": "boolean"},
          "parent": {"type": "string"}
        },
        "required": ["code", "name", "type"]
      }
    },
    "journalEntries": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entryNumber": {"type": "string"},
          "documentDate": {"type": "string", "format": "date"},
          "documentNumber": {"type": "string"},
          "description": {"type": "string"},
          "lines": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "account": {"type": "string"},
                "debit": {"type": "number"},
                "credit": {"type": "number"},
                "description": {"type": "string"},
                "counterpart": {"type": "string"}
              },
              "required": ["account", "debit", "credit"]
            }
          }
        },
        "required": ["documentDate", "lines"]
      }
    }
  }
}

GraphQL Schema (Excerpts)

type Mutation {
  # Universal Import/Export
  importUniversalJson(input: UniversalImportInput!): ImportSummary!
  exportUniversalJson(input: UniversalExportInput!): String!

  # Controlisy
  importControlisyXml(input: ControlisyImportInput!): ControlisyImportResult!

  # Bank Statements
  importBankStatement(input: BankStatementInput!): BankImportResult!

  # Excel/CSV
  importExcelWithMapping(input: ExcelImportInput!): ImportSummary!

  # Exports
  exportVatNap(input: VatNapExportInput!): VatNapFiles!
  exportSaft(input: SaftExportInput!): SaftFile!
  exportIntrastat(input: IntrastatExportInput!): IntrastatFile!
  exportToExcel(input: ExcelExportInput!): ExcelFile!
}

Всичко е документирано на: https://docs.rs-ac-bg.com/import-export


🎯 Заключение

Защо Създадохме rs-ac-bg?

Видяхме как комерсиалните софтуери в България:

  • 🔒 Затварят клиентите с проприетарни формати
  • 💸 Взимат пари за „консултации“ за тривиални неща
  • Отказват да документират форматите
  • 🚫 Игнорират съвременните стандарти (XML, JSON)
  • Правят vendor lock-in стратегия

Това трябваше да спре.

Нашата Мисия

Open Standards. Open Documentation. Zero Fees.

rs-ac-bg е:

  • 100% open source – виждате кода
  • Пълна документация – всичко е публично
  • Съвременни стандарти – JSON, XML, GraphQL
  • Нулеви такси – за интеграции, консултации, API
  • Backward compatible – няма да чупим вашите интеграции
  • Community driven – всеки може да допринесе

Икономическата Изгода

За 3 години:

  • Традиционен софтуер: 7,200 лв за интеграции
  • rs-ac-bg: 0 лв

СПЕСТЯВАНИЯ: 7,200 лв = цена на нов служител за 3 месеца!

Призив за Действие

За счетоводни фирми:

  1. Изтеглете rs-ac-bg (безплатно)
  2. Интегрирайте складовите програми на клиентите си (безплатно)
  3. Спестете хиляди левове от консултации
  4. Предложете по-ниски цени на клиентите

За разработчици на складови програми:

  1. Използвайте нашия JSON формат (документиран)
  2. Интеграцията отнема 30 минути (не 30 дни)
  3. Нулеви такси (не 3000 лв)
  4. Вашите клиенти ще ви обичат

За бизнеси:

  1. Искайте от счетоводителя си да използва rs-ac-bg
  2. Спестете 80% от времето за обработка
  3. Нулеви разходи за интеграции
  4. Пълна свобода да смените софтуер

🚀 Започнете Днес

Стъпка 1: Инсталация

git clone https://github.com/katehonz/rs-ac_contragent.git
cd rs-ac-bg
docker-compose up -d

Стъпка 2: Тествайте Импорт

# Създайте тестов JSON файл
cat > test_import.json <<EOF
{
  "version": "2.0",
  "journalEntries": [
    {
      "entryNumber": "TEST-001",
      "documentDate": "2024-10-21",
      "documentNumber": "DOC-001",
      "description": "Тестова операция",
      "lines": [
        {"account": "102", "debit": 1000, "credit": 0, "description": "Каса"},
        {"account": "411", "debit": 0, "credit": 1000, "description": "Клиент"}
      ]
    }
  ]
}
EOF

# Импорт чрез GraphQL
curl -X POST https://your-rs-ac-bg.com/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "query": "mutation($data: String!) { importUniversalJson(input: {companyId: 1, jsonData: $data}) { success journalEntriesImported } }",
    "variables": {"data": "'"$(cat test_import.json | jq -c .)"'"}
  }'

Стъпка 3: Експорт

curl -X POST https://your-rs-ac-bg.com/graphql \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "query": "mutation { exportUniversalJson(input: {companyId: 1}) }"
  }' | jq -r '.data.exportUniversalJson' > export.json

Готово! Никакви консултации. Никакви такси. Просто работи.


📞 Поддръжка

  • 📧 Email: info@rustac.top

#OpenStandards #NoConsultationFees #FreeIntegration #JSON #XML #ImportExport #AccountingSoftware #Bulgaria #OpenSource #VendorFreedom #ModernStandards #GraphQL #Rust #NoLockIn


rs-ac-bg – Свободата на интеграциите. Без скрити формати. Без скъпи консултации. Само отворени стандарти.

Open Source. Безплатно. Документирано. Прозрачно.

Създадено с ❤️ за българския бизнес. Против vendor lock-in практиките.

Вашият коментар