PSNPPSMG ;HP/MJE-PPSN update NDF data ; 05 Mar 2014  1:20 PM
 ;;4.0;NATIONAL DRUG FILE;**513,565**; 30 Oct 98;Build 16
 ;Reference to ^PSDRUG supported by DBIA #2352,#221
 ;
MESSAGE ;
 D CTRKDL^PSNPPSMS("Sending DATA UPDATE FOR NDF email")
 W:'$G(PSNSCJOB) !,"Sending mail messages...",!
 K FDA
 S FDA(57.231,CTRLXIEN_","_CTRLIEN_",",6)="MESSAGE"
 D UPDATE^DIE("","FDA","CTRLIEN")
 K FDA
 S FILE=0,GROOT=$NA(^TMP("PSN PPSN PARSED",$J,"DATAO"))
 ;
 S PSNPS=$P($G(^PS(59.7,1,10)),"^",12) I PSNPS'="N" G G1
 N MESSC S MESSC=""
 F  S MESSC=$O(^TMP("PSN PPSN PARSED",$J,"MESSAGE",MESSC)) Q:MESSC=""  D
 .I MESSC=0 S ^NDFK(5000,1,2,0)=^TMP("PSN PPSN PARSED",$J,"MESSAGE",MESSC) Q
 .S ^NDFK(5000,1,2,MESSC,0)=^TMP("PSN PPSN PARSED",$J,"MESSAGE",MESSC)
 S MESSC=""
 F  S MESSC=$O(^TMP("PSN PPSN PARSED",$J,"MESSAGE2",MESSC)) Q:MESSC=""  D
 .I MESSC=0 S ^NDFK(5000,1,3,0)=^TMP("PSN PPSN PARSED",$J,"MESSAGE2",MESSC) Q
 .S ^NDFK(5000,1,3,MESSC,0)=^TMP("PSN PPSN PARSED",$J,"MESSAGE2",MESSC)
 ;
G1 K ^TMP($J) M ^TMP($J)=^TMP("PSN PPSN PARSED",$J,"MESSAGE") K ^TMP($J,0)
 ;
GROUP K XMY S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 S PSNPS=$P($G(^PS(59.7,1,10)),"^",12)
 D XMY
 S XMSUB="DATA UPDATE FOR NDF"
 S XMDUZ="noreply@domain.ext"
 S XMTEXT="^TMP($J," N DIFROM D ^XMD
 D CTRKDL^PSNPPSMS("Sent email for DATA UPDATE FOR NDF.")
 K FDA
 S FDA(57.231,CTRLXIEN_","_CTRLIEN_",",6)="MESSAGE2"
 D UPDATE^DIE("","FDA","CTRLIEN")
 K FDA
 K ^TMP($J) M ^TMP($J)=^TMP("PSN PPSN PARSED",$J,"MESSAGE2") K ^TMP($J,0)
 K XMY S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 ;
 D XMY
 D CTRKDL^PSNPPSMS("Sending UPDATED INTERACTIONS and FDA MED GUIDE message")
 S XMSUB="UPDATED INTERACTIONS AND FDA MED GUIDE"
 S XMDUZ="noreply@domain.ext"
 S XMTEXT="^TMP($J," N DIFROM D ^XMD
 D CTRKDL^PSNPPSMS("Sent email for UPDATED INTERACTIONS and FDA MED GUIDE.")
 K DA
 Q
 ;
COMMSG ;Send error message that comm link with PPSN is not available
 K ^TMP("PSN PPSN PARSED",$J,"COMMSG")
 N PSNPS,PSMSGTXT,XMY,X,XMSUB,XMTEXT,PSGRP,LNCNT,FIRST,I3,I4,I5,I6,I7,III
 S LNCNT=1,FIRST=0,(I3,I4,I5,I6,I7)="",PSNPS=$P($G(^PS(59.7,1,10)),"^",12)
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",1)="*************************************************************************"
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",3)="*************************************************************************"
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",4)="The following file completed installation with error(s)"_$S(PSNPS="Q":" for QA",1:"")_":"
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",5)=""
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",6)="      Update file Name"
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",7)="      -------------------"
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",8)="      "_$P(PSNHLD,";")
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",9)=""
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",10)=""
 S LNCNT=10
 G:'$D(^TMP("PSN PPSN ERR",$J)) LZ S LNCNT=11 F  S I3=$O(^TMP("PSN PPSN ERR",$J,I3)) Q:I3=""  D
 .F  S I4=$O(^TMP("PSN PPSN ERR",$J,I3,I4)) Q:'I4  D
 ..F  S I5=$O(^TMP("PSN PPSN ERR",$J,I3,I4,I5)) Q:I5=""  D
 ...F  S I6=$O(^TMP("PSN PPSN ERR",$J,I3,I4,I5,I6)) Q:I6=""  D
 ....F  S I7=$O(^TMP("PSN PPSN ERR",$J,I3,I4,I5,I6,I7)) Q:'I7  D
 .....S III=$G(^TMP("PSN PPSN ERR",$J,I3,I4,I5,I6,I7)) D
 ......I FIRST=0 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT)="Error Message: " S LNCNT=LNCNT+1,FIRST=1
 ......S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT)=$$TRNS(I4,I5,I6) S LNCNT=LNCNT+1
 ......S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT)="      "_$P(III,"^")
 ......S LNCNT=LNCNT+1
