# # ITSV GmbH # CCDB - Command and Control Database # # FILE: dquerymfile_KFOPP003.txt # DESCRIPTION: DQUERY-Definition for CCDB-Query KFOPP003 (fka repKFOppPreAssess) # this query reports pre-Assessment Information before merging ZPV-Exported LE-Masterdata into KFOQSDB # @querytitle KFOPP-003: Vor-Auswertung ZPV-Behandlerauszug vs. KFOQSDB-Partner-Stammdaten @querydescription Berichtet über Unterschiede in KFO-Behandler-Stammdaten zwischen ZPV-Abzug und KFOQSDB-Snapshot @group KFOQSDBPARPREFILL @querytype tseq @sql_select select NOW() as REPORTTIME @compattlist SATZID,MAXFALLQST, KFO_VPNR, ZPV_VPNRS, ANZAHL_FAELLE, FEHLER_NICHT_ZPV, PROP_NICHT_ZPV, REP_NICHT_ZPV, KFO_PARTNERNAME, ZPV_PARTNERNAME, FEHLER_NAME, PROP_NAME, REP_NAME, KFO_STAAT, ZPV_STAATEN, FEHLER_STAAT, PROP_STAAT, REP_STAAT, KFO_BUNDESLAND, ZPV_BUNDESLAENDER, FEHLER_BUNDESLAND, PROP_BUNDESLAND, REP_BUNDESLAND, ZPV_ADRESSEN, ZPV_TITELVORNE, ZPV_VORNAME, ZPV_NACHNAME, ZPV_TITELHINTEN, ZPV_ORGANISATIONSNAME, FAELLE_PRO_QST ~query.tsteps # # <>: initialize # if (this.init_done) goto init_complete # # <>: initialize: setup reporting text flow # qexpression proc: { this.options.maxrecsteps = 1000000; this.compattlist = this.query.compattlist; this.reporttime = this.cdata.REPORTTIME; this.timestamp = aux.serialDateTime(this.cdata.REPORTTIME); this.compattribs = this.compattlist.split(","); for (let i=0; i>: change maximum GROUP_CONCAT result length for ZPV_ADDRESSEN # sql set group_concat_max_len = 16384 result_varname sgres post_qexpression this.ppush([this.phead("PARZPVPAS_GROUCONCATMAXSET"),"","",this.sgres]); # # <>: create view CCVKFOPARVSZPVSTO for KFO vs. ZPV without restriction to Bundesland # # NOTE: GROUP_CONCAT() does not include items which are NULL. Therefore ZPV_ADRESSEN includes an IFNULL() for gem.GEMEINDENAME, otherwise, Wien-Adressen would not show up # sql create or replace view CCVKFOPARVSZPVSTO as select SATZID, MAXFALLQST, dbp.ANZAHL_FAELLE as ANZAHL_FAELLE, dbp.VPNR as KFO_VPNR, IFNULL(GROUP_CONCAT(distinct lep.VPNR),'') as ZPV_VPNRS, (CASE WHEN (CASE WHEN lep.NACHNAME='' then lep.ORGANISATIONSNAME ELSE CONCAT((CASE WHEN lep.TITELVORNE!='' THEN CONCAT(lep.TITELVORNE,' ') ELSE '' END), lep.VORNAME,' ',lep.NACHNAME, (CASE WHEN lep.TITELHINTEN!='' THEN CONCAT(' ',lep.TITELHINTEN) ELSE '' END)) END)!=dbp.PARTNERNAME THEN 'X' ELSE '' END) as FEHLER_NAME, (CASE WHEN GROUP_CONCAT(distinct lep.BUNDESLANDKURZ)!=dbp.BUNDESLANDKURZ THEN 'X' ELSE '' END) as FEHLER_BUNDESLAND, (CASE WHEN lep.VPNR is null THEN 'X' ELSE '' END) as FEHLER_NICHT_ZPV, (CASE WHEN IFNULL(GROUP_CONCAT(distinct lep.STAAT_ISOA2),'')!=dbp.STAAT_ISOA2 THEN 'X' ELSE '' END) as FEHLER_STAAT, PROP_NICHT_ZPV, PROP_STAAT, PROP_BUNDESLAND, PROP_NAME, REP_NICHT_ZPV, REP_STAAT, REP_BUNDESLAND, REP_NAME, dbp.PARTNERNAME as KFO_PARTNERNAME, IFNULL(lep.TITELVORNE,'') as ZPV_TITELVORNE, IFNULL(lep.VORNAME,'') as ZPV_VORNAME, IFNULL(lep.NACHNAME,'') as ZPV_NACHNAME, IFNULL(lep.TITELHINTEN,'') as ZPV_TITELHINTEN, dbp.BUNDESLANDKURZ as KFO_BUNDESLAND, IFNULL(GROUP_CONCAT(distinct lep.BUNDESLANDKURZ),'') as ZPV_BUNDESLAENDER, IFNULL(dbp.STAAT_ISOA2,'') as KFO_STAAT, IFNULL(GROUP_CONCAT(distinct lep.STAAT_ISOA2),'') as ZPV_STAATEN, IFNULL((CASE WHEN IFNULL(lep.NACHNAME,'')='' THEN lep.ORGANISATIONSNAME ELSE CONCAT(lep.TITELVORNE,' ',lep.VORNAME,' ',lep.NACHNAME,' ',lep.TITELHINTEN) END),'') as ZPV_PARTNERNAME, /* GROUP_CONCAT(CONCAT('ADRN=',lep.ADRESSNUMMER,'/ADR=',lep.STAAT_ISOA2,'-',lep.PLZ,'-(',gem.GEMEINDENAME,')-',lep.STRASSE)) as ZPV_ADRESSEN, */ group_concat(concat(lep.ADRESSNUMMER,lep.STAAT_ISOA2,'-',lep.PLZ, '-(',IFNULL(gem.GEMEINDENAME,(CASE WHEN SUBSTR(lep.PLZ,1,1)='1' THEN 'Wien' ELSE '?Gemeinde?' END)),')-',lep.STRASSE)) as ZPV_ADRESSEN, IFNULL(GROUP_CONCAT(distinct lep.ORGANISATIONSNAME),'') as ZPV_ORGANISATIONSNAME, FAELLE_PRO_QST from CCKFODBPARTNER dbp left outer join CCKFOLEPARTNER lep on lep.VPNR=dbp.VPNR left outer join CCRWGEMEINDE gem on gem.GEMEINDECODE=lep.GEMEINDECODE group by dbp.SATZID, dbp.MAXFALLQST, dbp.VPNR, dbp.ANZAHL_FAELLE, dbp.PARTNERNAME, lep.VORNAME, lep.NACHNAME, lep.ORGANISATIONSNAME, lep.TITELVORNE, lep.TITELHINTEN, dbp.BUNDESLANDKURZ, dbp.STAAT_ISOA2, dbp.FAELLE_PRO_QST, PROP_NICHT_ZPV, PROP_STAAT, PROP_BUNDESLAND, PROP_NAME, REP_NICHT_ZPV, REP_STAAT, REP_BUNDESLAND, REP_NAME order by dbp.VPNR,lep.VPNR asc # # <>: drop old status of CCKFOPPPARZPVPAS # sql drop table if exists CCKFOPPPARZPVPAS result_varname cdres post_qexpression this.ppush([this.phead("PARZPVPAS_TABLE_DROPPED"),"","",this.cdres]); # # <>: make table CCKFOPPPARZPVPAS a materialized copy of CCVKFOPARVSZPVSTO # sql create table CCKFOPPPARZPVPAS as select * from CCVKFOPARVSZPVSTO result_varname ccres post_qexpression this.ppush([this.phead("PARZPVPAS_TABLE_CREATED"),"","",this.cdres]); # # <>: last initialization step # qexpression this.init_done = true; # # <>: initialization complete # init_complete: noop # # <>: deliver base numbers # sql select 'Anzahl Partner in KFOQSDB' as "Name", count(*) as "Wert" from CCKFODBPARTNER UNION select 'Anzahl Standort-Partner in ZPV' as "Name", count(*) as "Wert" from CCKFOLEPARTNER UNION select 'Anzahl Partner in ZPV, die (noch) nicht in KFOQSDB vorhanden sind' as "Name", count(distinct lep.LENR) as "Wert" from CCVKFOLEPARTNER lep left outer join CCKFODBPARTNER dbp on dbp.VPNR=lep.VPNR where dbp.VPNR is null result_varname ovres post_qexpression this.ovres.title = "Überblicks-Werte"; this.ovres.rows.collapsible = true; this.ovres.rows.collapsed = false; this.ppush({type: 'result', result: this.ovres }); # # <>: check present partners in CCKFODBPARTNER(KFOQSDB) against matching (by VPNR) Standort-Partner from CCKFOLEPARTNER(ZPV) # sql select @@compattlist@@ from CCVKFOPARVSZPVSTO result_varname mpares post_qexpression this.mpares.totalpartners = this.mpares.getRowCount(); let crow, nrow, nparts, mnpn, tv_matches, vn_matches, nn_matches, th_matches; let filtres = new aux.Result('dbresult'); filtres.addColumnNames(this.query.compattlist); filtres.setResultAttribute("tableclass","excelFilterTable"); let lastvpnr = "DiesIstSicherKeineVPNR"; let lastrow = -1; for (let ri=0; rimnpn) { /* at least 3 parts of KFOQSDB name parts match, KFOQSDB name has more parts, maybe similar enough, let user decide */ nrow.FEHLER_NAME = 'Q'; nrow.PROP_NAME = 'Z' } else { nrow.FEHLER_NAME = 'X'; nrow.PROP_NAME = 'V'; } } nrow.ZPV_TITELVORNE = crow.ZPV_TITELVORNE; nrow.ZPV_VORNAME = crow.ZPV_VORNAME; nrow.ZPV_NACHNAME = crow.ZPV_NACHNAME; nrow.ZPV_TITELHINTEN = crow.ZPV_TITELHINTEN; nrow.ZPV_ORGANISATIONSNAME = crow.ZPV_ORGANISATIONSNAME; nrow.ZPV_PARTNERNAME = crow.ZPV_PARTNERNAME; nrow.ZPV_ADRESSNUMMERN = crow.ZPV_ADRESSNUMMERN; nrow.ZPV_BUNDESLAENDER = crow.ZPV_BUNDESLAENDER; nrow.ZPV_PLZS = crow.ZPV_PLZS; nrow.ZPV_GEMEINDECODES = crow.ZPV_GEMEINDECODES; nrow.ZPV_STRASSEN = crow.ZPV_STRASSEN; nrow.FEHLER_BUNDESLAND = crow.FEHLER_BUNDESLAND; if (nrow.FEHLER_STAAT!='') { nrow.PROP_STAAT = "V"; } if (nrow.FEHLER_BUNDESLAND!='') { nrow.PROP_BUNDESLAND = "V"; } } else { /* the Partner in KFOQSDB has no corresponding entry delivered from ZPV */ nrow.ZPV_VPNRS = ""; nrow.FEHLER_NICHT_ZPV = crow.FEHLER_NICHT_ZPV; nrow.ZPV_TITELVORNE = ""; nrow.ZPV_VORNAME = ""; nrow.ZPV_NACHNAME = ""; nrow.ZPV_TITELHINTEN = ""; nrow.ZPV_ORGANISATIONSNAME = ""; nrow.ZPV_PARTNERNAME = ""; nrow.ZPV_ADRESSNUMMERN = ""; nrow.ZPV_BUNDESLAENDER = ""; nrow.ZPV_GEMEINDECODES = ""; nrow.ZPV_PLZS = ""; nrow.ZPV_STRASSEN = ""; nrow.FEHLER_BUNDESLAND = ""; nrow.FEHLER_NAME = ""; if (crow.ANZAHL_FAELLE>0) { nrow.PROP_NICHT_ZPV = "V"; } else { nrow.PROP_NICHT_ZPV = "L"; } } filtres.addRowObject(nrow); } filtres.setResultAttribute("title","Partner in KFOQSDB im Vergleich mit ZPV"); filtres.setResultAttribute("toptext", "
  • Auswertung von "+aux.svDateTime(this.reporttime)+"
  • \r\n" +"
  • Diese Aufstellung beinhaltet ausschließlich LE-Partner, die in der KFOQSDB bekannt sind
    \r\n" +" (LE-Partner, die nicht in der KFOQSDB, aber in ZPV vorhanden sind, sind in der Aufstellung \"KFO-Leistungserbringer aus ZPV, die in KFOQSDB unbekannt sind\" enthalten)
  • \r\n" +"
  • Anzahl gesamte Partner-Einträge in der KFOQSDB: "+this.mpares.totalpartners+"
  • \r\n" +"
  • Anzahl geprüfte Einträge: "+filtres.getRowCount()+"
  • \r\n" +"
\r\n" ); filtres.rows.collapsible = true; filtres.rows.collapsed = true; this.filtres = new aux.Result(filtres); ppush(this,{type: 'result', result: filtres }); # # <>: write back all FEHLER_xxx fields into the basic CCKFODBPARTNER tableclass, set up loop # qexpression this.wbindex = 0; # # <>: write one row back # wbloop: if (this.wbindex>=this.filtres.getRowCount()) goto wbloop_ended # # <>: write one row back (the fields that have been modified by above steps) # pre_qexpression this.cdata = this.filtres.getRowObject(this.wbindex); for (let i=0; i>: repeat writeback loop # pre_qexpression this.wbindex++; goto wbloop # # <>: end of writeback loop # wbloop_ended: noop # # <>: check partners in KFOQSDB without matches in ZPV # sql select dbp.VPNR as KFO_VPNR,dbp.PARTNERNAME as KFO_PARTNERNAME, dbp.BUNDESLANDKURZ as KFO_BUNDESLANDKURZ from CCKFODBPARTNER dbp left outer join CCKFOLEPARTNER lep on lep.VPNR=dbp.VPNR and lep.BUNDESLANDKURZ=dbp.BUNDESLANDKURZ where lep.VPNR is null result_varname mpnres post_qexpression this.mpnres.title = "KFOQSDB-Partner OHNE passende ZPV-Partner"; this.mpnres.toptext = "
    " +"
  • Anzahl Partner ohne Entsprechung in ZPV: "+this.mpnres.getRowCount()+"
  • " +"
"; this.mpnres.rows.collapsible = true; this.mpnres.rows.collapsed = true; ppush(this,{type: 'result', result: this.mpnres }); # # <>: create convenience view on CCKFOLEPARTNER # sql create or replace view CCVKFOLEPARTNER as select lep.LENR,lep.VPNR, (CASE WHEN lep.ORGANISATIONSNAME is not null and lep.ORGANISATIONSNAME!='' THEN lep.ORGANISATIONSNAME ELSE CONCAT(IFNULL(lep.TITELVORNE,''),' ',lep.VORNAME,' ',lep.NACHNAME,' ',lep.TITELHINTEN) END) as PARTNERNAME, lep.BUNDESLANDKURZ,lep.STAAT_ISOA2,lep.ADRESSNUMMER from CCKFOLEPARTNER lep # # <>: show ZPV-Partners not in KFOQSDB # sql select lep.LENR, GROUP_CONCAT(distinct lep.VPNR) as ZPV_VPNRS, GROUP_CONCAT(distinct lep.PARTNERNAME) as ZPV_PARTNERNAMEN, GROUP_CONCAT(distinct lep.STAAT_ISOA2) as ZPV_STAATEN, GROUP_CONCAT(distinct lep.BUNDESLANDKURZ) as ZPV_BUNDESLAENDER, GROUP_CONCAT(distinct lep.ADRESSNUMMER) as ZPV_ADRESSNUMMERN from CCVKFOLEPARTNER lep left outer join CCKFODBPARTNER dbp on dbp.VPNR=lep.VPNR where dbp.VPNR is null group by lep.LENR result_varname lenres post_qexpression this.lenres.title = "KFO-Leistungserbringer aus ZPV, die in KFOQSDB unbekannt sind"; let crow; let vpnrcn = this.lenres.findColumn("ZPV_VPNRS"); for (let ri=0; ri40) this.lenres.rows[ri][vpnrcn] = this.lenres.rows[ri][vpnrcn].substring(0,40)+"..."; } this.lenres.toptext = "
    " +"
  • Es gibt "+this.lenres.getRowCount()+" Leistungserbringer mit KFO-Fachgebieten, die in ZPV, aber nicht der KFOQSDB enthalten sind
  • \r\n" +"
  • In der folgenden Aufstellung sind die Partner nach LE-Nummer gruppiert. Zu einer LENR können mehrere VPNR und Adressen/Standorte gehören
  • \r\n" +"
"; this.lenres.rows.collapsible = true; this.lenres.rows.collapsed = true; ppush(this,{type: 'result', result: this.lenres }); # # <>: title the protocol, seqtrans will produce a result from it # qexpression this.protocol.title = 'Partner-Abgleich KFOQSDB mit ZPV';