---
# System prepended metadata

title: Raporttipalvelu

---

# 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"
      }
     }
     ...
   ]
  },
  ...
]