| 1 | EASEZF2 ;ALB/jap - Filing 1010EZ Data to Patient Database ;10/31/00  13:07
 | 
|---|
| 2 |  ;;1.0;ENROLLMENT APPLICATION SYSTEM;**1,9,51,57**;Mar 15, 2001
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | F408(EASAPP,EASDFN) ;
 | 
|---|
| 5 |  N KEYIEN,FILE,SUBFILE,FLD,DATAKEY,MULTIPLE,MM,SECT,QUES,SUBIEN,ACCEPT,EZDATA,PTDATA,LINK
 | 
|---|
| 6 |  N DFN,DGPR12,INCYR,TESTYR,LASTINC,XLINK,EROOT,EAS,ERR,IENS,MSG,X,Y
 | 
|---|
| 7 |  Q:'$G(EASDFN)
 | 
|---|
| 8 |  ;determine income year for financial data
 | 
|---|
| 9 |  S Y=$P($G(^EAS(712,EASAPP,0)),U,6) I Y="" S Y=DT
 | 
|---|
| 10 |  S %F=5,X=$$FMTE^XLFDT(Y,%F),X=+$P(X,"/",3)-1,%DT="P" D ^%DT S INCYR=Y
 | 
|---|
| 11 |  S YREND=$E(DT,1,3)_"1231"
 | 
|---|
| 12 |  ;don't file any 408 data if applicant has income test for current year at this site
 | 
|---|
| 13 |  S LASTINC=$$LST^DGMTU(EASDFN,YREND,1) I LASTINC="" S LASTINC=$$LST^DGMTU(EASDFN,YREND,2)
 | 
|---|
| 14 |  S TESTYR=$P(LASTINC,U,2)
 | 
|---|
| 15 |  Q:($E(TESTYR,1,3)=$E(DT,1,3))&($P(LASTINC,U,5)>1)
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ;DGPR12("AP") is the Applicant's (veteran's) IEN in file #408.12
 | 
|---|
| 18 |  S DGPR12("AP")=""
 | 
|---|
| 19 |  ;add Applicant to file #408.12 if not there already;
 | 
|---|
| 20 |  ;make this addition even if no other financial data is available;
 | 
|---|
| 21 |  I '$D(^DGPR(408.12,"B",EASDFN)) D
 | 
|---|
| 22 |  .;create the file #408.12 record
 | 
|---|
| 23 |  .K EAS,ERR,EZIENS
 | 
|---|
| 24 |  .S EAS(EASAPP,408.12,"+1,",".01")=EASDFN
 | 
|---|
| 25 |  .S EAS(EASAPP,408.12,"+1,",".02")=1
 | 
|---|
| 26 |  .S EAS(EASAPP,408.12,"+1,",".03")=EASDFN_";DPT("
 | 
|---|
| 27 |  .S EROOT="EAS("_EASAPP_")"
 | 
|---|
| 28 |  .D UPDATE^DIE("S",EROOT,"EZIENS","ERR")
 | 
|---|
| 29 |  .S DGPR12("AP")=$G(EZIENS(1))
 | 
|---|
| 30 |  .Q:DGPR12("AP")=""
 | 
|---|
| 31 |  .;create the subfile #408.1275 record
 | 
|---|
| 32 |  .K EAS,ERR,EZIENS
 | 
|---|
| 33 |  .;S KEY=+$$KEY711^EASEZU1("APPLICANT DATE OF BIRTH")
 | 
|---|
| 34 |  .;S DOB=$P($$DATA712^EASEZU1(EASAPP,KEY,1),U,1)
 | 
|---|
| 35 |  .;use DOB from file #2
 | 
|---|
| 36 |  .S X=$P($G(^DPT(EASDFN,0)),U,3),%DT="PX" D ^%DT S DOB=Y
 | 
|---|
| 37 |  .S EAS(EASAPP,408.1275,"+1,"_DGPR12("AP")_",",".01")=DOB
 | 
|---|
| 38 |  .S EAS(EASAPP,408.1275,"+1,"_DGPR12("AP")_",",".02")="YES"
 | 
|---|
| 39 |  .D UPDATE^DIE("ES",EROOT,"EZIENS","ERR")
 | 
|---|
| 40 |  .;link 1010EZ data with new record in #408.12
 | 
|---|
| 41 |  I DGPR12("AP")="" S DGPR12("AP")=$O(^DGPR(408.12,"B",EASDFN,0))
 | 