LZ I '$D(^TMP("PSN PPSN ERR",$J)) S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT+1)="Error Message: "_$P(COMM,"^",2)
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT+2)="               The update file completed installation but the completion"
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT+3)="               message was not accepted by PPS-N."
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT+4)=""
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT+5)="Contact the National Help Desk or enter a ticket."
 S ^TMP("PSN PPSN PARSED",$J,"COMMSG",LNCNT+6)=""
 S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 D XMY
 S XMDUZ="noreply@domain.ext"
 S XMSUB="ERROR: PPS-N/NDF File "_$P(PSNHLD,";",1)_" INSTALL"
 I PSNPS'="" I PSNPS="Q" S XMSUB="ERROR: PPS-N/NDF File "_$P(PSNHLD,";",1)_" INSTALL FOR QA"
 S XMTEXT="^TMP(""PSN PPSN PARSED"",$J,""COMMSG"","
 N DIFROM D ^XMD
 D CTRKDL^PSNPPSMS("Error email sent (COMMSG).")
 Q
 ;
IERRMSG ;Send error message that comm link with PPSN is not available
 K ^TMP("PSN PPSN PARSED",$J,"IERRMSG")
 Q:INSTIEN=""
 Q:'$D(^PS(57.23,1,5,INSTIEN,2,1))
 N PSNEDATA,PSNPS,PSMSGTXT,XMY,X,XMSUB,XMTEXT,PSGRP,LNCNT,FIRST,I3,I4,I5,I6,I7,III
 S LNCNT=1,FIRST=0,I3="",PSNPS=$P($G(^PS(59.7,1,10)),"^",12)
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",1)="*************************************************************************"
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",2)="  Error(s) occurred during the install of "_$P(PSNHLD,";")_$S(PSNPS="Q":" for QA",1:"")_":"
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",3)="*************************************************************************"
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",4)=""
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",5)="The "_$P(PSNHLD,";")_"NDF Update file completed installation with error(s)."
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",6)="Contact the National Help Desk or enter a ticket."
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",7)=""
 S LNCNT=7
 G:'$D(^PS(57.23,1,5,INSTIEN,2)) LZ2
 S LNCNT=11,I3=0 F  S I3=$O(^PS(57.23,1,5,INSTIEN,2,I3)) Q:I3=""  I $D(^PS(57.23,1,5,INSTIEN,2,I3,0)) D
 .I FIRST=0 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",LNCNT)="Error Message(s): " S LNCNT=LNCNT+1,FIRST=1
 .S PSNEDATA="",PSNEDATA=^PS(57.23,1,5,INSTIEN,2,I3,0)
 .S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",LNCNT)="   File: "_$$LJ^XLFSTR($P(PSNEDATA,"^",2),13," ")_"   IEN: "_$$LJ^XLFSTR($P(PSNEDATA,"^",3),13," ")_"   Record Type: "_$$LJ^XLFSTR($P(PSNEDATA,"^",4),13," ") S LNCNT=LNCNT+1
 .S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",LNCNT)="       Last Record: "_$P(PSNEDATA,"|",2,3) S LNCNT=LNCNT+1
 .S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",LNCNT)="       Message: "_$P(PSNEDATA,"^",5) S LNCNT=LNCNT+1
 .S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",LNCNT)="  " S LNCNT=LNCNT+1
 ;
LZ2 ;
 S ^TMP("PSN PPSN PARSED",$J,"IERRMSG",LNCNT)="",XMSUB="ERROR: PPS-N/NDF File "_$P(PSNHLD,";",1)_" INSTALL"
 S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 I PSNPS'="",PSNPS="Q" S XMSUB="ERROR: PPS-N/NDF File "_$P(PSNHLD,";",1)_" INSTALL FOR QA"
 K XMY S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 D XMY
 S XMDUZ="noreply@domain.ext"
 S XMTEXT="^TMP(""PSN PPSN PARSED"",$J,""IERRMSG"","
 N DIFROM D ^XMD
 D CTRKDL^PSNPPSMS("Install completed with errors and email with errors was sent (IERRMSG).")
 Q
 ;
