| 1 | RCBEUTRA ;WISC/RFJ-utilties for transactions (in file 433)           ;1 Jun 00
 | 
|---|
| 2 |  ;;4.5;Accounts Receivable;**153,169,204**;Mar 20, 1995
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | ADD433(BILLDA,TRANTYPE) ;  add a new transaction to file 433 (silent)
 | 
|---|
| 8 |  ;  return: ien of 433 transaction or 0^error msg
 | 
|---|
| 9 |  ;        : ^prca(433,ien) will be locked if entry selected
 | 
|---|
| 10 |  N %I,DA,DATA0,DD,DIC,DICR,DIE,DINUM,DIW,DLAYGO,DO,I,RCTRANDA,REFCODE,X,Y
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ;  find next available transaction number
 | 
|---|
| 13 |  ;  add an extra level of locks, some operating systems do not process
 | 
|---|
| 14 |  ;  the locks correctly if they happen at the same time.
 | 
|---|
| 15 |  L +^PRCA(433,"ADDNEWENTRY")
 | 
|---|
| 16 |  ;  start with last entry in file
 | 
|---|
| 17 |  ;    -> if no data is in the entry, lock it
 | 
|---|
| 18 |  ;       -> if the lock works and no data was added (prior to the lock)
 | 
|---|
| 19 |  ;          -> then you have the entry.
 | 
|---|
| 20 |  ;          -> otherwise, unlock it and start over
 | 
|---|
| 21 |  F DINUM=$P(^PRCA(433,0),"^",3)+1:1 I '$D(^PRCA(433,DINUM)) L +^PRCA(433,DINUM):1 Q:$T&('$D(^PRCA(433,DINUM)))  L -^PRCA(433,DINUM)
 | 
|---|
| 22 |  L -^PRCA(433,"ADDNEWENTRY")
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ;  add entry to file
 | 
|---|
| 25 |  S RCTRANDA=DINUM,(DIC,DIE)="^PRCA(433,",DIC(0)="L",DLAYGO=433,X=DINUM
 | 
|---|
| 26 |  ;  build DR string, 42=processed by (use postmaster if queued)
 | 
|---|
| 27 |  S DIC("DR")="42////"_$S($D(ZTQUEUED):.5,1:DUZ)_";"
 | 
|---|
| 28 |  S DIC("DR")=DIC("DR")_".03////"_BILLDA_";"  ;bill ien
 | 
|---|
| 29 |  S DIC("DR")=DIC("DR")_"12////"_TRANTYPE_";" ;transaction type
 | 
|---|
| 30 |  S DATA0=$G(^PRCA(430,BILLDA,0))
 | 
|---|
| 31 |  ;  appropriation symbol
 | 
|---|
| 32 |  I $P(DATA0,"^",18)'="" S DIC("DR")=DIC("DR")_"8////"_$P(DATA0,"^",18)_";"
 | 
|---|
| 33 |  ;  segment
 | 
|---|
| 34 |  I $P(DATA0,"^",21)'="" S DIC("DR")=DIC("DR")_"6////"_$P(DATA0,"^",21)_";"
 | 
|---|
| 35 |  ;  test for referral code
 | 
|---|
| 36 |  S REFCODE=$P($G(^PRCA(430,BILLDA,6)),"^",5)
 | 
|---|
| 37 |  I REFCODE'="" S REFCODE=$S(REFCODE="DC":"RC",1:REFCODE),DIC("DR")=DIC("DR")_"7////"_REFCODE_";"
 | 
|---|
| 38 |  ;  file it
 | 
|---|
| 39 |  D FILE^DICN
 | 
|---|
| 40 |  I Y=-1 L -^PRCA(433,RCTRANDA) Q "0^UNABLE TO ADD A NEW ENTRY TO FILE 433"
 | 
|---|
| 41 |  Q RCTRANDA
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | FY433(RCTRANDA) ;  transfer fiscal year multiple from 430 to 433
 | 
|---|
| 45 |  ;  bill number must be stored in file 433, field .03 before calling
 | 
|---|
| 46 |  N BILLDA,FY,FYDATA
 | 
|---|
| 47 |  S BILLDA=+$P($G(^PRCA(433,RCTRANDA,0)),"^",2) I 'BILLDA Q
 | 
|---|
| 48 |  K ^PRCA(433,RCTRANDA,4)
 | 
|---|
| 49 |  S FY=0 F  S FY=$O(^PRCA(430,BILLDA,2,FY)) Q:'FY  D
 | 
|---|
| 50 |  .   S FYDATA=$G(^PRCA(430,BILLDA,2,FY,0)) I $P(FYDATA,"^")="" Q
 | 
|---|
| 51 |  .   S ^PRCA(433,RCTRANDA,4,FY,0)=$P(FYDATA,"^",1,3)_"^1"
 | 
