2. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 4/8/2019 1:00:39 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.

2.1 Files compared

# Location File Last Modified
1 C:\AraxisMergeCompare\Pri_un\crp-fitheart-release-2.0\app\src\core\resources fhir-resources_service.js Wed Mar 20 17:30:00 2019 UTC
2 C:\AraxisMergeCompare\Pri_re\MHED P3 Healthshare 2.0-redacted\crp-fitheart-release-2.0\app\src\core\resources fhir-resources_service.js Mon Apr 8 16:45:19 2019 UTC

2.2 Comparison summary

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

2.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

2.4 Active regular expressions

No regular expressions were active.

2.5 Comparison detail

  1   define(['a ngular', ' app', 'lod ash', 'loc alResource DirectoryS ervice', ' authentica tion_servi ce'], func tion(angul ar, app, _ ) {
  2           "u se strict" ;
  3           ap p.service( 'fhirResou rces', fun ction($htt p, $q, $ti meout, loc alResource DirectoryS ervice, au thenticati onService)  {
  4  
  5                     var META_P ROVENANCE_ SYSTEM_KEY  = "https: //wiki.mob ilehealth. DOMAIN . EXT /display/P GDMS/Clien t+Provenan ce+Mapping ";
  6                     var META_P ROVENANCE_ APP_UUID =  " REDACTED ";
  7                    var  META_PROVE NANCE_APP_ DISPLAY =  "My VA Hea lth";
  8                    var  provenance Tag = {
  9                             "syste m": META_P ROVENANCE_ SYSTEM_KEY ,
  10                             "code" : META_PRO VENANCE_AP P_UUID,
  11                             "displ ay": META_ PROVENANCE _APP_DISPL AY
  12                    };
  13  
  14                    var  fhirResour ces = {};
  15  
  16                    var  practition erReqs = [ ];
  17                    var  locationRe qs = [];
  18                    var  fhirResour ceReqs = [ ];
  19  
  20                    /**
  21                     * T he appendP rovenanceM etadata()  function p rovides th e meta.tag  for FHIR  resources  when data  is from My  VA Health  app
  22                     *
  23                     * @ param data
  24                     */
  25                    fhir Resources. appendProv enanceMeta data = fun ction(data ) {
  26                             if (!d ata.meta)  {
  27                                      data.met a = {tag:  []};
  28                             } else  if (!data .meta.tag)  {
  29                                      data.met a.tag = [] ;
  30                             }
  31                             var pr ovenanceIn dex = _.fi ndIndex(da ta.meta.ta g, functio n(item) {
  32                                      return i tem["syste m"] == MET A_PROVENAN CE_SYSTEM_ KEY;
  33                             });
  34                             if (pr ovenanceIn dex >= 0)  { //update  provenanc e if an en try alread y exists
  35                                      data.met a.tag[prov enanceInde x] = prove nanceTag;
  36                             }
  37                             else {
  38                                      data.met a.tag.push (provenanc eTag);
  39                             }
  40                             //Need  to delete  this meta  portion t o avoid FH IR server  error when  updating  a resource
  41                             delete  data.meta .lastUpdat ed;
  42                             delete  data.meta .profile;
  43                             delete  data.meta .versionId ;
  44                    };
  45  
  46                    /**
  47                     * T he resolve FhirResour ceByRefere nce() serv ice functi on intends  to retrie ve the ref erence dat a from FHI R resource .
  48                     *
  49                     * @ param refe rence: <Re source Nam e>/<id #>
  50                     * r eturn <Res ource Data >
  51                     */
  52                    fhir Resources. resolveFhi rResourceB yReference  = functio n(referenc e) {
  53                             if (fh irResource Reqs[refer ence]) {
  54                                      return f hirResourc eReqs[refe rence].pro mise;
  55                             }
  56  
  57                             var fh irResource Promise =  $q.defer() ;
  58                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  59                                      function (response)  {
  60                                               if (respon se[1]) {
  61                                                       $h ttp.get(re sponse[0][ 'fhir-base Url'] + "/ " + refere nce).then( function(r esponse1)  {
  62                                                                fhir ResourcePr omise.reso lve(respon se1.data);
  63                                                       }) ;
  64                                                       fh irResource Reqs[refer ence] = fh irResource Promise;
  65                                               }
  66                                      },
  67                                      function (error) {
  68                                               fhirResour cePromise. reject(err or);
  69                                               fhirResour cePromise  = null;
  70                                      }
  71                             );
  72                             return  fhirResou rcePromise .promise;
  73                    };
  74  
  75                    /**
  76                     * T he deleteF hirResourc eByReferen ce() servi ce functio n intends  to delete  reference  data from  FHIR resou rce
  77                     *
  78                     * @ param refe rence: <Re source Nam e>/<id #>  [,data]
  79                     *    note: her e data par am is opti onal. if d ata is not  empty, do  PUT first  and then  DELETE
  80                     * r eturn <Ope rationOutc ome>
  81                     */
  82                    fhir Resources. deleteFhir ResourceBy Reference  = function (reference , data) {
  83                             var fh irResource Promise =  $q.defer() ,
  84                                      fhirReso urcePromis es = [];
  85  
  86                             functi on updateF hirResourc e() {
  87                                      var refs  = $q.defe r();
  88  
  89                                      fhirReso urces.crea teUpdateFh irResource ({method:  "PUT", res ourceName:  reference , data: da ta}).then(
  90                                               function(r esponse) {
  91                                                       re fs.resolve (response) ;
  92                                               }, functio n(error) {
  93                                                       re fs.reject( error);
  94                                               });
  95                                      return r efs.promis e;
  96                             };
  97  
  98                             functi on deleteF hirResourc e() {
  99                                      $q.all([ localResou rceDirecto ryService. fetch(), a uthenticat ionService .checkAuth Status()]) .then(
  100                                               function(r esponse) {
  101                                                       if  (response [1]) {
  102                                                                $htt p.delete(r esponse[0] ['fhir-bas eUrl'] + " /" + refer ence).then (function( response1)  {
  103                                                                         fhirRe sourceProm ise.resolv e(response 1);
  104                                                                }, f unction(er ror) {
  105                                                                         fhirRe sourceProm ise.reject (error);
  106                                                                });
  107                                                       }
  108                                               },
  109                                               function(e rror) {
  110                                                       fh irResource Promise.re ject(error );
  111                                               }
  112                                      );
  113                                      return f hirResourc ePromise.p romise;
  114                             };
  115  
  116                             if (!r eference)  return fhi rResourceP romise.pro mise;
  117  
  118                             if (fh irResource Reqs[refer ence]) {
  119                                      fhirReso urceReqs.s plice(fhir ResourceRe qs.indexOf (reference ), 1);
  120                                      fhirReso urceReqs[r eference]  = null;
  121                             }
  122  
  123                             if (da ta) fhirRe sourceProm ises.push( updateFhir Resource);
  124                             fhirRe sourceProm ises.push( deleteFhir Resource);
  125  
  126                             fhirRe sources.se rialReques tCalls(fhi rResourceP romises);
  127  
  128                             return  fhirResou rcePromise .promise;
  129                    };
  130  
  131                    /**
  132                     * T he resolve FhirResour ceByParams () service  function  intends to  retrieve  all the da ta entries
  133                     * f rom given  FHIR resou rceName al ong with p arams.
  134                     *
  135                     * @ param reso urceName,  params
  136                     * r eturn <Res ource Data  List>
  137                     */
  138                    fhir Resources. resolveFhi rResourceB yParams =  function(r esourceNam e, params)  {
  139                             var at tachSuffix  = functio n(paramsOb j, suffixS tr) {
  140                                      if (!par amsObj ||  !suffixStr  || (param sObj === { })) return  paramsObj ;
  141  
  142                                      var tPar ams = {};
  143                                      angular. forEach(Ob ject.keys( paramsObj) , function (elem) {
  144                                               tParams[el em+suffixS tr] = para msObj[elem ];
  145                                      });
  146                                      return t Params;
  147                             };
  148  
  149                             var fh irResource Promise =  $q.defer() ;
  150                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  151                                      function (response)  {
  152                                               if (respon se[1]) { / /given a s uccessful  auth check  and local  resource  directory  fetch
  153                                                       va r fhirBase Url = resp onse[0]['f hir-baseUr l'],
  154                                                                http Config = {
  155                                                                         method : 'GET',
  156                                                                         url: f hirBaseUrl  + "/" + r esourceNam e,
  157                                                                         params : attachSu ffix(param s, ":exact ")
  158                                                                };
  159                                                       $h ttp(httpCo nfig).then (function( response1)  {
  160                                                                if ( response1. data.total  > 0) {
  161                                                                         fhirRe sourceProm ise.resolv e(response 1.data.ent ry);
  162                                                                         //ToDo : need to  handle FHI R server p agination  here (beca use of _co unt=10 by  default, m aximum=100 )
  163                                                                }
  164                                                                else  {
  165                                                                         fhirRe sourceProm ise.resolv e(0);
  166                                                                }
  167                                                       }) ;
  168                                               }
  169                                      },
  170                                      function (error) {
  171                                               fhirResour cePromise. reject(err or);
  172                                               fhirResour cePromise  = null;
  173                                      }
  174                             );
  175                             return  fhirResou rcePromise .promise;
  176                    };
  177  
  178                    /**
  179                     * T he createU pdateFhirR esource()  service fu nction int ends to po st/put dat a into des ignated FH IR resourc e.
  180                     * I f succeede d, the pos ted/put da ta entry w ill be ret urned.
  181                     *
  182                     * @ param reso urceConfig  : {method , resource Name, data }
  183                     *    note: for  method=PO ST, resour ceName = < Resource N ame>; for  method=PUT , resource Name = <Re source Nam e/id #>
  184                     * r eturn {Res ource Name /id #}
  185                     */
  186                    fhir Resources. createUpda teFhirReso urce = fun ction(reso urceConfig ) {
  187                             var fh irResource Promise =  $q.defer() ;
  188  
  189                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  190                                      function (response)  {
  191                                               if (respon se[1]) {
  192                                                       va r fhirBase Url = resp onse[0]['f hir-baseUr l'];
  193                                                       fh irResource s.appendPr ovenanceMe tadata(res ourceConfi g.data);
  194  
  195                                                       //  append ba ck resourc eType, id  for update
  196                                                       re sourceConf ig.data.re sourceType  = resourc eConfig.re sourceName .split("/" )[0];
  197                                                       re sourceConf ig.data.id  = resourc eConfig.re sourceName .split("/" )[1];
  198  
  199                                                       va r httpConf ig = {
  200                                                                meth od: resour ceConfig.m ethod,
  201                                                                url:  fhirBaseU rl + "/" +  resourceC onfig.reso urceName,
  202                                                                data : resource Config.dat a
  203                                                       };
  204                                                       $h ttp(httpCo nfig).then (
  205                                                                func tion(respo nse) {
  206                                                                         if (re sourceConf ig.method  === "POST" ) {
  207                                                                                  httpConf ig.url = r esourceCon fig.resour ceName + " /" +
  208                                                                                           response.h eaders('Lo cation').s plit(resou rceConfig. resourceNa me)[1].spl it("/")[1] ;
  209                                                                                  fhirReso urcePromis e.resolve( httpConfig .url);
  210                                                                         }
  211                                                                         else i f (resourc eConfig.me thod === " PUT") {
  212                                                                                  if (fhir ResourceRe qs[resourc eConfig.re sourceName ]) {
  213                                                                                           fhirResour ceReqs.spl ice(fhirRe sourceReqs .indexOf(r esourceCon fig.resour ceName), 1 );
  214                                                                                           fhirResour ceReqs[res ourceConfi g.resource Name] = nu ll;
  215                                                                                  }
  216                                                                                  fhirReso urcePromis e.resolve( resourceCo nfig.resou rceName);
  217                                                                         }
  218                                                                         //ToDo : need to  implement  code for P ATCH
  219                                                                },
  220                                                                func tion(error ) {
  221                                                                         fhirRe sourceProm ise.reject (error);
  222                                                                }
  223                                                       );
  224                                               }
  225                                      }
  226                             );
  227                             return  fhirResou rcePromise .promise;
  228                    };
  229  
  230                    fhir Resources. createFhir Resource =  function( resourceNa me, data)  {
  231                             var fh irResource Promise =  $q.defer() ;
  232  
  233                             var ht tpConfig =  {
  234                                      method:  "POST",
  235                                      resource Name: reso urceName,
  236                                      data: da ta
  237                             };
  238                             fhirRe sources.cr eateUpdate FhirResour ce(httpCon fig).then(
  239                                      function (response)  {
  240                                               fhirResour cePromise. resolve(re sponse);
  241                                      }, funct ion(error)  {
  242                                               fhirResour cePromise. reject(err or);
  243                                      }
  244                             );
  245  
  246                             return  fhirResou rcePromise .promise;
  247                    };
  248  
  249                    fhir Resources. saveFhirRe source = f unction(re sourceName , data) {
  250                             var fh irResource Promise =  $q.defer() ,
  251                                      method =  data.id ?  'PUT' : ' POST',
  252                                      resource Name = dat a.id? reso urceName+' /' + data. id : resou rceName;
  253  
  254                             var ht tpConfig =  {
  255                                      method:  method,
  256                                      resource Name: reso urceName,
  257                                      data: da ta
  258                             };
  259                             fhirRe sources.cr eateUpdate FhirResour ce(httpCon fig).then(
  260                                      function (response)  {
  261                                               fhirResour cePromise. resolve(re sponse);
  262                                      }, funct ion(error)  {
  263                                               fhirResour cePromise. reject(err or);
  264                                      }
  265                             );
  266  
  267                             return  fhirResou rcePromise .promise;
  268                    };
  269  
  270                    /**
  271                     * T he resolve FhirResour ce() servi ce functio n intends  to search  for an exi sting entr y from FHI R resource .
  272                     * I f found, t he first m atched ent ry is retu rned. If n othing is  found, a n ew data en try is pos ted.
  273                     *
  274                     * @ param reso urceName,  data, para ms [,other Params]
  275                     * r eturn {Res ource Name /id #}
  276                     */
  277                    fhir Resources. resolveFhi rResource  = function (resourceN ame, data,  params) {
  278                             var fh irResource Promise =  $q.defer() ;
  279  
  280                             functi on searchF hirResourc e() {
  281                                      var refs  = $q.defe r();
  282  
  283                                      fhirReso urces.reso lveFhirRes ourceByPar ams(resour ceName, pa rams).then (
  284                                               function(r esponse) {
  285                                                       re fs.resolve (response) ;
  286                                               }, functio n(error) {
  287                                                       re fs.reject( error);
  288                                               });
  289                                      return r efs.promis e;
  290                             }
  291  
  292                             functi on matchRe source(res ponseItem)  {
  293                                      if (!res ponseItem)  {  //if n o entry is  found, cr eate new o ne
  294                                               fhirResour ces.create FhirResour ce(resourc eName, dat a).then(
  295                                                       fu nction(res ponse) {
  296                                                                fhir ResourcePr omise.reso lve(respon se);
  297                                                       },  function( error) {
  298                                                                fhir ResourcePr omise.reje ct(error);
  299                                                       }) ;
  300                                      }
  301                                      else {   //Otherwis e, return  the first  matched en try
  302                                               fhirResour cePromise. resolve(re sponseItem [0].resour ce.resourc eType + "/ " + respon seItem[0]. resource.i d);
  303                                               //TODO: ne ed to impl ement a co mparator f or other p arams FHIR  server do es not sup port
  304                                      }
  305                                      return f hirResourc ePromise.p romise;
  306                             }
  307  
  308                             fhirRe sources.se rialReques tCalls([se archFhirRe source, ma tchResourc e]);
  309  
  310                             return  fhirResou rcePromise .promise;
  311                    };
  312  
  313                    fhir Resources. serialRequ estCalls =  function( calls) {
  314                             var pr evCallProm ise = null ;
  315                             angula r.forEach( calls, fun ction(call ) {
  316                                      if (!pre vCallPromi se) {      //For the  first call ()
  317                                               prevCallPr omise = ca ll();
  318                                      }
  319                                      else {
  320                                               prevCallPr omise = pr evCallProm ise.then(c all);
  321                                      }
  322                             });
  323                             return  prevCallP romise;
  324                    };
  325  
  326                    fhir Resources. resolveLoc ationByRef erence = f unction(re ference) {
  327                             if (lo cationReqs [reference ]) return  locationRe qs[referen ce].promis e;
  328  
  329                             var lo cationFetc hPromise =  $q.defer( );
  330                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  331                                      function (response)  {
  332                                               if (respon se[1]) {
  333                                                       $h ttp.get(re sponse[0][ 'location' ] + "/" +  reference. split("/") [1]).succe ss(functio n(response ) {
  334                                                                loca tionFetchP romise.res olve(respo nse);
  335                                                       }) .error(fun ction(erro r) {
  336                                                                loca tionFetchP romise.rej ect(error) ;
  337                                                                loca tionFetchP romise = n ull;
  338                                                       }) ;
  339                                                       lo cationReqs [reference ] = locati onFetchPro mise;
  340                                               }
  341                                      },
  342                                      function (error) {
  343                                               locationFe tchPromise .reject(er ror);
  344                                               locationFe tchPromise  = null;
  345                                      }
  346                             );
  347  
  348                             return  locationF etchPromis e.promise;
  349                    };
  350  
  351                    fhir Resources. resolvePra ctitionerB yReference  = functio n(referenc e) {
  352                             if (pr actitioner Reqs[refer ence]) ret urn practi tionerReqs [reference ].promise;
  353  
  354                             var pr actitioner FetchPromi se = $q.de fer();
  355                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  356                                      function (response)  {
  357                                               if (respon se[1]) {
  358                                                       $h ttp.get(re sponse[0][ 'practitio ner'] + "/ " + refere nce.split( "/")[1]).s uccess(fun ction(prac titioner)  {
  359                                                                //co nvert prac titioner n ame array  to single  item (assu me the fir st is alwa ys the cor rect one)
  360                                                                //   note: this  pattern w ill only a lter the d isplay, al lowing for  effective  mirrored  fhir queri es when do ng a reque st transfo rm
  361                                                                if ( ((practiti oner.name  || {}).giv en || {})[ 0])
  362                                                                         practi tioner.nam e.given =  practition er.name.gi ven[0];
  363                                                                if ( ((practiti oner.name  || {}).fam ily || {}) [0])
  364                                                                         practi tioner.nam e.family =  practitio ner.name.f amily[0];
  365  
  366                                                                prac titionerFe tchPromise .resolve(p ractitione r);
  367                                                       }) .error(fun ction(erro r) {
  368                                                                prac titionerFe tchPromise .reject(er ror);
  369                                                                prac titionerFe tchPromise  = null;
  370                                                       }) ;
  371                                                       pr actitioner Reqs[refer ence] = pr actitioner FetchPromi se;
  372                                               }
  373                                      },
  374                                      function (error) {
  375                                               practition erFetchPro mise.rejec t(error);
  376                                               practition erFetchPro mise = nul l;
  377                                      }
  378                             );
  379  
  380                             return  practitio nerFetchPr omise.prom ise;
  381                    };
  382  
  383                    fhir Resources. resolveLoc ationByPar ams = func tion(param s) {
  384                             var re solveLocat ion = $q.d efer();
  385                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  386                                      function (response)  {
  387                                               if (respon se[1]) { / /given a s uccessful  auth check  and local  resource  directory  fetch
  388                                                       // first atte mpt to res olve locat ion by nam e query
  389                                                       $h ttp.get(re sponse[0][ 'location' ] + "?name =" + param s.name).su ccess(func tion(locat ion) {
  390                                                                if ( !location. total) {
  391                                                                         //if n o item ret urned then  create a  new refere nce with t he supplie d paramete rs and ret urn that
  392                                                                         $http( {
  393                                                                                  method:  'POST',
  394                                                                                  url: res ponse[0][' location'] ,
  395                                                                                  data: {
  396                                                                                           "resourceT ype": "Loc ation",
  397                                                                                           "name": pa rams
  398                                                                                  }
  399                                                                         }).suc cess(funct ion(locati on) {
  400                                                                                  $http.ge t(response [0]['locat ion'] + "? name=" + p arams.name ).success( function(l ocation) {
  401                                                                                           resolveLoc ation.reso lve(locati on.entry[0 ]);
  402                                                                                  });
  403                                                                         });
  404                                                                }
  405                                                                else  {
  406                                                                         resolv eLocation. resolve(lo cation.ent ry[0]);
  407                                                                }
  408                                                       }) .error(fun ction(erro r) {
  409                                                                reso lveLocatio n.reject(e rror);
  410                                                       }) ;
  411                                               }
  412                                      },
  413                                      function (error) {
  414                                               resolveLoc ation.reje ct(error);
  415                                      }
  416                             );
  417  
  418                             return  resolveLo cation.pro mise;
  419                    };
  420  
  421                    var  filterByPa rtialName  = function (params, r esponse) {
  422                             return  response. entry.filt er(functio n(entry) {
  423                                      return ! ((!params. family &&  !!entry.re source.nam e.family)  || (!param s.given &&  !!entry.r esource.na me.given)) ;
  424                             });
  425                    };
  426  
  427                    //pr ocess for  resolving  Practition er resourc es:
  428                    //   query Prac titioner b y name, na me is pass ed in as " given" and  "family"  parameters , ensure e xact match  search
  429                    //       if Pra ctitioner  does not e xist, send  POST to c reate new  one, then
  430                    //       given  a result s et greater  than 0
  431                    //           if  one of ei ther famil y or given  parameter s not supp lied, filt er
  432                    fhir Resources. resolvePra ctitionerB yParams =  function(p arams) {
  433                             var re solvePract itioner =  $q.defer() ;
  434  
  435                             $q.all ([localRes ourceDirec toryServic e.fetch(),  authentic ationServi ce.checkAu thStatus() ]).then(
  436                                      function (response)  {
  437                                               if (respon se[1]) { / /given a s uccessful  auth check  and local  resource  directory  fetch
  438                                                       va r paramsEx act = {};
  439                                                       if  (params.g iven) para msExact['g iven:exact '] = param s.given;
  440                                                       if  (params.f amily) par amsExact[' family:exa ct'] = par ams.family ;
  441  
  442                                                       // first atte mpt to res olve pract itioner by  name quer y
  443                                                       $h ttp.get(re sponse[0][ 'practitio ner'] + "? " + $.para m(paramsEx act)).succ ess(functi on(practit ioner) {
  444                                                                if ( !practitio ner.total  || !filter ByPartialN ame(params , practiti oner).leng th) {
  445                                                                         //if n o item ret urned then  create a  new refere nce with t he supplie d paramete rs and ret urn that
  446                                                                         $http( {
  447                                                                                  method:  'POST',
  448                                                                                  url: res ponse[0][' practition er'],
  449                                                                                  data: {
  450                                                                                           "resourceT ype": "Pra ctitioner" ,
  451                                                                                           "name": pa rams
  452                                                                                  }
  453                                                                         }).suc cess(funct ion() {
  454                                                                                  $http.ge t(response [0]['pract itioner']  + "?" + $. param(para msExact)). success(fu nction(pra ctitioner)  {
  455                                                                                           resolvePra ctitioner. resolve(fi lterByPart ialName(pa rams, prac titioner)[ 0]);
  456                                                                                  });
  457                                                                         });
  458                                                                }
  459                                                                else  {
  460                                                                         resolv ePractitio ner.resolv e(filterBy PartialNam e(params,  practition er)[0]);
  461                                                                }
  462                                                       }) .error(fun ction(erro r) {
  463                                                                reso lvePractit ioner.reje ct(error);
  464                                                       }) ;
  465                                               }
  466                                      },
  467                                      function (error) {
  468                                               resolvePra ctitioner. reject(err or);
  469                                      }
  470                             );
  471  
  472                             return  resolvePr actitioner .promise;
  473                    };
  474  
  475                    retu rn fhirRes ources;
  476           }) ;
  477   });