Stored Functions

Content-Type: text/xml
URN: urn:ihe:iti:csd:2014:adhoc

Description



 
    Performs an ad-hoc search on a CSD document
  

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
declare namespace csd  =  "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;


let $expr :=$careServicesRequest/adhoc/text()

return 
  if ($expr) 
  then xquery:eval($expr,map{"":/.})
  else ()
Content-Type: text/xml
URN: urn:ihe:iti:csd:2014:stored-function:facility-search

Description



 
    
    Performs a search for all facilities by name, type, address or ID.   
    
    
      The result set consists of all facilities matching the  search parameters ( id, primaryName, name, codedType and address ).
     
        
      The results set may be further restricted according to the limit parameters (start, max, record/@status and record/@updated).  An ordering of the result set is not specified.
    
    
    Response
    Results are returned as a valid CSD document with a root document element of <CSD/>.  The results set is contained entirely within the <facilityDirectory/> element and consists of the full content of the <facility/> elements of matching facilities as maintained by the Care Services InfoManager.
    
    Parameters Query
    Parameters are defined as the content of following elements:
    
       <id/> csd:uniqueID: (optional) If present and the @entityID attribute contains a non-empty value, it is a ID which uniquely identifies a facility. This is an exact match.  
      
      <primaryName/> xs:string: (optional) If present and contains a non-empty value, then the result set should be restricted to those facilities whose <primaryName/> contains this value. Case insensitive.
      <name/> xs:string: (optional) If present and contains a non-empty value, then the result set should be restricted to those facilities which have a <primaryName/> or <otherName/> element containing this value. Case insensitive.      
      <codedType/> csd:codedtype:  If present and contains a non-empty value the result set should be restricted to those facilities whose <codedType/@code> equals this value for the coding schema specified by the @codingScheme attribute.  Case insensitive.
      
       <address/> csd:address: (optional) Contains of any-number of child <addressLine/> elements as follows:
        
          Text content xs:string: (optional) If present and contains a non-empty value, then the results set should be restricted to those facilities whose have an <addressLine/> with specified @component containing this value exactly.  Case insensitive.
           
          @component xs:string : (Required attribute) The component of the address we are searching. Case insensitive.
          
      
      <start/>  xs:int: (optional) The starting index for results returned. Defaults to 1, which indexes the first facility matching the search parameters
      <max/>  xs:int: (optional) The maximum number of results returned.  A value of less than zero implies no maximum.
      
	<record/>  csd:record : (optional) A child element to limit results according to
	
	  @status xs:string: (optional) If present and contains a non-empty value, the result set should be restricted to those facilities whose record/@status equals this value.  Case insensitive.
	  @updated xs:dateTime: (optional) If present and contains a non-empty value, the result set should be restricted to those facilities whose record/@updated is at least the given value.
	
      
    
    Example Request
    
         <careServicesRequest>
           <function urn='urn:ihe:iti:csd:2014:stored-function:facility-search'>
               <codedType code='OPC' codingScheme="USDVA"/>
               <address>
                 <addressLine component='city'>Chapel Hill</addressLine>
	       </address>
               <max>5</max>
           </function>
         </careServicesRequest>         
      
  

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare  variable $careServicesRequest as item() external;



