swagger: '2.0'
info:
  title: Moduł Tożsamości - Portal e-Usług
  description: >-
    Opis funkcji Modułu Tożsamości (MT). Moduł ten służy do dodawania oraz
    pobierania danych na temat Zamawiających oraz Wykonawców.
  version: '1.0'
schemes:
  - https
host: api.ezamowienia.gov.pl
basePath: /mt
consumes:
  - application/json
produces:
  - application/json
tags:
  - name: Wykonawcy
  - name: Zamawiający
paths:
  '/portal/wykonawcy':
    post:
      tags: [Wykonawcy]
      summary: Rejestracja Wykonawcy z poziomu portalu
      description: >-
        Metoda będzie dodawała do Modułu Tożsamości dane odnośnie Wykonawcy
        które zostały wprowadzone w ramach rejestracji podmiotu.
      operationId: RejestrujWykonawcePrzezPortal
      parameters:
        - in: body
          name: daneRejestracji
          description: Dane Wykonawcy którego należy zarejestrować w systemie
          required: true
          schema:
            $ref: '#/definitions/RejestrujWykonawcePrzezPortalRequest'
      responses:
        '201':
          description: Wykonawca został dodany
          schema:
            $ref: '#/definitions/RejestrujWykonawcePrzezPortalResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niepoprawne dane autoryzacyjne (apiKey)
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '405':
          description: Błęd walidacji danych wyjściowych
          schema:
            $ref: '#/definitions/Blad'
  '/wykonawcy/{idWykonawcy}':
    parameters:
      - $ref: '#/parameters/IdWykonawcy'
    get:
      tags: [ Wykonawcy ]
      summary: Pobranie danych Wykonawcy na podstawie przekazanego id
      description: Metoda służy do pobrania danych Wykonawcy
      operationId: PobierzWykonawce
      responses:
        '200':
          description: Dane Wykonawcy
          schema:
            $ref: '#/definitions/PobierzWykonawceResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Nie znaleziono danych Wykonawcy dla podanego identyfikatora
          schema:
            $ref: '#/definitions/Blad'
    put:
      tags: [Wykonawcy]
      summary: Uaktualnij dane Wykonawcy
      description: Metoda będzie umożliwiała zaktualizowanie danych
      operationId: UaktualnijWykonawce
      parameters:
        - in: body
          name: aktualizacja
          description: Dane wykonawcy które należy zaktualizować
          required: true
          schema:
            $ref: '#/definitions/UaktualnijWykonawceRequest'
      responses:
        '200':
          description: Poprawne uaktualnienie Wykonawcy
          schema:
            $ref: '#/definitions/UaktualnijWykonawceResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Nie znaleziono danych Wykonawcy dla podanego identyfikatora
          schema:
            $ref: '#/definitions/Blad'
        '405':
          description: Błąd walidacji danych
          schema:
            $ref: '#/definitions/Blad'
  '/portal/zamawiajacy':
    post:
      tags: [Zamawiający]
      summary: Rejestracja Zamawiającego z poziomu Portalu
      description: >-
        Metoda będzie dodawała do Modułu Tożsamości dane Zamawiającego,
        które zostały wprowadzone w ramach rejestracji Podmiotu.
      operationId: RejestrujZamawiajacegoPrzezPortal
      parameters:
        - in: body
          name: daneRejestracji
          description: Dane Zamawiającego, które należy zarejestrować w systemie
          required: true
          schema:
            $ref: '#/definitions/RejestrujZamawiajacegoPrzezPortalRequest'
      responses:
        '201':
          description: Wykonawca został dodany
          schema:
            $ref: '#/definitions/RejestrujZamawiajacegoPrzezPortalResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
  '/zamawiajacy/{idZamawiajacego}':
    parameters:
      - $ref: '#/parameters/IdZamawiajacego'
    get:
      tags: [Zamawiający]
      summary: Pobranie danych Zamawiającego na podstawie przekazanego id
      description: Metoda służy do pobrania danych Zamawiającego
      operationId: PobierzZamawiajacego
      responses:
        '200':
          description: Dane Zamawiającego
          schema:
            $ref: '#/definitions/PobierzZamawiajacegoResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Nie znaleziono Zamawiającego
          schema:
            $ref: '#/definitions/Blad'
    put:
      tags: [Zamawiający]
      summary: Uaktualnij dane Zamawiajacego
      description: Metoda będzie umożliwiała zaktualizowanie dancych Zamawiającego
      operationId: UaktualnijDanychZamawiajacego
      parameters:
        - in: body
          name: aktualizacja
          description: Dane Zamawiającego które należy uaktualnić w systemie
          required: true
          schema:
            $ref: '#/definitions/UaktualnijDanychZamawiajacegoRequest'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/UaktualnijDanychZamawiajacegoResponse'
        '400':
          description: Niepoprawne żądanie
          schema:
            $ref: '#/definitions/Blad'
        '401':
          description: Niezalogowany
          schema:
            $ref: '#/definitions/Blad'
        '403':
          description: Brak uprawnień
          schema:
            $ref: '#/definitions/Blad'
        '404':
          description: Nie znaleziono Zamawiającego
          schema:
            $ref: '#/definitions/Blad'
        '405':
          description: Błąd walidacji danych
          schema:
            $ref: '#/definitions/Blad'