SMSG ;Send install successful message
 K XMY
 N PSNPS
 ;SETUP PRODUCTION OR SQA
 K ^TMP("PSN PPSN PARSED",$J,"MSG2")
 N PSGRP,PSNFSIZE,PSSIZE,PSFILE,PSWRKDIR,PSOS
 S PSWRKDIR=$$GETD^PSNFTP()
 S PSNFSIZE=1,PSSIZE=""
 S PSOS=$$GETOS^PSNFTP
 I +PSOS=3 D UXFSIZE(PSWRKDIR,PSNHLD,.PSSIZE)
 I +PSOS'=3 D FILSIZE^PSNFTP2(PSWRKDIR,PSNHLD,.PSSIZE,1)
 ;
 S PSNPS=$P($G(^PS(59.7,1,10)),"^",12)
 ;
 S XMSUB="PPS-N/NDF File "_$P(PSNHLD,";",1)_" INSTALLED"
 I PSNPS'="" I PSNPS="Q" S XMSUB=XMSUB_" FOR QA"
 S ^TMP("PSN PPSN PARSED",$J,"MSG2",1)="PPS-N/NDF File "_$P(PSNHLD,";",1)_" (Size "_PSSIZE_$S(+PSOS=1:"",+PSOS=3:" bytes",1:"")_")"
 S ^TMP("PSN PPSN PARSED",$J,"MSG2",2)="INSTALLED successfully."
 D XMY
 S XMTEXT="^TMP(""PSN PPSN PARSED"",$J,""MSG2""," N DIFROM D ^XMD
 K ^TMP("PSN PPSN PARSED",$J,"MSG2")
 K ^TMP($J)
 K XMSUB,XMDUZ,XMTEXT
 Q
 ;
DRGMSG ;
 W:'$G(PSNSCJOB) !,"Generating mail messages for unmatched/re-matched drugs...",!
 D REPORT^PSNPPSNW ;        ********************
 ;
 N INDX,LINE,XMZ,PSNPS K ^TMP("PSN",$J) S LINE=1
 S ^TMP("PSN",$J,LINE,0)="PPS-N Update File: "_$P(PSNHLD,";",1),LINE=LINE+1,^TMP("PSN",$J,LINE,0)="",LINE=LINE+1
 F INDX="A","X","I" D LOAD1^PSNPPSMS
 ;S XMDUZ="NDF_MANAGER"
 S XMDUZ="noreply@domain.ext"
 ;
 S XMSUB="DRUGS UNMATCHED FROM NATIONAL DRUG FILE"
 ;
 S XMTEXT="^TMP(""PSN"",$J,"
 K XMY S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 S PSGRP="",PSGRP=$$GET1^DIQ(57.23,1,5) ;get PPS-N UPDATE CONTROL:LOCAL EMAIL GROUP NAME (57.23:5)
 S:PSGRP'="" XMY(PSGRP)=""
 ;
 S PSNPS=$P($G(^PS(59.7,1,10)),"^",12)
 D XMY
 N DIFROM D ^XMD I $D(XMZ) S DA=XMZ,DIE=3.9,DR="1.7///P;" D ^DIE
 ;
 S FDA(57.231,CTRLXIEN_","_CTRLIEN_",",10)="MESSAGE3"
 D UPDATE^DIE("","FDA","CTRLIEN")
 K FDA
 K ^TMP($J) M ^TMP($J)=^TMP("PSN PPSN PARSED",$J,"MESSAGE3") K ^TMP($J,0)
 K XMY S X=$G(^TMP("PSN PPSN PARSED",$J,"GROUP")) I X]"" S XMY("G."_X_"@"_^XMB("NETNAME"))=""
 S PSNPS=$P($G(^PS(59.7,1,10)),"^",12)
 D XMY
 S XMSUB="LOCAL DRUGS REMATCHED TO NDF"
 S XMDUZ="noreply@domain.ext"
 S XMTEXT="^TMP($J," N DIFROM
 D ^XMD
 K DIE,DR
 Q