(: 
   The query will be executed against the root element of the CSD document.
    
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 
<CSD xmlns:csd="urn:ihe:iti:csd:2013"  >
  <organizationDirectory/>
  <serviceDirectory/>
  <facilityDirectory>
    {
      let $facs0 := if (exists($careServicesRequest/id))
	then csd_bl:filter_by_primary_id(/CSD/facilityDirectory/*,$careServicesRequest/id)
      else /CSD/facilityDirectory/*
         
      let $facs1 := if (exists($careServicesRequest/primaryName))
	then csd_bl:filter_by_primary_name($facs0,$careServicesRequest/primaryName)
      else $facs0
         
      let $facs2 := if (exists($careServicesRequest/name))
	then csd_bl:filter_by_name($facs1,$careServicesRequest/name)
      else $facs1
    
      let $facs3 := if(exists($careServicesRequest/codedType))
	then csd_bl:filter_by_coded_type($facs2,$careServicesRequest/codedType) 
      else $facs2
   
      let $facs4 := if(exists($careServicesRequest/address/addressLine))
	then csd_bl:filter_by_address($facs3, $careServicesRequest/address/addressLine) 
      else $facs3

      let $facs5 := if (exists($careServicesRequest/record))
	then csd_bl:filter_by_record($facs4,$careServicesRequest/record)      
      else $facs4

      let $facs6 := if(exists($careServicesRequest/otherID))
	then csd_bl:filter_by_other_id($facs5,$careServicesRequest/otherID)      
      else $facs5


      let $facs7 :=  if (exists($careServicesRequest/organizations/organization)) 
	then (csd_bl:filter_by_organizations($facs6,$careServicesRequest/organizations/organization)      )
      else  ($facs6)
	

      return if (exists($careServicesRequest/start)) then
	if (exists($careServicesRequest/max)) 
	  then csd_bl:limit_items($facs7,$careServicesRequest/start,$careServicesRequest/max)         
	else csd_bl:limit_items($facs7,$careServicesRequest/start,<max/>)         
      else
	if (exists($careServicesRequest/max)) 
	  then csd_bl:limit_items($facs7,<start/>,$careServicesRequest/max)         
	else $facs7


    }     
  </facilityDirectory>
  <providerDirectory/>
</CSD>
    
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:modtimes

Description



 
    Gets the maximum modification times for each of the four directories
  

Definition

Source:
declare namespace csd = 'urn:ihe:iti:csd:2013';
declare variable $careServicesRequest as item() external;
let $ptime := max( for $dt in /csd:CSD/csd:providerDirectory/csd:provider/csd:record/@updated return xs:dateTime($dt))
let $otime := max( for $dt in /csd:CSD/csd:organizationDirectory/csd:provider/csd:record/@updated return xs:dateTime($dt))
let $ftime := max( for $dt in /csd:CSD/csd:facilityDirectory/csd:provider/csd:record/@updated return xs:dateTime($dt))
let $stime := max( for $dt in /csd:CSD/csd:serviceDirectory/csd:provider/csd:record/@updated return xs:dateTime($dt))
let $time := max (($ptime,$otime,$ftime,$stime))
return 
  <csd:CSD updated="{$time}">
    <csd:providerDirectory updated="{$ptime}"/>
    <csd:facilityDirectory updated="{$ftime}"/>
    <csd:organizationDirectory updated="{$otime}"/>
    <csd:serviceDirectory updated="{$stime}"/>
  </csd:CSD>
Content-Type: text/xml
URN: urn:ihe:iti:csd:2014:stored-function:organization-search

Description



 
    
    Performs a search for all organizations by name, coded type, address or ID.   
    
    
      The result set consists of all organizations matching the  search parameters ( id, primaryName, name, codedType and address ).
     
        
      The results set may be further restricted according to the limit parameters (start, max, record/@status and record/@updated).  An ordering of the result set is not specified.
    
    
    Response
    Results are returned as a valid CSD document with a root document element of <CSD/>.  The results set is contained entirely within the <organizationDirectory/> element and consists of the full content of the <organization/> elements of matching organizations as maintained by the Care Services InfoManager.
    
    Parameters Query
    Parameters are defined as the content of following elements:
    
       <id/> csd:uniqueID: (optional) If present and the @entityID attribute contains a non-empty value, it is a ID which uniquely identifies an organization. This is an exact match.  
      
      <primaryName/> xs:string: (optional) If present and contains a non-empty value, then the result set should be restricted to those organizations whose <primaryName/> contains this value. Case insensitive.
      <name/> xs:string: (optional) If present and contains a non-empty value, then the result set should be restricted to those organizations which have a <primaryName/> or <otherName/> element containing this value. Case insensitive.      
      <codedType/> csd:codedtype:  If present and contains a non-empty value the result set should be restricted to those organizations whose <codedType/@code> equals this value for the coding schema specified by the @codingScheme attribute.  Case insensitive.
      
       <address/> csd:address: (optional) Contains of any-number of child <addressLine/> elements as follows:
        
          Text content xs:string: (optional) If present and contains a non-empty value, then the results set should be restricted to those organizations whose have an <addressLine/> with specified @component containing this value exactly.  Case insensitive.
           
          @component xs:string : (Required attribute) The component of the address we are searching. Case insensitive.
          
      
      <start/>  xs:int: (optional) The starting index for results returned. Defaults to 1, which indexes the first organization matching the search parameters
      <max/>  xs:int: (optional) The maximum number of results returned.  A value of less than zero implies no maximum.
      
	<record/>  csd:record : (optional) A child element to limit results according to
	
	  @status xs:string: (optional) If present and contains a non-empty value, the result set should be restricted to those organizations whose record/@status equals this value.  Case insensitive.
	  @updated xs:dateTime: (optional) If present and contains a non-empty value, the result set should be restricted to those organizations whose record/@updated is at least the given value.
	
      
    
    Example Request
    
         <careServicesRequest>
           <function urn='urn:ihe:iti:csd:2014:stored-function:service-search'>
               <codedType codingScheme="moh.gov.rw" code="FBO" />
               <address>
                 <addressLine component='city'>Kigali</addressLine>
	       </address>
               <max>5</max>
           </function>
         </careServicesRequest>         
      
  

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
    
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 


<CSD xmlns:csd="urn:ihe:iti:csd:2013"  >
  <organizationDirectory>
    {
      let $orgs0 := if (exists($careServicesRequest/id))
	then csd_bl:filter_by_primary_id(/CSD/organizationDirectory/*,$careServicesRequest/id)
      else /CSD/organizationDirectory/*
         
      let $orgs1 := if (exists($careServicesRequest/primaryName))
	then csd_bl:filter_by_primary_name($orgs0,$careServicesRequest/primaryName)
      else $orgs0
         
      let $orgs2 := if(exists($careServicesRequest/name))
	then csd_bl:filter_by_name($orgs1,$careServicesRequest/name)
      else $orgs1
    
      let $orgs3 := if(exists($careServicesRequest/codedType))
	then csd_bl:filter_by_coded_type($orgs2,$careServicesRequest/codedType)
      else $orgs2
   
      let $orgs4 :=if (exists($careServicesRequest/address/addressLine))
	then csd_bl:filter_by_address($orgs3, $careServicesRequest/address/addressLine)
      else $orgs3
      
      let $orgs5 := if (exists($careServicesRequest/record))
	then csd_bl:filter_by_record($orgs4,$careServicesRequest/record)
      else $orgs4

      let $orgs6 := if (exists($careServicesRequest/otherID))
	then csd_bl:filter_by_other_id($orgs5,$careServicesRequest/otherID)
      else $orgs5

      let $orgs7 := if (exists($careServicesRequest/parent))
	then csd_bl:filter_by_parent($orgs5,$careServicesRequest/parent)
      else $orgs6

      return if (exists($careServicesRequest/start)) then
	if (exists($careServicesRequest/max))
	  then csd_bl:limit_items($orgs7,$careServicesRequest/start,$careServicesRequest/max)
	else csd_bl:limit_items($orgs7,$careServicesRequest/start,<max/>)
      else
	if (exists($careServicesRequest/max))
	  then csd_bl:limit_items($orgs7,<start/>,$careServicesRequest/max)
	else $orgs7

    }     
  </organizationDirectory>
  <serviceDirectory/>
  <facilityDirectory/>
  <providerDirectory/>
</CSD>
Content-Type: text/xml
URN: urn:ihe:iti:csd:2014:stored-function:provider-search

Description



     Performs a search for all providers by name, coded type, address or ID. 
     The result set consists of all providers matching the search parameters ( id,
        otherID, commonName,codedType and address ). 
     The results set may be further restricted according to the limit parameters
        (start, max, record/@status and record/@updated). An ordering of
      the result set is not specified. 
    
      Response Results are returned as a valid CSD document with a root document element of
      <CSD/>. The results set is contained entirely within the <providerDirectory/>
      element and consists of the full content of the <provider/> elements of matching
      providers as maintained by the Care Services InfoManager. 
    Parameters Query Parameters are defined as the content of following elements: 
       <id/> csd:uniqueID: (optional) If present and the @entityID attribute contains a
        non-empty value, it is a ID which uniquely identifies a provider. This is an exact match. 
       <otherID/> csd:otherID: (optional) If present and the
        @assigningAuthorityName attribute contains a non-empty value, then the result set is
        restricted to only those providers which have a <otherID/> with the given
        assigingAuthorityName and @code  <commonName/> xsd:string: (optional)
        If present and contains a non-empty value, then the result set should be restricted to those
        providers which have a <demographic/name/commonName/> containing this value. Case
        insensitive.
      <codedType/> csd:codedtype: If present and contains a non-empty value the
        result set should be restricted to those providers whose <codeType/@code> equals this
        value for the coding schema specified by the @codingScheme attribute. Case insensitive. 
       <address/> csd:address: (optional) Contains of any-number of child
        <addressLine/> elements as follows: 
          Text content xsd:string: (optional) If present and contains a non-empty value,
            then the results set should be restricted to those providers whose have an
            <addressLine/> with specified @component containing this value exactly. Case
            insensitive. 
          @component xsd:string : (Required attribute) The component of the address we
            are searching. Case insensitive.
        
      
      <start/>  xsd:int: (optional) The starting index for results returned.
        Defaults to 1, which indexes the first provider matching the search parameters
      <max/>  xsd:int: (optional) The maximum number of results returned. A value
        of less than zero implies no maximum.
       <record/>  csd:record : (optional) A child element to limit results
        according to 
          @status xsd:string: (optional) If present and contains a non-empty value, the
            result set should be restricted to those providers whose record/@status equals this
            value. Case insensitive.
          @updated xsd:dateTime: (optional) If present and contains a non-empty value,
            the result set should be restricted to those providers whose record/@updated is at least
            the given value.
        
      
    
    Example Request
    
         <careServicesRequest>
           <function urn='urn:ihe:iti:csd:2014:stored-function:service-search'>
               <codedType code="2221" codingScheme="ISCO-08" /<
               <address>
                 <addressLine component='city'>Kigali</addressLine>
	       </address>
               <max>5</max>
           </function>
         </careServicesRequest>         
      
  

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
    
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 

<CSD xmlns:csd="urn:ihe:iti:csd:2013"  >
  <organizationDirectory/>
  <serviceDirectory/>
  <facilityDirectory/>
  <providerDirectory>
    {

      let $provs0 := if (exists($careServicesRequest/id))
	then csd_bl:filter_by_primary_id(/CSD/providerDirectory/*,$careServicesRequest/id)
      else /CSD/providerDirectory/*

      let $provs1 := if(exists($careServicesRequest/otherID))
	then csd_bl:filter_by_other_id($provs0,$careServicesRequest/otherID)
      else $provs0
         
      let $provs2 := if(exists($careServicesRequest/commonName))
	then csd_bl:filter_by_common_name($provs1,$careServicesRequest/commonName)
      else $provs1
    
      let $provs3 := if (exists($careServicesRequest/codedType))
	then csd_bl:filter_by_coded_type($provs2,$careServicesRequest/codedType) 
      else $provs2
   
      let $provs4 := if (exists($careServicesRequest/address/addressLine))
	then csd_bl:filter_by_demographic_address($provs3, $careServicesRequest/address/addressLine) 
      else $provs3

      let $provs5 :=  if (exists($careServicesRequest/record)) 
	then csd_bl:filter_by_record($provs4,$careServicesRequest/record)      
      else  $provs4

      let $provs6 :=  if (exists($careServicesRequest/facilities/facility)) 
	then csd_bl:filter_by_facilities($provs5,$careServicesRequest/facilities/facility)
      else  $provs5

      let $provs7 :=  if (exists($careServicesRequest/organizations/organization)) 
	then csd_bl:filter_by_organizations($provs6,$careServicesRequest/organizations/organization)      
      else  $provs6

      let $provs7a := if(exists($careServicesRequest/language))
	then csd_bl:filter_by_languages($provs7,$careServicesRequest/language)
      else $provs7
    


      return if (exists($careServicesRequest/start)) then
	if (exists($careServicesRequest/max)) 
	  then csd_bl:limit_items($provs7a,$careServicesRequest/start,$careServicesRequest/max)         
	else csd_bl:limit_items($provs7a,$careServicesRequest/start,<max/>)         
      else
	if (exists($careServicesRequest/max)) 
	  then csd_bl:limit_items($provs7a,<start/>,$careServicesRequest/max)         
	else $provs7a

    }     
  </providerDirectory>
</CSD>
Content-Type: text/xml
URN: urn:ihe:iti:csd:2014:stored-function:service-search

Description



 
    
    Performs a search for all search by coded type or ID.   
    
    
      The result set consists of all serices matching the  search parameters ( id and codedType ).
     
        
      The results set may be further restricted according to the limit parameters (start, max, record/@status and record/@updated).  An ordering of the result set is not specified.
    
    
    Response
    Results are returned as a valid CSD document with a root document element of <CSD/>.  The results set is contained entirely within the <serviceDirectory/> element and consists of the full content of the <service/> elements of matching services as maintained by the Care Services InfoManager.
    
    Parameters Query
    Parameters are defined as the content of following elements:
    
       <id/> csd:uniqueID: (optional) If present and the @entityID attribute contains a non-empty value, it is a ID which uniquely identifies a service. This is an exact match.  
      
      <codedType/> csd:codedtype:  If present and contains a non-empty value the result set should be restricted to those services whose <codedType/@code> equals this value for the coding schema specified by the @codingScheme attribute.  Case insensitive.
      
      <start/>  xs:int: (optional) The starting index for results returned. Defaults to 1, which indexes the first service matching the search parameters
      <max/>  xs:int: (optional) The maximum number of results returned.  A value of less than zero implies no maximum.
      
	<record/>  csd:record : (optional) A child element to limit results according to
	
	  @status xs:string: (optional) If present and contains a non-empty value, the result set should be restricted to those serivces whose record/@status equals this value.  Case insensitive.
	  @updatedxs:dateTime: (optional) If present and contains a non-empty value, the result set should be restricted to those serivces whose record/@updated is at least the given value.
	
      
    
    Example Request
    
         <careServicesRequest>
           <function urn='urn:ihe:iti:csd:2014:stored-function:service-search'>
             <codedType code="76499" codingScheme="HCPCS" />
             <start>101</max>
           </function>
         </careServicesRequest>         
      
  

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
    
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 

<CSD xmlns:csd="urn:ihe:iti:csd:2013"  >
  <organizationDirectory/>
  <serviceDirectory>
    {
      let $svcs0 := if (exists($careServicesRequest/id))
	then csd_bl:filter_by_primary_id(/CSD/serviceDirectory/*,$careServicesRequest/id)
      else /CSD/serviceDirectory/*
    	
      let $svcs1 := if(exists($careServicesRequest/codedType))
	then csd_bl:filter_by_coded_type($svcs0,$careServicesRequest/codedType) 
      else $svcs0

      let $svcs2 :=  if (exists($careServicesRequest/record))
	then csd_bl:filter_by_record($svcs1,$careServicesRequest/record)
      else $svcs1

      return if (exists($careServicesRequest/start)) then
	if (exists($careServicesRequest/max)) 
	  then csd_bl:limit_items($svcs2,$careServicesRequest/start,$careServicesRequest/max)         
	else csd_bl:limit_items($svcs2,$careServicesRequest/start,<max/>)         
      else
	if (exists($careServicesRequest/max)) 
	  then csd_bl:limit_items($svcs2,<start/>,$careServicesRequest/max)         
	else $svcs2

    }     
  </serviceDirectory>
  <facilityDirectory/>
  <providerDirectory/>
</CSD>
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:delete_duplicate

Description



 
    Deletes duplicate record reference.  This is done by removing a <csd:otherID/> element on the duplicate record that  references the master record.  
    
    This a <csd:otherID/> is characterized as follows:
    
      The @assigningAuthorityName attribute will be the fixed valueurn:openhie.org:openinfoman attribute of the master record      
      The @code attribute will be the fixed value 'duplicate' to indicate this is for marking a duplicate
      The text() value will be the entity ID used to reference to the master record for the entity
    

    A Care Services Request can be submitted to delete the mark that the record as duplicate with the following request parameters:
    
      <masterEntity/> should have attribute @entityID which contains the entity ID of the master record that the duplicate record should refer to
      <duplicateEntity/> should have attribute @entityID which contains the entity ID of the  duplicate record
    

  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;

let $doc_name := string($careServicesRequest/@resource)
let $doc := csd_dm:open_document($doc_name)

let $masterID := $careServicesRequest/masterEntity/@entityID

let $dupID := $careServicesRequest/duplicateEntity/@entityID
let $dupEntity :=  if (exists($dupID)) then (/csd:CSD/*/*[@entityID = $dupID])[1] else ()


let $dupRef := $dupEntity/csd:otherID[@assigningAuthorityName='urn:openhie.org:openinfoman' and @code='duplicate' and text()=$masterID]

return 
  if (exists($dupRef))
  then delete node $dupRef
  else ()
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:delete_potential_duplicate

Description



 
    Deletes potential duplicate record reference.  This is done by removing a <csd:otherID/> element on the potetnial duplicate record which references the master record.  
    
    This a <csd:otherID/> is characterized as follows:
    
      The @assigningAuthorityName attribute will be the fixed valueurn:openhie.org:openinfoman attribute of the master record      
      The @code attribute will be the fixed value 'duplicate' to indicate this is for marking a duplicate
      The text() value will be the entity ID used to reference to the master record for the entity
    

    A Care Services Request can be submitted to delete the mark that the record as potential duplicate with the following request parameters:
    
      <masterEntity/> should have attribute @entityID which contains the entity ID of the master record that the duplicate record should refer to
      <duplicateEntity/> should have attribute @entityID which contains the entity ID of the  duplicate record
    

  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;

let $doc_name := string($careServicesRequest/@resource)
let $doc := csd_dm:open_document($doc_name)

let $masterID := $careServicesRequest/masterEntity/@entityID

let $dupID := $careServicesRequest/duplicateEntity/@entityID
let $dupEntity :=  if (exists($dupID)) then (/csd:CSD/*/*[@entityID = $dupID])[1] else ()


let $dupRef := $dupEntity/csd:otherID[@assigningAuthorityName='urn:openhie.org:openinfoman' and @code='potential-duplicate' and text()=$masterID]

return 
  if (exists($dupRef))
  then delete node $dupRef
  else ()
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:extract_hierachy

Description



 
    Performs an organization hierarch extraction from a source document into the target document.  Any existing elements in the target document are overwritten by those from the source document(s).

    There are two required parameters:
    
      
	The document is indicated via <document/%gt; element.    If  @resource attribute of the <document/> should be the name of a document available to OpenInfoMan.   Otherwise the content of the <document/> should be a valid CSD document.
      
    

    Under each  <document/> is the required elements:
    
      
	Aa <csd:organization/> element to indicate the part of the hiearchy that should be extracted.  
      
    
    Under each  <document/> are two optional elements:
    
      
	keepParents
	0..1 keepParents  element has integer attribute @value.  Defaults to 1 which means we keep the parents of the indicated organization when we extract.
      
      
	processFacilities
	0..1 processFacilities  element has integer attribute @value.  Defaults to 1 which means we also include the facilities associated to the organizations in the extracted hierarchy.
      
    


All parent nodes of the indicated organziation 
  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
import module namespace functx = "http://www.functx.com";
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;



let $dest_doc := /.
let $dest := $careServicesRequest/@resource


return for $doc in $careServicesRequest/documents/document
  let $name := $doc/@resource
  let $src_doc :=
    if (not (functx:all-whitespace($name)))
    then if (not ($name = $dest)) then csd_dm:open_document($name) else ()
    else $doc/csd:CSD
  let $req_org_id :=  $doc/csd:organization/@entityID 

    
  let $processFacilities := 
    if (exists($doc/processFacilities/@value))
    then ($doc/processFacilities/@value = 1)
    else true()
  let $keepParents := 
    if (exists($doc/keepParents/@value))
    then ($doc/keepParents/@value = 1)
    else true()
    
  let $all_orgs := $src_doc/csd:CSD/csd:organizationDirectory/csd:organization
  let $org := $all_orgs[@entityID = $req_org_id]

  let $orgs := 
    if (not(exists($org)))
    then () (: nothing to extract:) 
    else
      (
	if ($keepParents)
	then csd_bl:get_parent_orgs($all_orgs,$org)
	else ()
	,
	$org
	,
	csd_bl:get_child_orgs($all_orgs,$org)
      )

  let $facs := 
    if (not ($processFacilities) )
    then ()
    else 
      for $org in $orgs
      return  $src_doc/csd:CSD/csd:facilityDirectory/csd:facility[./csd:organizations/csd:organization/@entityID = $org/@entityID]
	


  return
    (
      csd_lsc:update_directory($dest_doc/csd:CSD/csd:organizationDirectory,$orgs)
      ,csd_lsc:update_directory($dest_doc/csd:CSD/csd:facilityDirectory,$facs)
    )



Content-Type: text/xml
URN: urn:openhie.org:openinfoman:facility_create

Description



Create or update a facility entity.   Request parameters should be one or more CSD facility entities

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
(:
import module namespace random = "http://basex.org/modules/random";
:)
import module namespace csd_blu = "https://github.com/openhie/openinfoman/csd_blu";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
   
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 
for $fac in $careServicesRequest/facility
  let $existing := if (exists($fac/@entityID)) then csd_bl:filter_by_primary_id(/CSD/facilityDirectory/*,$fac) else ()
  return
    if (exists($existing)) 
    then replace node $existing with $fac
    else insert node $fac into /CSD/facilityDirectory
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:mark_duplicate

Description



 
    Marks a record as a duplicate with another record.  This is done by adding a <csd:otherID/> element to the record that is duplicate which references the master record.  
    
    This a <csd:otherID/> is characterized as follows:
    
      The @assigningAuthorityName attribute will be the fixed valueurn:openhie.org:openinfoman attribute of the master record      
      The @code attribute will be the fixed value 'duplicate' to indicate this is for marking a duplicate
      The text() value will be the entity ID used to reference to the master record for the entity
    

    A Care Services Request can be submitted to mark the record as duplicate with the following request parameters:
    
      <masterEntity/> should have attribute @entityID which contains the entity ID of the master record that the duplicate record should refer to
      <duplicateEntity/> should have attribute @entityID which contains the entity ID of the  duplicate record
    

  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;

let $doc_name := string($careServicesRequest/@resource)
let $doc := csd_dm:open_document($doc_name)

let $masterID := $careServicesRequest/masterEntity/@entityID
let $masterEntity := if (exists($masterID)) then  (/csd:CSD/*/*[@entityID = $masterID])[1] else ()

let $dupID := $careServicesRequest/duplicateEntity/@entityID
let $dupEntity :=  if (exists($dupID)) then (/csd:CSD/*/*[@entityID = $dupID])[1] else ()


let $masterRef := <csd:otherID assigningAuthorityName='urn:openhie.org:openinfoman' code='duplicate'>{string($masterID)}</csd:otherID>

return 
  if (not(exists($masterEntity)) or not( exists($dupEntity)))
  then ()
  else 
    let $existingRef := ($dupEntity/csd:otherID[@assigningAuthorityName = 'urn:openhie.org:openinfoman' and @code='duplicate'])[1]
    return 
      (
	if (exists($existingRef))
	then (replace node $existingRef with $masterRef)
	else (insert node $masterRef before ($dupEntity/*)[1])
      ,
        for $entity in /csd:CSD/*/*[./csd:otherID[@assigningAuthorityName='urn:openhie.org:openinfoman' and @code='duplicate' and ./text()=$dupID]]
	let $e_existingRef := ($entity/csd:otherID[@assigningAuthorityName='urn:openhie.org:openinfoman' and @code='duplicate' and  ./text()=$dupID])[1]
	return 
	  if (not($e_existingRef = $existingRef)  )
	  then replace node $e_existingRef with $masterRef
	  else () (:avoid double replacelement in edge case in which a record is marked as duplicate to itself:)
     )


Content-Type: text/xml
URN: urn:openhie.org:openinfoman:mark_potential_duplicate

Description



 
    Marks a record as a potential duplicate with another record.  This is done by adding a <csd:otherID/> element to the record that is the potential duplicate which references the master record.  
    
    This a <csd:otherID/> is characterized as follows:
    
      The @assigningAuthorityName attribute will be the fixed valueurn:openhie.org:openinfoman attribute of the master record      
      The @code attribute will be the fixed value 'potential-duplicate' to indicate this is for marking a potential duplicate
      The text() value will be the entity ID used to reference to the master record for the entity
    

    A Care Services Request can be submitted to mark the record as potential duplicate with the following request parameters:
    
      <masterEntity/> should have attribute @entityID which contains the entity ID of the master record that the potential duplicate record should refer to
      <duplicateEntity/> should have attribute @entityID which contains the entity ID of the  duplicate record
    

  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;

let $doc_name := string($careServicesRequest/@resource)
let $doc := csd_dm:open_document($doc_name)

let $masterID := $careServicesRequest/masterEntity/@entityID
let $masterEntity := if (exists($masterID)) then  (/csd:CSD/*/*[@entityID = $masterID])[1] else ()

let $dupID := $careServicesRequest/duplicateEntity/@entityID
let $dupEntity :=  if (exists($dupID)) then (/csd:CSD/*/*[@entityID = $dupID])[1] else ()


let $masterRef := <csd:otherID assigningAuthorityName='urn:openhie.org:openinfoman' code='potential-duplicate'>{string($masterID)}</csd:otherID>

return 
  if (not(exists($masterEntity)) or not( exists($dupEntity)))
  then ()
  else 
    let $existingRef := ($dupEntity/csd:otherID[@assigningAuthorityName = 'urn:openhie.org:openinfoman' and @code='potential-duplicate' and text() = $masterID])[1]
    return 
      (
	if (exists($existingRef))
	then (replace node $existingRef with $masterRef)
	else (insert node $masterRef before ($dupEntity/*)[1])
      ,
        for $entity in /csd:CSD/*/*[./csd:otherID[@assigningAuthorityName='urn:openhie.org:openinfoman' and @code='potential-duplicate' and ./text()=$dupID]]
	let $e_existingRef := ($entity/csd:otherID[@assigningAuthorityName='urn:openhie.org:openinfoman' and @code='potential-duplicate' and  ./text()=$dupID])[1]
	return (replace node $e_existingRef with $masterRef)
     )


Content-Type: text/xml
URN: urn:openhie.org:openinfoman:identifier_merge

Description



 
    Performs a merge from the indicated source document(s) into the target document.   Any entities in the target document are overwritten by the corresponding entity in the source document except that <csd:otherID/> elements are preserved.

    Documents are indicated via <document/%gt; elements under the top-level <documents/> element.   
    The  @resource attribute of the <document/> should be the name of a document available to OpenInfoMan.   Otherwise the content of the <document/> should be a valid CSD document.


    The following optional elements are allowed under each <document/%gt; element :
    
      insertNew 0..1 insertNew has integer attribute @value. Defaults to 1 which means we insert any new entities from the source documents if they are not already a part of the destination document
    

  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
import module namespace functx = "http://www.functx.com";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;



let $dest_doc := /.
let $dest := $careServicesRequest/@resource
for $doc in $careServicesRequest/documents/document
  let $insertNew := 
    if (exists($doc/insertNew/@value))
    then ($doc/insertNew/@value = 1)
    else true()

  let $name := string($doc/@resource)
  let $src_doc :=
    if (not (functx:all-whitespace($name)))
    then if (not ($name = $dest)) then csd_dm:open_document( $name) else ()
    else $doc
  return 
    (
    let $src_dir := $src_doc/csd:CSD/csd:organizationDirectory
    let $dest_dir := $dest_doc/csd:CSD/csd:organizationDirectory
    return
      for $e in $src_dir/csd:organization 
      let $existing := $dest_dir/csd:organization[@entityID = $e/@entityID]
      return 
	if (exists($existing)) 
        then
          let $new := 
	    <csd:organization entityID="{$e/@entityID}">
	      {$existing/csd:otherID}  
	      {$e/*}
	    </csd:organization>
	  return replace node $existing with $new 
        else if ($insertNew) then insert node $e into $dest_dir else ()
    ,
    let $src_dir := $src_doc/csd:CSD/csd:providerDirectory
    let $dest_dir := $dest_doc/csd:CSD/csd:providerDirectory
    return
      for $e in $src_dir/csd:provider 
      let $existing := $dest_dir/csd:provider[@entityID = $e/@entityID]
      return 
	if (exists($existing)) 
	then
          let $new := 
	    <csd:provider entityID="{$e/@entityID}">
	      {$existing/csd:otherID}  
	      {$e/*}
	    </csd:provider>
	  return replace node $existing with $new 
        else if ($insertNew) then insert node $e into $dest_dir else ()
    ,
    let $src_dir := $src_doc/csd:CSD/csd:serviceDirectory
    let $dest_dir := $dest_doc/csd:CSD/csd:serviceDirectory
    return
      for $e in $src_dir/csd:service 
      let $existing := $dest_dir/csd:service[@entityID = $e/@entityID]
      return 
	if (exists($existing)) 
	then
          let $new := 
	    <csd:service entityID="{$e/@entityID}">
	      {$existing/csd:otherID}  
	      {$e/*}
	    </csd:service>
	  return replace node $existing with $new 
        else if ($insertNew) then insert node $e into $dest_dir else ()
    ,
    let $src_dir := $src_doc/csd:CSD/csd:facilityDirectory
    let $dest_dir := $dest_doc/csd:CSD/csd:facilityDirectory
    return
      for $e in $src_dir/csd:facility 
      let $existing := $dest_dir/csd:facility[@entityID = $e/@entityID]
      return 
	if (exists($existing)) 
	then
          let $new := 
	    <csd:facility entityID="{$e/@entityID}">
	      {$existing/csd:otherID}  
	      {$e/*}
	    </csd:facility>
	  return replace node $existing with $new 
        else if ($insertNew) then insert node $e into $dest_dir else ()

    )




Content-Type: text/xml
URN: urn:openhie.org:openinfoman:organization_create

Description



Create or update a organization entity.   Request parameters should be one or more CSD organization entities

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
(:
import module namespace random = "http://basex.org/modules/random";
:)
import module namespace csd_blu = "https://github.com/openhie/openinfoman/csd_blu";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
   
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 
for $org in $careServicesRequest/organization
  let $existing := if (exists($org/@entityID)) then csd_bl:filter_by_primary_id(/CSD/organizationDirectory/*,$org) else ()
  return
    if (exists($existing)) 
    then replace node $existing with $org
    else insert node $org into /CSD/organizationDirectory
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:provider_create

Description



Create or update a provider entity.   Request parameters should be one or more CSD provider entities

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
(:
import module namespace random = "http://basex.org/modules/random";
:)
import module namespace csd_blu = "https://github.com/openhie/openinfoman/csd_blu";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
   
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 
for $prov in $careServicesRequest/provider
  let $existing := if (exists($prov/@entityID)) then csd_bl:filter_by_primary_id(/CSD/providerDirectory/*,$prov) else ()
  return
    if (exists($existing)) 
    then replace node $existing with $prov
    else insert node $prov into /CSD/providerDirectory
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:service_create

Description



Create or update a service entity.   Request parameters should be one or more CSD service entities

Definition

Source:
import module namespace csd_bl = "https://github.com/openhie/openinfoman/csd_bl";
(:
import module namespace random = "http://basex.org/modules/random";
:)
import module namespace csd_blu = "https://github.com/openhie/openinfoman/csd_blu";
declare default element  namespace   "urn:ihe:iti:csd:2013";
declare variable $careServicesRequest as item() external;

(: 
   The query will be executed against the root element of the CSD document.
   
   The dynamic context of this query has $careServicesRequest set to contain any of the search 
   and limit paramaters as sent by the Service Finder
:) 
for $srvc in $careServicesRequest/service
  let $existing := if (exists($srvc/@entityID)) then csd_bl:filter_by_primary_id(/CSD/serviceDirectory/*,$srvc) else ()
  return
    if (exists($existing)) 
    then replace node $existing with $srvc
    else insert node $srvc into /CSD/serviceDirectory
Content-Type: text/xml
URN: urn:openhie.org:openinfoman:simple_merge

Description



 
    Performs a simple merge from the indicated source document(s) into the target document.  

    Documents are indicated via <document/%gt; elements under the top-level <documents/> element.   
    If  @resource attribute of the <document/> should be the name of a document available to OpenInfoMan.   Otherwise the content of the <document/> should be a valid CSD document.

    The following optional elements are allowed:
    
      overwriteExisting 0..1 overwriteExisting has integer attribute @value. Defaults to 1 which aany existing elements in the target document are overwritten by those from the source document(s).
    

  

Definition

Source:
import module namespace csd_lsc = "https://github.com/openhie/openinfoman/csd_lsc";
import module namespace csd_dm = "https://github.com/openhie/openinfoman/csd_dm";
import module namespace csd_webconf =  "https://github.com/openhie/openinfoman/csd_webconf";
import module namespace functx = "http://www.functx.com";
declare namespace csd  =  "urn:ihe:iti:csd:2013";

declare variable $careServicesRequest as item() external;


let $overwriteExisting := 
  if (exists($careServicesRequest/overwriteExisting/@value))
  then ($careServicesRequest/overwriteExisting/@value = 1)
  else true()


let $dest_doc := /.
let $dest := $careServicesRequest/@resource

for $doc  in $careServicesRequest/documents/document
  let $name := $doc/@resource
  let $src_doc :=
    if (not (functx:all-whitespace($name)))
    then if (not ($name = $dest)) then csd_dm:open_document($name) else ()
    else $doc
  return  
    csd_lsc:refresh_doc($dest_doc, $src_doc,$overwriteExisting)