23. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 5/29/2018 12:14:32 PM Central Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

23.1 Files compared

# Location File Last Modified
1 mobile-kidney-web-2.0.0.zip\mobile-kidney-web\acceptance_test\watir\lib\module FHIROperationsModule.rb Wed Apr 4 20:16:46 2018 UTC
2 mobile-kidney-web-2.0.0.zip\mobile-kidney-web\acceptance_test\watir\lib\module FHIROperationsModule.rb Tue May 29 15:34:20 2018 UTC

23.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 2 846
Changed 1 2
Inserted 0 0
Removed 0 0

23.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

23.4 Active regular expressions

No regular expressions were active.

23.5 Comparison detail

  1   require "a ctive_supp ort/time"
  2   require "n et/http"
  3   require "u ri"
  4   require "j son"
  5  
  6   module FHI ROperation sModule
  7  
  8       HOST =  "localhos t"
  9         PORT = " PORT "
  10  
  11       HTTP_U RI = URI.p arse("http ://#{HOST} :#{PORT}")
  12       HTTP_O BJ = Net:: HTTP.new(H TTP_URI.ho st, HTTP_U RI.port)
  13  
  14       def re moveWeight Entries(pa tientId, f irstName,  lastName)
  15           re moveEntrie s(patientI d, firstNa me, lastNa me, "http: //loinc.or g|29463-7" )
  16       end
  17  
  18       def re moveBPEntr ies(patien tId, first Name, last Name)
  19           re moveEntrie s(patientI d, firstNa me, lastNa me, "http: //loinc.or g|8716-3")
  20       end
  21  
  22       def re moveKidney JournalEnt ries(patie ntId, firs tName, las tName)
  23           re moveEntrie s(patientI d, firstNa me, lastNa me, "https ://wiki.mo bilehealth .va.gov/di splay/PGDM S|86fffcbf -2a1d-44bb -bc19-411f d282bf80")
  24       end
  25  
  26       def re moveGlucos eEntries(p atientId,  firstName,  lastName)
  27           re moveEntrie s(patientI d, firstNa me, lastNa me, "http: //loinc.or g|2345-7")
  28       end
  29  
  30       def re moveEntrie s(patientI d, firstNa me, lastNa me, code)
  31           pa tientFHIRI d = getPat ientId(pat ientId, fi rstName, l astName)
  32  
  33           re quest = Ne t::HTTP::D elete.new( "/fhir/Obs ervation?p atient=#{p atientFHIR Id}&code=# {code}")
  34           re sponse = H TTP_OBJ.re quest(requ est)
  35  
  36           pu ts request
  37           pu ts respons e.code
  38           pu ts respons e.body
  39           pu ts ""
  40       end
  41  
  42       def ad dWeightEnt ries(entri es, patien tId, first Name, last Name)
  43           pa tientFHIRI d = getPat ientId(pat ientId, fi rstName, l astName)
  44  
  45           en tries.each  do |entry |
  46                addWeigh tEntry(pat ientFHIRId , entry[:v alue], ent ry[:effect iveDateTim e], entry[ :comments] )
  47           en d
  48       end
  49  
  50       def ad dWeightEnt ry(patient FHIRId, va lue, effec tiveDateTi me, commen ts = "")
  51           re source = {
  52                resource Type: "Obs ervation",
  53                meta: {
  54                    tag:  [
  55                         {
  56                             "syste m": "https ://wiki.mo bilehealth .va.gov/di splay/PGDM S/Client+P rovenance+ Mapping",
  57                             "code" : "1e11b69 2-1898-435 1-a7c5-428 f61c91817" ,
  58                             "displ ay": "Mobi leKidney"
  59                         }
  60                    ],
  61                },
  62                status:  "prelimina ry",
  63                effectiv eDateTime:  effective DateTime,
  64                code: {
  65                    codi ng: {
  66                         system: "h ttp://loin c.org",
  67                         code: "294 63-7",
  68                         display: " Body weigh t"
  69                    }
  70                },
  71                subject:  {
  72                    refe rence: "Pa tient/" +  patientFHI RId
  73                },
  74                valueQua ntity: {
  75                    valu e: value,
  76                    unit : "pounds"
  77                }
  78           }
  79  
  80           if  comments  then
  81                resource [:comments ] = commen ts
  82           en d
  83  
  84           ad dEntry(res ource, "Ob servation" )
  85       end
  86  
  87       def ad dBPEntries (entries,  patientId,  firstName , lastName )
  88           pa tientFHIRI d = getPat ientId(pat ientId, fi rstName, l astName)
  89  
  90           en tries.each  do |entry |
  91                addBPEnt ry(patient FHIRId, en try[:systo lic], entr y[:diastol ic], entry [:pulse],  entry[:pos ition], en try[:effec tiveDateTi me], entry [:comments ])
  92           en d
  93       end
  94  
  95       def ad dBPEntry(p atientFHIR Id, systol ic, diasto lic, pulse , position  = "", eff ectiveDate Time, comm ents)
  96           re source = {
  97                resource Type: "Obs ervation",
  98                meta: {
  99                    tag:  [
  100                         {
  101                             "syste m": "https ://wiki.mo bilehealth .va.gov/di splay/PGDM S/Client+P rovenance+ Mapping",
  102                             "code" : "1e11b69 2-1898-435 1-a7c5-428 f61c91817" ,
  103                             "displ ay": "Mobi leKidney"
  104                         }
  105                    ],
  106                },
  107                status:  "prelimina ry",
  108                code: {
  109                    codi ng: {
  110                         "system":  "http://lo inc.org",
  111                         "code": "8 716-3",
  112                         "display":  "Vital Si gns"
  113                    }
  114                },
  115                subject:  {
  116                    refe rence: "Pa tient/" +  patientFHI RId
  117                },
  118                effectiv eDateTime:  effective DateTime,
  119                componen t: [
  120                    {
  121                         code: {
  122                             coding : [
  123                                 {
  124                                      system:  "http://lo inc.org",
  125                                      code: "8 480-6",
  126                                      display:  "Systolic  blood pre ssure"
  127                                 }
  128                             ]
  129                         },
  130                         valueQuant ity: {
  131                             value:  systolic,
  132                             unit:  "mm[Hg]"
  133                         }
  134                    },
  135                    {
  136                         code: {
  137                             coding : [
  138                                 {
  139                                      system:  "http://lo inc.org",
  140                                      code: "8 462-4",
  141                                      display:  "Diastoli c blood pr essure"
  142                                 }
  143                             ]
  144                         },
  145                         valueQuant ity: {
  146                             value:  diastolic ,
  147                             unit:  "mm[Hg]"
  148                         }
  149                    },
  150                    {
  151                         code: {
  152                             coding : [
  153                                 {
  154                                      system:  "http://lo inc.org",
  155                                      code: "8 867-4",
  156                                      display:  "Heart ra te"
  157                                 }
  158                             ]
  159                         },
  160                         valueQuant ity: {
  161                             value:  pulse,
  162                             unit:  "bpm"
  163                         }
  164                    }
  165                ]
  166           }
  167  
  168           if  comments  then
  169                resource [:comments ] = commen ts
  170           en d
  171  
  172           if  position  then
  173                position Block = ca se positio n
  174                when "St anding"
  175                    {
  176                         code: {
  177                             coding : [
  178                                 {
  179                                      system:  "http://lo inc.org",
  180                                      code: "6 9001-6",
  181                                      display:  "Heart ra te --stand ing"
  182                                 }
  183                             ]
  184                         },
  185                         valueStrin g: "Standi ng"
  186                    }
  187                when "Si tting"
  188                    {
  189                         code: {
  190                             coding : [
  191                                 {
  192                                      system:  "http://lo inc.org",
  193                                      code: "6 9000-8",
  194                                      display:  "Heart ra te --sitti ng"
  195                                 }
  196                             ]
  197                         },
  198                         valueStrin g: "Sittin g"
  199                    }
  200                when "Ly ing"
  201                    {
  202                         code: {
  203                             coding : [
  204                                 {
  205                                      system:  "http://lo inc.org",
  206                                      code: "6 8999-2",
  207                                      display:  "Heart ra te --supin e"
  208                                 }
  209                             ]
  210                         },
  211                         valueStrin g: "Lying"
  212                    }
  213                end
  214  
  215                resource [:componen t][3] = po sitionBloc k
  216           en d
  217  
  218           ad dEntry(res ource, "Ob servation" )
  219       end
  220  
  221       def ad dKidneyJou rnalEntrie s(entries,  patientId , firstNam e, lastNam e)
  222           pa tientFHIRI d = getPat ientId(pat ientId, fi rstName, l astName)
  223  
  224           en tries.each  do |entry |
  225                addKidne yJournalEn try(patien tFHIRId, e ntry[:titl e], entry[ :effective DateTime],  entry[:ha sFollowUp] )
  226           en d
  227       end
  228  
  229       def ad dKidneyJou rnalEntry( patientFHI RId, title , effectiv eDateTime,  hasFollow Up)
  230           re source = {
  231                resource Type: "Obs ervation",
  232                meta: {
  233                    tag:  [
  234                         {
  235                             "syste m": "https ://wiki.mo bilehealth .va.gov/di splay/PGDM S/Client+P rovenance+ Mapping",
  236                             "code" : "1e11b69 2-1898-435 1-a7c5-428 f61c91817" ,
  237                             "displ ay": "Mobi leKidney"
  238                         }
  239                    ]
  240                },
  241                status:  "prelimina ry",
  242                effectiv eDateTime:  effective DateTime,
  243                subject:  {
  244                    refe rence: "Pa tient/" +  patientFHI RId
  245                },
  246                code: {
  247                    codi ng: {
  248                         system: "h ttps://wik i.mobilehe alth.va.go v/display/ PGDMS",
  249                         code: "86f ffcbf-2a1d -44bb-bc19 -411fd282b f80",
  250                         display: " Kidney jou rnal entry "
  251                    }
  252                },
  253                componen t: [
  254                    {
  255                         code: {
  256                             coding : {
  257                                 sy stem: "htt p://snomed .info/sct" ,
  258                                 co de: "30827 3005",
  259                                 di splay: "Fo llow-up st atus (find ing)"
  260                             }
  261                         },
  262                         valueStrin g: "#{hasF ollowUp}"
  263                    }
  264                ],
  265                valueStr ing: title
  266           }
  267  
  268           ad dEntry(res ource, "Ob servation" )
  269       end
  270  
  271       def ad dGlucoseEn tries(entr ies, patie ntId, firs tName, las tName)
  272           pa tientFHIRI d = getPat ientId(pat ientId, fi rstName, l astName)
  273  
  274           en tries.each  do |entry |
  275                addGluco seEntry(pa tientFHIRI d, entry[: value], en try[:testM ethod], en try[:effec tiveDateTi me], entry [:comments ])
  276           en d
  277       end
  278  
  279       def ad dGlucoseEn try(patien tFHIRId, v alue, test Method, ef fectiveDat eTime, com ments)
  280           re source = {
  281                resource Type: "Obs ervation",
  282                meta: {
  283                    tag:  [
  284                         {
  285                             "syste m": "https ://wiki.mo bilehealth .va.gov/di splay/PGDM S/Client+P rovenance+ Mapping",
  286                             "code" : "1e11b69 2-1898-435 1-a7c5-428 f61c91817" ,
  287                             "displ ay": "Mobi leKidney"
  288                         }
  289                    ],
  290                },
  291                status:  "prelimina ry",
  292                code: {
  293                    codi ng: {
  294                         system: "h ttp://loin c.org",
  295                         code: "234 5-7",
  296                         display: " Glucose [M ass/volume ] in Serum  or Plasma "
  297                    }
  298                },
  299                effectiv eDateTime:  effective DateTime,
  300                subject:  {
  301                    refe rence: "Pa tient/" +  patientFHI RId
  302                },
  303                valueQua ntity: {
  304                    valu e: value,
  305                    unit : "mg/dl"
  306                },
  307                componen t: [
  308                    {
  309                         code:{
  310                             coding :{
  311                                 sy stem:"http ://snomed. info/sct",
  312                                 co de:"162549 003",
  313                                 di splay: "Ea ting routi ne (observ able entit y)"
  314                             }
  315                         },
  316                         valueStrin g: testMet hod
  317                    }
  318                    
  319                ]
  320           }
  321  
  322           if  comments  then
  323                resource [:comments ] = commen ts
  324           en d
  325  
  326           ad dEntry(res ource, "Ob servation" )
  327       end
  328  
  329       def ge tPatientId (patientId , firstNam e, lastNam e)
  330           pa tientRespo nse = getP atient(pat ientId)
  331           to tal = pati entRespons e["total"]
  332  
  333           if  total ==  0 then
  334                patientR esponse =  createNewP atient(pat ientId, fi rstName, l astName)
  335           en d
  336  
  337           pa tientFHIRI d = patien tResponse[ "entry"][0 ]["resourc e"]["id"]
  338  
  339           re turn patie ntFHIRId
  340       end
  341  
  342       def ge tPatient(p atientId)
  343           re quest = Ne t::HTTP::G et.new("/f hir/Patien t?identifi er=#{patie ntId}")
  344           re sponse = H TTP_OBJ.re quest(requ est)
  345           bo dy = JSON. parse(resp onse.body)
  346  
  347           re turn body
  348       end
  349  
  350       def cr eateNewPat ient(patie ntId, firs tName, las tName)
  351           pa tientResou rce = {
  352                "resourc eType": "P atient",
  353                "identif ier": [
  354                    {
  355                         "type": {
  356                             "codin g": [
  357                                 {
  358                                      "system" : "https:/ /pki.dmdc. osd.mil/mi lconnect",
  359                                      "code":  "EDIPI"
  360                                 }
  361                             ]
  362                         },
  363                         "value": p atientId
  364                    }
  365                ],
  366                "active" : true,
  367                "name":  [
  368                    {
  369                         "use": "of ficial",
  370                         "text": "# {lastName} , #{firstN ame}",
  371                         "family":  [
  372                             lastNa me
  373                         ],
  374                         "given": [
  375                             firstN ame
  376                         ]
  377                    }
  378                ]
  379           }
  380  
  381           pu ts "Creati ng Patient  FHIR Reso urce"
  382           ad dEntry(pat ientResour ce, "Patie nt")
  383  
  384           sl eep 2
  385  
  386           re turn getPa tient(pati entId)
  387       end
  388  
  389       def ad dEntry(res ource, typ e)
  390           re quest = Ne t::HTTP::P ost.new("/ fhir/#{typ e}", {"Con tent-Type" : "applica tion/json" })
  391           re quest.body  = resourc e.to_json
  392  
  393           re sponse = H TTP_OBJ.re quest(requ est)
  394  
  395           pu ts resourc e
  396           pu ts respons e.code
  397           pu ts respons e.body
  398           pu ts ""
  399  
  400       end
  401  
  402       def ge tLastUpdat edDateOfKi dneyJourna lByTitle(t itle, pati entId, fir stName, la stName)
  403           ti tle.gsub!  " ", "%20"
  404           pa tientFHIRI d = getPat ientId(pat ientId, fi rstName, l astName)
  405  
  406           co de = "http s://wiki.m obilehealt h.va.gov/d isplay/PGD MS|86fffcb f-2a1d-44b b-bc19-411 fd282bf80"
  407           re quest = Ne t::HTTP::G et.new("/f hir/Observ ation?pati ent=#{pati entFHIRId} &code=#{co de}&value- string=#{t itle}")
  408           re sponse = H TTP_OBJ.re quest(requ est)
  409           bo dy = JSON. parse(resp onse.body)
  410           la stUpdated  = ""
  411  
  412           if  (body["to tal"] != 0 ) then
  413                lastUpda ted = form atDateTime (body["ent ry"][0]["r esource"][ "meta"]["l astUpdated "])
  414           en d
  415  
  416           re turn lastU pdated
  417       end
  418  
  419       def fo rmatDateTi me(dateTim e)
  420           re turn Time. parse(date Time).in_t ime_zone(" Eastern Ti me (US & C anada)").s trftime("% B %d, %Y % I:%M %p")
  421       end
  422  
  423   end
  424