Appendix B - IDL Description of Patient Record Object

//
// hc_types.idl
//
// IDL declarations for the patient record structures 
// First, define the basic data types used in terms of CORBA types

typedef string name_type;
typedef string login_type;
typedef string<9> id_type;
typedef string<2> state_type;
typedef string<10> zipcode_type;
typedef string complaint_type;        // string of keywords
typedef string symptom_type;          // string of keywords
typedef string<255> URL_type;   // string to hold Universal Resource Locator
typedef string treatment_type;        // unstructured text for storing treatment information
typedef char sex_type; // Male, Female
typedef string role_type; // type for storing the role identifier
typedef string<10> password_type; // type for storing passwords
typedef string<10> date_type; // date in mm/dd/yyyy format
typedef string<16> date_time_type; // date and time in "mm/dd/yyyy hh:mm" format
typedef string name_address_type; // used for storing name and
address of companies, etc.
typedef string<3> time_zone_type; // type for time zone
indicator

// 
// Next, define the compund data types in terms of the basic data
// types. These definitions form the basic patient record information
// structure.
//

struct address_type {
  string street;
  string city;
  state_type state;
  zipcode_type zipcode;
};

enum date_data_format {SINGLE, RANGE};

struct date_data_type {
  date_data_format format;   // set to SINGLE or RANGE to indicate
                             // whether a single date or a date range
  time_zone_type time_zone;  // stores the time zone indicator 
  date_type begin_date;
  date_type end_date;
};

struct date_time_data_type {
  date_data_format format;   // set to SINGLE or RANGE to indicate
                             // whether a single date or a date range
  time_zone_type time_zone;  // stores the time zone indicator 
  date_time_type begin_date_time;
  date_time_type end_date_time;
};

struct patient_record_id_type {
  id_type patient_id;
  name_type last_name;
  name_type middle_name;
  name_type first_name;
  address_type address;
};

struct patient_record_administrative_type {
  id_type patient_id;
  sex_type sex;
  date_data_type date_of_birth;
  date_data_type date_of_death;
}; 

struct patient_record_encounter_type {
  id_type patient_id;
  date_time_data_type encounter_date;
  complaint_type complaint;
  symptom_type symptoms;
  id_type doctor_id;
  treatment_type treatment;
};

struct patient_record_encounter_notes_type {
  id_type patient_id;
  date_time_data_type encounter_date;
  date_time_data_type notes_date;
  id_type doctor_id;
  URL_type notes_URL; // doctor notes are stored in a file and the
                      // URL to the file is given to the client 
};

struct patient_record_diagnostic_type {
  id_type patient_id;
  date_time_data_type encounter_date;
  date_time_data_type diagnostic_date;
  name_address_type diagnostic_center;
  URL_type diagnostic_URL; // diagnostic data is stored in a file and the 
                           // URL to the file is given to the client 
};

struct patient_record_annotation_type {
  id_type patient_id;
  date_time_data_type encounter_date;
  date_time_data_type diagnostic_date;
  date_time_data_type annotation_date;
  id_type doctor_id;

  URL_type annotation_URL; // annotation data is stored in a file and the
                           // URL to the file is given to the client 
};

//
// Next, define a record type to hold the information required
// for access control on the server. A record of this type
// is passed to each server method. The methods verify the
// role access before providing data.
//
struct access_control_information_type {
  id_type requestor_id;
  login_type requestor_login;
  role_type requestor_role;
  password_type requestor_password;
  string access_result; // contains string which indicates result of access 
                        // verification when there is an error
                        // this is null when no error.
};

//
// Next, define some sequences which are used to store the lists
// of objects being returned by the server
//
typedef sequence<id_type> patient_id_list_type;

// a list of patient identifiers;
typedef sequence<patient_record_id_type> patient_record_id_list_type;

// a list of patient id records
typedef sequence<patient_record_administrative_type> 
patient_record_administrative_list_type;

// a list of administrative records
typedef sequence<patient_record_encounter_type> patient_encounter_list_type;

// a list of patient encounters
typedef sequence<patient_record_encounter_notes_type>
patient_encounter_notes_list_type;

// a list of patient encounter notes
typedef sequence<patient_record_diagnostic_type> patient_diagnostic_list_type;

// a list of diagnostic data records
typedef sequence<patient_record_annotation_type> patient_record_annotation_list_type;

// a list of annotation data records 
//
//
// Define the structure to hold the complete patient record
//

struct patient_record_type {
  patient_record_id_type id_record;
  patient_record_administrative_type admin_record;
  patient_encounter_list_type encounter_list;

  // a list of patient encounters
  patient_encounter_notes_list_type encounter_notes_list;

  // a list of patient encounter notes
  patient_diagnostic_list_type diagnostic_list;

  // a list of diagnostic data records
  patient_record_annotation_list_type annotation_list;

  // a list of annotation data records
};

//
// hc.idl
//

#include "hc_types.idl"

// IDL declarations for interface to patient record server objects
//
interface patient_record_server_type {
  // returns an entire patient record
  patient_record_type GetPatientRecord(inout 
      access_control_information_type role_access_info, in id_type 
      patient_id);

  // returns a list of patient id records that have matches to the
  // criteria specified in the input parameter
  patient_record_id_list_type GetIdRecordList(in patient_record_id_type 
      id_criteria, inout access_control_information_type
      role_access_info);

  // return a list of administrative records based on matching fields
  // in the criteria record
  patient_record_administrative_list_type GetAdministrativeList (in 
      patient_record_administrative_type admin_criteria, inout 
      access_control_information_type role_access_info);

  // returns a list of encounters based on matching fields
  // in the criteria record
  patient_encounter_list_type GetEncounterList (in 
      patient_record_encounter_type encounter_criteria, inout 
      access_control_information_type role_access_info);

  // returns a list of encounter notes based on matching fields
  // in the criteria record
  patient_encounter_notes_list_type GetEncounterNotesList (in 
      patient_record_encounter_notes_type encounter_notes_criteria, 
      inout access_control_information_type role_access_info);

  // returns a list of diagnostic records based on matching fields
  // in the criteria record
  patient_diagnostic_list_type GetDiagnosticList(in 
    patient_record_diagnostic_type diagnostic_criteria, inout 
    access_control_information_type role_access_info);

  // returns a list of annotation records based on matching fields
  // in the criteria record
  patient_record_annotation_list_type GetAnnotationList(in
    patient_record_annotation_type annotation_criteria, inout
    access_control_information_type role_access_info);
};
Up Previous Next