Przykłady requestów i odpowiedzi
Przykłady dla API.ERP, zgodne z technical-conventions.md: wersja w ścieżce /v1/, rzeczowniki w liczbie mnogiej, kebab-case w ścieżkach, camelCase w parametrach zapytań i w JSON, paginacja count/offset, koperta items/nextToken, błędy w formacie Problem Details (RFC 9457).
Konwencje przykładów
Wszystkie przykłady w IG (w tym strony przykładów poszczególnych zasobów, np. PostingInstruction — przykłady) stosują następujące konwencje:
- Placeholdery wdrożeniowe — wartości
urn:oid:2.999.*to placeholdery: łuk OID2.999jest zarezerwowany do celów przykładowych. Realne przestrzenie mają postaćurn:oid:1.2.616.1.113769.4.<instalacja>.<klucz>i wynikają z zasobów NamingSystem (GET /v1/naming-systems) oraz parametrów wdrożenia; przykłady nie definiują ich treści. Numeracja2.999.<n>jest lokalna dla każdej strony przykładów (każda strona ma własną legendę) — ten sam numer na różnych stronach nie oznacza tej samej przestrzeni. Systemy niezależne od wdrożenia pozostają dosłowne (np. NIP/REGON:https://gov.pl/...). - Referencje logiczne przez
identifier— powiązania między zasobami zapisujemy jakotype+identifier{system, value}, zgodnie z Reference; polereferencejest wyłącznie opcjonalnym dodatkiem technicznym. - Zapis z przestrzenią identyfikatora — przykłady
POSTpodająidentifier[].system, bo to zalecana postać: przestrzeń wskazuje instalację, która zarejestruje zasób. Nie jest obowiązkowa — pominięta, rozstrzyga profil. WPATCHparametridentifier=system|valuewskazuje zasób do zmiany. Wartość (value) przy rejestracji jest opcjonalna — nadaje ją system prowadzący (rejestracja zasobu). - Słowniki (value sety) — URL-e
https://api-erp.kamsoft.pl/vs/...są częścią IG; pełny rejestr słowników: Systemy kodowania i value sety.
1. Odczyt zasobu (GET)
Odczyt zawsze idzie przez kolekcję; zasób wskazuje parametr identifier=system|value.
Request:
GET /v1/parties?identifier=https://gov.pl/nip%7C1234567890&count=20&offset=0 HTTP/1.1
Host: <base-url>
Authorization: Bearer <token>
Accept: application/json
Response (200 OK):
{
"items": [
{
"resourceType": "Party",
"id": "123",
"meta": {
"lastModified": "2025-01-15T10:00:00Z",
"profile": ["https://api-erp.kamsoft.pl/ns/StructureDefinition/Contractor"]
},
"category": [
{ "coding": [{ "system": "https://api-erp.kamsoft.pl/vs/party-kind", "code": "contractor", "display": "Kontrahent" }] }
],
"identifier": [
{ "system": "urn:oid:2.999.1", "value": "123" },
{ "system": "https://gov.pl/nip", "value": "1234567890" }
],
"name": {
"coding": [{ "system": "https://api-erp.kamsoft.pl/vs/finance/party-name", "code": "short-name", "display": "ABC Sp. z o.o." }],
"text": "ABC Sp. z o.o."
}
}
],
"nextToken": null
}
Legenda: urn:oid:2.999.1 — przestrzeń id kontrahenta w instalacji księgowej. Pola w camelCase; parametry zapytań w camelCase. Konkretne zasoby i parametry — api-contracts.md.
2. Utworzenie zasobu (POST)
Request — zapotrzebowanie zakupowe:
POST /v1/purchase-requisitions HTTP/1.1
Host: <base-url>
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json
{
"resourceType": "PurchaseRequisition",
"identifier": [{ "system": "urn:oid:2.999.6" }],
"issueDate": "2025-01-15",
"expectedDate": "2025-01-22",
"warehouse": { "type": "Location", "identifier": { "system": "urn:oid:2.999.2", "value": "7" } },
"description": "Uzupełnienie stanu apteczki oddziałowej",
"position": [
{
"positionNo": 1,
"product": { "type": "ProductDefinition", "identifier": { "system": "urn:oid:2.999.3", "value": "10045" } },
"quantity": { "value": 10, "unit": "op." }
}
]
}
Response (200 OK): koperta { "items": [ … ], "nextToken": null } z zapotrzebowaniem zapisanym po stronie systemu magazynowego — z nadanym identyfikatorem wewnętrznym (identifier[] w przestrzeni PurchaseRequisition.Id) i statusem ze słownika warehouse/purchase-requisition-status. Pozostałe operacje zapisu (POST /v1/parties, POST /v1/posting-instructions, POST /v1/fixed-asset-documents) zwracają sam zasób.
Legenda: urn:oid:2.999.6 — przestrzeń id zapotrzebowania, urn:oid:2.999.2 — przestrzeń id magazynu, urn:oid:2.999.3 — przestrzeń id produktu. Zapis niesie przestrzeń identyfikatora (identifier[].system), bo to zalecana postać — wskazuje instalację rejestrującą; pominięta, rozstrzyga profil. Wartość (value) przy rejestracji jest opcjonalna — nadaje ją system prowadzący. Zapis zasobu wieloprofilowego (np. POST /v1/parties?owner=https://gov.pl/nip|<NIP>) wymaga dodatkowo meta.profile albo cechy rozpoznającej profil — zob. Identyfikacja i parametry wdrożenia §3.
3. Aktualizacja zasobu (PATCH)
Request: PATCH na kolekcji; cel wskazuje identifier, treść to pełny zasób.
PATCH /v1/parties?identifier=urn:oid:2.999.1%7C123&owner=https://gov.pl/nip%7C1234567890 HTTP/1.1
Host: <base-url>
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json
{
"resourceType": "Party",
"meta": { "profile": ["https://api-erp.kamsoft.pl/ns/StructureDefinition/Contractor"] },
"identifier": [
{ "system": "urn:oid:2.999.1", "value": "123" },
{ "system": "https://gov.pl/nip", "value": "1234567890" }
],
"name": { "text": "ABC Spółka z o.o." }
}
Response (200 OK): zaktualizowany zasób w postaci kanonicznej.
4. Obsługa błędów (Problem Details)
Response (404 Not Found) — przestrzeń identyfikatora spoza miejsca prawdy zasobu:
{
"type": "https://httpstatuses.com/404",
"title": "Resource not found",
"status": 404,
"detail": "The identifier namespace does not belong to the master of the requested resource.",
"instance": "/v1/parties",
"traceId": "00-6f1c…-01"
}
Response (422 Unprocessable Entity) — profil nieobsługiwany u klienta:
{
"type": "https://httpstatuses.com/422",
"title": "Request cannot be processed",
"status": 422,
"detail": "Profile 'https://api-erp.kamsoft.pl/ns/StructureDefinition/Contractor' is not supported for this client.",
"instance": "/v1/parties",
"traceId": "00-6f1c…-02"
}
Response (400 Bad Request) — brak profilu w zapisie:
{
"type": "https://httpstatuses.com/400",
"title": "Invalid request",
"status": 400,
"detail": "Profile of 'Party' is not specified: give meta.profile or the attributes of one of: …/Employee, …/Employer, …/Contractor, …/AssetHolder.",
"instance": "/v1/parties",
"traceId": "00-6f1c…-03"
}
Format zgodny z RFC 9457 Problem Details (type, title, status, detail, instance, traceId); type to https://httpstatuses.com/{status}.
5. Statusy HTTP (skrót)
- 200 OK — odczyt oraz zapis
POST/PATCHzakończony sukcesem (odpowiedź niesie zasób). - 202 Accepted — zlecenie raportu przyjęte (
POST /v1/reports). - 400 Bad Request — zły format parametru (
identifier,owner,attribute), wartość filtra kodowanego (category,type,status) z przestrzeni spoza słowników zasobu, zapis bez rozpoznanego profilu, nieznanyprofile. - 401 Unauthorized — brak lub nieważny token.
- 403 Forbidden — brak roli
API.<Zasób>.Read/API.<Zasób>.Write. - 404 Not Found — przestrzeń identyfikatora wskazuje instalację nieobsługującą profilu, nieznany typ raportu.
- 422 Unprocessable Entity — profil nieobsługiwany w instalacji, zasób tylko do odczytu, odrzucenie przez system prowadzący.
- 500 Internal Server Error — błąd serwera.
- 501 Not Implemented — operacja nieobsługiwana.
- 503 Service Unavailable — system prowadzący nie odpowiada.
6. Paginacja
Request:
Response (200 OK):
{
"items": [
{
"resourceType": "PurchaseOrder",
"id": "41",
"identifier": [
{ "system": "urn:oid:2.999.4", "value": "41" }
],
"status": { "coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-status", "code": "2", "display": "przekazane" }] }
}
],
"nextToken": null
}
count — rozmiar strony (domyślnie 20), offset — liczba pominiętych elementów. Kolejną stronę pobiera się zwiększając offset; nextToken jest dziś zawsze null. Legenda: urn:oid:2.999.4 — przestrzeń id zamówienia zakupu.
7. Zasób z Identifier i Coding (rozszerzalna identyfikacja, wzorowana na FHIR)
Modele zawierają tablicę identifier[] (identyfikatory z różnych przestrzeni) oraz pola typu CodeableConcept (kody ze słowników). Zgodnie z technical-conventions.md.
Response (200 OK) — element items[] dla GET /v1/purchase-orders:
{
"resourceType": "PurchaseOrder",
"id": "41",
"meta": { "lastModified": "2025-01-15T10:00:00Z" },
"identifier": [
{
"system": "urn:oid:2.999.4",
"value": "41"
},
{
"system": "urn:oid:2.999.5",
"value": "ZAM/2025/0041"
}
],
"type": {
"coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-type", "code": "2", "display": "zamówienie" }]
},
"status": {
"coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-status", "code": "7", "display": "w trakcie realizacji" }]
},
"attribute": [
{
"code": { "coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-attribute-type", "code": "order-fulfillment-step" }] },
"value": { "valueCodeableConcept": { "coding": [{ "system": "https://api-erp.kamsoft.pl/vs/warehouse/purchase-order-realization-step", "code": "part-fulfilled" }] } }
}
]
}
identifier[] — identyfikacja w kilku przestrzeniach (id wewnętrzny, numer dokumentu), rodzaj wynika z przestrzeni system. type i status — CodeableConcept z tablicą coding (system, code, display) z wariantu warehouse/. Legenda: urn:oid:2.999.4 — id zamówienia, urn:oid:2.999.5 — numer zamówienia.
8. Zlecenie raportu asynchronicznego (202 Accepted)
Request:
POST /v1/reports HTTP/1.1
Host: <base-url>
Authorization: Bearer <token>
Content-Type: application/json
{
"reportId": "cost-calculation",
"format": "parquet",
"runAt": "2026-05-01T02:00:00Z",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n…\n-----END PUBLIC KEY-----",
"storage": { "type": "blob", "connectionString": "BlobEndpoint=https://<account>.blob.core.windows.net/;SharedAccessSignature=…" },
"parameters": { "year": 2026, "month": 4 }
}
Response (202 Accepted):
Nieznany reportId kończy się 404. Szczegóły zlecenia, szyfrowania i celu dostarczenia: Tryb raportowy, Raporty retrospektywne.
Dokumenty pionowe (przykłady poza REST)
Przykłady JSON i XML dla e-skierowania medycyny pracy (mp) — nie są requestami REST; służą generatorowi CDA i walidacji profilu:
| Artefakt | Lokalizacja |
|---|---|
| JSON wejściowe | verticals/mp/tools/examples/ |
| XML wygenerowane / wzorcowe | verticals/mp/samples/, verticals/mp/tools/examples/generated/ |
| Schemat | verticals/mp/contracts/skierowanie_mp_input.schema.json |
Indeks: API-ERP-MP-dokumentacja.md.