| 1 | NURSEXP ;HIRMFO/JH,MD,FT-CHECK AND CLEAN EXPERIENCE SUB-FILE IN FILE 210 ;4/4/97  11:14 | 
|---|
| 2 | ;;4.0;NURSING SERVICE;;Apr 25, 1997 | 
|---|
| 3 | TXT ; | 
|---|
| 4 | ;;This option checks the integrity of the Nurs Staff File's Experience | 
|---|
| 5 | ;;sub-file in field 22.5, and makes the following error corrections when | 
|---|
| 6 | ;;necessary: | 
|---|
| 7 | ;; | 
|---|
| 8 | ;;a.  Converts pointer values in the Name field to free text values. | 
|---|
| 9 | ;;b.  Removes records with no data or cross-references. | 
|---|
| 10 | ;;c.  Rebuilds missing Name entries that have a valid 'B' index entry. | 
|---|
| 11 | ;;d.  Converts lower case Name entries to upper case. | 
|---|
| 12 | ;;e.  Deletes experience entries missing from the NURS Clinical Background File. | 
|---|
| 13 | ;;f.  Deletes duplicate cross references. | 
|---|
| 14 | S TXT=$T(TXT) F I=0:1:10 S TXT=$T(TXT+I) W !,$P(TXT,";",3) | 
|---|
| 15 | W ! S DIR(0)="E" D ^DIR Q:$G(DIRUT) | 
|---|
| 16 | ; RE-CROSSREFERENCE SUB FILE 22.5, | 
|---|
| 17 | W @IOF,"Checking Experience sub-file for deficiencies, repairing where necessary.",! | 
|---|
| 18 | S II="210.13AI",DA(1)=0 F  S DA(1)=$O(^NURSF(210,DA(1))) Q:DA(1)'>0  S DOUT="" D  W "." | 
|---|
| 19 | .  S:$P($G(^NURSF(210,DA(1),20,0)),U,2)'="" $P(^(0),U,2)=II | 
|---|
| 20 | .  I $G(^NURSF(210,DA(1),20,0))="" S NOD=0,NOD=$O(^NURSF(210,DA(1),20,NOD)),XRF="",XRF=$O(^NURSF(210,DA(1),20,"B",XRF)) D | 
|---|
| 21 | ..  I NOD>0 S ^NURSF(210,DA(1),20,0)="^"_II_"^^" D | 
|---|
| 22 | ...  I XRF="",$P($G(^NURSF(210,DA(1),20,NOD,0)),U)="" S DIK="^NURSF(210,DA(1),20," D ^DIK K DIK Q | 
|---|
| 23 | ...  I XRF="" S ^NURSF(210,DA(1),20,"B",$P(^NURSF(210,DA(1),20,NOD,0),U),NOD)="" Q | 
|---|
| 24 | ..  I NOD'>0 D  Q:DOUT | 
|---|
| 25 | ...  I XRF'="" S NURX=$O(^NURSF(210,DA(1),20,"B",XRF,0)),$P(^NURSF(210,DA(1),20,NURX,0),U)=XRF,^NURSF(210,DA(1),20,0)="^"_II_"^^" Q | 
|---|
| 26 | ...  Q | 
|---|
| 27 | ..  Q | 
|---|
| 28 | .  I $G(^NURSF(210,DA(1),20,0))'="" S NOD=0,NOD=$O(^NURSF(210,DA(1),20,NOD)),XRF="",XRF=$O(^NURSF(210,DA(1),20,"B","")) D  Q:DOUT | 
|---|
| 29 | ..  I NOD'>0 D  Q:DOUT | 
|---|
| 30 | ...  I XRF="" K ^NURSF(210,DA(1),20,0) S DOUT=1 Q  ;KILL ZERO NODE IF NO ENTRY OR XREF | 
|---|
| 31 | ...  S $P(^NURSF(210,DA(1),20,XRF,0),U)=$O(^NURSF(210,DA(1),20,"B",XRF,"")) ;Reset .01 field if null and theres a X'REF | 
|---|
| 32 | ...  Q | 
|---|
| 33 | ..  I NOD>0 D  Q:DOUT | 
|---|
| 34 | ...  I XRF="",$P($G(^NURSF(210,DA(1),20,NOD,0)),U)'="" S ^NURSF(210,DA(1),20,"B",$P(^NURSF(210,DA(1),20,NOD,0),U),NOD)="" Q  ;If node and no cross-reference, set XRF | 
|---|
| 35 | ...  I XRF="",$P(^NURSF(210,DA(1),20,NOD,0),U)="" K ^NURSF(210,DA(1),20,NOD,0) Q | 
|---|
| 36 | ...  I XRF'="",$P(^NURSF(210,DA(1),20,NOD,0),U)="" S $P(^NURSF(210,DA(1),20,NOD,0),U)=XRF | 
|---|
| 37 | ...  Q | 
|---|
| 38 | ..  Q | 
|---|
| 39 | .  S DA=$O(^NURSF(210,DA(1),20,"")) Q:DA=""  S DA=0 F  S DA=$O(^NURSF(210,DA(1),20,DA)) Q:DA'>0  D | 
|---|
| 40 | ..  I $E($P(^NURSF(210,DA(1),20,DA,0),U),3)?1.L S NURX=$P(^NURSF(210,DA(1),20,DA,0),U) S $P(^NURSF(210,DA(1),20,DA,0),U)=$$UPPER($P(^NURSF(210,DA(1),20,DA,0),U)) D  ;Converte lower to upper | 
|---|
| 41 | ...  K ^NURSF(210,DA(1),20,"B",NURX,DA) S ^NURSF(210,DA(1),20,"B",$P(^NURSF(210,DA(1),20,DA,0),U),DA)="" | 
|---|
| 42 | ...  Q | 
|---|
| 43 | ..  I $P($G(^NURSF(210,DA(1),20,DA,0)),U)?1.N,$P($G(^NURSF(211.5,$P(^NURSF(210,DA(1),20,DA,0),U),0)),U)'="" S NURX=$P(^NURSF(210,DA(1),20,DA,0),U),$P(^NURSF(210,DA(1),20,DA,0),U)=$P(^NURSF(211.5,$P(^(0),U),0),U) D  ;Convert Pointer to Free Text | 
|---|
| 44 | ...  K ^NURSF(210,DA(1),20,"B",NURX,DA) S ^NURSF(210,DA(1),20,"B",$P(^NURSF(210,DA(1),20,DA,0),U),DA)="" ;Replace pointer cross-reference | 
|---|
| 45 | ...  Q | 
|---|
| 46 | ..  I $P($G(^NURSF(210,DA(1),20,DA,0)),U)?1.N,$G(^NURSF(211.5,$P(^NURSF(210,DA(1),20,DA,0),U),0))="" S DIK="^NURSF(210,DA(1),20," D ^DIK K DIK S DOUT=1 Q  ;Kill Experience field if pointed to nowhere | 
|---|
| 47 | ..  I $P($G(^NURSF(210,DA(1),20,DA,0)),U)?1N.E S DIK="^NURSF(210,DA(1),20," D ^DIK K DIK S DOUT=1 Q  ;Kill entry if erroneous data in .01 field | 
|---|
| 48 | ..  Q | 
|---|
| 49 | .  S XX="" F I=0:0 S XX=$O(^NURSF(210,DA(1),20,"B",XX)) Q:XX=""  D | 
|---|
| 50 | ..  S X=0 F I=0:0 S X=$O(^NURSF(210,DA(1),20,"B",XX,X)) Q:X=""  D | 
|---|
| 51 | ...  I $P($G(^NURSF(210,DA(1),20,X,0)),U)'=XX K ^NURSF(210,DA(1),20,"B",XX,X) ;KILL EXCESS XREF's | 
|---|
| 52 | ...  Q | 
|---|
| 53 | ..  Q | 
|---|
| 54 | .  S DIK="^NURSF(210,DA(1),20,",DIK(1)=".01^B" D ENALL^DIK K DIK ;Re-Cross-reference .01 field | 
|---|
| 55 | .  Q | 
|---|
| 56 | W !,"Done...",!! D CLOSE^NURSUT1,^NURSKILL | 
|---|
| 57 | Q | 
|---|
| 58 | UPPER(X) ;Convert lower to upper | 
|---|
| 59 | Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") | 
|---|