UXFSIZE(PSWRKDIR,PSNHLD,PSSIZE) ; get linux file size
 N XPV,PSXLOG,PV S PSSIZE=""
 S:'$D(PSWRKDIR) PSWRKDIR=$$GETD^PSNFTP()
 S XPV="S PV=$ZF(-1,""stat -c%s "_PSWRKDIR_PSNHLD_">"_PSWRKDIR_"PSNSIZE.DAT"")"
 X XPV
 S PSXLOG="",PSXLOG=$$FTG^%ZISH(PSWRKDIR,"PSNSIZE.DAT",$NA(^TMP("PSNFSIZELOG",$J,1)),3)
 I $D(^TMP("PSNFSIZELOG",$J,1)) S PSSIZE=$G(^TMP("PSNFSIZELOG",$J,1)) K ^TMP("PSNFSIZELOG",$J)
 D LINUXDEL^PSNFTP(1,PSWRKDIR,"PSNSIZE.DAT")
 Q
TRNS(PSNFILE,IEN,PSNFIELD) ; get the label of file/field
 N PSNF,FILE,FILENM,FIELD,PSNARR,FLD,FIELDX
 S (FIELD,FILE,FILENM,PSNARR,FLD,PSNF)=""
 S FILE=PSNFILE,(FIELD,FIELDX)=PSNFIELD
 S PSNF=$S($D(^DIC(FILE,0)):$P($G(^DIC(FILE,0)),U),1:"**Wrong file number**")
 I FIELD["," S FILENM=$P($G(^DD(FILE,+FIELD,0)),"^"),FILE=+$P($G(^DD(FILE,$P(FIELD,","),0)),"^",2) S:FILE FIELD=$P(FIELD,",",2)
 K PSNARR D FIELD^DID(FILE,FIELD,"","LABEL","PSNARR") S FLD=$S(FIELDX[",":FILENM_" >>> ",1:"")_$G(PSNARR("LABEL"))
 Q "   File: "_$$LJ^XLFSTR(PSNF,13," ")_"   IEN#: "_$$LJ^XLFSTR(IEN,13," ")_"   Field: "_$$LJ^XLFSTR(FLD,13," ")
 ;
XMY ;set XMY for mail message
 S XMDUZ="noreply@domain.ext"
 S DA=0 F  S DA=$O(^XUSEC("PSNMGR",DA)) Q:'DA  S XMY(DA)=""
 I $D(DUZ) S XMY(DUZ)=""
 S PSGRP="",PSGRP=$$GET1^DIQ(57.23,1,5) S:PSGRP'="" XMY($$MG(PSGRP))="" ;PRIMARY PPS-N MAIL GROUP
 S PSGRP="",PSGRP=$$GET1^DIQ(57.23,1,6) S:PSGRP'="" XMY($$MG(PSGRP))="" ;SECONDARY MAIL GROUP
 Q
 ;
MG(PSNGG) ; look for Mail Group
 I $E(PSNGG,1,2)="G." Q:$O(^XMB(3.8,"B",$E(PSNGG,3,99),0)) PSNGG
 Q:$O(^XMB(3.8,"B",PSNGG,0)) "G."_PSNGG
 Q PSNGG
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSNPPSMG   10739     printed  Sep 23, 2025@20:00:43                                                                                                                                                                                                   Page 2
PSNPPSMG  ;HP/MJE-PPSN update NDF data ; 05 Mar 2014  1:20 PM
 +1       ;;4.0;NATIONAL DRUG FILE;**513,565**; 30 Oct 98;Build 16
 +2       ;Reference to ^PSDRUG supported by DBIA #2352,#221
 +3       ;
MESSAGE   ;
 +1        DO CTRKDL^PSNPPSMS("Sending DATA UPDATE FOR NDF email")
 +2        if '$GET(PSNSCJOB)
               WRITE !,"Sending mail messages...",!
 +3        KILL FDA
 +4        SET FDA(57.231,CTRLXIEN_","_CTRLIEN_",",6)="MESSAGE"
 +5        DO UPDATE^DIE("","FDA","CTRLIEN")
 +6        KILL FDA
 +7        SET FILE=0
           SET GROOT=$NAME(^TMP("PSN PPSN PARSED",$JOB,"DATAO"))
 +8       ;
 +9        SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
           IF PSNPS'="N"
               GOTO G1
 +10       NEW MESSC
           SET MESSC=""
 +11       FOR 
               SET MESSC=$ORDER(^TMP("PSN PPSN PARSED",$JOB,"MESSAGE",MESSC))
               if MESSC=""
                   QUIT 
               Begin DoDot:1
 +12               IF MESSC=0
                       SET ^NDFK(5000,1,2,0)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE",MESSC)
                       QUIT 
 +13               SET ^NDFK(5000,1,2,MESSC,0)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE",MESSC)
               End DoDot:1
 +14       SET MESSC=""
 +15       FOR 
               SET MESSC=$ORDER(^TMP("PSN PPSN PARSED",$JOB,"MESSAGE2",MESSC))
               if MESSC=""
                   QUIT 
               Begin DoDot:1
 +16               IF MESSC=0
                       SET ^NDFK(5000,1,3,0)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE2",MESSC)
                       QUIT 
 +17               SET ^NDFK(5000,1,3,MESSC,0)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE2",MESSC)
               End DoDot:1
 +18      ;
G1         KILL ^TMP($JOB)
           MERGE ^TMP($JOB)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE")
           KILL ^TMP($JOB,0)
 +1       ;
GROUP      KILL XMY
           SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +1        SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
 +2        DO XMY
 +3        SET XMSUB="DATA UPDATE FOR NDF"
 +4        SET XMDUZ="noreply@domain.ext"
 +5        SET XMTEXT="^TMP($J,"
           NEW DIFROM
           DO ^XMD
 +6        DO CTRKDL^PSNPPSMS("Sent email for DATA UPDATE FOR NDF.")
 +7        KILL FDA
 +8        SET FDA(57.231,CTRLXIEN_","_CTRLIEN_",",6)="MESSAGE2"
 +9        DO UPDATE^DIE("","FDA","CTRLIEN")
 +10       KILL FDA
 +11       KILL ^TMP($JOB)
           MERGE ^TMP($JOB)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE2")
           KILL ^TMP($JOB,0)
 +12       KILL XMY
           SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +13      ;
 +14       DO XMY
 +15       DO CTRKDL^PSNPPSMS("Sending UPDATED INTERACTIONS and FDA MED GUIDE message")
 +16       SET XMSUB="UPDATED INTERACTIONS AND FDA MED GUIDE"
 +17       SET XMDUZ="noreply@domain.ext"
 +18       SET XMTEXT="^TMP($J,"
           NEW DIFROM
           DO ^XMD
 +19       DO CTRKDL^PSNPPSMS("Sent email for UPDATED INTERACTIONS and FDA MED GUIDE.")
 +20       KILL DA
 +21       QUIT 
 +22      ;
COMMSG    ;Send error message that comm link with PPSN is not available
 +1        KILL ^TMP("PSN PPSN PARSED",$JOB,"COMMSG")
 +2        NEW PSNPS,PSMSGTXT,XMY,X,XMSUB,XMTEXT,PSGRP,LNCNT,FIRST,I3,I4,I5,I6,I7,III
 +3        SET LNCNT=1
           SET FIRST=0
           SET (I3,I4,I5,I6,I7)=""
           SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
 +4        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",1)="*************************************************************************"
 +5        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",3)="*************************************************************************"
 +6        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",4)="The following file completed installation with error(s)"_$SELECT(PSNPS="Q":" for QA",1:"")_":"
 +7        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",5)=""
 +8        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",6)="      Update file Name"
 +9        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",7)="      -------------------"
 +10       SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",8)="      "_$PIECE(PSNHLD,";")
 +11       SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",9)=""
 +12       SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",10)=""
 +13       SET LNCNT=10
 +14       if '$DATA(^TMP("PSN PPSN ERR",$JOB))
               GOTO LZ
           SET LNCNT=11
           FOR 
               SET I3=$ORDER(^TMP("PSN PPSN ERR",$JOB,I3))
               if I3=""
                   QUIT 
               Begin DoDot:1
 +15               FOR 
                       SET I4=$ORDER(^TMP("PSN PPSN ERR",$JOB,I3,I4))
                       if 'I4
                           QUIT 
                       Begin DoDot:2
 +16                       FOR 
                               SET I5=$ORDER(^TMP("PSN PPSN ERR",$JOB,I3,I4,I5))
                               if I5=""
                                   QUIT 
                               Begin DoDot:3
 +17                               FOR 
                                       SET I6=$ORDER(^TMP("PSN PPSN ERR",$JOB,I3,I4,I5,I6))
                                       if I6=""
                                           QUIT 
                                       Begin DoDot:4
 +18                                       FOR 
                                               SET I7=$ORDER(^TMP("PSN PPSN ERR",$JOB,I3,I4,I5,I6,I7))
                                               if 'I7
                                                   QUIT 
                                               Begin DoDot:5
 +19                                               SET III=$GET(^TMP("PSN PPSN ERR",$JOB,I3,I4,I5,I6,I7))
                                                   Begin DoDot:6
 +20                                                   IF FIRST=0
                                                           SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT)="Error Message: "
                                                           SET LNCNT=LNCNT+1
                                                           SET FIRST=1
 +21                                                   SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT)=$$TRNS(I4,I5,I6)
                                                       SET LNCNT=LNCNT+1
 +22                                                   SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT)="      "_$PIECE(III,"^")
 +23                                                   SET LNCNT=LNCNT+1
                                                   End DoDot:6
                                               End DoDot:5
                                       End DoDot:4
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
LZ         IF '$DATA(^TMP("PSN PPSN ERR",$JOB))
               SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT+1)="Error Message: "_$PIECE(COMM,"^",2)
 +1        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT+2)="               The update file completed installation but the completion"
 +2        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT+3)="               message was not accepted by PPS-N."
 +3        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT+4)=""
 +4        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT+5)="Contact the National Help Desk or enter a ticket."
 +5        SET ^TMP("PSN PPSN PARSED",$JOB,"COMMSG",LNCNT+6)=""
 +6        SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +7        DO XMY
 +8        SET XMDUZ="noreply@domain.ext"
 +9        SET XMSUB="ERROR: PPS-N/NDF File "_$PIECE(PSNHLD,";",1)_" INSTALL"
 +10       IF PSNPS'=""
               IF PSNPS="Q"
                   SET XMSUB="ERROR: PPS-N/NDF File "_$PIECE(PSNHLD,";",1)_" INSTALL FOR QA"
 +11       SET XMTEXT="^TMP(""PSN PPSN PARSED"",$J,""COMMSG"","
 +12       NEW DIFROM
           DO ^XMD
 +13       DO CTRKDL^PSNPPSMS("Error email sent (COMMSG).")
 +14       QUIT 
 +15      ;
