UppdateraHSACache - Bakgrund, arkitektur och implementation

Bakgrund

NTjP drar nytta av filen HSA-units som hämtas från HSA. Denna nyttjas bland annat för det som kallas Trädklättring. Idag finns det en rutin för att uppdatera denna fil manuellt när det beställs. Detta skapar ibland incidenter vi saknar uppdaterad HSA information i plattformen.
Vi behöver skapa en automatiserad funktion för denna inläsning.

Arkitekturella krav

  • Funktionen ska 1 gång per dygn hämta filen.
  • Det ska finnas en logg på när datum och tid när filen lästes in samt vilket datum filen är skapad (hos HSA)
  • Filen behöver valideras innan inläsning. T.ex jämföra deltat mellan tidigare fil och ny fil.
  • Om något går fel vid inläsning så behöver det gå information till servicedesk
  • Ha en funktion för att läsa in en tidigare HSAfil om något skulle gå fel med den nya.

Implementation

Skriptets funktionalitet

Skriptet hämtar en zip-fil via HSAs WS, packar upp den, validerar,  byter symlink till ny hsa fil och gör en reset av VP:s HSA cache.

Om något går fel vid inläsningen av skriptet skickas mail med information till servicedesk.

Det finns också möjlighet att köra skriptet med en parameter med namnet på filen som ska läsas in. Den kommer då endast byta symlink och göra en reset av VP:s cache, dvs.ingen validering kommer göras. 


Bild som beskriver processen:



XSD-shema för validering hsa-filen.


<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:tns="urn:riv:hsa:HsaWsResponder:3"
            xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
            targetNamespace="urn:riv:hsa:HsaWsResponder:3" elementFormDefault="qualified">
    <xsd:element name="FileGetHsaUnitsResponse" type="tns:ListGetHsaUnitsResponseType"/>

    <xsd:complexType name="ListGetHsaUnitsResponseType">
        <xsd:sequence>
            <xsd:element name="startDate" type="xsd:dateTime"/>
            <xsd:element name="endDate" type="xsd:dateTime"/>
            <xsd:element name="hsaUnits">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="hsaUnit" type="tns:ListHsaUnitType" minOccurs="1" maxOccurs="unbounded" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ListHsaUnitType">
        <xsd:sequence>
            <xsd:element name="hsaIdentity" type="xsd:string" minOccurs="0" />
            <xsd:element name="DN" type="xsd:string" />
            <xsd:element name="orgNo" type="xsd:string" minOccurs="0"/>
            <xsd:element name="name" type="xsd:string" minOccurs="0"/>
            <xsd:element name="publicName" type="xsd:string" minOccurs="0" />
            <xsd:element name="isHsaHealthCareProvider" type="xsd:boolean" minOccurs="0" />
            <xsd:element name="isHsaHealthCareUnit" type="xsd:boolean" minOccurs="0" />
            <xsd:element name="hsaResponsibleHealthCareProvider" type="xsd:string" minOccurs="0"/>
            <xsd:element name="healthCareProviderIsArchived" type="xsd:boolean" minOccurs="0" />
            <xsd:element name="healthCareUnitIsArchived" type="xsd:boolean" minOccurs="0" />
            <xsd:element name="unitIsArchived" type="xsd:boolean" minOccurs="0" />
            <xsd:element name="hsaHealthCareUnitMembers" minOccurs="0" >
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="hsaHealthCareUnitMember" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="startDate" type="xsd:dateTime" minOccurs="0" />
            <xsd:element name="endDate" type="xsd:dateTime" minOccurs="0" />
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>