npm package: @lsi-ci-prs/wyliczenia
Description: Hosting kodu lsi2021 na rzecz wyliczeń
Author: CI-PRS UMWSL
Latest version: 0.1.13

# @lsi/wyliczenia

## Rozwiązywany problem

Poszczególne mikroserwisy czasami odwołują się do tej samej logiki, w tym przypadku aplikacja backendowa weryfikuje wyliczenia przesłane przez frontend, co wiąże się z wykorzystaniem tych samych algorytmów i argumentów. Powstają problemy związane z zapewnieniem pełnej synchroniazacji funkcji i w konsekwencji zapewniania prawidłowych (przynajmniej tożsamych) wyników w każdym momencie. Problem jest poważniejszy, gdy obie aplikacje zaprogramowano w różnych językach, np frontend w javascript i backend w php. Rozwiązaniem może być dostarcznie odpowiednich metod wyliczeń w bibliotece instalowanej w aplikacjach wykorzystujących taką logoikę (niekoniecznie bezpośrednio - np. backend może wykorzystać dedykowane API).

## Działanie

Biblioteka zwraca instancje klasy odpowiadające wzorom dla instytucji IOK (np. `RR_PT01` ) zawierające metody. Metoda stanowi taką funkcję klasy, która zwraca wynik wyliczenia w oparciu o swoisty algorytm i odpowiednio dostarczone argumenty. Taką metodę będziemy nazywać dalej `wyliczeniem`. Wyliczenie znane jest po stronie aplikacji WEB i aplikacji dostarczającej API, tzn. znane jest przeznaczenie i argmenty.
Przykładowa instancja: `rr_pt01`


## Przykład zastosowania

### ES6:

```jsx
import { rr_pt01 } from '@lsi-ci-prs/wyliczenia'
console.log(rr_pt01.addTwoNumbers(1, 5)) // output:  6
```

## Dostępne klasy i metody

### RR_PT01

| Metoda (resolver) | Argumenty wymagane | Argumenty                 | Opis                                             | Przykład                    | Endpoint                    |
| ----------------- | ------------------ | ------------------------- | ------------------------------------------------ | --------------------------- | --------------------------- |
| `dofinansowanie`  | tak                | kwota (number)            | wylicza dofinansowanie                           | rr_pt01.dofinansowanie(100) |                             |
| `wkladWlasny`     | tak                | kwota (number)            | wylicza wkład własny                             | rr_pt01.wkladWlasny(100)    |                             |
| `zadania`         | tak                | json dla strony 'zadania' | wylicza dofin.i wkład własny dla każdego zadania | rr_pt01.zadania(params)     | api/wyliczenia/pt01/zadania |

### FS_EFS01 - `fs_efs01`

| Metoda (resolver) | Argumenty wymagane | Argumenty                 | Opis                                                | Przykład                 |
| ----------------- | ------------------ | ------------------------- | --------------------------------------------------- | ------------------------ |
| `zadania`         | tak                | json dla strony 'zadania' | podsumowuje wydatki kwalifikowalne i dofinansowanie | fs_efs01.zadania(params) |

gdzie params =

```json
{
    "zadania": [
        {
            "opis": "opis zadania 1",
            "nazwa": "Zadanie1",
            "data_rozpoczecia": "2022-01-05",
            "data_zakonczenia": "2022-02-05",
            "wartosc_zadanie_razem": 13,
            "dofinansowanie_zadanie_razem": "11"
        },
        {
            "opis": "opis zadania 2",
            "nazwa": "Zadanie2",
            "data_rozpoczecia": "2021-04-04",
            "data_zakkonczenia": "2021-01-08",
            "wartosc_zadanie_razem": 2,
            "dofinansowanie_zadanie_razem": "8"
        },
        {
            "opis": "opis zadania 3",
            "nazwa": "Zadanie3",
            "data_rozpoczecia": "2021-01-02",
            "data_zakonczenia": "2021-01-08",
            "wartosc_zadanie_razem": 4,
            "dofinansowanie_zadanie_razem": "3"
        }
    ],
    "podsumowanie_zadan_kwal": 18,
    "podsumowanie_zadan_dof": 21
}
```

zwócony wynik (zwróć uwagę na podsumowania, są różne, ponieważ metoda dokonała własnych, prawidłowych wyliczeń):

```json
{
    "status": "success",
    "msg": "udało się uzyskać wynik",
    "result": {
        "zadania": [
            {
                "opis": "opis zadania 1",
                "nazwa": "Zadanie1",
                "data_rozpoczecia": "2022-01-05",
                "data_zakonczenia": "2022-02-05",
                "wartosc_zadanie_razem": 13,
                "dofinansowanie_zadanie_razem": "11"
            },
            {
                "opis": "opis zadania 2",
                "nazwa": "Zadanie2",
                "data_rozpoczecia": "2021-04-04",
                "data_zakkonczenia": "2021-01-08",
                "wartosc_zadanie_razem": 2,
                "dofinansowanie_zadanie_razem": "8"
            },
            {
                "opis": "opis zadania 3",
                "nazwa": "Zadanie3",
                "data_rozpoczecia": "2021-01-02",
                "data_zakonczenia": "2021-01-08",
                "wartosc_zadanie_razem": 4,
                "dofinansowanie_zadanie_razem": "3"
            }
        ],
        "podsumowanie_zadan_kwal": 19,
        "podsumowanie_zadan_dof": 22
    }
}
```

## Publikacja (wymagany deploy token)

Następuje wyłacznie z tego projektu. Paczki rezydują w repozytorium własnej instancji Gitlab, powiązane są (scope) z grupą `LSI`. W celu publickacji wykorzystano konfigurację poprzez plik `.npmrc` (root projektu):

```txt
@lsi:registry=https://gitlab-ci-prs.slaskie.pl/api/v4/packages/npm/
//gitlab-ci-prs.slaskie.pl/api/v4/packages/npm/:_authToken=${NPM registry LSI group token}
//gitlab-ci-prs.slaskie.pl/api/v4/projects/22/packages/npm/:_authToken=${NPM registry LSI group token}
```

Niezbędny jest również wpis w package.json:

```json
{
  "publishConfig": {
    "@lsi:registry": "https://gitlab-ci-prs.slaskie.pl/api/v4/projects/22/packages/npm/"
  }
}
```


Każda publikacja wymaga podniesienia wersji (package.json)

```bash
npm publish
```

## Instalacja (wymagany deploy token)

Projekt, w którym chcemy zainstalować paczkę z repozytorium własnej instancji Gitlab  powinien także zostać skonfigurowany, np poprzez plik `.npmrc`:
```txt
@lsi:registry=https://gitlab-ci-prs.slaskie.pl/api/v4/packages/npm/
//gitlab-ci-prs.slaskie.pl/api/v4/packages/npm/:_authToken=${NPM registry LSI group token}
```