IERRMSG   ;Send error message that comm link with PPSN is not available
 +1        KILL ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG")
 +2        if INSTIEN=""
               QUIT 
 +3        if '$DATA(^PS(57.23,1,5,INSTIEN,2,1))
               QUIT 
 +4        NEW PSNEDATA,PSNPS,PSMSGTXT,XMY,X,XMSUB,XMTEXT,PSGRP,LNCNT,FIRST,I3,I4,I5,I6,I7,III
 +5        SET LNCNT=1
           SET FIRST=0
           SET I3=""
           SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
 +6        SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",1)="*************************************************************************"
 +7        SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",2)="  Error(s) occurred during the install of "_$PIECE(PSNHLD,";")_$SELECT(PSNPS="Q":" for QA",1:"")_":"
 +8        SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",3)="*************************************************************************"
 +9        SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",4)=""
 +10       SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",5)="The "_$PIECE(PSNHLD,";")_"NDF Update file completed installation with error(s)."
 +11       SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",6)="Contact the National Help Desk or enter a ticket."
 +12       SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",7)=""
 +13       SET LNCNT=7
 +14       if '$DATA(^PS(57.23,1,5,INSTIEN,2))
               GOTO LZ2
 +15       SET LNCNT=11
           SET I3=0
           FOR 
               SET I3=$ORDER(^PS(57.23,1,5,INSTIEN,2,I3))
               if I3=""
                   QUIT 
               IF $DATA(^PS(57.23,1,5,INSTIEN,2,I3,0))
                   Begin DoDot:1
 +16                   IF FIRST=0
                           SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",LNCNT)="Error Message(s): "
                           SET LNCNT=LNCNT+1
                           SET FIRST=1
 +17                   SET PSNEDATA=""
                       SET PSNEDATA=^PS(57.23,1,5,INSTIEN,2,I3,0)
 +18                   SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",LNCNT)="   File: "_$$LJ^XLFSTR($PIECE(PSNEDATA,"^",2),13," ")_"   IEN: "_$$LJ^XLFSTR($PIECE(PSNEDATA,"^",3),13," ")_"   Record Type: "_$$LJ^XLFSTR($PIECE(PSNEDATA,"^",4),13," ")
                       SET LNCNT=LNCNT+1
 +19                   SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",LNCNT)="       Last Record: "_$PIECE(PSNEDATA,"|",2,3)
                       SET LNCNT=LNCNT+1
 +20                   SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",LNCNT)="       Message: "_$PIECE(PSNEDATA,"^",5)
                       SET LNCNT=LNCNT+1
 +21                   SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",LNCNT)="  "
                       SET LNCNT=LNCNT+1
                   End DoDot:1
 +22      ;
