surgery ;BMI/BI Surgery Prototype. ;09/27/2013
 Quit
 ;
list  ; Public
 New JQ,AQ,FFC,FFV,FILE,FIELD,AR,JR,START,END,INDEX,x
 ; JsonRequest        - JQ
 ; ArrayRequest       - AQ
 ; ArrayResults       - AR
 ; JsonResults        - JR
 ; File/Field Counter - FFC
 ; File/Field Value   - FFV
 ; File               - FILE
 ; Field              - FIELD
 ; FileMan Index      - INDEX
 Set JQ=$$ListSet()
 Do DECODE^XLFJSON("JQ","AQ")
 For FFC=1:1:$Order(AQ(""),-1Do
 . Set FFV=AQ(FFC)
 . Set FILE=$Translate($Piece(FFV,"F",2),"P",".")
 . Set FIELD=$Translate($Piece(FFV,"F",3),"P",".")
 . ;
 . If $Piece(^DD(FILE,FIELD,0),"^",2)["S" Do
 .. Do SetOfCodes(FFV,FILE,FIELD,.AR)
 . ;
 . If $Piece(^DD(FILE,FIELD,0),"^",2)["D",$Data(AQ(FFC,"START")),$Data(AQ(FFC,"END")) Do
 .. Set START=AQ(FFC,"START")
 .. Set END=AQ(FFC,"END")
 .. Do DateList(FFV,START,END,.AR)
 . ;
 . If $Piece(^DD(FILE,FIELD,0),"^",2)["P",$Data(AQ(FFC,"INDEX")) Do
 .. Set INDEX=AQ(FFC,"INDEX")
 .. Do PointerList(FFV,FILE,FIELD,INDEX,.AR)
 ;
 Do ENCODE^XLFJSON("AR","JR")
 Set x=0 For  Set x=$Order(JR(x)) Quit:+x=0  Write JR(x)
 Quit
 ;
SetOfCodes(FFV,FILE,FIELD,AR)  ; Private
 New Selection,SelectionSet,SelectionCount
 ; Get the Set Of Codes
 Set SelectionSet=$Piece(^DD(FILE,FIELD,0),"^",3)
 For SelectionCount=1:1:$Length(SelectionSet,";"Do
 . Set Selection=$Piece(SelectionSet,";",SelectionCount)
 . Quit:Selection=""
 . Set AR(FFV,""""_$Piece(Selection,":",2),"INT")=$Piece(Selection,":",1)
 . Set AR(FFV,""""_$Piece(Selection,":",2),"EXT")=$Piece(Selection,":",2)
 Quit
 ;
DateList(FFV,START,END,AR)  ; Private
 New cnt
 ; Create the Date List
 For cnt=($H-START):1:($H+ENDDo
 . Set AR(FFV,""""_$$HTFM^XLFDT(cnt),"INT")=$$HTFM^XLFDT(cnt)
 . Set AR(FFV,""""_$$HTFM^XLFDT(cnt),"EXT")=$$HTE^XLFDT(cnt)
 Quit
 ;
PointerList(FFV,FILE,FIELD,INDEX,AR)  ; Private
 New GLOBALROOT,NAME,IEN,FGIEN,FGI
 ; Create the Pointer List
 Set GLOBALROOT=$Piece(^DD(FILE,FIELD,0),"^",3)
 Set NAME=""
 For  Do  Quit:NAME=""
 . Set FGI="^"_GLOBALROOT_""""_INDEX_""","_""""_NAME_""")"
 . Set NAME=$Order(@FGIQuit:NAME=""
 . Set IEN=0 For  Do  Quit:+IEN=0
 .. Set FGIEN="^"_GLOBALROOT_""""_INDEX_""","_""""_NAME_""","_IEN_")"
 .. Set IEN=$Order(@FGIENQuit:+IEN=0
 .. Set AR(FFV,""""_NAME,"INT")=IEN
 .. Set AR(FFV,""""_NAME,"EXT")=NAME
 Quit
 ;
ListSet()  ; Private
 New strval
 Set strval=""
 Set strval=strval_"["
 Set strval=strval_"""F130F638"","
 Set strval=strval_"""F130FP013"","
 Set strval=strval_"""F130FP011"","
 Set strval=strval_"""F130FP03"","
 Set strval=strval_"""F130FP035"","
 Set strval=strval_"""F130F661"","
 Set strval=strval_"""F130F1P01"","
 Set strval=strval_"""F130F1P035"","
 Set strval=strval_"""F130FP09"":{""START"":""10"",""END"":""10""},"
 Set strval=strval_"""F130FP04"":{""INDEX"":""B1""},"
 Set strval=strval_"""F130FP43"":{""INDEX"":""B""}"
 Set strval=strval_"]"
 Quit strval
 ;
patient(search)  ; Public
 New IEN,NAME,PLA,PLA,limit,outline,search1,search2
 Set search=$zcmdline
 Set limit=0
 If search'="xxxxxxxx" Do
 . If $Length(search)<1 Write "{}",! Quit
 . Set search=$Zconvert(search,"U")
 . If search[" " Do
 .. Set search1=$Piece(search," ",1)
 .. Set search2=$Piece(search," ",2)
 . If search'[" " Do
 .. Set search1=search
 .. Set (search2)=""
 . Set NAME=$Order(^DPT("B",search1),-1)
 . For  Do  Quit:NAME=""
 .. Set NAME=$Order(^DPT("B",NAME)) Quit:NAME=""
 .. Set IEN=0 For  Do  Quit:+IEN=0
 ... Set IEN=$Order(^DPT("B",NAME,IEN)) Quit:+IEN=0
 ... Quit:$Extract(NAME,1,$Length(search1))'=search1
 ... If search2'="",NAME'[search2 Quit
 ... Set limit=limit+1 Quit:limit>100
 ... Set PLA(NAME_IEN,"INT")=IEN
 ... Set PLA(NAME_IEN,"EXT")=NAME
 . Do ENCODE^XLFJSON("PLA","PLJ")
 . Set outline=0 For  Do  Quit:+outline=0
 .. Set outline=$Order(PLJ(outline)) Quit:+outline=0
 .. Write PLJ(outline)
 Quit
 ;
provider(search)  ; Public
 New IEN,NAME,PLA,PLJ,limit,outline,search1,search2
 Set search=$zcmdline
 Set limit=0
 If search'="xxxxxxxx" Do
 . If $Length(search)<1 Write "{}",! Quit
 . Set search=$Zconvert(search,"U")
 . If search[" " Set search1=$Piece(search," ",1),search2=$Piece(search," ",2)
 . If search'[" " Set search1=search,search2=""
 . Set NAME=$Order(^VA(200,"B",search1),-1)
 . For  Do  Quit:NAME=""
 .. Set NAME=$Order(^VA(200,"B",NAME)) Quit:NAME=""
 .. Set IEN=0 For  Do  Quit:+IEN=0
 ... Set IEN=$Order(^VA(200,"B",NAME,IEN)) Quit:+IEN=0
 ... Quit:$Extract(NAME,1,$Length(search1))'=search1
 ... If search2'="",NAME'[search2 Quit
 ... Set limit=limit+1 Quit:limit>100
 ... Set PLA(NAME_IEN,"INT")=IEN
 ... Set PLA(NAME_IEN,"EXT")=NAME
 . Do ENCODE^XLFJSON("PLA","PLJ")
 . Set outline=0 For  Do  Quit:+outline=0
 .. Set outline=$Order(PLJ(outline)) Quit:+outline=0
 .. Write PLJ(outline)
 Quit
 ;
procedure(search)  ; Public
 New WORD,limit,outline,search1,search2,search3,search4,search5,PLJA,PLJJ
 Set search=$zcmdline
 Set limit=0
 If search'="xxxxxxxx"  Do
 .  If $Length(search)<2 Write "{}",! Quit
 .  Set search=$Zconvert(search,"U")
 .  If search[" " Do
 .. Set search1=$Piece(search," ",1)
 .. Set search2=$Piece(search," ",2)
 .. Set search3=$Piece(search," ",3)
 .. Set search4=$Piece(search," ",4)
 .. Set search5=$Piece(search," ",5)
 . If search'[" " Do
 .. Set search1=search
 .. Set (search2,search3,search4,search5)=""
 . Set WORD=$Order(^ICD0("AD",31,search1),-1)
 . For  Do  Quit:WORD=""
 .. Set WORD=$Order(^ICD0("AD",31,WORD)) Quit:WORD=""
 .. Quit:$Extract(WORD,1,$Length(search1))'=search1
 .. Set IEN1=0 For  Do  Quit:+IEN1=0
 ... Set IEN1=$Order(^ICD0("AD",31,WORD,IEN1)) Quit:+IEN1=0
 ... Set DATE=$Order(^ICD0("AD",31,WORD,IEN1,""),-1)
 ... Set IEN2=$Order(^ICD0("AD",31,WORD,IEN1,DATE,0))
 ... Set CODE=$Piece(^ICD0(IEN1,0),"^",1)
 ... Set DESC=^ICD0(IEN1,68,IEN2,1)
 ... Set DESCU=$Zconvert(DESC,"U")
 ... If search2'="",DESCU'[search2 Quit
 ... If search3'="",DESCU'[search3 Quit
 ... If search4'="",DESCU'[search4 Quit
 ... If search5'="",DESCU'[search5 Quit
 ... Set limit=limit+1 Quit:limit>100
 ... Set PLJA(CODE,"EXT")=DESC
 ... Set PLJA(CODE,"INT")=IEN1
 . Do ENCODE^XLFJSON("PLJA","PLJJ")
 . Set outline=0 For  Do  Quit:+outline=0
 .. Set outline=$Order(PLJJ(outline)) Quit:+outline=0
 .. Write PLJJ(outline)
 Quit
 ;
do
 New request,json,array,FileField,FDA,FDAIEN,ERRORS
 Set request=$zcmdline Quit:request=""
 Write "<!DOCTYPE html>",!
 Write "<html>",!
 Write "<head>",!
 Write "  <title>Test Page for Post</title>",!
 Write "  <meta charset=""utf-8"">",!
 Write "   <meta name=""viewport"" content=""width=device-width, initial-scale=1"">",!
 Write " </head>",!
 Write " <body>",!
 Set json=$$convert(request)
 Do DECODE^XLFJSON("json","array")
 Set FileField="" For  Do  Quit:FileField=""
 . Set FileField=$Order(array(FileField)) Quit:FileField=""
 . Set FDA(1,$Extract($Piece(FileField,"-",1),2,999),"+1,",$Extract($Piece(FileField,"-",2),2,999))=array(FileField)
 Write "<table width=""100%""><tr><td><pre>",!
 ZWR array
 Write "</pre></td><td><pre>",!
 If $Data(FDA(1,130,"+1,",23)) Do
 . Set FDA(1,130.03,"+2,+1,",.01)=FDA(1,130,"+1,",23)
 . Kill FDA(1,130,"+1,",23)
 ZWR FDA
 Kill FDA(1,130,"+1,",27)   ; Planned Principal Procedure Code
 Kill FDA(1,130,"+1,",999)
 Write "</pre></td></tr>",!
 Do UPDATE^DIE("","FDA(1)","FDAIEN","ERRORS")
 Write "<tr><td><pre><hr/>",!
 If $Data(FDAIENZWR FDAIEN
 Write "<hr/>",!
 If $Data(ERRORSZWR ERRORS
 Write "</pre></td></tr></table></body></html>",!
 Quit
 ;
convert(x)
 New y,z Set z=""
 For y=1:1:$Length(x,"%"Do
 . Set %HD=$Extract($Piece(x,"%",y),1,2Do ^%HD
 . Set z=z_$C(%HD)_$Extract($Piece(x,"%",y),3,99)
 Quit $Translate(z,$c(13)_$c(10),"")