|---|
| 52 |  .   S ^PRCA(433,RCTRANDA,4,"B",$P(FYDATA,"^"),FY)=""
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  S ^PRCA(433,RCTRANDA,4,0)="^433.01I^"_$P($G(^PRCA(430,BILLDA,2,0)),"^",3,4)
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | FYMULT(RCTRANDA) ;  apply payment to fy multiple, oldest first
 | 
|---|
| 59 |  N AMOUNT,FYDA,FYAMOUNT
 | 
|---|
| 60 |  ;  transfer fy multiple if not there
 | 
|---|
| 61 |  I '$D(^PRCA(433,RCTRANDA,4)) D FY433(RCTRANDA)
 | 
|---|
| 62 |  ;  amount is principal amount
 | 
|---|
| 63 |  S AMOUNT=$P($$TRANVALU^RCDPBTLM(RCTRANDA),"^",2) I 'AMOUNT Q
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  ;  the transaction value is minus, decrease principal
 | 
|---|
| 66 |  I AMOUNT<0 D  Q
 | 
|---|
| 67 |  .   S AMOUNT=-AMOUNT
 | 
|---|
| 68 |  .   S FYDA=0 F  S FYDA=$O(^PRCA(433,RCTRANDA,4,FYDA)) Q:'FYDA  D  I 'AMOUNT Q
 | 
|---|
| 69 |  .   .   S FYAMOUNT=$P($G(^PRCA(433,RCTRANDA,4,FYDA,0)),"^",2)
 | 
|---|
| 70 |  .   .   ;  fy amount is greater than transaction amount
 | 
|---|
| 71 |  .   .   I FYAMOUNT>AMOUNT D  Q
 | 
|---|
| 72 |  .   .   .   S $P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",2)=FYAMOUNT-AMOUNT
 | 
|---|
| 73 |  .   .   .   S $P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",5)=AMOUNT
 | 
|---|
| 74 |  .   .   .   S AMOUNT=0
 | 
|---|
| 75 |  .   .   ;  fy amount not greater than total amount
 | 
|---|
| 76 |  .   .   S $P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",2)=0
 | 
|---|
| 77 |  .   .   S $P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",5)=FYAMOUNT
 | 
|---|
| 78 |  .   .   S AMOUNT=AMOUNT-FYAMOUNT
 | 
|---|
| 79 |  .   ;  move back to 430
 | 
|---|
| 80 |  .   D FYMULT^RCBEUBIL(RCTRANDA)
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  ;  the transaction value is plus, increase principal
 | 
|---|
| 83 |  S FYDA=$O(^PRCA(433,RCTRANDA,4,999),-1) I 'FYDA Q
 | 
|---|
| 84 |  S $P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",2)=$P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",2)+AMOUNT
 | 
|---|
| 85 |  S $P(^PRCA(433,RCTRANDA,4,FYDA,0),"^",5)=AMOUNT
 | 
|---|
| 86 |  ;  move back to 430
 | 
|---|
| 87 |  D FYMULT^RCBEUBIL(RCTRANDA)
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 | EDIT433(RCTRANDA,DR) ;  edit the field in 433 with the DR string passed
 | 
|---|
| 92 |  I '$D(^PRCA(433,RCTRANDA)) Q
 | 
|---|
| 93 |  N %,D,D0,D1,DA,DDH,DI,DIC,DIE,DQ,J,X,Y
 | 
|---|
| 94 |  S (DIC,DIE)="^PRCA(433,",DA=RCTRANDA
 | 
|---|
| 95 |  D ^DIE
 | 
|---|
| 96 |  ;  user pressed up-arrow
 | 
|---|
| 97 |  I $D(Y) Q "0^TRANSACTION NOT COMPLETELY PROCESSED"
 | 
|---|
| 98 |  Q 1
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 | PROCESS(RCTRANDA) ;  mark transaction as processed
 | 
|---|
| 102 |  I '$D(^PRCA(433,RCTRANDA,0)) Q
 | 
|---|
| 103 |  N D,D0,DA,DI,DIC,DIE,DQ,DR,X,Y
 | 
|---|
| 104 |  S (DIC,DIE)="^PRCA(433,",DA=RCTRANDA
 | 
|---|
| 105 |  S DR="3////0;4////2;"
 | 
|---|
| 106 |  D ^DIE
 | 
|---|
| 107 |  Q
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 | INCOMPLE(RCTRANDA) ;  opposite of processed, make a transaction incomplete
 | 
|---|
| 111 |  I '$D(^PRCA(433,RCTRANDA,0)) Q
 | 
|---|
| 112 |  N D,D0,DA,DI,DIC,DIE,DQ,DR,X,Y
 | 
|---|
| 113 |  S (DIC,DIE)="^PRCA(433,",DA=RCTRANDA
 | 
|---|
| 114 |  S DR="4////1;"
 | 
|---|
| 115 |  D ^DIE
 | 