LZ2       ;
 +1        SET ^TMP("PSN PPSN PARSED",$JOB,"IERRMSG",LNCNT)=""
           SET XMSUB="ERROR: PPS-N/NDF File "_$PIECE(PSNHLD,";",1)_" INSTALL"
 +2        SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +3        IF PSNPS'=""
               IF PSNPS="Q"
                   SET XMSUB="ERROR: PPS-N/NDF File "_$PIECE(PSNHLD,";",1)_" INSTALL FOR QA"
 +4        KILL XMY
           SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +5        DO XMY
 +6        SET XMDUZ="noreply@domain.ext"
 +7        SET XMTEXT="^TMP(""PSN PPSN PARSED"",$J,""IERRMSG"","
 +8        NEW DIFROM
           DO ^XMD
 +9        DO CTRKDL^PSNPPSMS("Install completed with errors and email with errors was sent (IERRMSG).")
 +10       QUIT 
 +11      ;
SMSG      ;Send install successful message
 +1        KILL XMY
 +2        NEW PSNPS
 +3       ;SETUP PRODUCTION OR SQA
 +4        KILL ^TMP("PSN PPSN PARSED",$JOB,"MSG2")
 +5        NEW PSGRP,PSNFSIZE,PSSIZE,PSFILE,PSWRKDIR,PSOS
 +6        SET PSWRKDIR=$$GETD^PSNFTP()
 +7        SET PSNFSIZE=1
           SET PSSIZE=""
 +8        SET PSOS=$$GETOS^PSNFTP
 +9        IF +PSOS=3
               DO UXFSIZE(PSWRKDIR,PSNHLD,.PSSIZE)
 +10       IF +PSOS'=3
               DO FILSIZE^PSNFTP2(PSWRKDIR,PSNHLD,.PSSIZE,1)
 +11      ;
 +12       SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
 +13      ;
 +14       SET XMSUB="PPS-N/NDF File "_$PIECE(PSNHLD,";",1)_" INSTALLED"
 +15       IF PSNPS'=""
               IF PSNPS="Q"
                   SET XMSUB=XMSUB_" FOR QA"
 +16       SET ^TMP("PSN PPSN PARSED",$JOB,"MSG2",1)="PPS-N/NDF File "_$PIECE(PSNHLD,";",1)_" (Size "_PSSIZE_$SELECT(+PSOS=1:"",+PSOS=3:" bytes",1:"")_")"
 +17       SET ^TMP("PSN PPSN PARSED",$JOB,"MSG2",2)="INSTALLED successfully."
 +18       DO XMY
 +19       SET XMTEXT="^TMP(""PSN PPSN PARSED"",$J,""MSG2"","
           NEW DIFROM
           DO ^XMD
 +20       KILL ^TMP("PSN PPSN PARSED",$JOB,"MSG2")
 +21       KILL ^TMP($JOB)
 +22       KILL XMSUB,XMDUZ,XMTEXT
 +23       QUIT 
 +24      ;
