Tu trafia każda zmiana publicznego kontraktu, od najnowszego wydania Prynt: nowe operacje, pola, argumenty i wartości enumów, zmiany zachowania, wycofania (z najwcześniejszą datą usunięcia) i usunięcia. Zasady zmian opisuje Wersjonowanie. Zmiany w aplikacji dla użytkowników drukarni znajdziesz w Co nowego.
Prynt 0.34.0
3 listopada 2026
- Zmieniono
Query.stockMovements— Stan wpisany przy zakładaniu karty papieru, farby albo folii jest ruchem `CORRECTION` od 0 do tego stanu (`notes`: „Stan początkowy karty”), zapisanym razem z kartą — łańcuch ruchów nowej karty zaczyna się od zera. Karty założone przed 0.34.0 takiego ruchu nie mają. - Zmieniono
Paint.minimumStock— Minimalny stan podany przy zakładaniu farby w Prynt zapisuje się (wcześniej przepadał i pole zostawało puste do pierwszej edycji karty). - Zmieniono
Paper.updatedAt— Zapis karty w Prynt bez zmiany żadnego pola (także ponowna archiwizacja narzędzia) nie przesuwa już zegara — synchronizacja nie dostaje karty, która się nie zmieniła. - Zmieniono
Paint.updatedAt— Zapis karty w Prynt bez zmiany żadnego pola (także ponowna archiwizacja narzędzia) nie przesuwa już zegara — synchronizacja nie dostaje karty, która się nie zmieniła. - Zmieniono
Foil.updatedAt— Zapis karty w Prynt bez zmiany żadnego pola (także ponowna archiwizacja narzędzia) nie przesuwa już zegara — synchronizacja nie dostaje karty, która się nie zmieniła. - Zmieniono
DieCut.updatedAt— Zapis karty w Prynt bez zmiany żadnego pola (także ponowna archiwizacja narzędzia) nie przesuwa już zegara — synchronizacja nie dostaje karty, która się nie zmieniła. - Zmieniono
Matrix.updatedAt— Zapis karty w Prynt bez zmiany żadnego pola (także ponowna archiwizacja narzędzia) nie przesuwa już zegara — synchronizacja nie dostaje karty, która się nie zmieniła.
Prynt 0.33.0
2 listopada 2026
- Dodano
Paper.isStock— Czy drukarnia prowadzi stan papieru; `false` to papier tylko do wyceny — drukarnia nie śledzi jego stanu, a klucz go nie przyjmie i nie wyda, także dostawą z zamówienia zakupu (`PAPER_PRICING_ONLY`). Przestawienie flagi niczego nie zeruje: stan i ruchy zapisane wcześniej zostają, a w aplikacji można go dalej przyjąć i wydać. - Zmieniono
PaperFilterInput.isStock— Nowy filtr po `Paper.isStock`; bez niego lista zawiera oba rodzaje papieru, jak dotąd. - Zmieniono
PaperFilterInput.grammageMin— Nowy filtr: gramatura od (włącznie); ta sama wartość w `grammageMin` i `grammageMax` daje jedną gramaturę. - Zmieniono
PaperFilterInput.grammageMax— Nowy filtr: gramatura do (włącznie). - Zmieniono
PaperFilterInput.quantitySheetsMin— Nowy filtr: stan w arkuszach od (włącznie); `1` daje papiery naprawdę na stanie. - Zmieniono
PaperFilterInput.quantitySheetsMax— Nowy filtr: stan w arkuszach do (włącznie). - Zmieniono
PaperFilterInput.lowStock— `false` zwraca teraz papiery, których stan nie jest poniżej stanu minimalnego (także papiery bez stanu minimalnego); dotąd `false` działało jak brak filtra. - Zmieniono
PaperFilterInput.supplierId— Nowy filtr: papiery preferowanego dostawcy (`Paper.supplierId`). Starsze papiery z dostawcą wpisanym tylko tekstem (`supplierName`) go nie mają. - Zmieniono
PaperFilterInput.isFsc— Nowy filtr: papiery FSC (`true`) albo bez certyfikatu (`false`). - Zmieniono
PaintFilterInput.supplierId— Nowy filtr: farby preferowanego dostawcy (`Paint.supplierId`). - Zmieniono
PaintFilterInput.quantityGramsMin— Nowy filtr: stan w gramach od (włącznie, z dokładnością do 0,001 g). - Zmieniono
PaintFilterInput.quantityGramsMax— Nowy filtr: stan w gramach do (włącznie). - Zmieniono
FoilFilterInput.supplierId— Nowy filtr: folie preferowanego dostawcy (`Foil.supplierId`). - Zmieniono
FoilFilterInput.numberOfRollsMin— Nowy filtr: stan w rolkach od (włącznie); część rolki się liczy. - Zmieniono
FoilFilterInput.numberOfRollsMax— Nowy filtr: stan w rolkach do (włącznie). - Zmieniono
Mutation.receivePaper— Przyjęcie papieru tylko do wyceny (`Paper.isStock` = `false`) jest odrzucane błędem `PAPER_PRICING_ONLY` z `paperId`, `code` i `name` w `params`: drukarnia nie prowadzi jego stanu. - Zmieniono
Mutation.withdrawPaper— Wydanie papieru tylko do wyceny (`Paper.isStock` = `false`) jest odrzucane błędem `PAPER_PRICING_ONLY`. - Zmieniono
Mutation.receivePurchaseOrder— Dostawa pozycji z papierem tylko do wyceny (`Paper.isStock` = `false`) jest odrzucana błędem `PAPER_PRICING_ONLY` (papier w `params`: `paperId`, `code`, `name`), a cała dostawa nie jest przyjmowana. - Zmieniono
OrderFilterInput.productPackingDateFrom— Nowy filtr: zamówienia z produktem pakowanym nie wcześniej niż podana chwila (włącznie). Daty pakowania są zapisane jako początek dnia w strefie drukarni (Europe/Warsaw) — podawaj granice z offsetem, np. `2026-11-03T00:00:00+01:00`. - Zmieniono
OrderFilterInput.productPackingDateTo— Nowy filtr: zamówienia z produktem pakowanym nie później niż podana chwila (włącznie), np. `2026-11-03T23:59:59+01:00` — do końca 3 listopada. - Zmieniono
OrderFilterInput.productHasPackingDate— Nowy filtr: `true` — produkt z datą pakowania, `false` — bez niej (ten sam produkt, co pozostałe warunki `product*`, więc `false` razem z zakresem dat nie zwraca nic). - Dodano
Element.spec— Technologia elementu skopiowana z kalkulacji: formaty arkusza drukowego i zakupowego (identyfikatory słownika `SHEET_FORMAT` i wymiary w milimetrach — także wtedy, gdy kalkulacja podała sam format; wtedy, podobnie jak automatyczny dzielnik arkusza zakupowego, wynikają z bieżącego słownika formatów), użytki, kolorystyka i schemat druku, formy, płyty, arkusze netto i brutto, maszyna drukująca z wyceny (`pressMachineId`). Bez cen papieru. Null dla elementów bez technologii z kalkulacji — wpisanych ręcznie, utworzonych przez API albo przejętych z poprzedniego systemu drukarni (tam format i papier są w `Operation.comments`). Zakres `orders:read`. - Zmieniono
ReferenceDataType.SHEET_FORMAT— Nowy słownik: formaty arkuszy kalkulatora, na które wskazują `ElementSpec.printFormatId` i `ElementSpec.purchaseFormatId`. Z `includeInactive: true` także formaty wycofane, na które mogą wskazywać starsze zamówienia. Zakres `reference:read`. - Dodano
ReferenceDataItem.widthMm— Szerokość arkusza w milimetrach — tylko w słowniku `SHEET_FORMAT`, w pozostałych null. - Dodano
ReferenceDataItem.heightMm— Wysokość arkusza w milimetrach — tylko w słowniku `SHEET_FORMAT`, w pozostałych null. - Dodano
ReferenceDataItem.kind— Rodzaj formatu arkusza (`SheetFormatKind`): zakupowy, drukowy albo oba — tylko w słowniku `SHEET_FORMAT`. - Dodano
ReferenceDataItem.parentId— Format, z którego arkusz jest cięty (inny wpis `SHEET_FORMAT`); null dla arkusza, który nie jest cięty z innego, i w pozostałych słownikach. - Dodano
ReferenceDataItem.divisor— Ile takich arkuszy powstaje z jednego arkusza formatu `parentId` — tylko w słowniku `SHEET_FORMAT`. - Dodano
Operation.updatedAt— Zegar zmian operacji: jej pola i każda zmiana statusu jej zadania (utworzenie, start, pauza, wznowienie, zakończenie, anulowanie). Zmiana zamówienia lub produktu go nie przesuwa; zapis tych samych wartości też nie. Operacje sprzed 0.33.0 mają chwilę wdrożenia. - Dodano
Query.operations— Lista operacji zamówień ze stronami: filtry po maszynie, elemencie, produkcie, zamówieniu, archiwum i statusie zamówienia (`orderStatus`, `orderStatusIn`) oraz — z `production:read` — po stanie produkcji (`productionStatus`, `productionStatusIn`, ta sama reguła co pole `Operation.productionStatus`). `updatedFrom` z sortowaniem `UPDATED_AT` pobiera tylko operacje zmienione od poprzedniej synchronizacji, także przez zadania na hali. Bez `sort` — po terminie zamówienia (`ORDER_COMPLETION_DATE`, zamówienia bez terminu na końcu), potem po identyfikatorze. Zakres `orders:read`; cena z `prices:read`. - Dodano
Query.operation— Jedna operacja zamówienia po identyfikatorze. Zakres `orders:read`. - Dodano
Operation.productId— Identyfikator produktu operacji (przez jej element). - Dodano
Operation.orderId— Identyfikator zamówienia operacji (przez element i produkt). - Dodano
Operation.element— Element, który operacja wykonuje; dla klucza z `orders:read` zawsze ustawiony. - Dodano
Operation.product— Produkt operacji; dla klucza z `orders:read` zawsze ustawiony. - Dodano
Operation.order— Zamówienie operacji; dla klucza z `orders:read` zawsze ustawione. - Dodano
Operation.previousOperationId— Identyfikator poprzedniej operacji elementu — tej o najbliższej niższej pozycji (`sequenceOrder`); null dla pierwszej operacji i dla operacji bez pozycji. - Dodano
Operation.previousOperation— Poprzednia operacja elementu. Czy operację można zacząć, zależy od wszystkich wcześniejszych operacji elementu, nie tylko od niej — podaje to `readyToStart`. - Dodano
Operation.readyToStart— Czy hala może teraz zacząć operację — ta sama reguła, której używa kolejka maszyn w Prynt: wszystkie wcześniejsze operacje elementu są skończone (`endedAt` i cała ilość), z pominięciem pozycji materiałowych (papier, karton, narzędzie z magazynu, każda operacja na maszynie magazynu). Może być `false`, choć poprzednia operacja ma `productionStatus` = `COMPLETED` (zakończona bez całej ilości). Zmienia się po zakończeniu innej operacji elementu bez ruchu `updatedAt` tej operacji — przesuwa się wtedy `Order.updatedAt`, więc synchronizuj też `orders(updatedFrom)`. Zakres `production:read`. - Dodano
Element.product— Produkt elementu; dla klucza z `orders:read` zawsze ustawiony. - Dodano
Product.order— Zamówienie produktu; dla klucza z `orders:read` zawsze ustawione. - Dodano
Mutation.updateOperation— Zmiana jednej operacji zamówienia jako łatka: maszyna, opis, ilość, jednostka, czas na jednostkę, cena, typ operacji, uszlachetnienie i profil kolorów. `null` czyści tylko opis i trzy identyfikatory słowników. Odmowy: zamówienie zarchiwizowane, nowa maszyna operacji, której zadanie produkcyjne czeka na start, jest przydzielone, w toku albo wstrzymane (`OPERATION_IN_PRODUCTION` — ta sama reguła obowiązuje w aplikacji), maszyna wycofana (`MACHINE_INACTIVE`) albo bez domyślnego typu zadania (`MACHINE_NO_DEFAULT_TASK_TYPE`). Inny czas na jednostkę albo ilość zastępuje szacunek czasu z kalkulacji; ilość nie większa niż wykonana kończy operację. Nowa maszyna zdejmuje operację z przypiętych w kolejce starej maszyny. Cenę zaokrąglamy do 2, a ilość do 3 miejsc po przecinku; zapis tych samych wartości po zaokrągleniu niczego nie zmienia (ani `Operation.updatedAt`, ani `Order.updatedAt`), więc ponowienie jest bezpieczne także bez `Idempotency-Key`. Zakres `orders:write`. - Zmieniono
OrderProductOperationInput.operationTypeId— Nowe opcjonalne pole: typ operacji (`referenceData(type: OPERATION_TYPE)`) przy tworzeniu zamówienia (`createOrder`). - Zmieniono
OrderProductOperationInput.finishingTypeId— Nowe opcjonalne pole: uszlachetnienie (`referenceData(type: FINISHING_TYPE)`) przy tworzeniu zamówienia. - Zmieniono
OrderProductOperationInput.colorProfileId— Nowe opcjonalne pole: profil kolorów (`referenceData(type: COLOR_PROFILE)`) przy tworzeniu zamówienia. - Zmieniono
OrderProductElementInput.elementTypeId— Nowe opcjonalne pole: typ elementu (`referenceData(type: ELEMENT_TYPE)`) przy tworzeniu zamówienia. - Dodano
StockMovement.unitPrice— Cena netto jednej `priceUnit` przyjętego towaru: podana przy przyjęciu ręcznym albo cena pozycji zamówienia zakupu z chwili dostawy (późniejsza zmiana pozycji jej nie zmienia). Null dla wydań, korekt, inwentaryzacji, przyjęć bez ceny i wszystkich przyjęć sprzed 0.33.0. Zakres `prices:read`. - Dodano
StockMovement.priceUnit— Jednostka ceny tak, jak zapisuje ją aplikacja (`ark.`, `g`, `kg`, `rolki`, `m`) — niekoniecznie jednostka stanu: farba wyceniona za kilogram jest na stanie w gramach. - Dodano
StockMovement.currency— Waluta ceny i wartości przyjęcia. - Dodano
StockMovement.netValue— Wartość netto przyjęcia policzona przy księgowaniu: ilość w `priceUnit` razy cena, dla dostawy z zamówienia zakupu — ilość z dokumentu, niezależnie od zaokrąglenia stanu. Zakres `prices:read`. - Dodano
StockMovement.supplierId— Dostawca przyjęcia: podany przy przyjęciu ręcznym albo dostawca zamówienia zakupu; null, gdy nie podano albo dostawcę usunięto. - Dodano
StockMovement.deliveredAt— Data dostawy z dokumentu; `occurredAt` to chwila zaksięgowania. - Dodano
StockMovement.documentNumber— Numer WZ albo faktury dostawcy podany przy przyjęciu. - Zmieniono
ReceivePaperInput.unitPrice— Nowe opcjonalne pole: cena netto za `priceUnit` z dokumentu dostawy, zapisana w ruchu razem z wartością (`StockMovement.unitPrice`, `StockMovement.netValue`). Karta materiału — jej cena, waluta i dostawca — się nie zmienia. - Zmieniono
ReceivePaperInput.priceUnit— Nowe opcjonalne pole: jednostka ceny — `ark.` (arkusz; domyślnie); synonimy zapisują się w ruchu tak, jak pisze je aplikacja. Tylko z `unitPrice`; innej jednostki API nie przyjmuje (`STOCK_UNIT_NOT_CONVERTIBLE`). - Zmieniono
ReceivePaperInput.currency— Nowe opcjonalne pole: waluta ceny (3 wielkie litery), domyślnie waluta karty materiału. Tylko z `unitPrice`. - Zmieniono
ReceivePaperInput.supplierId— Nowe opcjonalne pole: dostawca przyjęcia (`StockMovement.supplierId`); musi istnieć i być aktywny. Bez niego ruch nie ma dostawcy — API nie bierze go z karty. - Zmieniono
ReceivePaperInput.deliveredAt— Nowe opcjonalne pole: data dostawy z dokumentu (`StockMovement.deliveredAt`); `occurredAt` zostaje chwilą zaksięgowania. - Zmieniono
ReceivePaperInput.documentNumber— Nowe opcjonalne pole: numer WZ albo faktury dostawcy, do 100 znaków (`StockMovement.documentNumber`, filtr `documentNumber`). - Zmieniono
ReceivePaintInput.unitPrice— Nowe opcjonalne pole: cena netto za `priceUnit` z dokumentu dostawy, zapisana w ruchu razem z wartością (`StockMovement.unitPrice`, `StockMovement.netValue`). Karta materiału — jej cena, waluta i dostawca — się nie zmienia. - Zmieniono
ReceivePaintInput.priceUnit— Nowe opcjonalne pole: jednostka ceny — `g` (domyślnie) albo `kg` = 1000 g; np. 5000 g po 52,30 za `kg` daje wartość 261,50; synonimy zapisują się w ruchu tak, jak pisze je aplikacja. Tylko z `unitPrice`; innej jednostki API nie przyjmuje (`STOCK_UNIT_NOT_CONVERTIBLE`). - Zmieniono
ReceivePaintInput.currency— Nowe opcjonalne pole: waluta ceny (3 wielkie litery), domyślnie waluta karty materiału. Tylko z `unitPrice`. - Zmieniono
ReceivePaintInput.supplierId— Nowe opcjonalne pole: dostawca przyjęcia (`StockMovement.supplierId`); musi istnieć i być aktywny. Bez niego ruch nie ma dostawcy — API nie bierze go z karty. - Zmieniono
ReceivePaintInput.deliveredAt— Nowe opcjonalne pole: data dostawy z dokumentu (`StockMovement.deliveredAt`); `occurredAt` zostaje chwilą zaksięgowania. - Zmieniono
ReceivePaintInput.documentNumber— Nowe opcjonalne pole: numer WZ albo faktury dostawcy, do 100 znaków (`StockMovement.documentNumber`, filtr `documentNumber`). - Zmieniono
ReceiveFoilInput.unitPrice— Nowe opcjonalne pole: cena netto za `priceUnit` z dokumentu dostawy, zapisana w ruchu razem z wartością (`StockMovement.unitPrice`, `StockMovement.netValue`). Karta materiału — jej cena, waluta i dostawca — się nie zmienia. - Zmieniono
ReceiveFoilInput.priceUnit— Nowe opcjonalne pole: jednostka ceny — `rolki` (domyślnie) albo `m`, liczone przez `Foil.metersPerRoll` (folii bez metrów na rolce API nie wycenia w metrach); synonimy zapisują się w ruchu tak, jak pisze je aplikacja. Tylko z `unitPrice`; innej jednostki API nie przyjmuje (`STOCK_UNIT_NOT_CONVERTIBLE`). - Zmieniono
ReceiveFoilInput.currency— Nowe opcjonalne pole: waluta ceny (3 wielkie litery), domyślnie waluta karty materiału. Tylko z `unitPrice`. - Zmieniono
ReceiveFoilInput.supplierId— Nowe opcjonalne pole: dostawca przyjęcia (`StockMovement.supplierId`); musi istnieć i być aktywny. Bez niego ruch nie ma dostawcy — API nie bierze go z karty. - Zmieniono
ReceiveFoilInput.deliveredAt— Nowe opcjonalne pole: data dostawy z dokumentu (`StockMovement.deliveredAt`); `occurredAt` zostaje chwilą zaksięgowania. - Zmieniono
ReceiveFoilInput.documentNumber— Nowe opcjonalne pole: numer WZ albo faktury dostawcy, do 100 znaków (`StockMovement.documentNumber`, filtr `documentNumber`). - Zmieniono
ReceivePurchaseOrderInput.deliveredAt— Nowe opcjonalne pole: data dostawy kopiowana na każdy ruch dostawy. - Zmieniono
ReceivePurchaseOrderInput.documentNumber— Nowe opcjonalne pole: numer WZ kopiowany na każdy ruch dostawy — `stockMovements(filter: { purchaseOrderId, documentNumber })` rozpoznaje dostawę już przyjętą jednym zapytaniem (zamiast numeru WZ w `notes`). - Zmieniono
Mutation.receivePurchaseOrder— Każdy ruch dostawy zapisuje cenę i jednostkę pozycji, walutę i dostawcę zamówienia oraz datę i numer dokumentu dostawy. Karta materiału się nie zmienia. - Zmieniono
StockMovementFilterInput.supplierId— Nowy filtr: przyjęcia towaru od dostawcy — ręczne i dostawy jego zamówień zakupu. - Zmieniono
StockMovementFilterInput.documentNumber— Nowy filtr: dokładnie ten numer dokumentu dostawy, bez rozróżniania wielkości liter — jak `PaperFilterInput.barcode`, inaczej niż `PurchaseInvoiceFilterInput.invoiceNumber` (fragment).
Prynt 0.32.0
2 listopada 2026
- Zmieniono
Mutation.withdrawPaper— Wydanie zapisuje w ruchu cały łańcuch zamówienia: podana sama operacja uzupełnia `elementId`, `productId` i `orderId` ruchu (element — produkt i zamówienie, produkt — zamówienie), więc filtry `stockMovements` znajdują go po każdym z nich. Ruchy sprzed 0.32.0 mają tylko podane identyfikatory. - Zmieniono
Mutation.withdrawPaint— Wydanie zapisuje w ruchu cały łańcuch zamówienia: podana sama operacja uzupełnia `elementId`, `productId` i `orderId` ruchu (element — produkt i zamówienie, produkt — zamówienie), więc filtry `stockMovements` znajdują go po każdym z nich. Ruchy sprzed 0.32.0 mają tylko podane identyfikatory. - Zmieniono
Mutation.withdrawFoil— Wydanie zapisuje w ruchu cały łańcuch zamówienia: podana sama operacja uzupełnia `elementId`, `productId` i `orderId` ruchu (element — produkt i zamówienie, produkt — zamówienie), więc filtry `stockMovements` znajdują go po każdym z nich. Ruchy sprzed 0.32.0 mają tylko podane identyfikatory. - Zmieniono
StockMovementFilterInput.productId— Nowy filtr: ruchy zaksięgowane na produkt zamówienia. - Zmieniono
StockMovementFilterInput.elementId— Nowy filtr: ruchy zaksięgowane na element. - Zmieniono
StockMovementFilterInput.operationId— Nowy filtr: ruchy zaksięgowane na operację. - Zmieniono
StockMovementFilterInput.type— Nowy filtr po typie ruchu, tą samą regułą co `StockMovement.type`: RECEIPT to przyjęcie ręczne albo dostawa z zamówienia zakupu, które podniosły stan, RETURN — zwrot do dostawcy (starsze ruchy folii zapisane bez rolek też liczą się jako RETURN). Korekta i różnica z inwentaryzacji mają własne typy, nawet gdy podniosły stan. Ignorowany, gdy `typeIn` zawiera jakikolwiek typ. - Zmieniono
StockMovementFilterInput.typeIn— Nowy filtr: ruchy dowolnego z podanych typów, np. `[PRODUCTION, WASTE, OTHER]` — zużycie. Pusta lista niczego nie zawęża.
Prynt 0.30.0
18 października 2026
- Zmieniono
Unit.PASSES— Nowa jednostka ilości: przeloty arkusza przez maszynę drukującą. Pojawia się w operacjach zamówień utworzonych z kalkulatora (`Operation.unit`) i w ich danych wejściowych. - Zmieniono
Unit.PLATES— Nowa jednostka ilości: płyty drukowe (CTP), np. w operacji naświetlania płyt. - Zmieniono
Unit.SIGNATURES— Nowa jednostka ilości: składki (legi) książki, np. przy falcowaniu i zbieraniu. - Zmieniono
Unit.IMPRESSIONS— Nowa jednostka ilości: uderzenia sztancy albo prasy do złocenia. - Zmieniono
Unit.PALLETS— Nowa jednostka ilości: palety (pakowanie).
Prynt 0.28.0
6 października 2026
- Dodano
Query.currentApiKey— Pierwsza operacja publicznego API: klucz, którym wysłano żądanie — integracja, zakresy, ważność klucza i akceptacji oraz limit żądań. Nie wymaga zakresu, więc wywoła ją każdy ważny klucz; najprostszy sposób, żeby sprawdzić, czy klucz działa. - Dodano
Query.orders— Lista zamówień ze stronami (do 100 na stronę), filtrami i sortowaniem — z produktami, elementami, operacjami, kontaktem, adresami dostaw, danymi do faktury, płatnościami i kosztami dodatkowymi. Filtr `updatedFrom` z sortowaniem `UPDATED_AT` pobiera tylko zamówienia zmienione od poprzedniej synchronizacji (`Order.updatedAt` zmienia się przy każdej zmianie zamówienia i tego, co w nim jest). Zakres `orders:read`; ceny i koszty z `prices:read`, pliki z `files:read`. - Dodano
Query.order— Jedno zamówienie po identyfikatorze, z tymi samymi polami co na liście. Zakres `orders:read`. - Dodano
Query.product— Jeden produkt zamówienia po identyfikatorze, z elementami, operacjami, kosztami i plikami. Zakres `orders:read`. - Dodano
Mutation.createOrder— Tworzenie zamówienia z produktami (także z elementami i operacjami), kontaktem, adresami dostaw, danymi do faktury i kosztami dodatkowymi. Zamówienie dostaje numer, status `CREATED`, a integrację jako autora; jego produkty zaczynają w statusie `NO_FILES`. Klient zablokowany przez drukarnię albo przez nią usunięty (`isActive: false`) nie przyjmuje zamówień z API. Zakres `orders:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.updateOrder— Zmiana zamówienia: pól, statusu (zgodnie z dozwolonymi przejściami, bez cofania), statusu płatności, kontaktu, adresów dostaw i danych do faktury. `Order.updatedAt` przesuwa się tylko przy prawdziwej zmianie. Zakres `orders:write`. - Dodano
Mutation.createProduct— Dodanie produktu do istniejącego, niezarchiwizowanego zamówienia; produkt zaczyna w statusie `NO_FILES`. Zakres `orders:write`. - Dodano
Mutation.updateProduct— Zmiana pól produktu (bez statusu, który wynika z plików i produkcji). Ponowienie z tymi samymi danymi niczego nie zmienia, także `Order.updatedAt`. Zakres `orders:write`. - Dodano
Mutation.createOrderPayment— Zapisanie wpłaty do niezarchiwizowanego zamówienia, w walucie zamówienia. Nie zmienia statusu płatności zamówienia. Zakres `orders:write`. - Dodano
Mutation.addAdditionalCost— Dodanie kosztu dodatkowego do niezarchiwizowanego zamówienia albo do jego produktu. Zakres `orders:write`. - Dodano
Mutation.updateAdditionalCost— Zmiana kosztu dodatkowego niezarchiwizowanego zamówienia. Ponowienie z tymi samymi danymi niczego nie zmienia, także `Order.updatedAt`. Zakres `orders:write`. - Dodano
Query.clients— Lista klientów ze stronami (do 100 na stronę), wyszukiwaniem, filtrami i sortowaniem — z kontaktami, adresami, tagami i najnowszymi notatkami CRM (`clientNotes(first:)`, do 50 na klienta; autor notatki widoczny, gdy napisała ją integracja). Filtr `updatedFrom` z sortowaniem `UPDATED_AT` pobiera tylko klientów zmienionych od poprzedniej synchronizacji (`Client.updatedAt` zmienia się także przy zmianie kontaktu, adresu, notatki i tagów), a `externalRef` odnajduje klienta po Twoim identyfikatorze. Zakres `clients:read`; limit kredytowy i rabat z `prices:read`. - Dodano
Query.client— Jeden klient po identyfikatorze, z tymi samymi polami co na liście. Zakres `clients:read`. - Dodano
Query.clientTags— Tagi, którymi drukarnia oznacza klientów (listę prowadzi drukarnia w Prynt). Zakres `clients:read`. - Dodano
Order.client— Klient zamówienia jako pełny rekord, dla klucza z zakresem `clients:read` obok zakresu zamówień. - Dodano
Mutation.createClient— Dodanie klienta (firmy, jednoosobowej działalności albo osoby prywatnej) z adresem siedziby i Twoim identyfikatorem `externalRef`, unikalnym w obrębie integracji. Warunki handlowe — limit kredytowy, rabat, termin i formę płatności, podmiot wystawiający faktury, walutę — oraz blokadę i opiekunów ustala drukarnia w Prynt; integracja ich nie podaje. Zakres `clients:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.updateClient— Zmiana klienta: pole pominięte zostaje bez zmian, `null` czyści pole, które może być puste. Integracja nie zdejmuje blokady, nie zmienia warunków handlowych (limitu kredytowego, rabatu, terminu i formy płatności, podmiotu wystawiającego faktury, waluty), aktywności ani opiekunów, a klienta usuniętego w Prynt (`isActive: false`) nie zmienia wcale — tak samo jego kontaktów, adresów, notatek i tagów. `Client.updatedAt` przesuwa się tylko przy prawdziwej zmianie. Zakres `clients:write`. - Dodano
Mutation.createClientContact— Dodanie osoby kontaktowej klienta (wymaga imienia, nazwiska, e-maila albo telefonu). Zakres `clients:write`. - Dodano
Mutation.updateClientContact— Zmiana osoby kontaktowej: pole pominięte zostaje, `null` czyści pole tekstowe. Ponowienie z tymi samymi danymi niczego nie zmienia, także `Client.updatedAt`. Zakres `clients:write`. - Dodano
Mutation.createClientAddress— Dodanie adresu klienta (siedziba, dostawa, magazyn, faktura…) po kodzie typu adresu. Zakres `clients:write`. - Dodano
Mutation.updateClientAddress— Zmiana adresu klienta (`UpdateClientAddressInput`): pole pominięte zostaje bez zmian, `null` czyści pole opcjonalne. Kod pocztowy jest sprawdzany z krajem adresu po zmianie. Zakres `clients:write`. - Dodano
Mutation.createClientNote— Notatka CRM o kliencie (rozmowa, spotkanie, e-mail) z integracją jako autorem — zawsze widoczna dla zespołu drukarni. Zakres `clients:write`. - Dodano
Mutation.updateClientNote— Zmiana notatki napisanej przez Twoją integrację. Zakres `clients:write`. - Dodano
Mutation.assignClientTag— Nadanie klientowi tagu z listy `clientTags`; ponowne nadanie niczego nie zmienia. Zakres `clients:write`. - Dodano
Mutation.removeClientTag— Zdjęcie tagu z klienta (tag zostaje na liście drukarni); zdjęcie tagu, którego klient nie ma, niczego nie zmienia. Zakres `clients:write`. - Dodano
Query.papers— Papier w magazynie ze stanem w arkuszach, rodzajem (`PaperType`) i jednostką zakupu (`PaperUnit`), ze stronami (do 100 na stronę), filtrami i sortowaniem. Filtr `updatedFrom` z sortowaniem `UPDATED_AT` pobiera tylko papier, którego karta albo stan zmieniły się od poprzedniej synchronizacji (`Paper.updatedAt` przesuwa każde przyjęcie, wydanie, dostawa z zamówienia zakupu, korekta stanu na karcie i korekta z inwentaryzacji). Zakres `warehouse:read`; ceny zakupu z `prices:read`. - Dodano
Query.paper— Jeden papier po identyfikatorze. Zakres `warehouse:read`. - Dodano
Query.paints— Farby w magazynie ze stanem w gramach (do 0,001 g), ze stronami, filtrami, sortowaniem i synchronizacją przyrostową (`updatedFrom`, `UPDATED_AT`). Zakres `warehouse:read`; cena za kilogram z `prices:read`. - Dodano
Query.paint— Jedna farba po identyfikatorze. Zakres `warehouse:read`. - Dodano
Query.foils— Folie w magazynie ze stanem w rolkach (do 0,01 rolki) i metrami na rolce, ze stronami, filtrami, sortowaniem i synchronizacją przyrostową (`updatedFrom`, `UPDATED_AT`). Zakres `warehouse:read`; cena za m² z `prices:read`. - Dodano
Query.foil— Jedna folia po identyfikatorze. Zakres `warehouse:read`. - Dodano
Query.dieCuts— Wykrojniki (narzędzia liczone użyciami, bez stanu) ze stronami, filtrami i sortowaniem; zarchiwizowane na żądanie (`isArchived`) albo przy synchronizacji (`updatedFrom`), żeby było widać archiwizację. Zakres `warehouse:read`. - Dodano
Query.dieCut— Jeden wykrojnik po identyfikatorze, także zarchiwizowany. Zakres `warehouse:read`. - Dodano
Query.matrices— Matryce (narzędzia liczone użyciami, bez stanu) ze stronami, filtrami i sortowaniem; zarchiwizowane na żądanie (`isArchived`) albo przy synchronizacji (`updatedFrom`). Zakres `warehouse:read`. - Dodano
Query.matrix— Jedna matryca po identyfikatorze, także zarchiwizowana. Zakres `warehouse:read`. - Dodano
Query.stockMovements— Ruchy magazynowe papieru, farb i folii — przyjęcia (także dostawy z zamówień zakupu), wydania, korekty stanu na karcie materiału i korekty z inwentaryzacji — ze stanem przed i po ruchu (odczytanym pod blokadą materiału, więc ruchy jednego materiału łączą się w łańcuch) oraz zmianą ze znakiem (dodatnia: przyjęcie, ujemna: wydanie). Ilości i czas ruchu się nie zmieniają: synchronizuj ruchy filtrem `occurredFrom` z sortowaniem `OCCURRED_AT`; powiązania ruchu z zamówieniem albo zamówieniem zakupu znikają, gdy ktoś je usunie w Prynt. Stan początkowy karty i zmiany sprzed 0.28.0 nie mają ruchów — uzgadniaj z migawką stanów. Zakres `warehouse:read`. - Dodano
Mutation.withdrawPaper— Wydanie papieru z magazynu: podajesz, ile arkuszy wydajesz (`quantity`, zawsze), a stan maleje o tyle — nigdy poniżej zera (`STOCK_INSUFFICIENT`); bez rodzaju wydanie to PRODUCTION. Wydanie na zamówienie realizuje rezerwacje papieru tego zamówienia; zamówienie zarchiwizowane jest odrzucane. FSC zmniejsza też stan FSC i tylko na papierze z certyfikatem FSC. Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.receivePaper— Przyjęcie papieru na magazyn poza zamówieniem zakupu (arkusze, liczba całkowita); arkusze FSC tylko na papier z certyfikatem FSC. Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.withdrawPaint— Wydanie farby: gramy wydane (`quantity`, zawsze), nigdy ponad stan (`STOCK_INSUFFICIENT`); zamówienie zarchiwizowane jest odrzucane. Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.receivePaint— Przyjęcie farby na magazyn poza zamówieniem zakupu, w gramach. Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.withdrawFoil— Wydanie folii: arkusze i ich długość, przeliczane na rolki przez metry na rolce. Wydanie ponad stan, folii bez metrów na rolce albo tak małe, że nie zmienia stanu (poniżej 0,01 rolki), jest odrzucane (`STOCK_INSUFFICIENT`, `STOCK_UNIT_NOT_CONVERTIBLE`), tak jak wydanie na zamówienie zarchiwizowane. Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.receiveFoil— Przyjęcie folii na magazyn poza zamówieniem zakupu, w rolkach (co najmniej 0,01 rolki). Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Query.suppliers— Dostawcy materiałów z osobami kontaktowymi i cennikiem (`materials(first:)`, do 100 pozycji), ze stronami, filtrami, sortowaniem i synchronizacją przyrostową (`updatedFrom`, `UPDATED_AT`; `Supplier.updatedAt` przesuwa też zmiana cennika). Zakres `warehouse:read` (z danymi osobowymi); ceny cennika z `prices:read`. - Dodano
Query.supplier— Jeden dostawca po identyfikatorze. Zakres `warehouse:read`. - Dodano
Mutation.createSupplier— Dodanie dostawcy z jego danymi; aktywność dostawcy i uwagi zespołu ustawia drukarnia w Prynt. Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.updateSupplier— Zmiana danych dostawcy: pole pominięte zostaje, `null` czyści pole opcjonalne; aktywności i uwag zespołu klucz nie zmienia. Ponowienie z tymi samymi danymi niczego nie zmienia, także `Supplier.updatedAt`. Zakres `warehouse:write`. - Dodano
Query.purchaseOrders— Zamówienia zakupu z pozycjami, ze stronami, filtrami, sortowaniem i synchronizacją przyrostową (`updatedFrom`, `UPDATED_AT`), a `externalRef` odnajduje zamówienie po Twoim identyfikatorze. Zakres `warehouse:read`; ceny i wartość netto z `prices:read`. - Dodano
Query.purchaseOrder— Jedno zamówienie zakupu po identyfikatorze. Zakres `warehouse:read`. - Dodano
Mutation.createPurchaseOrder— Dodanie zamówienia zakupu (status DRAFT) u aktywnego dostawcy, z pozycjami i Twoim identyfikatorem `externalRef`, unikalnym w obrębie integracji. Pozycja z materiałem musi wskazywać istniejący papier, farbę albo folię i jednostkę, w której da się liczyć ich stan (np. kg farby to gramy × 1000). Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Mutation.updatePurchaseOrder— Zmiana zamówienia zakupu, które nie jest przyjęte ani anulowane: pole pominięte zostaje, `items` zastępuje całą listę pozycji (przyjęte ilości zostają; pozycji z przyjęciem nie zmienisz materiału ani jednostki). `PurchaseOrder.updatedAt` przesuwa się tylko przy prawdziwej zmianie. Zmiana nagłówka i pozycji z `id` jest bezpieczna do powtórzenia, ale pozycja bez `id` dochodzi przy każdym wywołaniu — ponawiaj z nagłówkiem `Idempotency-Key`. Zakres `warehouse:write`. - Dodano
Mutation.updatePurchaseOrderStatus— Zmiana statusu zamówienia zakupu: DRAFT → SENT, SENT ↔ CONFIRMED, anulowanie przed pełnym przyjęciem (także częściowo przyjętego). Ten sam status ponownie niczego nie zmienia. Zakres `warehouse:write`. - Dodano
Mutation.receivePurchaseOrder— Przyjęcie dostawy do zamówienia zakupu: rośnie przyjęta ilość pozycji (nie ponad zamówioną — `PURCHASE_ORDER_OVER_RECEIVED`) i stan materiału, przeliczony na jednostkę stanu, a dostawa pojawia się w `stockMovements` jako przyjęcie powiązane z zamówieniem; status przechodzi na PARTIALLY_RECEIVED albo RECEIVED. Zamówienie w innym statusie niż SENT, CONFIRMED i PARTIALLY_RECEIVED odrzuca dostawę (`PURCHASE_ORDER_NOT_RECEIVABLE`). Zakres `warehouse:write`; ponawiaj z nagłówkiem `Idempotency-Key`. - Dodano
Query.stockTakes— Inwentaryzacje (nagłówki), ze stronami, filtrami, sortowaniem i synchronizacją przyrostową; korekty zatwierdzonej inwentaryzacji są w `stockMovements` (`stockTakeId`). Zakres `warehouse:read`. - Dodano
Query.stockTake— Jedna inwentaryzacja po identyfikatorze; `null`, gdy jej nie ma. Zakres `warehouse:read`. - Dodano
Mutation.initiateFileUpload— Początek wgrywania pliku do niezarchiwizowanego zamówienia albo jego produktu: podpisany adres, na który wysyłasz treść pliku jednym żądaniem. Zakres `files:write`; zamówienie musi być widoczne dla klucza (`orders:read` albo `orders:write`). - Dodano
Mutation.completeFileUpload— Zakończenie wgrywania: Prynt sprawdza rozmiar zapisanego pliku i dołącza go do zamówienia albo produktu. Plik produktu, który nie jest jeszcze w produkcji, przestawia go na `FILES_TO_CHECK` (nowy plik do zaakceptowanych cofa akceptację). Zakres `files:write`. - Dodano
Query.tasks— Zadania produkcyjne operacji zamówień — co hala robi teraz i co zrobiła: status (zaplanowane, w toku, wstrzymane, zakończone, anulowane), termin, początek i koniec pracy oraz maszyna — bez danych pracowników. Filtry po operacji, maszynie i statusie, synchronizacja przyrostowa (`updatedFrom`, `UPDATED_AT`). Zakres `production:read`; to, co wskazuje zamówienie — nazwa zadania (`Task.title`, z numerem zamówienia), operacja (`Task.operation`) i filtr `orderId` — z `orders:read`. - Dodano
Query.task— Jedno zadanie produkcyjne po identyfikatorze; `null`, gdy go nie ma. Zakres `production:read`. - Dodano
Operation.productionStatus— Stan produkcji operacji: NOT_STARTED, IN_PROGRESS (zadanie trwa), PAUSED (zadanie wstrzymane albo część ilości zrobiona) albo COMPLETED. Razem z `Operation.tasks` i podsumowaniami `Order.production`, `Product.production` i `Element.production` (stan — IN_PROGRESS także między operacjami, gdy część jest zakończona, a reszta czeka; liczba operacji i zakończonych; procent pracy ważony planowanym czasem maszyn, 100 tylko po zakończeniu) — każda zmiana statusu zadania przesuwa `Order.updatedAt`, więc stan produkcji synchronizujesz listą zamówień z `updatedFrom`. Wymaga `production:read` obok `orders:read`. - Dodano
Query.productInvoices— Faktury sprzedaży produktów zamówień (z identyfikatorem produktu i zamówienia) ze stronami, filtrami (zamówienie, produkt, podmiot rozliczeniowy, typ, numer, data wystawienia `issuedFrom`/`issuedTo`) i synchronizacją przyrostową (`updatedFrom`, `UPDATED_AT`; `ProductInvoice.updatedAt` przesuwa też dołączenie i usunięcie dokumentu). Zakres `invoices:read`; kwoty i kursy z `prices:read`, dokument (PDF) z `files:read`. - Dodano
Query.productInvoice— Jedna faktura sprzedaży produktu po identyfikatorze; `null`, gdy jej nie ma. Zakres `invoices:read`. - Dodano
Query.purchaseInvoices— Faktury zakupu od dostawców ze stronami, filtrami (dostawca, numer, data faktury `issuedFrom`/`issuedTo`) i synchronizacją przyrostową (`updatedFrom`, `UPDATED_AT`; `PurchaseInvoice.updatedAt` przesuwa też dołączenie i usunięcie dokumentu). Zakres `invoices:read`; kwoty z `prices:read`, dokument z `files:read`, dane dostawcy (`supplier`) z `warehouse:read`. - Dodano
Query.purchaseInvoice— Jedna faktura zakupu po identyfikatorze; `null`, gdy jej nie ma. Zakres `invoices:read`. - Dodano
Query.machines— Maszyny drukarni (nazwa, model, producent, czy w użyciu) — to, na co wskazują `Operation.machineId` i `Task.machineId`, także maszyny wycofane. Zakres `reference:read`. - Dodano
Query.machine— Jedna maszyna po identyfikatorze. Zakres `reference:read`. - Dodano
Query.vatRates— Stawki VAT drukarni (ułamek, np. 0.23); kopia do interpretacji starszych danych czyta też stawki już niestosowane (`includeInactive: true`). Zakres `reference:read`. - Dodano
Query.currencies— Waluty sprzedaży drukarni (kod ISO, symbol, waluta domowa) — to, na co wskazują `Order.currencyId`, `Client.defaultCurrencyId` i `ProductInvoice.currencyId`; kopia do rozwiązywania identyfikatorów czyta też waluty wycofane (`includeInactive: true`). Kurs zapasowy waluty z `prices:read`. Zakres `reference:read`. - Dodano
Query.billingEntities— Podmioty rozliczeniowe drukarni — jej firmy wystawiające faktury (nazwa, NIP, REGON, KRS, adres, numer konta, certyfikat FSC; przy jednoosobowej działalności to dane właściciela) — na które wskazują `Order.billingEntityId`, `Client.defaultInvoiceBillingEntityId` i `ProductInvoice.billingEntityId`. Zakres `reference:read`. - Dodano
Query.billingEntity— Jeden podmiot rozliczeniowy po identyfikatorze. Zakres `reference:read`. - Dodano
Query.referenceData— Słowniki drukarni, jeden na wywołanie: kategorie produktów, typy elementów, typy operacji, uszlachetnienia i profile kolorystyczne — na nie wskazują `Product.categoryId`, `Element.elementTypeId`, pola `…TypeId` i `colorProfileId` operacji; kopia do rozwiązywania identyfikatorów czyta też pozycje wycofane (`includeInactive: true`). Zakres `reference:read`.