# Raporttipalvelu
Raporttipalvelussa käytettävä englanninkielinen sanasto tallennettu kokonaisuudessaan [Confluenceen](https://support.atlassian.com/confluence-cloud/resources/). Täydennetään tarvittaessa.
## Autentikointi rajapintaa vastaan
Autentikoidaan JWT-tokenilla. Toimitetaan Header-tietona rajapintaan. Asiakassovellus käyttää Apollo Client v3 -kirjastoa ([apollo: authentication](https://www.apollographql.com/docs/react/networking/authentication/)).
GraphQL-rajapinnan palauttamaa dataa käytetään [Ant.design](https://ant.design/components/table/) ja [React Vis](https://uber.github.io/react-vis/) -kirjastoilla.
Tärkeimmät käyttötavat raporttidatalle
- [Ant Table](https://ant.design/components/table/)
- [Vis Radial Chart](https://uber.github.io/react-vis/examples/showcases/radial)
- [Vis Bar Series](http://uber.github.io/react-vis/examples/showcases/plots)
## Kutsut
### Kyselyjen kysely
Käyttäjä saa role ja visibility kontekstin mukaiset kyselyt.
Target kertoo, että kysely on kohdistettu joko ammattiosastoon, työpaikkaan vai työyksikköön. (LODGE|WORKPLACE)
**Query**
```
query Surveys(order: String) {
surveys(order: $order) {
id
title
target
}
}
```
**Response**
Vastaus käytetään [Select Option Group](https://ant.design/components/select/). Toteutaan ryhmittely vasta clientissa *typen* mukaan.
```
[
{
id: "1",
title: "Kyselyn otsikko",
target: LODGE
},
...
]
```
### Kyselyn tiedot kysely
- [React.usereducer](https://reactjs.org/docs/hooks-reference.html#usereducer) ?
- Työyksikköä koskeva vanha Työyksikkölomake siirretään osaksi Tietojenkeruuta.
- Työyksikkölomaketta koskevat tiedot pitää kuitenkin saada raporttina ulos.
**Query**
```
query Survey($id: ID!) {
survey(id: $id) {
..InfoSurveys
..LodgeSurve
..WorkplaceSurvey
}
}
```
**Query Fragments**
```
fragment InfoSurvey on Survey {
title
dateStart
dateEnd
target
method
diary
allowAnonymous
}
```
Lodge Fragment
```
fragment LodgeSurvey on Survey {
responders {
id
title
sector {
id
title
}
specificCatchmentArea {
id
title
}
workplace {
agreementSector {
id
title
}
}
}
}
```
Workspace Fragment
```
fragment WorkplaceSurvey on Survey {
responders {
id
title
activitysector {
id
title
}
agreementSector {
id
title
}
specificCatchmentAreas {
id
title
hospitalDistricts {
id
title
}
}
lodges {
id
title
sector {
id
title
}
}
}
}
```
WorkUnit Fragment
```
fragment WorkUnitSurvey on Survey {
responders {
id
title
officeHours
activityForm
workplaces {
id
title
activitysector {
id
title
}
agreementSector {
id
title
}
specificCatchmentAreas {
id
title
hospitalDistricts {
id
title
}
}
lodges {
id
title
sector
}
}
}
}
```
**Response**
Vastaus käytetään [Select](https://ant.design/components/select/) ja [TreeSelect](https://ant.design/components/tree-select/) komponenteilla.
target: (LODGE|WORKPLACE|WORKUNIT)
method: (WEBFORM|SMS)
sector: (PRIVATE|MUNICIPALITY|STATE)
Info Fragment
```
{
title: "Kyselyn nimi",
dateStart: "2020-12-17T15:43:02.829Z",
dateEnd: "2020-12-17T15:43:02.829Z",
target: WORKPLACE,
method: FORM,
diary: false,
allowAnonymous: false,
}
```
Lodge Fragment
```
[
{
id: 1234
title: "Riikan ammattiosasto"
sector: {
id: 1234
title: "yksityinen"
}
specificCatchmentArea {
id: 1234
title: "HYKS"
}
workplace {
id: 1234
title: "Kymenlaakso"
agreementSector {
id: 1234
title: "Muut yksityiset"
}
}
}
...
]
```
Workplace Fragment
```
[
{
id: 1234
title: "Attendo, Aurora palvelukoti, Inari"
activitysector {
id: 1234
title: "Yksityiset hoiva- ja asumispalvelut"
}
agreementSector {
id: 1234
title: "Muut yksityiset"
}
specificCatchmentAreas {
id: 1234
title: "TYKS"
hospitalDistricts {
id: 1234
title: "Varsinais-Suomi"
}
}
lodges {
id: 1234
title: "Riikan ammattiosasto"
sector: {
id: 1234
title: "yksityinen"
}
}
}
...
]
```
WorkUnit Fragment
```
[
{
id: 1234
title: "Laamannin hoivakoti"
officeHours: "Toimii ympäri vuorokauden (24/7)"
activityForm: "Päivystysvuodeosasto"
workplaces {
id: 1234
title: "Esperi Care"
activitysector {
id: 1234
title: "Yksityiset hoiva- ja asumispalvelut"
agreementSector {
id: 1234
title: "Muut yksityiset"
}
specificCatchmentAreas {
id: 1234
title: HYKS
hospitalDistricts {
id: 1234
title: "Satakunta"
}
}
lodges {
id: 1234
title: "Riikan ammattiosasto"
sector: {
id: 1234
title: "yksityinen"
}
}
}
}
...
]
```
### Vastausten kysely
**Query**
```
query Responses(
$lodges: [ID]
$workplaces: [ID]
$specificCatchmentAreas: [ID]
$sectors: [ID]
$activitysector: [ID]
$agreementSector: [ID]
$officeHours: [ID]
$activityForm: [ID]
$dates: [String]
) {
resonse(
lodges: $lodges
workplaces: $workplaces
specificCatchmentAreas: $specificCatchmentAreas
sectors: $sectors
activitysector: $activitysector
agreementSector: $agreementSector
officeHours: $officeHours
activityForm: $activityForm
dates: $dates
) {
...Question
}
}
```
**Query Fragments**
```
fragment Question on Response {
questions {
id
title
type
...QuestionResponses
}
}
```
```
fragment QuestionResponses on Response {
responses {
id
respondent {
id
title
}
response {
...QuestionTypeResponse
}
createdAt
}
}
```
```
fragment QuestionTypeResponse on Response { }
```
**Response**
Vastausta käytetään Ant.design: [Table](https://ant.design/components/table/).
```
[
{
id: "1",
title: "Kysymys",
type: "radio"
responses: [
{
id: "1234"
response: "Liang"
createdAt
respondent {
id: "1234"
title: "Riikan ammattiosasto"
}
}
...
]
},
...
]