|---|
| 42 |  ;if no record for Applicant in file #408.12 exists, then don't continue
 | 
|---|
| 43 |  Q:DGPR12("AP")=""
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;kill local holding arrays
 | 
|---|
| 46 |  K AP,SP,CN,FLINK
 | 
|---|
| 47 |  ;get data for file #408.12,#408.13,#408.21,#408.22 into local arrays 
 | 
|---|
| 48 |  S SECT=""
 | 
|---|
| 49 |  F  S SECT=$O(^TMP("EZTEMP",$J,SECT)) Q:SECT=""  S MULTIPLE=0 D
 | 
|---|
| 50 |  .F  S MULTIPLE=$O(^TMP("EZTEMP",$J,SECT,MULTIPLE)) Q:MULTIPLE=""  S QUES="" D
 | 
|---|
| 51 |  ..F  S QUES=$O(^TMP("EZTEMP",$J,SECT,MULTIPLE,QUES)) Q:QUES=""  D
 | 
|---|
| 52 |  ...S DATAKEY=SECT_";"_QUES
 | 
|---|
| 53 |  ...;call to suppress may be redundant
 | 
|---|
| 54 |  ...Q:$$SUPPRESS^EASEZU4(EASAPP,DATAKEY,1,EASVRSN)
 | 
|---|
| 55 |  ...S X=^TMP("EZTEMP",$J,SECT,MULTIPLE,QUES)
 | 
|---|
| 56 |  ...S KEYIEN=$P(X,U,1),EZDATA=$P(X,U,2),ACCEPT=$P(X,U,3),SUBIEN=$P(X,U,4),PTDATA=$P(X,U,5)
 | 
|---|
| 57 |  ...S LN=^TMP("EZDATA",$J,KEYIEN),FILE=$P(LN,U,1),SUBFILE=$P(LN,U,2),FLD=$P(LN,U,3)
 | 
