1 | MPIFSPC ;SLC/ARS-MASTER PATIENT INDEX SYSTEM CHECK SUM RTN ;SEP 4, 1996
|
---|
2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**48**;30 Apr 99;Build 6
|
---|
3 | ;MPICHECK
|
---|
4 | CHECKDG(NUM) ;Check Digit Calculation
|
---|
5 | ;change to local array of MPI global.
|
---|
6 | ;D EXIN **48 CHANGE TO FUNCTION CALL
|
---|
7 | ;K I,J,LTH,MPID,MPIMAP,MPIT,TAB,VAL
|
---|
8 | N TMP
|
---|
9 | S TMP=$$EXIN(NUM)
|
---|
10 | Q TMP
|
---|
11 | READ ;
|
---|
12 | ;
|
---|
13 | EXIN(NUM) ;**48 MADE THIS A FUNCTION CALL
|
---|
14 | N SUM,I,J,LTH,MPID,MPIMAP,MPIT,TAB,VAL
|
---|
15 | I $L(NUM)'=16 D
|
---|
16 | .; W !,"I WILL PAD TO 16!"
|
---|
17 | .S LTH=($L(NUM)+1) F I=LTH:1:16 S NUM="0"_NUM
|
---|
18 | F MPIT=1:1:6 D
|
---|
19 | .; For each check digit, compute a value
|
---|
20 | .F MPID=1:1:16 D
|
---|
21 | ..S MPIMAP(MPIT,0,"MAP")=0
|
---|
22 | ..S MPIMAP(MPIT,MPID)=$E(NUM,MPID),VAL=MPIMAP(MPIT,MPID)
|
---|
23 | ..S SUM=(MPIMAP(MPIT,MPID)+(MPIMAP(MPIT,MPID-1,"MAP")))#10
|
---|
24 | ..S MPIMAP(MPIT,MPID,"MAP")=$P($P(^MPIF(984.5,MPIT,SUM),"^",2),";",MPID)
|
---|
25 | .S TAB(MPIT)=MPIMAP(MPIT,16,"MAP")
|
---|
26 | .;Q
|
---|
27 | S SUM=""
|
---|
28 | F J=1:1:6 D
|
---|
29 | .S SUM=SUM_TAB(J)
|
---|
30 | Q SUM
|
---|
31 | ;
|
---|
32 | ;Before calculation of check digits the number must be
|
---|
33 | ;expanded to sixteen digits by padding zeros to the
|
---|
34 | ;left of the number.
|
---|