Integracje ERP

Specyfikacje do faktur eksportowych publikowane automatycznie z ERP

Proces w tle, osobna baza dokumentów z historią wersji i jeden link w fakturze, który po korekcie wskazuje już nową wersję.

0
plików PDF w bazie ERP
1
stały link na fakturę, niezależnie od korekt
5
iteracji panelu bez przestoju
STATUS
Rozwiązanie produkcyjne, utrzymywane
ROLA
Architektura, nadzór nad implementacją, wdrożenie, utrzymanie
OBSZAR
Integracje ERP · Automatyzacja dokumentów · SQL Server
W skrócie

Do faktur eksportowych trzeba dołączyć specyfikację, czyli osobny wydruk z pozycjami dokumentu. Stare rozwiązanie zapisywało PDF-y jako załączniki binarne w bazie ERP, korzystało z przestarzałej wersji API producenta i po korekcie faktury nie dawało pewności, która wersja specyfikacji jest aktualna. Zaprojektowałem rozwiązanie, które działa samo, bez otwartej sesji użytkownika, nie dotyka danych ERP poza oficjalnym API i zachowuje historię wersji.

Wyzwanie
  • 01Baza produkcyjna ERP rosła o binaria PDF, których tam nie powinno być.
  • 02Wydruk musiał powstawać bez klienta ERP i bez pulpitu zdalnego, na koncie usługi zarządzanym przez domenę.
  • 03Po korekcie faktury użytkownik miał trafiać na aktualną specyfikację bez zmiany linku w dokumencie.
  • 04Żadnych zapisów wprost do tabel ERP, także wtedy, gdy API nie robi tego, czego byśmy chcieli.
Rozwiązanie

Cztery elementy z jasno rozdzielonymi uprawnieniami.

  • 01Generator w tle: proces wsadowy z Harmonogramu zadań na koncie gMSA. Wyszukuje faktury eksportowe bez specyfikacji albo zmienione od ostatniej publikacji i zleca wydruk przez oficjalne API ERP do bezobsługowej kolejki PDF zbudowanej na komponentach open source.
  • 02Osobny magazyn dokumentów: PDF trafia wyłącznie do oddzielnej bazy. Każda wersja ma skrót SHA-256 i status: oczekująca, aktualna, unieważniona. Powrót faktury do edycji unieważnia bieżącą wersję, ponowne zatwierdzenie tworzy nową, stare zostają w historii.
  • 03Stały link w dokumencie: adres PDF zbudowany z pełnego identyfikatora faktury, nie z identyfikatora pliku. Trafia raz do atrybutu faktury, zawsze przez API producenta. Serwuje go osobny endpoint tylko do odczytu, dostępny wyłącznie z sieci firmowej.
  • 04Panel administracyjny: aplikacja Blazor z logowaniem domenowym i rolami z grup AD. Lista publikacji, historia wersji, przebiegi generatora z osią zdarzeń, wykres publikacji w dniach roboczych, mapa dozwolonych i zabronionych przepływów. Panel tylko czyta metadane; nie ma dostępu do treści PDF, do ERP ani do Harmonogramu zadań.
PRZEPŁYW
01Faktura w ERP
02Generator w tle
03PDF przez API
04Baza dokumentów
05Stały link
06Panel

Zero bezpośrednich zapisów do ERP. Każda zmiana w dokumencie idzie przez API producenta.

Incydent, który dużo nauczył

Kilka dni po starcie generator przestał publikować część faktur. Przyczyną nie był wydruk ani baza dokumentów. Historyczne ustawienie w konfiguracji ERP dodawało do nowych faktur pusty atrybut na link. Generator poprawnie odmawiał nadpisania wartości, której nie rozpoznawał, ale robił to za późno i zatrzymywał cały przebieg. Sprawdziłem na danych i w pilocie, że oficjalne API nie aktualizuje istniejącej pustej wartości tego typu atrybutu. Zamiast obchodzić to zapisem SQL do tabel ERP, wprowadziłem trzy zmiany.

  • 01Generator klasyfikuje stan atrybutu przed wydrukiem i przed zapisem wersji.
  • 02Wadliwa faktura dostaje czytelne zdarzenie błędu w panelu i nie blokuje pozostałych.
  • 03Puste wpisy usunięto w oficjalnym kliencie ERP, a ustawienie, które je tworzyło, wyłączono u źródła.
Bezpieczeństwo i sposób wdrażania
  • 01Najmniejsze uprawnienia: konto serwera WWW ma tylko odczyt metadanych, konto generatora może wyłącznie wywołać trzy procedury publikacji, hasłami kont usług zarządza domena.
  • 02Zero bezpośrednich zapisów do ERP: wszystkie zmiany w dokumentach idą przez API producenta.
  • 03Każda zmiana na serwerze jako nazwany skrypt: najpierw podgląd, potem wykonanie, automatyczny backup i rollback, weryfikacja SHA-256 paczki, osobny test tylko do odczytu po wdrożeniu.
  • 04Brak sekretów w repozytorium: konfiguracja połączeń istnieje tylko lokalnie na serwerze.
  • 05Interfejs panelu według firmowego standardu opartego na Fluent 2 (WCAG 2.2 AA, pełna polonizacja); regresje wizualne pilnują zrzuty ekranu i testy geometrii.
Rezultaty
  • 01Wszystkie faktury eksportowe od początku roku mają specyfikację publikowaną automatycznie.
  • 02Baza ERP przestała rosnąć o binaria PDF.
  • 03Link w dokumencie jest stały i zawsze wskazuje aktualną wersję.
  • 04Administrator widzi w jednym miejscu, co zostało opublikowane, kiedy i dlaczego coś się nie udało.
  • 05Panel przeszedł pięć iteracji interfejsu bez przestoju, każda wersja ma kopię do szybkiego wycofania.
TECHNOLOGIE

.NET Framework 4.7.2 · .NET 10 · Blazor · C# · SQL Server · IIS · Windows Authentication · gMSA · Harmonogram zadań Windows · PowerShell 5.1 · Ghostscript

Materiał zanonimizowany. Nazwy organizacji, systemu ERP, serwerów, kont, grup, baz danych i identyfikatory atrybutów zostały pominięte. Dane na schematach są fikcyjne.