parameters:
  IdWykonawcy:
    in: path
    name: idWykonawcy
    type: string
    description: Id które zostanie użyte do pobrania danych Wykonawcy
    required: true
  IdZamawiajacego:
    in: path
    name: idZamawiajacego
    type: string
    format: uuid
    description: Id które zostanie użyte do pobrania danych Zamawiajacego
    required: true
definitions:
  RejestrujWykonawcePrzezPortalRequest:
    description: 'Dane potrzebne do rejestrowania Wykonawcy przez Portale e-Usług. Musi być poprawny JWT Token, aby poprawnie zarejestrować Wykonawcę'
    type: object
    properties:
      danePodmiotu:
        $ref: '#/definitions/WpisaneDanePodmiotu'
      czyMalySredniPrzedsiebiorca:
        description: Informacja czy Wykonawca jest małym/średnim przedsiębiorcą
        type: boolean
      czyZagranicznyWykonawca:
        description: Informacja czy Wykonawca jest z zagranicy
      kodyPKD:
        $ref: '#/definitions/KodPKD'
      daneSupervisora:
        $ref: '#/definitions/DaneSupervisora'
    required:
      - danePodmiotu
      - czyMalySredniPrzedsiebiorca
      - czyZagranicznyWykonawca
      - daneSupervisora
  DaneSupervisora:
    type: object
    description: Dane pierwszego supervisora
    properties:
      login:
        type: string
      haslo:
        description: Hash hasła, w formie SHA-256
        type: string
      imie:
        type: string
      nazwisko:
        type: string
      email:
        type: string
      role:
        description: role posiadane przez Użytkownika
        type: array
        items:
          $ref: '#/definitions/Rola'
    required:
      - imie
      - nazwisko
      - login
      - haslo
      - email
      - role
    example:
      login: testowyLogin
      imie: Jan
      nazwisko: Kowalski
      haslo: testoweHaslo123!@#
      email: jan.kowalski@gov.test.pl
  Rola:
    description: Rola Użytkownika w systemie
    type: object
    properties:
      nazwa:
        description: Nazwa roli Użytkownika która posiada
        type: string
      links:
        $ref: '#/definitions/Links'
    example:
      nazwa: Użytkownik
      links:
        - rel: PobierzSzczegolyRoli
          href: /rola/a1134e27-494c-49c9-955a-55ac5639a2a0
          action: GET
  RejestrujWykonawcePrzezPortalResponse:
    description: Wynik rejestracji Wykonawcy w systemie
    type: object
    properties:
      links:
        $ref: '#/definitions/Links'
    example:
      links:
        - rel: PobierzWykonawceZalogowanego
          href: /wykonawca/e846322b-2aa4-4481-ac1a-e9af9bd82688
          action: GET
  PobierzWykonawceResponse:
    description: Dane Wykonawcy oraz Użytkownika
    type: object
    properties:
      danePodmiotu:
        $ref: '#/definitions/Wykonawca'
  RejestrujZamawiajacegoPrzezPortalRequest:
    type: object
    description: 'Dane służące do rejestracji nowego podmiotu będącego Zamawiającym poprzez Portale e-Usług (przypisanie do Użytkownika o podanym JWT Tokenie)'
    properties:
      danePodmiotu:
        $ref: '#/definitions/WpisaneDanePodmiotu'
      rodzajZamawiajacego:
        $ref: '#/definitions/RodzajZamawiajacego'
      rodzajInstytucjiZamawiajacego:
        $ref: '#/definitions/RodzajInstytucjiZamawiajacego'
      daneSupervisora:
        $ref: '#/definitions/DaneSupervisora'
    required:
      - danePodmiotu
      - rodzajZamawiajacego
      - daneSupervisora
  RejestrujZamawiajacegoPrzezPortalResponse:
    description: Odnośniki do zarejestrowanego Zamawiającego
    type: object
    properties:
      links:
        $ref: '#/definitions/Links'
    example:
      links:
        - rel: PobierzZamawiajacegoZalogowanego
          href: /zamawiajacy/e846322b-2aa4-4481-ac1a-e9af9bd82688
          action: GET
  UaktualnijWykonawceRequest:
    type: object
    description: >-
      Zestaw danych pozwalających na uaktualnienie danych Wykonawcy. Pozwala na
      uaktualnienie danych opisujących Wykonawcę, danych podmiotów, informacji o tym
      czy mały/średni Przedsiebiorca, czy Wykonawca jest z zagraniczny
    properties:
      idWykonawcy:
        description: Identyfikator wykonawcy który będzie edytowany
        type: string
        format: uuid
        example: e63bf835-224a-4b3b-a564-160640911f0a
      danePodmiotu:
        $ref: '#/definitions/WpisaneDanePodmiotu'
      czyMalySredniPrzedsiebiorca:
        description: Informacja czy wykonawca jest małym/średnim przedsiębiorcą
        type: boolean
      czyZagranicznyWykonawca:
        description: Informacja czy wykonawca jest z zagranicy
      kodyPKD:
        $ref: '#/definitions/KodPKD'
    required:
      - idWykonawcy
  UaktualnijWykonawceResponse:
    description: Wynik do zaktualizowania Wykonawcy
    type: object
    properties:
      links:
        $ref: '#/definitions/Links'
    example:
      links:
        - rel: PobierzWykonawceZalogowanego
          href: /wykonawcy/e846322b-2aa4-4481-ac1a-e9af9bd82688
          action: GET
  UaktualnijDanychZamawiajacegoRequest:
    description: >-
      Zestaw danych pozwalających na uaktualnienie danych Zamawiającego. Pozwala na
      uaktualnienie danych opisujących Zamawiającego, danych podmiotów, rodzaju Zamawiającego, rodzaj Zamawiającego
    type: object
    properties:
      idZamawiajacego:
        type: string
        description: >-
          identyfikator zamawiającego konieczny aby jednoznaczenie
          zidentyfikować Zamawiającego do aktualizacji danych
        format: uuid
      danePodmiotu:
        $ref: '#/definitions/WpisaneDanePodmiotu'
      rodzajZamawiajacego:
        $ref: '#/definitions/RodzajZamawiajacego'
      rodzajInstytucjiZamawiajacego:
        $ref: '#/definitions/RodzajInstytucjiZamawiajacego'
    required:
      - idZamawiajacego
  UaktualnijDanychZamawiajacegoResponse:
    description: >-
      Odnośniki do zaktualizowanego Zamawiającego
    type: object
    properties:
      links:
        $ref: '#/definitions/Links'
    example:
      links:
        - rel: PobierzZamawiajacegoZalogowanego
          href: /zamawiajacy/e846322b-2aa4-4481-ac1a-e9af9bd82688
          action: GET
  PobierzZamawiajacegoResponse:
    type: object
    description: Informację na temat Zamawiającego, Podmiotu oraz Użytkownika, do którego ten zamawiający jest przypisany
    properties:
      zamawiajacy:
        $ref: '#/definitions/Zamawiajacy'
  WpisaneDanePodmiotu:
    description: Dane służące do rejestracji Podmiotu
    type: object
    properties:
      nazwa:
        type: string
      identyfikatorKrajowy:
        $ref: '#/definitions/IdentyfikatorKrajowy'
      daneTeleadresowe:
        $ref: '#/definitions/DaneTeleadresowe'
  DanePodmiotu:
    description: Dane Podmiotu
    type: object
    properties:
      idPodmiotu:
        type: string
        format: uuid
        example: e846322b-2aa4-4481-ac1a-e9af9bd82688
      nazwa:
        type: string
        example: 'Tesowa nazwa'
      identyfikatorKrajowy:
        $ref: '#/definitions/IdentyfikatorKrajowy'
      daneTeleadresowe:
        $ref: '#/definitions/DaneTeleadresowe'
      stan:
        type: string
        enum:
          - potwierdzona wersja danych Podmiotu
          - wstępnie zarejestrowany
          - nipotwierdzona wersja danych Podmiotu
        example:
          potwierdzona wersja danych Podmiotu
    required:
      - nazwa
      - identyfikatorKrajowy
      - adres
      - stan
  DaneTeleadresowe:
    description: Dane teleadresowe
    type: object
    properties:
      adresy:
        description: Adresy Podmiotu
        type: array
        items:
          $ref: '#/definitions/Adres'
      daneKontaktowe:
        type: object
        properties:
          typ:
            type: string
            enum:
              - adres e-mail
              - numer telefon
              - numer fax
              - adres URL
          wartosc:
            type: string
    example:
      adresy:
        - kodPocztowy: 00-000
          kraj: Polska
          miejscowosc: TestowaMiejscowosc
          numerBudynku: 1a
          numerLokalu: 1a
          ulica: Testowa
          wojewodztwo: Testowe
      daneKontatkowe:
        - typ: adres e-mail
          wartosc: testowy.email@gov.test.pl
  Adres:
    description: obiekt zawierający dane adresu
    type: object
    properties:
      kodPocztowy:
        type: string
      kraj:
        type: string
      miejscowosc:
        type: string
      numerBudynku:
        type: string
      numerLokalu:
        type: string
      typAdresu:
        description: typ adresu
        type: string
        enum:
          - Adres siedziby
          - Adres korespondencyjny
      ulica:
        type: string
      wojewodztwo:
        type: string
    example:
      kodPocztowy: 00-000
      kraj: Polska
      miejscowosc: TestowaMiejscowosc
      numerBudynku: 1a
      numerLokalu: 1a
      typAdresu: Adres siedziby
      ulica: Testowa
      wojewodztwo: Testowe
  IdentyfikatorKrajowy:
    description: Opis typu identyfikatora występującego dla danego kraju
    properties:
      rodzaj:
        description: rodzaj identyfikatora - krajowy, zagraniczny
        type: string
        enum:
          - Krajowy
          - Zagraniczny
      typ:
        description: typ identyfikatora krajowego
        type: string
        enum:
          - REGON
          - PESEL
          - NIP
          - Inny
      identyfikator:
        description: identyfikator krajowy
        type: string
      kodKraju:
        description: Kod kraju
        type: string
      opis:
        description: Opis identyfikatora, jeżeli wybrano w typie inny
        type: string
    required:
        - rodzaj
        - typ
        - identyfikator
    example:
      rodzaj: Krajowy
      type: REGON
      identyfikator: '000-00-00'
  RodzajZamawiajacego:
    description: rodzaj Zamawiającego
    type: object
    properties:
      rodzaj:
        type: string
        enum:
          - zamawiający udzielający zamówień
          - zamawiający udzielający zamówień sektorowych
          - podmiot prawa publicznego
          - jednostki organizacyjne administracji samorządowej
          - administracja samorządowa
          - administracja rządowa centralna
          - administracja rządowa terenowa
          - inny
      rodzajOpis:
        description: W przypadku wybrania opcji inne należy uzupelnić to pole
        type: string
    required:
      - rodzaj
    example:
      rodzaj: zamawiający udzielający zamówień
  RodzajInstytucjiZamawiajacego:
    description: Rodzaj instytucji Zamawiającego
    type: object
    properties:
      rodzaj:
        type: string
        enum:
          - Podmiot prawa publicznego.
          - Organ władzy regionalnej lub lokalnej
          - Ministerstwo lub inny organ krajowy lub federalny, w tym jednostki regionalne i lokalne
          - Instytucja/agencja europejska lub organizacja międzynarodowa
          - Agencja/urząd regiolany lub lokalny
          - Agencja/urząd karjowy lub federalny
          - Inny rodzaj.
      rodzajOpis:
        description: W przypadku wybrania opcji inne należy uzupelnić to pole
        type: string
    required:
      - rodzaj
    example:
      rodzaj: Ministerstwo lub inny organ krajowy lub federalny, w tym jednostki regionalne i lokalne
  KodPKD:
    description: zestaw kodów PKD
    type: object
    properties:
      glownyKod:
        type: string
      dodatkoweKody:
        type: array
        items:
          type: string
    required:
      - glownyKod
    example:
      glownyKod: '00.00'
      dodatkoweKody:
        - '99.99'
        - '98.98'
        - '97.97'
  Wykonawca:
    description: Dane wykonawcy dostępnego w systemie
    type: object
    properties:
      idWykonawcy:
        description: Identyfikator wykonawcy
        type: string
        format: uuid
        example: 118afdf3-9bc7-429b-a492-d500e2ee0517
      danePodmiotu:
        $ref: '#/definitions/DanePodmiotu'
      czyZagranicznyWykonawca:
        description: Informacja czy wykonawca jest z zagranicy
        type: boolean
      kodyPKD:
        $ref: '#/definitions/KodPKD'
      czyMalySredniPrzedsiebiorca:
        description: Informacja czy przedsiebierstwo jest mała firmą
        type: boolean  
  Zamawiajacy:
    description: Dane Zamawiającego dostępne w systemie
    type: object
    properties:
      idZamawiajacego:
        type: string
        description: identyfikator zamawiajacego
        format: uuid
      rodzajZamawiajacego:
        $ref: '#/definitions/RodzajZamawiajacego'
      danePodmiotu:
        $ref: '#/definitions/DanePodmiotu'
  Blad:
    description: Błąd
    type: object
    required:
      - blad
    properties:
      blad:
        type: object
        required:
          - id
          - podsystem
          - kod
          - opis
          - czas
        properties:
          id:
            description: Unikalny identyfikator błędu
            type: string
            format: uuid
          podsystem:
            description: ID modułu Platformy, w ramach którego wystąpił błąd
            type: string
          kod:
            description: Kod błędu
            type: string
          opis:
            description: Opis błędu
            type: string
          czas:
            description: Znacznik czasu wystąpienia błędu
            type: string
            format: date-time
    example:
      blad:
        id: e63bf835-224a-4b3b-a564-160640911f0a
        podsystem: MT
        kod: 123
        opis: Szczegółowy opis błędu
        czas: '2018-04-05T11:51:20.123'
  Links:
    description: Odnośniki do zasobów
    type: array
    items:
      description: Odnośnik
      type: object
      required:
        - rel
        - action
        - href
      properties:
        rel:
          description: Nazwa odnośnika do zasobu
          type: string
        action:
          description: Metoda HTTP
          type: string
          enum:
            - GET
            - POST
            - PUT
            - DELETE
        href:
          description: Adres zasobu
          type: string
