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