# Translator – biblioteka .NET (AmperApiClient.NET)

**AmperApiClient.NET** to biblioteka .NET do komunikacji z serwerem AMPER WS. Korzystają z niej translatory – moduły integrujące system ERP z AMPER:

- **wysyłka z ERP do AMPER** – produkty, ceny, stany, klienci, dokumenty, rozrachunki, promocje, cele i inne dane,
- **pobieranie z AMPER do ERP** – zamówienia, reklamacje, dokumenty i dokumenty kasowe z aplikacji mobilnej, nowi klienci.

| | |
|---|---|
| Wersja opisana w artykule | **1.1.210** |
| Pakiet | [AmperApiClient.NET w NuGet](https://www.nuget.org/packages/AmperApiClient.NET/) |
| Platformy | .NET Framework 4.5.2, .NET Core 3.1, .NET 5.0 i nowsze |
| Zależności | Newtonsoft.Json 13.0.3, System.IdentityModel.Tokens.Jwt 6.22.1 |
| Przykładowy projekt | [amper-translator-example](https://bitbucket.org/amplifierspzoo/amper-translator-example) |

Dla Pythona dostępny jest pakiet [amper-api](https://pypi.org/project/amper-api/) (`pip install amper-api`).

## Instalacja

- **Konsola menedżera pakietów w Visual Studio:** `Install-Package AmperApiClient.NET`
- **.NET CLI:** `dotnet add package AmperApiClient.NET`
- **Plik `.csproj`:**

```xml
<ItemGroup>
  <PackageReference Include="AmperApiClient.NET" Version="1.1.210" />
</ItemGroup>
```

## Szybki start

```csharp
using Amplifier;

// adres serwera AMPER WS – zawsze zakończony ukośnikiem
const string AMPER_WS_URL = "https://{amper_ws_url}/";

// 1. logowanie: AmplifierJWTAuth wysyła login i hasło na pełny adres logowania
var auth = new AmplifierJWTAuth("login_translatora", "haslo", AMPER_WS_URL + "auth/");

// 2. konfiguracja: token i adres API (z dopiskiem api/)
var config = new WSConfig
{
    JWTToken = await auth.GetToken(),
    B2BWSUrl = AMPER_WS_URL + "api/",
};

// 3. wysyłka i pobieranie danych
using var backend = new Backend(config);
await backend.SendProductsAsync(products);                      // List<Product> z danymi z ERP
List<Order> orders = await backend.GetListOfOrders("Pending");  // zamówienia do przeniesienia do ERP
```

## Zasady

- **`external_id`** – każdy obiekt wysyłany z ERP ma ID z ERP. Po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach: nowe ID tworzy obiekt, znane – aktualizuje go. Powiązania między obiektami też podaje się przez ID z ERP (pola `*_external_id`).
- **`isIncremental`** – parametr metod wysyłających pełne listy:
  - `false` – **pełna synchronizacja**: przesłana lista jest kompletna, a rekordy, których w niej nie ma, AMPER usuwa lub zeruje (np. rozrachunki dostają kwotę do zapłaty 0),
  - `true` – **wysyłka przyrostowa**: przesłane rekordy są dodawane lub aktualizowane, pozostałe zostają bez zmian.
- **`updatable_fields`** – lista pól rozdzielonych przecinkami. Gdy jest ustawiona, przy aktualizacji istniejącego obiektu zmieniane są tylko te pola; gdy jest pusta – wszystkie.
- **Token** – biblioteka sama odświeża token przed każdym wywołaniem (przez `/auth/token-refresh/`) i zapisuje nowy w `WSConfig.JWTToken`.
- **Błędy** – metody `Send…` nie zgłaszają wyjątków. Błąd (np. odpowiedź serwera inna niż 2xx) jest zapisywany w dzienniku biblioteki (`CreateLogEntryAsync`); wpisy dziennika są dostępne przez zdarzenie `Backend.OnBackendLogEntry`. Metody zwracające `HttpResponseMessage` (`SendDocumentsAsync`, `CreateExternalOrder`) pozwalają sprawdzić wynik bezpośrednio.
- **Duże listy** – część metod (np. `SendDocumentsAsync`) sama dzieli listę na paczki.

## AmplifierJWTAuth

Logowanie do AMPER WS.

| Element | Opis |
|---------|------|
| `AmplifierJWTAuth(string username, string password, string authUrl)` | `authUrl` – pełny adres logowania: `https://{amper_ws_url}/auth/` |
| `Task<JObject> GetToken()` | loguje się i zwraca **cały** token (obiekt z polami `access_token`, `refresh_token`, `expires_in`…) – przypisz go do `WSConfig.JWTToken` |

## WSConfig

Konfiguracja połączenia przekazywana do `Backend`.

| Właściwość | Typ | Opis |
|------------|-----|------|
| `B2BWSUrl` | `string` | adres API: `https://{amper_ws_url}/api/` (z ukośnikiem na końcu) |
| `JWTToken` | `JObject` | token zwrócony przez `AmplifierJWTAuth.GetToken()` |
| `ClientIdentifier` | `string` | opcjonalny – nie jest wymagany do połączenia |
| `ERPConnectionString` | `string` | miejsce na parametry połączenia z ERP – biblioteka go nie używa |

## Backend

Wszystkie operacje na danych. Konstruktor: `Backend(WSConfig wsConfig)`. Klasa implementuje `IDisposable`.

Zdarzenie `OnBackendLogEntry` przekazuje wpisy dziennika biblioteki (w tym błędy wywołań).


### Produkty i katalog

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendProductsAsync(List<Product> products)` | `Task` | Wysyła produkty – tworzy nowe i aktualizuje istniejące (po `external_id`). |
| `SendProductCategoriesAsync(List<ProductCategory> categories)` | `Task` | Wysyła drzewo kategorii produktów. |
| `SendProductCategoriesRelationAsyncsAsync(List<ProductCategoryRelation> relations)` | `Task` | Wysyła przypisania produktów do kategorii. |
| `SendRelatedProductsAsync(List<RelatedProducts> related_products)` | `Task` | Wysyła produkty powiązane (np. akcesoria, zamienniki). |
| `SendProductSetsAsync(List<ProductSets> product_sets)` | `Task` | Wysyła zestawy produktów. |
| `SendProductBundleItems(List<ProductBundleItem> bundleItems)` | `Task` | Wysyła składniki produktów-pakietów. |
| `SendUnitOfMeasuresAsync(List<UnitOfMeasure> units)` | `Task` | Wysyła jednostki miary produktów (opakowania zbiorcze, przeliczniki, kody EAN). |
| `SendManufacturersAsync(List<Manufacturer> manufacturers)` | `Task` | Wysyła producentów. |
| `SendManufacturerBrandsAsync(List<Brand> brands)` | `Task` | Wysyła marki producentów. |
| `SendProductNameTranslationsAsync(List<ProductNameTranslation> productNameTranslations)` | `Task` | Wysyła tłumaczenia nazw produktów na inne języki. |
| `SendFile(string path, string fileName, string product_external_id, string order)` | `Task<string>` | Wysyła plik (zdjęcie) produktu; `order` – kolejność zdjęcia. Zwraca odpowiedź serwera. |
| `AlignImages(List<ProductImage> images)` | `Task` | Wyrównuje listę zdjęć produktów do przesłanej listy. |

### Ceny i rabaty

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendPriceLevelsAsync(List<PriceLevel> priceLevels, bool isIncremental)` | `Task` | Wysyła cenniki (poziomy cen). `isIncremental` – patrz *Zasady*. |
| `SendPricesAsync(List<Price> priceLevels, bool isIncremental)` | `Task` | Wysyła ceny produktów w cennikach. `isIncremental` – patrz *Zasady*. |
| `SendPriceLevelAssigmentAsync(List<PriceLevelAssigment> assigments, bool isIncremental)` | `Task` | Wysyła przypisania cenników do klientów lub kategorii klientów. `isIncremental` – patrz *Zasady*. |
| `SendCategoryDiscountAsync(List<CategoryDiscount> category_discounts, bool isIncremental)` | `Task` | Wysyła rabaty na kategorie produktów w cennikach. `isIncremental` – patrz *Zasady*. |
| `SendDefaultPriceOverwriteForCategoryDiscountAsync(List<DefaultPriceOverwriteForCategoryDiscount> overwrites, bool isIncremental)` | `Task` | Wysyła cenniki bazowe, od których liczone są rabaty kategorii. `isIncremental` – patrz *Zasady*. |

### Stany i magazyny

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendStockLocationsAsync(List<StockLocation> stockLocations)` | `Task` | Wysyła magazyny. |
| `SendStocksAsync(List<Stock> stocks)` | `Task` | Wysyła stany magazynowe produktów. |

### Klienci

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendAccountsAsync(List<Account> accounts, bool isIncremental)` | `Task` | Wysyła konta (firmy) wraz z ich klientami (oddziałami). `isIncremental` – patrz *Zasady*. |
| `SendAddresses(List<Address> addresses, bool isIncremental)` | `Task` | Wysyła adresy dostaw klientów. `isIncremental` – patrz *Zasady*. |
| `SendCustomerCategoriesAsync(List<CustomerCategory> categories, bool isIncremental)` | `Task` | Wysyła kategorie klientów. `isIncremental` – patrz *Zasady*. |
| `SendCustomerCategoriesRelationAsyncsAsync(List<CustomerCategoryRelation> relations, bool isIncremental)` | `Task` | Wysyła przypisania klientów do kategorii. `isIncremental` – patrz *Zasady*. |
| `AddCustomerToCategory(string customer_id, string category_id)` | `Task` | Dodaje jednego klienta do kategorii. |
| `SendCustomerProductsRelationAsyncsAsync(List<CustomerProductRelation> relations, bool isIncremental)` | `Task` | Wysyła asortyment klientów – produkty lub kategorie dostępne albo wykluczone (`excluded`) dla klienta. `isIncremental` – patrz *Zasady*. |
| `SendCustomerProductLogisticMinimumAsync(List<CustomerProductLogisticMinimum> relations, bool isIncremental)` | `Task` | Wysyła minima logistyczne produktów dla klientów. `isIncremental` – patrz *Zasady*. |
| `SendPaymentFormsAsync(List<PaymentForm> payment_forms)` | `Task` | Wysyła formy płatności. |
| `SendUsers(List<User> users)` | `Task` | Wysyła użytkowników (loginy) kont klientów. |
| `GetListOfCustomers()` | `Task<List<CustomerForExport>>` | Pobiera klientów do przeniesienia do ERP (np. zarejestrowanych w B2B). |
| `GetListOfCustomerNotesAsync(string date)` | `Task<List<CustomerNote>>` | Pobiera notatki o klientach dodane od podanej daty. |

### Dokumenty i rozrachunki

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendDocumentsAsync(List<Document> documents)` | `Task<HttpResponseMessage>` | Wysyła dokumenty (faktury, WZ, korekty…) z pozycjami. Zwraca odpowiedź serwera. |
| `SendAlignDocumentAsync(Document document)` | `Task` | Aktualizuje dokument, który już jest w AMPER, do stanu z ERP. |
| `SendSettlementsAsync(List<Settlement> settlements, bool isIncremental)` | `Task` | Wysyła rozrachunki (należności klientów). `isIncremental` – patrz *Zasady*. |
| `GetListOfDocuments(string status)` | `Task<List<Document>>` | Pobiera dokumenty o danym statusie – np. utworzone w aplikacji mobilnej, do przeniesienia do ERP. |
| `GetDocument(string id)` | `Task<Document>` | Pobiera jeden dokument. |
| `ChangeDocumentStatus(string status, string id)` | `Task<string>` | Zmienia status dokumentu (np. po przyjęciu w ERP). |
| `TransferDocument(int document_id, string sales_rep_identifier)` | `Task` | Przekazuje dokument wskazanemu przedstawicielowi handlowemu. |
| `GetRelatedOrders(string document_id)` | `Task<List<RelatedOrder>>` | Pobiera zamówienia powiązane z dokumentem. |
| `GetListOfCashDocuments(string status)` | `Task<List<CashDocument>>` | Pobiera dokumenty kasowe o danym statusie. |
| `ChangeCashDocumentStatus(string status, string id)` | `Task<string>` | Zmienia status dokumentu kasowego. |
| `GetListOfDocumentDownloadRequests()` | `Task<List<DocumentDownloadRequest>>` | Pobiera prośby użytkowników o plik dokumentu (np. PDF faktury z ERP). |
| `SendDocumentDownload(int download_request_id, string path, string fileName)` | `Task<Exception>` | Wysyła plik w odpowiedzi na prośbę o dokument. Zwraca wyjątek albo `null`, gdy się udało. |

### Zamówienia

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `GetListOfOrders(string status)` | `Task<List<Order>>` | Pobiera zamówienia o danym statusie (np. `Pending` – oczekujące na przeniesienie do ERP). |
| `GetOrder(string token)` | `Task<Order>` | Pobiera jedno zamówienie po jego tokenie. |
| `ChangeOrderStatus(string status, string token)` | `Task<string>` | Zmienia status zamówienia (np. po przyjęciu w ERP). |
| `CreateExternalOrder(ExternalOrder order)` | `Task<HttpResponseMessage>` | Tworzy zamówienie klienta przez `POST /create-order` – opis w artykule [Tworzenie zamówienia „create-order”](https://kb.ampliapps.com/link/24). Zwraca odpowiedź serwera. |
| `SendOrdersAsync(List<Order> orders)` | `Task` | Wysyła zamówienia z ERP do AMPER. |

### Reklamacje

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `GetListOfComplaints(string status)` | `Task<List<Complaint>>` | Pobiera reklamacje o danym statusie. |
| `ChangeComplaintStatus(string status, string token)` | `Task<string>` | Zmienia status reklamacji. |

### Promocje

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendPromotionsAsync(List<Promotion> promotions)` | `Task` | Wysyła promocje (nagłówki). |
| `SendPromotinCustomersAsync(List<PromotionCustomer> promotions)` | `Task` | Wysyła klientów objętych promocjami. |
| `SendPromotionCustomerCategoriesAsync(List<PromotionCustomerCategory> promotions)` | `Task` | Wysyła kategorie klientów objęte promocjami. |
| `SendConditionRelationAsync(List<ConditionRelation> conditions)` | `Task` | Wysyła reguły promocji (relacje warunków). |
| `SendConditionRelationPromotionConditionAsync(List<ConditionRelationPromotionCondition> conditions)` | `Task` | Wysyła powiązania reguł z warunkami. |
| `SendPromotionConditionAsync(List<PromotionCondition> conditions)` | `Task` | Wysyła warunki promocji. |
| `SendPromotionConditionItemAsync(List<PromotionConditionItem> conditions)` | `Task` | Wysyła elementy warunków (produkt lub kategoria i próg). |
| `SendPromotionRewardsAsync(List<PromotionRewards> rewards)` | `Task` | Wysyła nagrody promocji. |

### Przedstawiciele, wizyty i cele

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendSalesRepresentativesAsync(List<SalesRepresentative> sales_representatives)` | `Task` | Wysyła przedstawicieli handlowych. |
| `SendCustomerSalesRepresentativeRelationAsync(List<CustomerSalesRepresentative> sf_customer_relations)` | `Task` | Wysyła przypisania przedstawicieli do klientów lub kategorii klientów. |
| `SendSchedulesAsync(List<SchedulerEntry> schedules)` | `Task` | Wysyła harmonogramy wizyt. |
| `SendCustomerTasksAsync(List<CustomerTask> schedules)` | `Task` | Wysyła zadania dla klientów (cele produktowe). |
| `SendTargetsAsync(List<Target> targets)` | `Task` | Wysyła cele sprzedażowe. |
| `SendTrendsAsync(List<Trend> trends)` | `Task` | Wysyła analizy trendów sprzedaży klientów. |

### Słowniki

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `SendCoreDictionaries(List<CoreDictionary> coreDictionaries)` | `Task` | Wysyła wartości słowników. |
| `SendCoreDictionaryCategories(List<CoreDictionaryCategory> coreDictionaryCategories)` | `Task` | Wysyła przypisania wartości słowników do kategorii. |

### Narzędzia

| Metoda | Zwraca | Opis |
|--------|--------|------|
| `AddTranslatorRelation(string objectType, string externalId, string internalId)` | `Task` | Zapisuje powiązanie ID obiektu w ERP (`externalId`) z ID w AMPER (`internalId`) dla typu `objectType`. |
| `CreateLogEntryAsync(string level, string message)`<br>`CreateLogEntryAsync(string level, string message, Exception ex)` | `Task` | Zapisuje wpis w dzienniku translatora; `level` – jedna z wartości `LogSeverity`. |
| `ValidateJWTToken()` | `Task` | Sprawdza token z `WSConfig` i w razie potrzeby odświeża go. Wywoływana automatycznie przez pozostałe metody. |
| `Dispose()` | `void` | Zwalnia połączenie HTTP. |

## Modele

Klasy danych przekazywane do metod `Backend` i zwracane przez nie. Nazwy właściwości odpowiadają polom JSON wysyłanym do AMPER WS. Opisy podano tam, gdzie znaczenie pola jest potwierdzone; pozostałe pola mają znaczenie zgodne z nazwą albo są używane wewnętrznie.


### Account

| Właściwość | Typ | Opis |
|------------|-----|------|
| `name` | `string` | nazwa |
| `short_name` | `string` | nazwa skrócona (kod) |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `city` | `string` | miejscowość |
| `postal_code` | `string` | kod pocztowy |
| `street` | `string` | ulica |
| `email` | `string` | e-mail |
| `phone` | `string` | telefon |
| `voivodeship` | `string` | województwo |
| `tax_id` | `string` | NIP |
| `customers` | `List<Customer>` | klienci |

### Address

| Właściwość | Typ | Opis |
|------------|-----|------|
| `name` | `string` | nazwa |
| `city` | `string` | miejscowość |
| `postal_code` | `string` | kod pocztowy |
| `street` | `string` | ulica |
| `street_continuation` | `string` | ulica – ciąg dalszy |
| `email` | `string` | e-mail |
| `phone` | `string` | telefon |
| `voivodeship` | `string` | województwo |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### AppliedPromotion

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `name` | `string` | nazwa |
| `short_code` | `string` | kod |
| `external_id` | `object` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `start` | `DateTime` | początek |
| `end` | `DateTime` | koniec |
| `priority` | `int` | priorytet |
| `description` | `string` | opis |
| `internal_description` | `string` | opis wewnętrzny |
| `external_identifier` | `string` | identyfikator zewnętrzny |
| `is_required` | `bool` | czy wymagana |

### BackendLog

Konstruktory: `BackendLog(string logSeverity, string message, Exception exception)`

| Właściwość | Typ | Opis |
|------------|-----|------|
| `logSeverity` | `string` |  |
| `message` | `string` | treść |
| `exception` | `Exception` |  |

### Brand

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `manufacturer_external_id` | `string` | ID producenta w systemie ERP |
| `name` | `string` | nazwa |
| `slug` | `string` | fragment adresu URL |
| `order` | `int` | kolejność |
| `description` | `string` | opis |
| `seo_tags` | `string` | tagi SEO |
| `is_hidden` | `bool` | czy ukryty |
| `is_featured` | `bool` | czy wyróżniony |
| `short_code` | `string` | kod |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### BundleItem

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product` | `int` | produkt (ID w AMPER) |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_name` | `string` | nazwa produktu |
| `product_sku` | `string` | SKU produktu |
| `product_ean` | `string` | EAN produktu |
| `quantity` | `decimal` | ilość |
| `price` | `decimal` | cena |

### CashDocument

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `cash_document_operations` | `List<CashDocumentOperation>` |  |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `customer` | `Customer` | klient |
| `number` | `string` | numer |
| `created_at` | `string` | data utworzenia |
| `status` | `string` | status |
| `type` | `string` | rodzaj |
| `date_of_exportation` | `object` |  |
| `amount` | `string` | kwota |
| `user` | `string` |  |
| `description` | `string` | opis |
| `is_system_operation` | `bool` |  |
| `ordinal` | `string` | numer kolejny |
| `cash_drawer` | `int` |  |
| `sales_rep_email` | `string` | e-mail przedstawiciela |
| `sales_rep_first_name` | `string` | imię przedstawiciela |
| `sales_rep_last_name` | `string` | nazwisko przedstawiciela |
| `sales_rep_phone` | `string` | telefon przedstawiciela |
| `sales_rep_identifier` | `string` | identyfikator przedstawiciela handlowego |

### CashDocumentOperation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `settlement` | `Settlement` |  |
| `settlement_external_id` | `string` | ID rozrachunku w systemie ERP |
| `amount` | `string` | kwota |
| `settlement_number` | `string` |  |
| `type` | `string` | rodzaj |
| `document_header` | `int` |  |

### CategoryDiscount

| Właściwość | Typ | Opis |
|------------|-----|------|
| `category_external_id` | `string` | ID kategorii w systemie ERP |
| `price_level_external_id` | `string` | ID cennika w systemie ERP |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `discount` | `decimal` | rabat (%) |
| `order` | `int` | kolejność |
| `start_date` | `string` | początek obowiązywania |
| `end_date` | `string` | koniec obowiązywania |
| `allow_override_minimal_price` | `bool` | czy można zejść poniżej ceny minimalnej |

### Complaint

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `lines` | `List<ComplaintLine>` | pozycje |
| `attachments` | `List<object>` |  |
| `notes` | `List<object>` |  |
| `number` | `string` | numer |
| `note` | `string` |  |
| `status` | `string` | status |
| `created_at` | `DateTime` | data utworzenia |
| `updated_at` | `DateTime` | data modyfikacji |
| `updated_by` | `Customer` |  |
| `created_by` | `Customer` | utworzony przez |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `customer` | `Customer` | klient |
| `correction_type` | `object` |  |
| `sales_rep_username` | `string` |  |

### ComplaintLine

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `product_id` | `int` | ID produktu w AMPER |
| `name` | `string` | nazwa |
| `purchase_date` | `string` |  |
| `order` | `string` | kolejność |
| `description` | `string` | opis |
| `complaint` | `int` |  |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `quantity` | `decimal` | ilość |
| `complaint_reason` | `object` |  |

### ConditionRelation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `parent_relation_external_id` | `string` | ID reguły nadrzędnej w systemie ERP |
| `promotion_external_id` | `string` | ID promocji w systemie ERP |
| `relation` | `string` | rodzaj relacji (`AND` / `OR`) |
| `order` | `int?` | kolejność |
| `multiply_reward` | `int?` | limit wielokrotności nagrody; 0 – bez limitu |

### ConditionRelationPromotionCondition

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `condition_relation_external_id` | `string` | ID reguły promocji w systemie ERP |
| `promotion_condition_external_id` | `string` | ID warunku promocji w systemie ERP |
| `order` | `int?` | kolejność |

### Coords

| Właściwość | Typ | Opis |
|------------|-----|------|
| `speed` | `string` |  |
| `heading` | `string` |  |
| `accuracy` | `string` |  |
| `altitude` | `string` |  |
| `latitude` | `string` | szerokość geograficzna |
| `longitude` | `string` | długość geograficzna |
| `altitudeAccuracy` | `string` |  |

### CoordsDetails

| Właściwość | Typ | Opis |
|------------|-----|------|
| `coords` | `Coords` |  |
| `timestamp` | `string` |  |

### CoreDictionary

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `value` | `string` | wartość |
| `order` | `int` | kolejność |
| `type` | `string` | rodzaj |

### CoreDictionaryCategory

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `dictionary_external_id` | `string` | ID słownika w systemie ERP |
| `category_external_id` | `string` | ID kategorii w systemie ERP |

### Customer

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `friendly_name` | `string` | nazwa handlowa |
| `short_name` | `string` | nazwa skrócona (kod) |
| `primary_email` | `string` | główny e-mail |
| `phone` | `string` | telefon |
| `city` | `string` | miejscowość |
| `postal_code` | `string` | kod pocztowy |
| `street` | `string` | ulica |
| `tax_id` | `string` | NIP |
| `comments` | `string` | uwagi |
| `price_level_external_id` | `string` | ID cennika klienta w systemie ERP |
| `complementary_price_level_external_id` | `string` | ID cennika uzupełniającego w systemie ERP |
| `payment_form_external_id` | `string` | ID formy płatności w systemie ERP |
| `login` | `string` | login |
| `password` | `string` | hasło |
| `trade_credit_limit` | `decimal` | limit kredytu kupieckiego |
| `overdue_limit` | `decimal` | limit przeterminowanych należności |
| `overdue_settlements_limit` | `decimal` |  |
| `discount` | `decimal` | rabat (%) |
| `currency_code` | `string` | kod waluty |
| `id` | `int` | ID w AMPER |
| `overdue_settlements` | `int` | liczba przeterminowanych rozrachunków |
| `max_num_of_overdue_settlements` | `int` |  |
| `currency_format` | `string` | format waluty |
| `ftp_host` | `string` | domyślne konto FTP – serwer |
| `ftp_port` | `string` | domyślne konto FTP – port |
| `ftp_user` | `string` | domyślne konto FTP – użytkownik |
| `ftp_pass` | `string` | domyślne konto FTP – hasło |
| `ftp_secure` | `bool` | domyślne konto FTP – szyfrowanie |
| `type` | `string` | rodzaj |
| `added_at` | `DateTime` | data dodania |
| `updated_at` | `DateTime?` | data modyfikacji |
| `first_login_at` | `DateTime?` | data pierwszego logowania |
| `is_free_shipping` | `bool` | czy darmowa dostawa |
| `account` | `int?` | konto |
| `default_address` | `string` | adres domyślny |
| `currency` | `string` | waluta |
| `concession_a_valid_until` | `DateTime?` | koncesja A ważna do |
| `concession_b_valid_until` | `DateTime?` | koncesja B ważna do |
| `concession_c_valid_until` | `DateTime?` | koncesja C ważna do |
| `default_sales_rep` | `SalesRepresentative` | domyślny przedstawiciel handlowy |
| `check_minimal_price` | `bool` |  |
| `is_locked_for_sale` | `bool` | czy sprzedaż zablokowana |
| `ean` | `string` | kod EAN |
| `latitude` | `decimal?` | szerokość geograficzna |
| `longitude` | `decimal?` | długość geograficzna |
| `export_customer` | `bool` |  |
| `value_restrictions` | `decimal?` |  |
| `value_restrictions_limit` | `decimal?` |  |
| `weight_restrictions` | `decimal?` |  |
| `weight_restrictions_limit` | `decimal?` |  |
| `free_shipping_from` | `decimal?` | darmowa dostawa od kwoty |
| `delivery_schedule` | `string` |  |
| `customer_metadata` | `object` | dodatkowe dane klienta (JSON) |
| `for_employees` | `bool` |  |
| `account_details` | `Account` |  |
| `is_in_loyalty_program` | `bool?` |  |
| `loyalty_points` | `decimal?` | punkty programu lojalnościowego |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |
| `stock_location_external_id` | `string` | ID magazynu w systemie ERP |
| `default_sales_rep_identifier` | `string` | identyfikator domyślnego przedstawiciela |

### CustomerCategory

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `parent_external_id` | `string` | ID kategorii nadrzędnej w systemie ERP |
| `name` | `string` | nazwa |
| `description` | `string` | opis |
| `seo_tags` | `string` | tagi SEO |
| `order` | `int` | kolejność |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### CustomerCategoryRelation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `category_external_id` | `string` | ID kategorii w systemie ERP |
| `customer_external_id` | `string` | ID klienta w systemie ERP |

### CustomerForExport

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `short_name` | `string` | nazwa skrócona (kod) |
| `primary_email` | `string` | główny e-mail |
| `phone` | `string` | telefon |
| `city` | `string` | miejscowość |
| `postal_code` | `string` | kod pocztowy |
| `street` | `string` | ulica |
| `tax_id` | `string` | NIP |
| `comments` | `string` | uwagi |
| `price_level_external_id` | `string` | ID cennika w systemie ERP |
| `payment_form_external_id` | `string` | ID formy płatności w systemie ERP |
| `login` | `string` | login |
| `password` | `string` | hasło |
| `trade_credit_limit` | `decimal` | limit kredytu kupieckiego |
| `overdue_limit` | `decimal` | limit przeterminowanych należności |
| `discount` | `decimal` | rabat (%) |
| `currency_code` | `string` | kod waluty |
| `id` | `int` | ID w AMPER |
| `overdue_settlements` | `int` | liczba przeterminowanych rozrachunków |
| `currency_format` | `string` | format waluty |
| `ftp_host` | `string` | domyślne konto FTP – serwer |
| `ftp_port` | `string` | domyślne konto FTP – port |
| `ftp_user` | `string` | domyślne konto FTP – użytkownik |
| `ftp_pass` | `string` | domyślne konto FTP – hasło |
| `ftp_secure` | `bool` | domyślne konto FTP – szyfrowanie |
| `type` | `string` | rodzaj |
| `added_at` | `DateTime` | data dodania |
| `updated_at` | `DateTime?` | data modyfikacji |
| `first_login_at` | `DateTime?` | data pierwszego logowania |
| `is_free_shipping` | `bool` |  |
| `currency` | `string` | waluta |
| `concession_a_valid_until` | `DateTime?` |  |
| `concession_b_valid_until` | `DateTime?` |  |
| `concession_c_valid_until` | `DateTime?` |  |
| `account` | `Account` | konto |
| `default_price` | `PriceLevel` | cena katalogowa netto |
| `payment_form` | `PaymentForm` |  |
| `default_sales_rep` | `SalesRepresetnative` | domyślny przedstawiciel handlowy |
| `default_stock_location` | `object` |  |
| `default_address` | `Address` | adres domyślny |
| `has_documents` | `bool` |  |
| `has_orders` | `bool` |  |
| `status` | `string` | status |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |
| `stock_location_external_id` | `string` | ID magazynu w systemie ERP |
| `default_sales_rep_identifier` | `string` | identyfikator domyślnego przedstawiciela handlowego |

### CustomerNote

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `author` | `string` | autor |
| `customer` | `int` | klient |
| `body` | `string` | treść |
| `note_type` | `CustomerNoteType` | rodzaj notatki |
| `added_at` | `DateTime` | data dodania |
| `created_by` | `string` | utworzony przez |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `note_type_id` | `int?` | ID rodzaju notatki |

### CustomerNoteType

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `type` | `string` | rodzaj |
| `value` | `string` | wartość |
| `order` | `int` | kolejność |

### CustomerProductLogisticMinimum

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `logistic_minimum` | `decimal` | minimum logistyczne |

### CustomerProductRelation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `category_external_id` | `string` | ID kategorii w systemie ERP |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `excluded` | `bool` | `true` – produkt lub kategoria wykluczone z asortymentu klienta |

### CustomerSalesRepresentative

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `sales_representative_identifier` | `string` | identyfikator przedstawiciela handlowego |
| `customer_category_external_id` | `string` | ID kategorii klientów w systemie ERP |
| `customer_external_id` | `string` | ID klienta w systemie ERP |

### CustomerTask

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `date_start` | `DateTime?` | początek |
| `date_end` | `DateTime?` | koniec |
| `goals` | `List<CustomerTaskGoal>` | cele |
| `customers` | `List<TaskCustomers>` | klienci |

### CustomerTaskGoal

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `type` | `string` | rodzaj |
| `goal_value` | `decimal` | wartość celu |

### DefaultPriceOverwriteForCategoryDiscount

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `price_level` | `string` |  |
| `category_discount` | `string` |  |
| `order` | `int` | kolejność |

### DeliveryAddress

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `id` | `int` | ID w AMPER |
| `deleted` | `object` | data usunięcia (gdy usunięty) |
| `name` | `string` | nazwa |
| `city` | `string` | miejscowość |
| `postal_code` | `string` | kod pocztowy |
| `street` | `string` | ulica |
| `street_continuation` | `object` | ulica – ciąg dalszy |
| `email` | `string` | e-mail |
| `phone` | `object` | telefon |
| `voivodeship` | `string` | województwo |
| `company_name` | `string` | nazwa firmy |
| `customer` | `int` | klient |

### Document

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `id` | `int` | ID w AMPER |
| `document_lines` | `List<DocumentLine>` | pozycje dokumentu |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `customer` | `Customer` | klient |
| `document_provider` | `DocumentProvider` |  |
| `visit` | `Visit` | wizyta |
| `document_type` | `DocumentType` |  |
| `stock_location` | `StockLocationDocument` |  |
| `number` | `string` | numer |
| `status` | `string` | status |
| `date` | `DateTime` | data |
| `due_date` | `DateTime?` | termin płatności |
| `description` | `string` | opis |
| `value_net` | `decimal` | wartość netto |
| `value_gross` | `decimal` | wartość brutto |
| `created_at` | `DateTime?` | data utworzenia |
| `modified_at` | `DateTime?` | data modyfikacji |
| `ordinal` | `string` | numer kolejny |
| `source_document` | `int` |  |
| `print_date` | `DateTime?` |  |
| `synchronization_date` | `DateTime?` |  |
| `delivery_date` | `DateTime?` | data dostawy |
| `percentage_discount` | `decimal` | rabat (%) |
| `username` | `string` | login użytkownika |
| `shipping_price_net` | `string` | koszt dostawy netto |
| `shipping_price_gross` | `string` | koszt dostawy brutto |
| `document_provider_short_name` | `string` |  |
| `document_type_name` | `string` |  |
| `payment_form_external_id` | `string` | ID formy płatności w systemie ERP |
| `is_external_document` | `string` |  |
| `sales_rep_identifier` | `string` | identyfikator przedstawiciela handlowego |
| `sales_rep_first_name` | `string` | imię przedstawiciela |
| `sales_rep_last_name` | `string` | nazwisko przedstawiciela |
| `sales_rep_email` | `string` | e-mail przedstawiciela |
| `sales_rep_phone` | `string` | telefon przedstawiciela |
| `document_metadata` | `object` | dodatkowe dane dokumentu (JSON) |
| `coords_details` | `CoordsDetails` | położenie GPS |
| `delivery_address` | `DeliveryAddress` |  |
| `related_orders` | `List<string>` |  |
| `shipment_type` | `int?` | ID rodzaju wysyłki |
| `ksef_number` | `string` | numer KSeF |

### DocumentDownloadRequest

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `status` | `int` | status |
| `keycloak_id` | `string` | ID użytkownika w Keycloak |
| `user_name` | `string` | login użytkownika |
| `user_first_name` | `string` | imię użytkownika |
| `user_last_name` | `string` | nazwisko użytkownika |
| `user_email` | `string` | e-mail użytkownika |
| `document` | `int` | dokument |
| `document_external_id` | `string` | ID dokumentu w systemie ERP |
| `created_at` | `DateTime` | data utworzenia |
| `sent_at` | `DateTime?` | data wysłania |

### DocumentLine

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `document` | `string` | dokument |
| `product_symbol` | `string` | symbol produktu |
| `product_ean` | `string` | EAN produktu |
| `product_short_code` | `string` | kod produktu |
| `product_additional_fees_net` | `decimal?` |  |
| `product_additional_fees_gross` | `decimal?` |  |
| `product_name` | `string` | nazwa produktu |
| `vat` | `int` | stawka VAT (%) |
| `unit` | `string` | jednostka miary |
| `quantity` | `decimal` | ilość |
| `unit_aggregate` | `string` | jednostka zbiorcza |
| `quantity_aggregate` | `decimal` | ilość w jednostce zbiorczej |
| `price_net` | `decimal` | cena netto |
| `price_gross` | `decimal` | cena brutto |
| `value_net` | `decimal` | wartość netto |
| `value_gross` | `decimal` | wartość brutto |
| `manufacturer` | `string` | producent |
| `make` | `string` | marka |
| `group` | `string` | grupa |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_vat` | `int` | stawka VAT produktu |
| `base_price` | `decimal` | cena bazowa |
| `percentage_discount` | `decimal` | rabat (%) |
| `source_document_line` | `int` |  |
| `source_price_level_desc` | `object` |  |
| `created_at` | `DateTime?` | data utworzenia |
| `modified_at` | `DateTime?` | data modyfikacji |
| `document_promotion` | `string` |  |
| `promotion_condition` | `string` | warunek promocji |
| `promotion_condition_relation` | `string` |  |
| `source_price_level` | `int?` |  |
| `price_level_external_id` | `string` | ID cennika w systemie ERP |
| `line_metadata` | `object` | dodatkowe dane pozycji (JSON) |
| `applied_promotion` | `AppliedPromotion` |  |
| `is_promotion_reward` | `bool` | czy pozycja jest nagrodą promocji |
| `piggy_bank_budget` | `decimal?` |  |
| `piggy_bank_budget_built` | `decimal?` |  |
| `user_discount` | `decimal?` |  |
| `product` | `int?` | produkt (ID w AMPER) |
| `budget` | `int?` |  |
| `source_target_goal` | `int?` |  |
| `export_rewards_to_a_separate_doc` | `bool?` |  |
| `stock_fulfillment_options` | `string` |  |
| `product_is_bundle` | `bool` | czy produkt jest pakietem |
| `bundle_items` | `List<BundleItem>` | składniki pakietu |

### DocumentProvider

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `name` | `string` | nazwa |
| `short_name` | `string` | nazwa skrócona (kod) |

### DocumentType

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `name` | `string` | nazwa |
| `series` | `string` |  |
| `template` | `string` |  |
| `annual` | `bool` |  |
| `monthly` | `bool` |  |
| `current_number` | `int` |  |
| `model_name` | `string` |  |

### ExternalOrder

| Właściwość | Typ | Opis |
|------------|-----|------|
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `is_producer_order` | `bool` | zamówienie producenckie |
| `producer_order_number` | `string` | numer zamówienia u producenta |
| `document_provider_short_name` | `string` | skrót dostawcy dokumentu (producenta) |
| `description` | `string` | opis |
| `lines` | `List<ExternalOrderLine>` | pozycje |
| `shipment_type_id` | `string` | ID rodzaju wysyłki |
| `recipient_order_number` | `string` | własny numer zamówienia odbiorcy |

### ExternalOrderLine

| Właściwość | Typ | Opis |
|------------|-----|------|
| `quantity` | `decimal` | ilość |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `ean` | `string` | EAN produktu lub opakowania zbiorczego (zamiast `product_external_id`) |
| `suggested_price` | `decimal?` | nie wpływa na cenę – AMPER wylicza ją sam |

### LogEntry

| Właściwość | Typ | Opis |
|------------|-----|------|
| `level` | `string` | poziom (`LogSeverity`) |
| `message` | `string` | treść |

### LogSeverity

Stałe poziomów dziennika dla `CreateLogEntryAsync`: `Info`, `Warning`, `Debug`, `Error`.

### Manufacturer

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `slug` | `string` | fragment adresu URL |
| `order` | `int` | kolejność |
| `description` | `string` | opis |
| `seo_tags` | `string` | tagi SEO |
| `is_hidden` | `bool` | czy ukryty |
| `is_featured` | `bool` | czy wyróżniony |
| `short_code` | `string` | kod |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### Order

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int?` | ID w AMPER |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `token` | `string` | token (identyfikator) zamówienia |
| `lines` | `List<OrderLine>` | pozycje |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `shipping_address` | `ShippingAddress` | adres dostawy |
| `billing_address` | `ShippingAddress` | adres do faktury |
| `customer` | `Customer` | klient |
| `created` | `DateTime` | data utworzenia |
| `updated` | `DateTime` | data modyfikacji |
| `delivery_date` | `DateTime?` | data dostawy |
| `status` | `string` | status |
| `user_email` | `string` | e-mail użytkownika |
| `shipping_price_net` | `string` | koszt dostawy netto |
| `shipping_price_gross` | `string` | koszt dostawy brutto |
| `products_total_net` | `string` | wartość produktów netto |
| `products_total_gross` | `string` | wartość produktów brutto |
| `total_net` | `string` | razem netto |
| `total_gross` | `string` | razem brutto |
| `paid` | `decimal` | kwota zapłacona |
| `discount_amount` | `decimal` | kwota rabatu |
| `customer_note` | `string` | uwagi klienta |
| `shipment_type` | `int?` | ID rodzaju wysyłki |
| `order_number` | `string` | numer zamówienia |
| `order_type` | `string` | rodzaj zamówienia |
| `form_of_payment` | `string` | forma płatności |
| `order_metadata` | `object` | dodatkowe dane zamówienia (JSON) |
| `documentSource` | `string` |  |

### OrderLine

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `attributes` | `List<object>` | atrybuty |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_short_code` | `string` | kod produktu |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `product_name` | `string` | nazwa produktu |
| `product_sku` | `string` | SKU produktu |
| `product_ean` | `string` | EAN produktu |
| `quantity` | `decimal` | ilość |
| `base_price_net` | `string` | cena bazowa netto |
| `discount` | `string` | rabat (%) |
| `unit_price_net` | `string` | cena jednostkowa netto |
| `unit_price_gross` | `string` | cena jednostkowa brutto |
| `tax_rate` | `string` | stawka VAT |
| `is_promotion_reward` | `bool` | czy pozycja jest nagrodą promocji |
| `piggy_bank_budget` | `decimal?` |  |
| `piggy_bank_budget_built` | `decimal?` |  |
| `product` | `int` | produkt (ID w AMPER) |
| `promotion_condition` | `int?` | warunek promocji |
| `promotion` | `Promotion` |  |
| `product_is_bundle` | `bool` | czy produkt jest pakietem |
| `bundle_items` | `List<BundleItem>` | składniki pakietu |

### OrderList

| Właściwość | Typ | Opis |
|------------|-----|------|
| `token` | `string` | token (identyfikator) zamówienia |
| `created` | `DateTime` | data utworzenia |
| `status` | `string` | status |
| `user_email` | `string` | e-mail użytkownika |
| `total_gross` | `string` | razem brutto |

### PaymentForm

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `is_cash` | `bool` | czy płatność gotówkowa |
| `default_payment_date_in_days` | `int` | domyślny termin płatności (dni) |

### Price

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `price_level_external_id` | `string` | ID cennika w systemie ERP |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `price` | `decimal` | cena |
| `discount` | `decimal` | rabat (%) |
| `start_date` | `string` | początek obowiązywania |
| `end_date` | `string` | koniec obowiązywania |
| `order` | `int` | kolejność |
| `allow_override_minimal_price` | `bool` | czy można zejść poniżej ceny minimalnej |

### PriceLevel

| Właściwość | Typ | Opis |
|------------|-----|------|
| `name` | `string` | nazwa |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `order` | `int` | kolejność |
| `is_global` | `bool` | czy cennik globalny |
| `is_enabled` | `bool` | czy włączony |
| `is_promotional` | `bool` | czy cennik promocyjny |

### PriceLevelAssigment

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `price_level` | `string` |  |
| `customer_category` | `string` |  |
| `customer` | `string` | klient |

### Product

| Właściwość | Typ | Opis |
|------------|-----|------|
| `attributes` | `List<ProductAttributes>` | atrybuty produktu |
| `name` | `string` | nazwa |
| `friendly_name` | `string` | nazwa handlowa |
| `short_description` | `string` | krótki opis |
| `description` | `string` | opis |
| `short_code` | `string` | kod |
| `sku` | `string` | SKU |
| `ean` | `string` | kod EAN |
| `brand_short_code` | `string` | kod marki |
| `vat` | `int` | stawka VAT (%) |
| `available_on` | `string` | dostępny od |
| `is_published` | `bool` | czy opublikowany |
| `is_featured` | `bool` | czy wyróżniony |
| `weight` | `decimal` | waga |
| `default_unit_of_measure` | `string` | podstawowa jednostka miary |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |
| `cumulative_unit_of_measure` | `string` | jednostka zbiorcza |
| `cumulative_converter` | `decimal` | liczba jednostek podstawowych w jednostce zbiorczej |
| `can_be_split` | `bool` | czy jednostkę zbiorczą można dzielić |
| `cumulative_unit_ratio_splitter` | `decimal` | na ile części można podzielić jednostkę zbiorczą |
| `unit_roundup` | `bool` | czy ilość jest zaokrąglana w górę do kroku jednostki |
| `default_price` | `decimal` | cena katalogowa netto |
| `is_b2b_product` | `bool` | widoczny w B2B |
| `is_b2c_product` | `bool` | widoczny w B2C |
| `is_msf_product` | `bool` | widoczny w aplikacji przedstawiciela (MSF) |
| `is_b2m_product` | `bool` |  |
| `is_msk_product` | `bool` |  |
| `dimension_unit_of_measure` | `string` | jednostka wymiarów |
| `dimension_width` | `decimal` | szerokość |
| `dimension_height` | `decimal` | wysokość |
| `dimension_depth` | `decimal` | głębokość |
| `is_product_saleable` | `bool` | czy produkt jest w sprzedaży |
| `piggy_bank_budget` | `decimal` |  |
| `concession_a` | `int` | wymagana koncesja A |
| `concession_b` | `int` | wymagana koncesja B |
| `concession_c` | `int` | wymagana koncesja C |
| `capacity` | `decimal` | pojemność |
| `sorting_column` | `string` |  |
| `is_bestseller` | `bool` | czy bestseller |
| `is_for_sale` | `bool` |  |
| `status_description` | `string` |  |
| `minimal_price` | `decimal` | cena minimalna |
| `product_subtype` | `int` |  |
| `sanitized_description` | `string` |  |
| `cn_code` | `string` | kod CN |
| `order` | `int` | kolejność |
| `purchase_price` | `decimal` | cena zakupu |
| `rsp_price` | `decimal` | sugerowana cena detaliczna |
| `deposit_pack_multiplier` | `decimal` | opakowanie zwrotne – mnożnik |
| `deposit_pack_price` | `decimal` | opakowanie zwrotne – cena |
| `deposit_pack_type` | `string` | opakowanie zwrotne – rodzaj |
| `expiration_date` | `string` | data ważności |
| `product_metadata` | `object` | dodatkowe dane produktu (JSON) |
| `additional_fees_net` | `decimal` |  |
| `additional_fees_gross` | `decimal` |  |
| `is_bundle` | `bool` | czy produkt jest pakietem |
| `loyalty_points` | `decimal?` | punkty programu lojalnościowego |

### ProductAttributes

Konstruktory: `ProductAttributes(string key, string atr_name, string atr_val)`, `ProductAttributes(string key, string atr_name, string atr_val, bool enabled_for_filtering, bool show_on_tile)`

| Właściwość | Typ | Opis |
|------------|-----|------|
| `key` | `string` | klucz atrybutu |
| `atr_name` | `string` | nazwa atrybutu |
| `atr_val` | `string` | wartość atrybutu |
| `is_b2b` | `bool` |  |
| `is_msf` | `bool` |  |
| `is_b2c` | `bool` |  |
| `enabled_for_filtering` | `bool` | czy można po nim filtrować |
| `show_on_tile` | `bool` | czy pokazywać na kafelku produktu |

### ProductBundleItem

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `parent_item_external_id` | `string` | ID pakietu w systemie ERP |
| `child_item_external_id` | `string` | ID składnika pakietu w systemie ERP |
| `quantity` | `decimal` | ilość |
| `price` | `decimal` | cena |

### ProductCategory

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `parent_external_id` | `string` | ID kategorii nadrzędnej w systemie ERP |
| `name` | `string` | nazwa |
| `description` | `string` | opis |
| `seo_tags` | `string` | tagi SEO |
| `order` | `int` | kolejność |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### ProductCategoryRelation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `category_external_id` | `string` | ID kategorii w systemie ERP |
| `product_external_id` | `string` | ID produktu w systemie ERP |

### ProductImage

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product_id` | `int` | ID produktu w AMPER |
| `alt` | `string` |  |
| `image` | `string` |  |
| `file_name` | `string` |  |
| `order` | `int` | kolejność |
| `thumbnail_width` | `int` |  |

### ProductNameTranslation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `language_code` | `string` | kod języka (np. `en`) |
| `translated_name` | `string` | przetłumaczona nazwa |

### ProductSet

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |

### ProductSets

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `product_sets` | `List<ProductSet>` | produkty zestawu |

### Promotion

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int?` | ID w AMPER |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `start` | `DateTime?` | początek |
| `end` | `DateTime?` | koniec |
| `priority` | `int?` | priorytet |
| `description` | `string` | opis |
| `short_code` | `string` | kod |
| `is_enabled` | `bool?` | czy włączony |
| `external_identifier` | `string` | identyfikator zewnętrzny |
| `internal_description` | `string` | opis wewnętrzny |
| `calculate_using_cumulative_units` | `bool?` |  |
| `replace_gratifications` | `bool?` |  |
| `is_internal` | `bool?` |  |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### PromotionCondition

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |

### PromotionConditionItem

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `promotion_condition_external_id` | `string` | ID warunku promocji w systemie ERP |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_category_external_id` | `string` | ID kategorii produktów w systemie ERP |
| `unitofmeasure_external_id` | `string` | ID jednostki miary w systemie ERP |
| `value` | `decimal` | wartość |
| `value_type` | `string` | rodzaj wartości (kody jak w API promocji: 1 wartość, 2 ilość, 3 stała cena…) |
| `value_max` | `decimal` | maksymalna wartość progu; 0 – bez limitu |
| `create_temporary_category` | `bool` |  |
| `temporary_category_name` | `string` |  |
| `temporary_category_products` | `List<string>` |  |

### PromotionCustomer

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `promotion_external_id` | `string` | ID promocji w systemie ERP |
| `customer_external_id` | `string` | ID klienta w systemie ERP |

### PromotionCustomerCategory

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `promotion_external_id` | `string` | ID promocji w systemie ERP |
| `customer_category_external_id` | `string` | ID kategorii klientów w systemie ERP |

### PromotionRewards

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `promotion_external_id` | `string` | ID promocji w systemie ERP |
| `condition_relation_external_id` | `string` | ID reguły promocji w systemie ERP |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_category_external_id` | `string` | ID kategorii produktów w systemie ERP |
| `quantity` | `decimal` | ilość |
| `price` | `decimal` | cena |
| `value_type` | `string` | rodzaj wartości (kody jak w API promocji: 1 wartość, 2 ilość, 3 stała cena…) |
| `reward_value` | `decimal` | wartość nagrody (rabatu) |
| `reward` | `string` | rodzaj nagrody: 1 upust %, 2 upust kwotowy, 3 stała cena, 4 gratis, 5–9 pozostałe |

### RelatedOrder

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int?` | ID w AMPER |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `token` | `string` | token (identyfikator) zamówienia |
| `lines` | `List<RelatedOrderLine>` | pozycje |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `shipping_address` | `int?` | adres dostawy |
| `billing_address` | `int?` | adres do faktury |
| `customer` | `int?` | klient |
| `created` | `DateTime` | data utworzenia |
| `updated` | `DateTime` | data modyfikacji |
| `status` | `string` | status |
| `user_email` | `string` | e-mail użytkownika |
| `shipping_price_net` | `string` | koszt dostawy netto |
| `shipping_price_gross` | `string` | koszt dostawy brutto |
| `products_total_net` | `string` | wartość produktów netto |
| `products_total_gross` | `string` | wartość produktów brutto |
| `total_net` | `string` | razem netto |
| `total_gross` | `string` | razem brutto |
| `paid` | `decimal` | kwota zapłacona |
| `discount_amount` | `decimal` | kwota rabatu |
| `customer_note` | `string` | uwagi klienta |
| `shipment_type` | `int?` | ID rodzaju wysyłki |
| `order_number` | `string` | numer zamówienia |
| `order_type` | `string` | rodzaj zamówienia |
| `form_of_payment` | `string` | forma płatności |

### RelatedOrderLine

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `attributes` | `List<object>` | atrybuty |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_short_code` | `string` | kod produktu |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `product_name` | `string` | nazwa produktu |
| `product_sku` | `string` | SKU produktu |
| `quantity` | `decimal` | ilość |
| `base_price_net` | `string` | cena bazowa netto |
| `discount` | `string` | rabat (%) |
| `unit_price_net` | `string` | cena jednostkowa netto |
| `unit_price_gross` | `string` | cena jednostkowa brutto |
| `tax_rate` | `string` | stawka VAT |
| `is_promotion_reward` | `bool` | czy pozycja jest nagrodą promocji |
| `product` | `int` | produkt (ID w AMPER) |
| `promotion_condition` | `int?` | warunek promocji |

### RelatedProduct

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |

### RelatedProducts

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `related_products` | `List<RelatedProduct>` | produkty powiązane |

### SalesRepresentative

| Właściwość | Typ | Opis |
|------------|-----|------|
| `identifier` | `string` | identyfikator przedstawiciela handlowego |
| `first_name` | `string` | imię |
| `last_name` | `string` | nazwisko |
| `phone` | `string` | telefon |
| `email` | `string` | e-mail |
| `keycloak_id` | `string` | ID użytkownika w Keycloak |
| `supervisor` | `string` | przełożony (identyfikator) |

### SalesRepresetnative

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `deleted` | `object` | data usunięcia (gdy usunięty) |
| `identifier` | `string` | identyfikator przedstawiciela handlowego |
| `first_name` | `string` | imię |
| `last_name` | `string` | nazwisko |
| `phone` | `string` | telefon |
| `email` | `string` | e-mail |
| `status` | `string` | status |
| `keycloak_id` | `string` | ID użytkownika w Keycloak |
| `supervisor` | `string` | przełożony (identyfikator) |

### SchedulerEntry

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `cron_expression` | `string` | harmonogram w formacie cron |
| `related_user_login` | `string` |  |
| `sales_representative_identifier` | `string` | identyfikator przedstawiciela handlowego |
| `is_enabled` | `bool` | czy włączony |
| `entry_date` | `DateTime` |  |
| `ended_at` | `DateTime?` |  |
| `ex_dates` | `DateTime?` |  |
| `updatable_fields` | `string` | pola do aktualizacji, rozdzielone przecinkami; puste – aktualizowane są wszystkie pola |

### Settlement

| Właściwość | Typ | Opis |
|------------|-----|------|
| `customer` | `string` | ID klienta w systemie ERP |
| `account` | `string` | ID konta w systemie ERP |
| `number` | `string` | numer |
| `value` | `decimal` | wartość |
| `value_to_pay` | `decimal` | kwota do zapłaty |
| `date` | `string` | data |
| `due_date` | `string` | termin płatności |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `can_be_paid_via_the_payment_gateway` | `bool` | czy można zapłacić przez bramkę płatności |
| `ksef_number` | `string` | numer KSeF |

### ShippingAddress

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `id` | `int` | ID w AMPER |
| `deleted` | `object` | data usunięcia (gdy usunięty) |
| `name` | `string` | nazwa |
| `city` | `string` | miejscowość |
| `postal_code` | `string` | kod pocztowy |
| `street` | `string` | ulica |
| `street_continuation` | `object` | ulica – ciąg dalszy |
| `email` | `string` | e-mail |
| `phone` | `object` | telefon |
| `voivodeship` | `string` | województwo |
| `tax_id` | `string` | NIP |
| `company_name` | `string` | nazwa firmy |
| `customer` | `int` | klient |

### Stock

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `stock_level_external_id` | `string` | ID magazynu w systemie ERP |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `quantity` | `decimal` | ilość |
| `quantity_allocated` | `decimal` | ilość zarezerwowana |

### StockLocation

| Właściwość | Typ | Opis |
|------------|-----|------|
| `name` | `string` | nazwa |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |

### StockLocationDocument

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `name` | `string` | nazwa |

### Target

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `date_start` | `DateTime?` | początek |
| `date_end` | `DateTime?` | koniec |
| `is_enabled` | `bool` | czy włączony |
| `percentage_realization` | `decimal` | procent realizacji |
| `is_task` | `bool` | czy zadanie |
| `is_done` | `bool` | czy wykonane |
| `action_type` | `int` |  |
| `period` | `string` | okres |
| `goals` | `List<TargetGoal>` | cele |
| `assignments` | `List<TargetAssignment>` | przypisania |
| `sales_representatives` | `List<TargetSalesRepresentative>` | przedstawiciele handlowi |

### TargetAssignment

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `customer_category_external_id` | `string` | ID kategorii klientów w systemie ERP |
| `target_goal_external_id` | `string` | ID celu w systemie ERP |

### TargetGoal

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `type` | `string` | rodzaj |
| `goal_value` | `decimal` | wartość celu |
| `percentage_realization` | `decimal` | procent realizacji |
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `product_category_external_id` | `string` | ID kategorii produktów w systemie ERP |

### TargetSalesRepresentative

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `identifier` | `string` | identyfikator przedstawiciela handlowego |
| `keycloak_id` | `string` | ID użytkownika w Keycloak |
| `target_goal_external_id` | `string` | ID celu w systemie ERP |

### TaskCustomers

| Właściwość | Typ | Opis |
|------------|-----|------|
| `customer_external_id` | `string` | ID klienta w systemie ERP |

### Trend

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `reporting_period` | `string` |  |
| `year` | `int` | rok |
| `quarter` | `int` | kwartał |
| `month` | `int` | miesiąc |
| `number_of_active_months` | `int` |  |
| `purchase_pattern_description` | `string` |  |
| `alert` | `string` | alert |
| `sales_value` | `decimal` | wartość sprzedaży |
| `trend` | `string` | trend |
| `trend_position_in_the_group` | `string` |  |
| `action_strategy` | `string` |  |

### UnitOfMeasure

| Właściwość | Typ | Opis |
|------------|-----|------|
| `product_external_id` | `string` | ID produktu w systemie ERP |
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `name` | `string` | nazwa |
| `converter` | `decimal` | przelicznik na jednostkę podstawową |
| `can_be_split` | `bool` | czy jednostkę zbiorczą można dzielić |
| `cumulative_unit_ratio_splitter` | `decimal` | na ile części można podzielić jednostkę zbiorczą |
| `unit_roundup` | `bool` | czy ilość jest zaokrąglana w górę do kroku jednostki |
| `weight` | `decimal` | waga |
| `capacity` | `decimal` | pojemność |
| `ean` | `string` | kod EAN |

### User

| Właściwość | Typ | Opis |
|------------|-----|------|
| `external_id` | `string` | ID w systemie ERP – po nim AMPER rozpoznaje obiekt przy kolejnych wysyłkach |
| `customer_external_id` | `string` | ID klienta w systemie ERP |
| `first_name` | `string` | imię |
| `last_name` | `string` | nazwisko |
| `login` | `string` | login |
| `email` | `string` | e-mail |
| `user_enabled` | `bool` | czy użytkownik aktywny |

### Visit

| Właściwość | Typ | Opis |
|------------|-----|------|
| `id` | `int` | ID w AMPER |
| `customer_name` | `string` | nazwa klienta |
| `customer_short_name` | `string` | kod klienta |
| `sales_representatives` | `string` | przedstawiciele handlowi |
| `date_start` | `DateTime?` | początek |
| `date_end` | `DateTime?` | koniec |
| `username` | `string` | login użytkownika |
| `virtual_visit` | `bool` | czy wizyta zdalna |
| `coords_details` | `CoordsDetails` | położenie GPS |
| `customer` | `int` | klient |

## Narzędzia (Amplifier.Utils)

| Element | Opis |
|---------|------|
| `WSUtilities.SplitList<T>(List<T> objectsList, int nSize)` | dzieli listę na paczki po `nSize` elementów |
| `WSUtilities.IsValidEmail(string email)` | sprawdza poprawność adresu e-mail |
| `WSUtilities.IsTokenExpired(string token)` | sprawdza ważność tokena JWT |
| `DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone)` | data ze strefą czasową: `UniversalTime`, `LocalTime`, `TimeZone`, `UTCDateFormat` |