DRGMSG    ;
 +1        if '$GET(PSNSCJOB)
               WRITE !,"Generating mail messages for unmatched/re-matched drugs...",!
 +2       ;        ********************
           DO REPORT^PSNPPSNW
 +3       ;
 +4        NEW INDX,LINE,XMZ,PSNPS
           KILL ^TMP("PSN",$JOB)
           SET LINE=1
 +5        SET ^TMP("PSN",$JOB,LINE,0)="PPS-N Update File: "_$PIECE(PSNHLD,";",1)
           SET LINE=LINE+1
           SET ^TMP("PSN",$JOB,LINE,0)=""
           SET LINE=LINE+1
 +6        FOR INDX="A","X","I"
               DO LOAD1^PSNPPSMS
 +7       ;S XMDUZ="NDF_MANAGER"
 +8        SET XMDUZ="noreply@domain.ext"
 +9       ;
 +10       SET XMSUB="DRUGS UNMATCHED FROM NATIONAL DRUG FILE"
 +11      ;
 +12       SET XMTEXT="^TMP(""PSN"",$J,"
 +13       KILL XMY
           SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +14      ;get PPS-N UPDATE CONTROL:LOCAL EMAIL GROUP NAME (57.23:5)
           SET PSGRP=""
           SET PSGRP=$$GET1^DIQ(57.23,1,5)
 +15       if PSGRP'=""
               SET XMY(PSGRP)=""
 +16      ;
 +17       SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
 +18       DO XMY
 +19       NEW DIFROM
           DO ^XMD
           IF $DATA(XMZ)
               SET DA=XMZ
               SET DIE=3.9
               SET DR="1.7///P;"
               DO ^DIE
 +20      ;
 +21       SET FDA(57.231,CTRLXIEN_","_CTRLIEN_",",10)="MESSAGE3"
 +22       DO UPDATE^DIE("","FDA","CTRLIEN")
 +23       KILL FDA
 +24       KILL ^TMP($JOB)
           MERGE ^TMP($JOB)=^TMP("PSN PPSN PARSED",$JOB,"MESSAGE3")
           KILL ^TMP($JOB,0)
 +25       KILL XMY
           SET X=$GET(^TMP("PSN PPSN PARSED",$JOB,"GROUP"))
           IF X]""
               SET XMY("G."_X_"@"_^XMB("NETNAME"))=""
 +26       SET PSNPS=$PIECE($GET(^PS(59.7,1,10)),"^",12)
 +27       DO XMY
 +28       SET XMSUB="LOCAL DRUGS REMATCHED TO NDF"
 +29       SET XMDUZ="noreply@domain.ext"
 +30       SET XMTEXT="^TMP($J,"
           NEW DIFROM
 +31       DO ^XMD
 +32       KILL DIE,DR
 +33       QUIT 