|---|
| 58 |  ...Q:($P(FILE,".",1)'=408)
 | 
|---|
| 59 |  ...S LINK=$P($G(^EAS(712,EASAPP,10,SUBIEN,2)),U,2)
 | 
|---|
| 60 |  ...S DATANM=$P($G(^EAS(711,KEYIEN,0)),U,1)
 | 
|---|
| 61 |  ...S MM=MULTIPLE S:DATANM["CHILD(N)" MM=MULTIPLE+1
 | 
|---|
| 62 |  ...I (SECT="IIF")!(SECT="IIG") S MM=MULTIPLE
 | 
|---|
| 63 |  ...S ARR=$S(DATANM["SPOUSE":"SP",DATANM["CHILD":"CN",1:"AP")
 | 
|---|
| 64 |  ...S @ARR@(MM,FILE,SUBFILE,FLD)=EZDATA_U_ACCEPT_U_SUBIEN_U_PTDATA_U_LINK
 | 
|---|
| 65 |  ;delete any Spouse or Dependent data if #.01 field for file #408.13 does not exist
 | 
|---|
| 66 |  I $D(SP(1,408.13,408.13,.01))'=1 K SP
 | 
|---|
| 67 |  ;if contributed to spouse, applicant lived with patient = NO
 | 
|---|
| 68 |  I +$P($G(AP(1,408.22,408.22,.07)),U,1) D
 | 
|---|
| 69 |  .S AP(1,408.22,408.22,.06)="NO^2^^^"_$P(AP(1,408.22,408.22,.07),U,5)
 | 
|---|
| 70 |  S MM=0 F  S MM=$O(CN(MM)) Q:'MM  D
 | 
|---|
| 71 |  .I $D(CN(MM,408.13,408.13,.01))'=1 K CN(MM) Q
 | 
|---|
| 72 |  .;check for amt contributed to child
 | 
|---|
| 73 |  .I +$P($G(CN(MM,408.22,408.22,.19)),U,1) D
 | 
|---|
| 74 |  ..S CN(MM,408.22,408.22,.1)="YES^2^^^"_$P(CN(MM,408.22,408.22,.19),U,5)
 | 
|---|
| 75 |  ..S CN(MM,408.22,408.22,.06)="NO^2^^^"_$P(CN(MM,408.22,408.22,.19),U,5)
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  ;gather links to VistA for Applicant
 | 
|---|
| 78 |  S FLINK("AP",1,408.12)=DGPR12("AP")
 | 
|---|
| 79 |  F FILE=408.21,408.22 D
 | 
|---|
| 80 |  .S XLINK="",MULTIPLE=1,SUBFILE=FILE,FLD=""
 | 
|---|
| 81 |  .F  S FLD=$O(AP(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 82 |  ..S FLINK("AP",1,FILE)=+$P(AP(MULTIPLE,FILE,SUBFILE,FLD),U,5)
 | 
|---|
| 83 |  ;gather links to VistA for Spouse
 | 
|---|
| 84 |  F FILE=408.12,408.13,408.21,408.22 D
 | 
|---|
| 85 |  .S XLINK="",MULTIPLE=1,SUBFILE=FILE,FLD=""
 | 
|---|
| 86 |  .F  S FLD=$O(SP(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 87 |  ..S FLINK("SP",MULTIPLE,FILE)=+$P(SP(MULTIPLE,FILE,SUBFILE,FLD),U,5)
 | 
|---|
| 88 |  .I FILE=408.12 S SUBFILE=408.1275 F  S FLD=$O(SP(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 89 |  ..S FLINK("SP",MULTIPLE,SUBFILE)=$P($P(SP(MULTIPLE,FILE,SUBFILE,FLD),U,5),";",2)
 | 
|---|
| 90 |  ..S FLINK("SP",MULTIPLE,FILE)=$P($P(SP(MULTIPLE,FILE,SUBFILE,FLD),U,5),";",1)
 | 
|---|
| 91 |  ;gather links to VistA for Dependents
 | 
|---|
| 92 |  S MULTIPLE=0 F  S MULTIPLE=$O(CN(MULTIPLE)) Q:'MULTIPLE  D
 | 
|---|
| 93 |  .F FILE=408.13,408.12,408.21,408.22 D
 | 
|---|
| 94 |  ..S XLINK="",SUBFILE=FILE,FLD=""
 | 
|---|
| 95 |  ..F  S FLD=$O(CN(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 96 |  ...S FLINK("CN",MULTIPLE,FILE)=+$P(CN(MULTIPLE,FILE,SUBFILE,FLD),U,5)
 | 
|---|
| 97 |  ..I FILE=408.12 S SUBFILE=408.1275 F  S FLD=$O(CN(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 98 |  ...S FLINK("CN",MULTIPLE,SUBFILE)=$P($P(CN(MULTIPLE,FILE,SUBFILE,FLD),U,5),";",2)
 | 
|---|
| 99 |  ...S FLINK("CN",MULTIPLE,FILE)=$P($P(CN(MULTIPLE,FILE,SUBFILE,FLD),U,5),";",1)
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  ;file data
 | 
|---|
| 102 |  Q:DGPR12("AP")=""
 | 
|---|
| 103 |  S DFN=EASDFN
 | 
|---|
| 104 |  D AP
 | 
|---|
| 105 |  I $D(FLINK("SP")) D SP^EASEZF3
 | 
|---|
| 106 |  I $D(FLINK("CN")) D CN^EASEZF4
 | 
|---|
| 107 |  D LINKUP^EASEZF4
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  Q
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | AP ;file Applicant data
 | 
|---|
| 112 |  N MT,P22,MULTIPLE,FILE,SUBFILE,FLD,XDATA,ACCEPT,SUBIEN,EZDATA,EAS,ERR,KEY
 | 
|---|
| 113 |  F FILE=408.21,408.22 D
 | 
|---|
| 114 |  .S MULTIPLE=1,SUBFILE=FILE,FLD=""
 | 
|---|
| 115 |  .S XLINK=$G(FLINK("AP",1,FILE))
 | 
|---|
| 116 |  .;record in file #408.21 needed for all further data filing
 | 
|---|
| 117 |  .Q:(FILE'=408.21)&('$G(FLINK("AP",1,408.21)))
 | 
|---|
| 118 |  .;for data elements with link to database, 
 | 
|---|
| 119 |  .;only file 1010EZ data if accepted by user;
 | 
|---|
| 120 |  .;data in external format
 | 
|---|
| 121 |  .I XLINK D
 | 
|---|
| 122 |  ..S FLD="" F  S FLD=$O(AP(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 123 |  ...S XDATA=AP(MULTIPLE,FILE,SUBFILE,FLD),ACCEPT=$P(XDATA,U,2)
 | 
|---|
| 124 |  ...I ACCEPT D LINK(XDATA,FILE,FLD,"AP",MULTIPLE)
 | 
|---|
| 125 |  .;for data elements with no link to database, 
 | 
|---|
| 126 |  .;always create new record(s) to store 1010EZ data;
 | 
|---|
| 127 |  .;use internal data format
 | 
|---|
| 128 |  .I 'XLINK D
 | 
|---|
| 129 |  ..K EAS,ERR
 | 
|---|
| 130 |  ..S FLD="" F  S FLD=$O(AP(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 131 |  ...S EZDATA=$P(AP(MULTIPLE,FILE,SUBFILE,FLD),U,1)
 | 
|---|
| 132 |  ...S EAS(EASAPP,FILE,"+1,",FLD)=EZDATA
 | 
|---|
| 133 |  ..I FILE=408.21 D
 | 
|---|
| 134 |  ...S EAS(EASAPP,FILE,"+1,",".01")=INCYR
 | 
|---|
| 135 |  ...S EAS(EASAPP,FILE,"+1,",".02")=FLINK("AP",1,408.12)
 | 
|---|
| 136 |  ...S EAS(EASAPP,FILE,"+1,","101")=DUZ
 | 
|---|
| 137 |  ...S EAS(EASAPP,FILE,"+1,","102")=DT
 | 
|---|
| 138 |  ...S EAS(EASAPP,FILE,"+1,","103")=DUZ
 | 
|---|
| 139 |  ...S EAS(EASAPP,FILE,"+1,","104")=DT
 | 
|---|
| 140 |  ..I FILE=408.22,$G(FLINK("AP",1,408.21)) D
 | 
|---|
| 141 |  ...S EAS(EASAPP,FILE,"+1,",".01")=EASDFN
 | 
|---|
| 142 |  ...S EAS(EASAPP,FILE,"+1,",".02")=FLINK("AP",1,408.21)
 | 
|---|
| 143 |  ...I $G(SP(1,408.13,408.13,.01))'="" S EAS(EASAPP,FILE,"+1,",".05")=1
 | 
|---|
| 144 |  ...I $G(CN(1,408.13,408.13,.01))'="" S EAS(EASAPP,FILE,"+1,",".08")=1
 | 
|---|
| 145 |  ...S X=$G(EAS(EASAPP,FILE,"+1,",".06"))
 | 
|---|
| 146 |  ...S EAS(EASAPP,FILE,"+1,",".06")=$S(X="YES":1,X="NO":0,1:"")
 | 
|---|
| 147 |  ..S FLINK("AP",MULTIPLE,FILE)=$$NOLINK(.EAS,"AP",MULTIPLE)
 | 
|---|
| 148 |  ..S FLD="" F  S FLD=$O(AP(MULTIPLE,FILE,SUBFILE,FLD)) Q:FLD=""  D
 | 
|---|
| 149 |  ...S SUBIEN=$P(AP(MULTIPLE,FILE,SUBFILE,FLD),U,3)
 | 
|---|
| 150 |  ...;store link to new record in subfile #712.01
 | 
|---|
| 151 |  ...S $P(AP(MULTIPLE,FILE,SUBFILE,FLD),U,5)=FLINK("AP",1,FILE)
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  Q
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | LINK(XDATA,FILE,FLD,GRP,MULTIPLE) ;setup to call FM database server if link to file exists & data accepted
 | 
|---|
| 156 |  N MSG,EZDATA,SUBIEN,PTDATA,XLINK
 | 
|---|
| 157 |  K EAS,ERR
 | 
|---|
| 158 |  S EZDATA=$P(XDATA,U,1),SUBIEN=$P(XDATA,U,3),PTDATA=$P(XDATA,U,4),XLINK=$P(XDATA,U,5)
 | 
|---|
| 159 |  S IENS=XLINK_","
 | 
|---|
| 160 |  S EROOT="EAS("_EASAPP_")"
 | 
|---|
| 161 |  D VAL^DIE(FILE,IENS,FLD,"F",EZDATA,,EROOT,"ERR")
 | 
|---|
| 162 |  I $D(ERR) D ERROR(GRP,MULTIPLE,.ERR,"LINK") Q
 | 
|---|
| 163 |  ;file to database if input is valid
 | 
|---|
| 164 |  I '$D(ERR) D
 | 
|---|
| 165 |  .I FILE=408.21 D
 | 
|---|
| 166 |  ..S EAS(EASAPP,FILE,IENS,103)=DUZ
 | 
|---|
| 167 |  ..S EAS(EASAPP,FILE,IENS,104)=DT
 | 
|---|
| 168 |  .D FILE^DIE("S",EROOT,"ERR")
 | 
|---|
| 169 |  .;set any replaced data into subfile #712.01 for audit
 | 
|---|
| 170 |  .I SUBIEN S $P(^EAS(712,EASAPP,10,SUBIEN,2),U,1)=PTDATA
 | 
|---|
| 171 |  Q
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 | NOLINK(EAS,GRP,MULTIPLE) ;add new record with accepted data if no link exists;
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 |  K EZIENS,ERR,LINK
 | 
|---|
| 176 |  S EROOT="EAS("_EASAPP_")"
 | 
|---|
| 177 |  D UPDATE^DIE("S",EROOT,"EZIENS","ERR")
 | 
|---|
| 178 |  ;call to UPDATE should not return ERR since internal data formats are used, but just in case;
 | 
|---|
| 179 |  I $D(ERR) D ERROR(GRP,MULTIPLE,.ERR,"NOLINK")
 | 
|---|
| 180 |  ;return ien to new record
 | 
|---|
| 181 |  S LINK=$G(EZIENS(1))
 | 
|---|
| 182 |  Q LINK
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 | ERROR(GRP,MULTIPLE,ERR,FROM) ;add FM error text to error msg
 | 
|---|
| 185 |  N L,LSTLN,ECODE,ENUMBER
 | 
|---|
| 186 |  S ECODE="" F  S ECODE=$O(ERR("DIERR","E",ECODE)) Q:ECODE=""  S ENUMBER=0 F  S ENUMBER=$O(ERR("DIERR","E",ECODE,ENUMBER)) Q:'ENUMBER  D
 | 
|---|
| 187 |  .S LSTLN=+$O(^TMP("1010EZERROR",$J,""),-1) I 'LSTLN S LSTLN=6
 | 
|---|
| 188 |  .S WHO=$S(GRP="SP":"SPOUSE",GRP="CN":"CHILD",1:"APPLICANT")
 | 
|---|
| 189 |  .I WHO="CHILD" S WHO=WHO_" #"_MULTIPLE
 | 
|---|
| 190 |  .S FIELD=$G(ERR("DIERR",ENUMBER,"PARAM","FIELD")),FILE=$G(ERR("DIERR",ENUMBER,"PARAM","FILE"))
 | 
|---|
| 191 |  .I FROM="LINK" D
 | 
|---|
| 192 |  ..S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)="1010EZ data for "_WHO_" was not filed to"
 | 
|---|
| 193 |  ..S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)="Field #"_FIELD_" of File #"_FILE_" because:"
 | 
|---|
| 194 |  .I FROM="NOLINK" D
 | 
|---|
| 195 |  ..S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)="A new record for "_WHO_" could not be created in"
 | 
|---|
| 196 |  ..S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)="File #"_FILE_" because Field #"_FIELD_" produced an error:"
 | 
|---|
| 197 |  .S L=0 F  S L=$O(ERR("DIERR",ENUMBER,"TEXT",L)) Q:'L  D
 | 
|---|
| 198 |  ..S LN=ERR("DIERR",ENUMBER,"TEXT",L)
 | 
|---|
| 199 |  ..I $L(LN)<50 S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)=LN Q
 | 
|---|
| 200 |  ..D WRAP(LN,.LSTLN)
 | 
|---|
| 201 |  .S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)=" "
 | 
|---|
| 202 |  Q
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 | WRAP(LN,LSTLN) ;parse a long error text line into several message lines
 | 
|---|
| 205 |  N PART,BB
 | 
|---|
| 206 |  F  D  Q:$L(LN)<41
 | 
|---|
| 207 |  .S PART=""
 | 
|---|
| 208 |  .F BB=1:1:99 S PART=PART_$P(LN," ",BB)_" " I $L(PART)>40 D  Q
 | 
|---|
| 209 |  ..S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)=PART
 | 
|---|
| 210 |  ..S LN=$P(LN," ",BB+1,99)
 | 
|---|
| 211 |  S LSTLN=LSTLN+1,^TMP("1010EZERROR",$J,LSTLN,0)=LN
 | 
|---|
| 212 |  Q
 | 
|---|