PM2: andmete saatmise teenus

Mustri tüüp: primitiiv
Peamine kasusaaja:
inimene, automatiseeritud süsteem
Eesmärk
: andmete saatmine
Allikas: teadaolev praktika

Teenuste arv
: 1

Abstract

PM2: Data push service is one of the two main primitives used for developing X-road services. Its main purpose is to allow the service consumer to send data to the service provider. A single service will be developed where the service input contains the data to be sent and the output contains conformation of receiving the sent data.

In the context of this pattern:

  • The service producer is the information system that needs the data;
  • The service consumer is the information system that has the needed data.

Sissejuhatus

Muster kirjeldab andmete üle X-tee saatmist. Tegemist on üldise mustriga, mis sobib mitmete erinevate eesmärkide saavutamiseks (andmete valideerimine, avalduste esitamine, dokumentide saatmine jne).

Andmete saatmise eesmärgil luuakse üks X-tee teenus, mille korral eristame kahte poolt:

  • andmeid omav infosüsteem:
    • teenuse tarbija;
    • infosüsteem, kus toimub andmete kogumine ja muutmine;
  • andmeid vajav infosüsteem:
    • teenuse osutaja;
    • infosüsteem, mis kasutab andmeid omava infosüsteemi andmeid oma äriprotsessis.

Loodava teenuse sisendiks on saadetavad andmed ja väljundiks kviteering (andmete vastuvõtmise kinnitus).

Probleem

Käesolev muster sobib kasutamiseks olukorras, kus on vajalik lahendada andmete vahetus sissejuhatuses nimetatud poolte vahel ning:

  • andmeid omava infosüsteemi käideldavus on tagatud ainult andmete saatmise hetkel;
  • andmeid vajava infosüsteemi käideldavus on tagatud alati kui keegi soovib andmeid saata;
  • andmeid omaval infosüsteemil peab olema kontroll selle üle, millal andmeid saadetakse;
  • saadetud andmete ajakohasena hoidmise eest vastutab andmeid omav infosüsteem.

Lahendus

Andmeid vajavas infosüsteemis:

  • kirjeldatakse X-tee teenus, mille sisendiks on saadetavad andmed ja väljundiks kviteering;
  • arendatakse teenuse sisendi valideerimine ja salvestamine;
  • vajadusel arendatakse teenuse sisendi vastuvõtmisele järgnev äriloogika;
  • arendatakse teenuse väljundi (kviteeringu) koostamine;
  • määratakse infosüsteemid, mis võivad teenust kasutada.

Andmeid omavas infosüsteemis:

  • arendatakse saadetavate andmete kogumine;
  • arendatakse saadetavate andmete pärimine andmebaasist;
  • arendatakse teenuse sisendi koostamine;
  • arendatakse andmeid vajava infosüsteemi poolt osutatava X-tee teenuse tarbimine.

Teenuste kirjeldus

Teenuse sisendiks on teenuse osutajale saadetavad andmed (näiteks aadressiandmete täiendus, analüüsi tulemused, patsiendile väljakirjutatud retsept jne).

Teenuse väljundiks on üldjuhul andmete vastuvõtmise kinnitus (kviteering). Kui teenuse väljund sisaldab ka äriinformatsiooni, siis võib väljund olla keerukam kui teenuse sisend.

Täpne sisendi ja väljundi struktuur oleneb konkreetse äriprotsessi vajadustest. X-tee protokoll ei sea selles osas omalt poolt piiranguid.

Järgnevalt on toodud andmete pärimise teenuse WSDL näide.

<wsdl:definitions .... >
<wsdl:types>
<schema ....>
<complexType name="RequestType">
<!-- Complex request structure, hierarchy of elements -->
<sequence>
<element name=”element1” type=”String”/>
<element name=”element2” type=”int”/>
<element name=”element3” type=”int”/>
<element name=”element4” type=”anotherComplexType”/>
<element name=”element5” type=”String”/>
....
</sequence>
</complexType>

<complexType name="ResponseType">
<!-- Simple response structure containing only error messages -->
<sequence>
<element name=”errorCode” type=”ErrorCodeType”/>
</sequence>
</complexType>

<complexType name=“ErrorCodeType”>
<!-- Definition of an error message -->
<element name=”Type” type=”String”/>
<element name=”Code” type=”String”/>
<element name=”Element” type=”String”/>
<elemene name=”Notice” type=”String”/>
</complexType>
....
</schema>
</wsdl:types>

<wsdl:message name="RequestMessage">
<wsdl:part name="keha" type="RequestType"/>
</wsdl:message>

<wsdl:message name="ResponseMessage">
<wsdl:part name="keha" type="ResponseType"/>
</wsdl:message>
....

<wsdl:portType .... >
<wsdl:operation name="Push service">
<wsdl:input message="RequestMessage"/>
<wsdl:output message="ResponseMessage"/>
</wsdl:operation>
....
</wsdl:portType >
</wsdl:definitions>

Mustri käitumine

Järgneval joonisel esitatakse andmeid omava infosüsteemi (teenuse tarbija) ja andmeid vajava infosüsteemi (teenuse osutaja) vaheline suhtlus.


Joonis 3.2 Mustri PM2 järgnevusdiagramm.

Infosüsteemi spetsiifilise äriloogika esitamiseks on viidatud järgnevusdiagrammile "Infosüsteemi äriprotsess", mille sisu ei ole toodud kuna see sõltub konkreetse infosüsteemi äriprotsessist.

