Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: AGACALV

AGACALV.m

Go to the documentation of this file.
  1. AGACALV ; IHS/OIT/NKD - VERIFY AN IHS ELIGIBILITY LETTER ; FEBRUARY 10, 2014
  1. ;;7.1;PATIENT REGISTRATION;**11**;AUG 25, 2005;Build 1
  1. EN ;EP
  1. N AGTEXT,AGCNT
  1. F AGCNT=1:1 S AGTEXT=$P($T(HDR+AGCNT^AGACALV),";;",2) Q:AGTEXT="END" D
  1. . W !,AGTEXT
  1. D MAIN
  1. Q
  1. ;
  1. MAIN ;MAIN PROCESSING
  1. N AGQUIT
  1. S AGQUIT=0
  1. F Q:AGQUIT D
  1. . N DIR,DTOUT,DUOUT,DIRUT,DIROUT,Y,AGCODE,AGRES
  1. . S DIR(0)="FOU^21"
  1. . S DIR("A")="ENTER THE UNIQUE IDENTIFIER CODE (MINIMUM 21 DIGITS)"
  1. . D ^DIR
  1. . I $D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) S AGQUIT=1 Q
  1. . S AGCODE=Y
  1. . S AGRES=$$DEC(AGCODE)
  1. . W !!,?16,"LETTER",?35,"RPMS",?60,"RESULTS"
  1. . W !,?16,"------------",?35,"------------",?60,"------------"
  1. . I '$$P1(+AGRES) D PROMPT Q
  1. . I '$$P2(+AGRES,$P(AGRES,U,2))
  1. . I '$$P3(+AGRES,$P(AGRES,U,3))
  1. . D PROMPT
  1. Q
  1. ;
  1. PROMPT ;ENTER TO CONTINUE
  1. K DIR S DIR(0)="EO",DIR("A")="Press Enter to continue." D ^DIR K DIR Q
  1. ;
  1. P1(AGREC) ;EP - CHECK RECORD NUMBER
  1. N AGRES
  1. ;
  1. S AGRES=$S($D(^AGACAL(AGREC,0)):AGREC_U_"PASSED",1:"0^FAILED ***")
  1. ;
  1. W !,"RECORD NUMBER: ",?16,AGREC,?30,"...",?35,+AGRES,?60,$P(AGRES,U,2)
  1. ;
  1. Q $S(+AGRES:1,1:0)
  1. ;
  1. P2(AGREC,AGUID) ;EP - CHECK USER/DT
  1. N AGUSR,AGDT,AGUSRL,AGDTL,AGUSRR,AGDTR
  1. ;
  1. S AGUSRL=$P($P(AGUID,"[",2),"__",1),AGDTL=$P($P($P(AGUID,"[",2),"__",2),"]",1)
  1. ;
  1. S AGUSRR=$$GET1^DIQ(9009063.5,AGREC,.03,"E"),AGDTR=$$FMTE^XLFDT($$GET1^DIQ(9009063.5,AGREC,.05,"I"))
  1. ;
  1. S AGUSR=$S(($E(AGUSRL,1,3)=$E(AGUSRR,1,3))&($E($P(AGUSRL,",",2),1)=$E($P(AGUSRR,",",2),1)):"1^PASSED",1:"0^FAILED ***")
  1. S AGDT=$S(AGDTL=$P(AGDTR,"@",1):"1^PASSED",1:"0^FAILED ***")
  1. ;
  1. W !,"USER: ",?16,AGUSRL,?30,"...",?35,$E(AGUSRR,1,23),?60,$P(AGUSR,U,2)
  1. W !,"DATE/TIME: ",?16,AGDTL,?30,"...",?35,$E(AGDTR,1,23),?60,$P(AGDT,U,2)
  1. ;
  1. Q $S(+AGUSR++AGDT=2:1,1:0)
  1. ;
  1. P3(AGREC,AGPID) ;EP - CHECK PATIENT
  1. N AGDFN,AGNAM,AGDOB,AGSSN,AGNAML,AGDOBL,AGSSNL,AGNAMR,AGDOBR,AGSSNR
  1. ;
  1. S AGNAML=$P($P(AGPID,"[",2),"__",1),AGDOBL=$P($P(AGPID,"[",2),"__",2),AGSSNL="XXX-XX-"_$P($P($P(AGPID,"[",2),"__",3),"]",1)
  1. ;
  1. S AGDFN=$$GET1^DIQ(9009063.5,AGREC,.01,"I")
  1. S AGNAMR=$$GET1^DIQ(2,AGDFN,.01),AGDOBR=$$FMTE^XLFDT($$GET1^DIQ(2,AGDFN,.03,"I")),AGSSNR=$$GET1^DIQ(9000001,AGDFN,1107.3)
  1. ;
  1. S AGNAM=$S(($E(AGNAML,1,3)=$E(AGNAMR,1,3))&($E($P(AGNAML,",",2),1)=$E($P(AGNAMR,",",2),1)):"1^PASSED",1:"0^FAILED ***")
  1. S AGDOB=$S(AGDOBL=AGDOBR:"1^PASSED",1:"0^FAILED ***"),AGSSN=$S(AGSSNL=AGSSNR:"1^PASSED",1:"0^FAILED ***")
  1. ;
  1. W !,"PT NAME: ",?16,AGNAML,?30,"...",?35,$E(AGNAMR,1,23),?60,$P(AGNAM,U,2)
  1. W !,"PT DOB: ",?16,AGDOBL,?30,"...",?35,$E(AGDOBR,1,23),?60,$P(AGDOB,U,2)
  1. W !,"PT SSN: ",?16,AGSSNL,?30,"...",?35,$E(AGSSNR,1,23),?60,$P(AGSSN,U,2)
  1. ;
  1. Q $S(+AGNAM++AGDOB++AGSSN=3:1,1:0)
  1. ;
  1. ENC(AGUSER,AGDT,AGDFN,AGREC) ;EP - CREATE UID
  1. N AGRES,AGCNT,AGRECE
  1. S AGRES=$$UIDE(AGUSER,AGDT)_$$ENC^AUPNPAT(AGDFN),AGRECE=""
  1. S AGREC=$TR(AGREC,"1234567890","7950318246")
  1. S:$L(AGREC>5) AGRECE=$E(AGREC,6,$L(AGREC)),AGREC=$E(AGREC,1,5)
  1. F AGCNT=$L(AGREC):-1:1 S AGRES=$E(AGRES,1,$S((AGCNT-1*4)<$L(AGRES)+1:(AGCNT-1*4),1:$L(AGRES)))_$E(AGREC,AGCNT,AGCNT)_$S((AGCNT-1*4+1)<$L(AGRES):$E(AGRES,(AGCNT-1*4+1),$L(AGRES)),1:"")
  1. S AGRES=AGRES_AGRECE
  1. Q AGRES
  1. ;
  1. DEC(AGSTR) ;EP - DECODE UID
  1. N AGRES,AGCNT,AGUID,AGPID,AGREC
  1. S AGRES=AGSTR,AGREC="",AGRECE=""
  1. S:$L(AGRES>25) AGRECE=$E(AGRES,26,$L(AGRES)),AGRES=$E(AGRES,1,25)
  1. F AGCNT=0:1:$L(AGRES)-21 S AGREC=AGREC_$E(AGRES,(4*AGCNT+1),(4*AGCNT+1)),AGRES=$S((4*AGCNT)>0:$E(AGRES,1,(4*AGCNT)),1:"")_$E(AGRES,(4*AGCNT+2),$L(AGRES))
  1. S AGREC=AGREC_AGRECE
  1. S AGREC=$TR(AGREC,"7950318246","1234567890")
  1. Q AGREC_"^"_$$UIDD($E(AGRES,1,8))_"^"_$$DEC^AUPNPAT($E(AGRES,9,20))
  1. ;
  1. UIDE(AGUSER,AGDT) ;EP - CREATE ENCRYPTED USER/DT CODE
  1. N AUPNX,AUPNV,X,X1,Y,I
  1. ; take 1st 3 chars of name, replace punctuation with numbers, pad out
  1. ; to 3 chars
  1. S AUPNX=$E($P($P(^VA(200,AGUSER,0),U),","),1,3)
  1. S AUPNX=$TR(AUPNX," '-.,","01234")
  1. F I=1:1:(3-$L(AUPNX)) S AUPNX=AUPNX_"5"
  1. S AUPNV=AUPNX
  1. ;----------
  1. ; take 1st initial, 0 if null
  1. S AUPNX=$E($P($P(^VA(200,AGUSER,0),U),",",2)) S:AUPNX="" AUPNX=0
  1. ;----------
  1. ; concatenate in reverse order
  1. S AUPNV=$E(AUPNV,3)_$E(AUPNV,2)_$E(AUPNV)_AUPNX
  1. ;----------
  1. ; concatenate fileman date printed (converted to $H/hex format)
  1. S AUPNX=AGDT S:$L(AUPNX)'=7 AUPNX=3991231
  1. S AUPNX=$$FMTH^XLFDT(AUPNX,1)
  1. S X=AUPNX,X1=16 D CNV^XTBASE S Y=$E(Y,1,4)
  1. F I=1:1:(4-$L(Y)) S Y=Y_"-"
  1. S AUPNV=AUPNV_Y
  1. ;----------
  1. ; shuffle
  1. S AUPNV=$E(AUPNV,3,4)_$E(AUPNV,7,8)_$E(AUPNV,1,2)_$E(AUPNV,5,6)
  1. ;----------
  1. ; encrypt
  1. S AUPNV=$TR(AUPNV,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","UVWXJKLMYZABQRSTCDGHIEFNOP")
  1. S AUPNV=$TR(AUPNV,"1234567890","8967320415")
  1. ;----------
  1. Q AUPNV
  1. UIDD(AGUID) ;EP - DECODE ENCRYPTED USER/DT CODE
  1. N AUPNX,AUPNV,AUPNY,X,X1,Y,I
  1. S AUPNV="["
  1. ;----------
  1. ; decrypt
  1. S AGUID=$TR(AGUID,"UVWXJKLMYZABQRSTCDGHIEFNOP","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. S AGUID=$TR(AGUID,"8967320415","1234567890")
  1. ;----------
  1. ; unshuffle
  1. S AGUID=$E(AGUID,5,6)_$E(AGUID,1,2)_$E(AGUID,7,8)_$E(AGUID,3,4)
  1. ;----------
  1. ; take 1st 3 chars of name, replace numbers with punctuation
  1. S AUPNX=""
  1. F I=3,2,1 S AUPNX=AUPNX_$E(AGUID,I)
  1. S AUPNX=$TR(AUPNX,"01234"," '-.,")
  1. S AUPNY=""
  1. F I=1:1:3 S:$E(AUPNX,I)'="5" AUPNY=AUPNY_$E(AUPNX,I)
  1. S AUPNX=AUPNY_","_$S($E(AGUID,4)'="0":$E(AGUID,4),1:"")
  1. S AUPNV=AUPNV_AUPNX
  1. ;----------
  1. ; fileman date printed (converted to external format)
  1. S AUPNX=""
  1. S X=$E(AGUID,5,8)
  1. F I=1:1:4 S:$E(X,I)'="-" AUPNX=AUPNX_$E(X,I)
  1. S X=AUPNX,X1=16 D DEC^XTBASE S AUPNX=Y
  1. S AUPNX=$$HTE^XLFDT(AUPNX,1)
  1. S AUPNV=AUPNV_"__"_AUPNX
  1. ;----------
  1. S AUPNV=AUPNV_"]"
  1. Q AUPNV
  1. HDR ;HEADER TEXT
  1. ;;
  1. ;;Verify the authenticity of a printed IHS Eligibility Letter by entering the
  1. ;;unique identifier code given to you by the representative of the entity
  1. ;;requesting verification.
  1. ;;
  1. ;;*** NOTE: The codes printed on the IHS Eligibility Letters are unique to ***
  1. ;;*** a facility and can only be verified at the site it was printed from. ***
  1. ;;
  1. ;;END