|---|
| 116 |  Q
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 | DEL433(RCTRANDA,COMMENT,ARCHIVE) ;  delete (mark incomplete) in file 433
 | 
|---|
| 120 |  ;  comment is the user comment in field 41 (default USER CANCELLED)
 | 
|---|
| 121 |  ;  archive is set to 1 if called to archive transaction
 | 
|---|
| 122 |  I '$D(^PRCA(433,RCTRANDA,0)) Q
 | 
|---|
| 123 |  N %,D,D0,DA,DI,DIC,DIE,DQ,DR,J,RCBILLDA,X,Y
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  S (DIC,DIE)="^PRCA(433,",DA=RCTRANDA
 | 
|---|
| 126 |  ;  build DR string
 | 
|---|
| 127 |  S DR=""
 | 
|---|
| 128 |  S DR=DR_"4////1;"  ;transaction status incomplete
 | 
|---|
| 129 |  S DR=DR_"10////1;" ;incomplete transaction flag
 | 
|---|
| 130 |  S DR=DR_"11///T;"  ;transaction date
 | 
|---|
| 131 |  I $G(COMMENT)="" S COMMENT="USER CANCELLED"
 | 
|---|
| 132 |  S DR=DR_"41///"_COMMENT_";"
 | 
|---|
| 133 |  ;  brief comment
 | 
|---|
| 134 |  S RCBILLDA=$P($G(^PRCA(433,RCTRANDA,0)),"^",2)
 | 
|---|
| 135 |  S DR=DR_"5.02////SYSTEM "_$S($G(ARCHIVE):"ARCHIVED",1:"INACTIVATED")_$S(RCBILLDA:" (BILL "_$P($G(^PRCA(430,RCBILLDA,0)),"^")_")",1:"")_";"
 | 
|---|
| 136 |  D ^DIE
 | 
|---|
| 137 |  ;  since the bill number (field .03) is required, it must be manually removed
 | 
|---|
| 138 |  I RCBILLDA S $P(^PRCA(433,RCTRANDA,0),"^",2)="" K ^PRCA(433,"C",RCBILLDA,RCTRANDA)
 | 
|---|
| 139 |  ;  remove fy multiple
 | 
|---|
| 140 |  K ^PRCA(433,RCTRANDA,4)
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 | ADDCOMM(RCTRANDA,COMMENT) ;  automatically put a comment on a transaction
 | 
|---|
| 145 |  ;  comment in the array comment(1)=first line
 | 
|---|
| 146 |  ;                       comment(2)=second line
 | 
|---|
| 147 |  N CURRLINE,LINE
 | 
|---|
| 148 |  ;  get the last line
 | 
|---|
| 149 |  S CURRLINE=$O(^PRCA(433,RCTRANDA,7,99999999),-1)
 | 
|---|
| 150 |  ;  if comment already on transaction, add a blank line and
 | 
|---|
| 151 |  ;  date time of new comment
 | 
|---|
| 152 |  I CURRLINE D
 | 
|---|
| 153 |  .   S CURRLINE=CURRLINE+1,^PRCA(433,RCTRANDA,7,CURRLINE,0)=" "
 | 
|---|
| 154 |  .   S CURRLINE=CURRLINE+1,^PRCA(433,RCTRANDA,7,CURRLINE,0)="Comment added on: "_$$FMTE^XLFDT($$NOW^XLFDT)
 | 
|---|
| 155 |  ;  add new lines
 | 
|---|
| 156 |  F LINE=1:1 Q:'$D(COMMENT(LINE))  S ^PRCA(433,RCTRANDA,7,CURRLINE+LINE,0)=COMMENT(LINE)
 | 
|---|
| 157 |  ;  set the 0th node
 | 
|---|
| 158 |  S ^PRCA(433,RCTRANDA,7,0)="^^"_(CURRLINE+LINE-1)_"^"_(CURRLINE+LINE-1)_"^"_DT_"^"
 | 
|---|
| 159 |  Q
 | 
|---|
| 160 | FMSDATE(X) ;Finds the next month & year and sets the date for transmission
 | 
|---|
| 161 |  ;of the document to FMS.  If DT is after EOAM and the document has not
 | 
|---|
| 162 |  ;been previously transmitted, the date will be set to the first of the
 | 
|---|
| 163 |  ;next month.  If the DT is after the EOAM and the document is being 
 | 
|---|
| 164 |  ;re-transmitted, the the date of transmission will be DT. The flag REGEN
 | 
|---|
| 165 |  ;is set in the source code if the document is being 
 | 
|---|
| 166 |  ;re-transmitted, thus will have a transmission date of DT.
 | 
|---|
| 167 |  I $G(REFMS) G QUIT
 | 
|---|
| 168 |  I DT>$$LDATE^RCRJR(DT) S X=$E($$FPS^RCAMFN01(X,1),1,5)_"01"
 | 
|---|
| 169 | QUIT Q X
 | 
|---|