Andmeid omava infosüsteemi poolel on eristatud äriloogika ja teenusloogika kihid.

  • Äriloogika kiht:
    • täidab infosüsteemi spetsiifilist äriprotsessi;
    • teostab andmete kogumise;
    • valib kogutud admetest saatmisele kuuluvad andmed;
    • edastab saatmisele kuuluvad andmed teenusloogika kihile.
  • Teenusloogika kiht:
    • koostab teenuse sisendi vastavalt äriloogika kihist saadud andmetele;
    • tarbib andmeid vajava infosüsteemi poolt osutatavat teenust;
    • võtab vastu tarbitud teenuse vastuse;
    • tõlgendab vastuses sisalduvad andmed äriloogika kihile sobivaks;
    • teavitab äriloogika kihti teenuse kasutuse tulemustest.

Andmeid vajava infosüsteemi poolel on eristatud äriloogika ja teenusloogika kihid.

  • Äriloogika kiht:
    • kasutatakse juhul, kui teenuse vastuse koostamiseks on vaja sooritada mingi äriprotsess.
  • Teenusloogika kiht:
    • võtab vastu teenuse sisendi;
    • valideerib teenuse sisendina saadetud andmed;
    • salvestab saadetud andmed;
    • võib teavitada andmeid vajava infosüsteemi äriloogika kihti ja oodata äriloogikakihilt vastust;
    • koostab andmete vastuvõtmise kviteeringut (ja vajadusel ka muud infot) sisaldava vastuse.

Lisakaalutlused

Käesoleva mustri korral on oluline silmas pidada järgnevat:

  • teenuse sisendi ja väljundi struktuur peaks keskenduma andmetele, mitte andmete kogumise või edasise kasutamise äriloogikale;
  • teenuse sisendis ja väljundis sisalduvad andmeväljad peaksid moodustama omavahel loogiliselt seotud terviku;
  • teenuse sisendi struktuuri määramisel tuleb arvestada, kas on kirjed saadetakse ühe kaupa või on lubatud mitme kirje korraga saatmine;
  • andmeid vajav süsteem ei pea teadma millal andmed tekivad, kuidas andmeid kogutakse ja kuidas andmeid töödeldakse;
  • muster sobib hästi olukorras, kui andmeid omavaid infosüsteeme on minu ja sama struktuuriga andmeid saadetakse ühele andmeid vajavale infosüsteemile.

Näide

Näitena on toodud Ravikindlustuse andmekogu teenus kirst.tvl_saatmine.v1. Teenust kasutatakse töövõimetuslehe ravikindlustuse andmekogule edastamiseks. Teenuse sisendiks on ühe töövõimetuslehe kohta käivad andmed ja teenuse väljundiks on võimalikud töövõimetuslehel olnud vead.

Teenuse sisend:

keha
|-> request
|-> tvlid
|-> item (type: tvlArstiltType, description: “Töövõimetusleht”)
|-> tvlNumber (type: String, description: “Dokumendi number”)
|-> arst (type: arstType, description: “Lehe väljastaja andmed”)
| |-> arsti_kood (type: arstiKoodType, description: “Arsti registreerimistõendi number”)
| | |-> (base: String, maxLength: 6, minLength: 6, pattern: "([DdNn]\d{5})|([Mm]\d{4,5})")
| |-> perenimi (type:String, description: “Perenimi”)
| |-> eesnimi (type:String, description: “Eesnimi”)
| |-> telefon (type: telefonType, description: “Telefon”)
| | |-> (base: String, maxLength: 12, pattern: ""\+?\d{5,11}"")
|-> arstiEriala (type: arstiErialaType, description: “Eriala kood”)
| |-> (base: String, maxLength: 4, minLength: 4, pattern: "[eE][nN]\d{3}")
|-> tto (type: jurIsikLihtType, description: “Tervishoiuteenuse osutaja”)
| |->....
|-> tvlLiik (type: tvlLiikType)
| |->....
|-> tvPohjus (type: tvPohjusType)
| |->....
|-> esmaseTvlAlgus (type: Date, description: “Esmase lehe algus”)
|-> tvPerioodid (description: “Töövabastuse periood(id)”)
| |-> item (type: tvPerioodType)
| |->....
|-> tvlIsik (type: isikLihtType, description: “Isiku andmed”)
| |->....
|-> hooldatavIsik (type: isikLihtType, description: “Hooldatav isik”)
| |->....
|-> diagnoos (type: String, description: “Diagnoos”)
|-> eiOlePysivaTVoimetusePohjustaja (type: bool, description: “Haigus või vigastus ei ole töövõimetuspensioni määramise põhjuseks”)
|-> synnituseAeg (type: Date, description: “Eeldatav sünnitamiskuupäev”)
|-> raviEiramine (type: tvlRaviEiramineTyp, description: “Ravi eiramine”)
| |->....
|-> leheLopetamiseOtsus (type: tvlLopetamiseOtsusType, description: “TVL lõpetamise otsus”)
| |->....
|-> AEKOtsus (type: tvlAekOtsusType, description: “SKA otsus”)
| |->....

Teenuse väljund:

keha
|-> response (type: tvl_saatmineResponseType)
|-> faultCode (type: faultCode)
| |-> (base: String, description: “Kood”)
|-> faultString (type: faultString)
| |-> (base: String, description: “Teade”)
|-> tvlid
|-> item (type: tvlArstiltVigadegaType)
|->tvl (type: tvlArstiltType, description: “same information about the doctor that was in the request”)
| |-> ....
|->vead (type: veadLoeteluType)
|-> item (type: veaElementType)
|-> tyyp (type: String, description: “Teate tüüp”)
|-> kood (type: String, description: “Teate kood”)
|-> element (type: String, description: “Teate element”)
|-> teade (type: String, description: “Teade”)



Viimati muudetud: esmaspäev, 24. oktoober 2016, 13.22