UXFSIZE(PSWRKDIR,PSNHLD,PSSIZE) ; get linux file size
 +1        NEW XPV,PSXLOG,PV
           SET PSSIZE=""
 +2        if '$DATA(PSWRKDIR)
               SET PSWRKDIR=$$GETD^PSNFTP()
 +3        SET XPV="S PV=$ZF(-1,""stat -c%s "_PSWRKDIR_PSNHLD_">"_PSWRKDIR_"PSNSIZE.DAT"")"
 +4        XECUTE XPV
 +5        SET PSXLOG=""
           SET PSXLOG=$$FTG^%ZISH(PSWRKDIR,"PSNSIZE.DAT",$NAME(^TMP("PSNFSIZELOG",$JOB,1)),3)
 +6        IF $DATA(^TMP("PSNFSIZELOG",$JOB,1))
               SET PSSIZE=$GET(^TMP("PSNFSIZELOG",$JOB,1))
               KILL ^TMP("PSNFSIZELOG",$JOB)
 +7        DO LINUXDEL^PSNFTP(1,PSWRKDIR,"PSNSIZE.DAT")
 +8        QUIT 
TRNS(PSNFILE,IEN,PSNFIELD) ; get the label of file/field
 +1        NEW PSNF,FILE,FILENM,FIELD,PSNARR,FLD,FIELDX
 +2        SET (FIELD,FILE,FILENM,PSNARR,FLD,PSNF)=""
 +3        SET FILE=PSNFILE
           SET (FIELD,FIELDX)=PSNFIELD
 +4        SET PSNF=$SELECT($DATA(^DIC(FILE,0)):$PIECE($GET(^DIC(FILE,0)),U),1:"**Wrong file number**")
 +5        IF FIELD[","
               SET FILENM=$PIECE($GET(^DD(FILE,+FIELD,0)),"^")
               SET FILE=+$PIECE($GET(^DD(FILE,$PIECE(FIELD,","),0)),"^",2)
               if FILE
                   SET FIELD=$PIECE(FIELD,",",2)
 +6        KILL PSNARR
           DO FIELD^DID(FILE,FIELD,"","LABEL","PSNARR")
           SET FLD=$SELECT(FIELDX[",":FILENM_" >>> ",1:"")_$GET(PSNARR("LABEL"))
 +7        QUIT "   File: "_$$LJ^XLFSTR(PSNF,13," ")_"   IEN#: "_$$LJ^XLFSTR(IEN,13," ")_"   Field: "_$$LJ^XLFSTR(FLD,13," ")
 +8       ;
XMY       ;set XMY for mail message
 +1        SET XMDUZ="noreply@domain.ext"
 +2        SET DA=0
           FOR 
               SET DA=$ORDER(^XUSEC("PSNMGR",DA))
               if 'DA
                   QUIT 
               SET XMY(DA)=""
 +3        IF $DATA(DUZ)
               SET XMY(DUZ)=""
 +4       ;PRIMARY PPS-N MAIL GROUP
           SET PSGRP=""
           SET PSGRP=$$GET1^DIQ(57.23,1,5)
           if PSGRP'=""
               SET XMY($$MG(PSGRP))=""
 +5       ;SECONDARY MAIL GROUP
           SET PSGRP=""
           SET PSGRP=$$GET1^DIQ(57.23,1,6)
           if PSGRP'=""
               SET XMY($$MG(PSGRP))=""
 +6        QUIT 
 +7       ;
MG(PSNGG) ; look for Mail Group
 +1        IF $EXTRACT(PSNGG,1,2)="G."
               if $ORDER(^XMB(3.8,"B",$EXTRACT(PSNGG,3,99),0))
                   QUIT PSNGG
 +2        if $ORDER(^XMB(3.8,"B",PSNGG,0))
               QUIT "G."_PSNGG
 +3        QUIT PSNGG