C_sub.idl


#ifndef __PROSPECT_SUBSCRIPTION_IDLFILE_C_sub_idl__
#define __PROSPECT_SUBSCRIPTION_IDLFILE_C_sub_idl__




///////////////////////////////////////////////////////////////////////
//
// Common Subscription Definitions
// Description: Types common all trial 1 IDL definitions related to
// subscription management.
// Created: 29/7/96
// By: D.Lewis, A.DaCruz
//
///////////////////////////////////////////////////////////////////////
//
//
// Modifications:
//	Date: 29/7/96
//	By: D.Lewis
//	Reason: frozen version based on TINA/TANGRAM accounting and
//		subscription models.
//
//	Date: 2/8/96
//	By: D.Lewis
//	Reason:
//		- added t_SvcCommonData to t_SvcProfile
//		- added t_SvcSelection, t_AvailableSvc and
//		 t_AvailableSvcList structures
//
//	Date: 5/8/96
//	By: D.Lewis
//	Reason: Removed struct t_DateTime. This has been moved to
//		file C_typ.idl
//	Date: 22/10/96
//	By: T.Tiropanis
//	Reason: Changed all identifiers with SVC to Svc
//
//	Date: 6/11/96
//	By: D.Lewis
//	Reason:
//		removed all definitions related only to SMP and SRP
//		COs. they have been moved to C_prpgn.idl
//
//	Date: 6/11/96
//	By: D.Lewis
//	Reason:
//		added typedef for t_SagList
//
//	Date: 13/11/96
//	By: T.Tiropanis
//	Reason:
//		swap definitions of t_SubscriptionAssignmentGroup
//		and t_SagList around so that it compiles ok
//
//	Date: 10/12/96
//	By: D.Lewis
//	Reason:
//		change exceptions prefixes from e_* to e_sub*
//		and t_SagList around so that it compiles ok
//
//	Date: 13/1/97
//	By: A.DaCruz
//	Reason:
//		moved t_Credit, t_SubscriberDetails and t_Subscriber
//		to C_subacc.idl - because the he BillControlCO needs
//		to know about them too (Cliff's changes).
//
//	Date: 29/1/97
//	By: D.Lewis
//	Reason:
//		change the type of the basicTariff and userPlan field in the
//		t_subscriptionContract struct to t_TariffId
//
//	Date: 09/06/97
//	By: A.DaCruz
//	Reason:
//		added t_SvcProfileIdList because list of all
//		service profiles defined for a customer and a service
//		was asked to be returned by the database server - by Jochen
//
//	Date: 9/9/97
//	By: D.Lewis
//	Reason:
//		- changed t_SvcCommonData
//		- added tSvcRecordList and t_SvcRecord
//		- removed (commented):
//			t_Enforcement
//			t_InfoFlowEntity
//			t_ChargingPolicy
//			t_InfoFlowDesc
//			t_InfoFLowRecord
//			t_InfoFlowRecordList
//			t_CIFDesc
//			t_CIFRecord
//			t_TermSupport
//			t_NetworkSupport
//		- added union t_SagItem
//		- added struct t_SLA (TO BE COMPLETED!)
//		- added t_SlaTariffList to t_subsctipionContract strcut
//		- added t_SlaTariffList
//		- added t_SlaTariff
//		- added t_SagItemType
//		- added exception e_subInvalidItem
//
//	Date: 11/9/97
//	By: D.Lewis
//	Reason:
//		Commented out the following until T2.2
//		- t_Sla in t_SvcCOmmonData
//		- t_SlaTariffList in t_subscriptionContract
//		- related definitons
//
//	Date: 11/2/98
//	By: J.Klein
//	Reason:
//		- added FCAPS t_SLA definitions
//		  (t_SLAId, t_QoSCriterionId, t_QoSCriterion,
//		   t_QoSCriteriaList, t_SLA, t_SLAList)
//
///////////////////////////////////////////////////////////////////////




#include "C_svc.idl"
#include "C_subacc.idl"




///////////////////////////////////////////////////////////////////////
// t_Enforcement

//enum	t_Enforcement {
//		Mandatory,
//		Optional
//};



///////////////////////////////////////////////////////////////////////
// Information Flow Controlling Entity

//enum	t_InfoFlowEntity {
//		Source,
//		Sink,
//		SourceSink
//};



///////////////////////////////////////////////////////////////////////
// The Charging Policy
// How this realtes to accounting management is for further study

// enum	t_ChargingPolicy {
//		SplitCharge,
//		CollectCharge
//};



///////////////////////////////////////////////////////////////////////
// This structure contains information about a information flow

//struct t_InfoFlowDesc {
//	string		info_flow_id;
//	string		info_flow_type;		// Audio, Video, Text, Data,
						//etc.

//	string		quality;
			// A list of acceptable QoS parameters in
			//terms of ITU standard, e.g audio quality
			// ADPCM, etc
//};



///////////////////////////////////////////////////////////////////////
// This structure contains information about a information flow and its
// enforcement in the Composite Information Flow

//struct t_InfoFlowRecord {
//	t_InfoFlowDesc		info_flow_desc;
//	t_Enforcement		enforcement; /* Mandatory, optional */
//};



///////////////////////////////////////////////////////////////////////
// A list of the above Info Flow Records:

// typedef sequence 	t_InfoFlowRecordList;



///////////////////////////////////////////////////////////////////////
// This structure contains information about a composite information
// flow

//struct t_CIFDesc {
//	string			cif_id;
//	t_InfoFlowRecordList	info_flow_list;
//	t_InfoFlowEntity	info_flow_entity;
//};



///////////////////////////////////////////////////////////////////////
// This structure contains information about a composite information
// flow and its enforcement in the Service

//struct t_CIFRecord {
//	t_CIFDesc		cif_desc;
//	t_Enforcement		enforcement;
//};

// typedef sequence  t_CIFRecordList;



///////////////////////////////////////////////////////////////////////
// Classes of terminal needed for execution

//struct t_TermSupport {
//	t_TermType		term_type;
//	string			term_character;
//};



///////////////////////////////////////////////////////////////////////
// Type of network supporting the service, constraints on the network
// access points, etc.

//struct t_NetworkSupport {
//	t_NapType		nap_type;
//	string			nap_character;
//};



///////////////////////////////////////////////////////////////////////
// This structure contains information about service Subscription
// Common Data that belongs to both subscription and Service Template
// Information.

//struct t_SvcCommonData {
//	t_CIFRecordList		cif_list;
				// the list of composite information flow

//	t_ChargingPolicy	charging_policy;
				// this can depend also on the specific users

//	t_PresentationSupport	svc_presentation;
				// e.g windowing system

//	t_TermSupport		term_support;
//	t_NetworkSupport	network_support;
//};


struct t_SvcRecord {

	string				record_id;
	string				record_descr;
	t_PresentationSupport		uap_mime_type;
	t_SvcRefList			record_info;
};

typedef sequence  t_SvcRecord  t_SvcRecordList;

struct t_SvcCommonData {

	t_SvcRecordList	svc_records;
};

///////////////////////////////////////////////////////////////////////
// TT information

//      Identifier for QoS criterion

typedef string t_QoSCriterionId;

//      Quality of service criterion

struct t_QoSCriterion {


  string description;

  long upper_bound;		//      Upper bound for QoS criterion
  long lower_bound;		//      Lower bound for QoS criterion

  t_QoSCriterionId qos_criterion_id;
  t_TariffId tariff_id;
};

//      List of quality of service criteria

typedef sequence  t_QoSCriterion  t_QoSCriteriaList;

//      Service level agreement identifier

typedef string t_SLAId;

//      Service level agreement

struct t_SLA {


  string description;

  boolean trouble_ticket;		//      Create trouble tickets or not
  t_SLAId sla_id;
  t_QoSCriteriaList QoS_criteria;
};

//      List of service level agreements

typedef sequence  t_SLA  t_SLAList;

///////////////////////////////////////////////////////////////////////
// This structure contains information about subscription

typedef string	t_SubscriptionId;

struct t_Subscription {

	t_SubscriptionId	subscription_id;
	t_SvcId			svc_id;
	t_SvcCommonData		svc_common_data;
	t_SLA			sla;
	short			max_assign_groups;
	short			max_group_size;
};



///////////////////////////////////////////////////////////////////////
// This structure contains information about Service Profile


typedef string				t_SvcProfileId;

typedef sequence  t_SvcProfileId 	t_SvcProfileIdList;

struct t_SvcProfile {

	t_SubscriptionId		subscription_id;
	t_SvcProfileId			svc_profile_id;
	t_SvcCommonData			svc_common_data;
	boolean				activation_state;
};



///////////////////////////////////////////////////////////////////////
// This structure is used to identify different service option that can
// be selected by a user

struct	t_SvcSelection	{

	t_SvcId		svc_id;
	t_SvcProfileId	svc_profile_id;
};



///////////////////////////////////////////////////////////////////////
// This structure is used to provide user with information on available
// services

struct	t_AvailableSvc	{

	t_SvcSelection	service_selection;
	t_SvcType	service_type;
};

typedef sequence  t_AvailableSvc  t_AvailableSvcList;



///////////////////////////////////////////////////////////////////////
// For i_subscription:

typedef string		t_EndUserDomain; // The domain of Users

struct t_SelectionKey {

	string		selection_criteria;
	t_TermType	term_type;
	t_NapType	nap_type;
};



///////////////////////////////////////////////////////////////////////
// Some common definitions for the Subscription CO mgmt.

enum t_AdminState {up,down}; // The status of administration




///////////////////////////////////////////////////////////////////////
// Some common definitions for the Configuration of Subscription
// Assignment Groups.

struct t_Configuration {

	t_TermId	term_id;
	t_NapId		nap_id;
	t_UserId	user_id;
} ;



///////////////////////////////////////////////////////////////////////
// Definition of the some common definitions used in the context of the
// Service Template Handler Computational Object.



///////////////////////////////////////////////////////////////////////
// This structure contains information about ServiceTemplate

struct t_SvcTemplate {

	t_SvcId			svc_id;
				// identifier of the service

	t_SvcType		svc_type;

	t_SvcProviderId		svc_provider_id;

	t_SvcCommonData		svc_common_data;

	t_SLAList		sla_list;

	string			session_type;

	boolean			implicit;
				// implicit, explicit subscription

	t_IntRef		svc_factory_ref;

	any			svc_specific_part;
};




///////////////////////////////////////////////////////////////////////
// This structure contains information about SubscriptionContract

struct t_SubscriptionContract {

	t_SvcId			svc_id;
	t_DateTime		actual_start;
	t_DateTime		requested_start;
	t_Person		requested_by;
	t_Person		billing_contact_pt;
	t_Person		tech_contact_pt;
	t_TariffId		basicTariff;
	t_TariffId		userPlan;
	};


///////////////////////////////////////////////////////////////////////
// This structure contains information about SAG


typedef string			t_SagId;

typedef sequence  t_SagId 	t_SagIdList;

struct t_SubscriptionAssignmentGroup {

	t_SagId				group_id;
	short				group_size;
	string				group_description;
	};

typedef sequence  t_SubscriptionAssignmentGroup  t_SagList;


struct t_AssignGroupSelection {

	t_SubscriptionAssignmentGroup	sub_assgn_grp;
	t_TermType			terminal_type;
	t_TermIdList			term_id_list;
	t_NapType			nap_type;
	t_NapIdList			nap_id_list;
	t_UserIdList			user_id_list;
	};

enum t_SagItemType {User, Term, NAP};


union t_SagItem switch (t_SagItemType) {

	case User: t_UserId user_id;
	case Term : t_TermId term_id;
	case NAP : t_NapId nap_id;
};


///////////////////////////////////////////////////////////////////////
// The starting date of service usage limitation

struct t_AuthLimit {

	t_DateTime		limit_date;
	string			authority;
	};


struct t_SubscriptionPortfolio {

	short			no_of_subscriptions;
	t_SvcIdList		service_list;
	string			monthly_charge;
	any			payment_record;
	t_AuthLimit		authority_limit;
	};



///////////////////////////////////////////////////////////////////////
//	Common Subscription Exception Definition

enum	t_AccessDeniedReason {

		AdminStateDown,
		UnauthorisedAcess
	};


exception e_subAccessDenied {
		t_AccessDeniedReason reason; };


typedef string	t_InvalidAccountReason;


exception e_subInvalidAccountNo {
		t_InvalidAccountReason reason; };


typedef string	t_InvalidSvcProviderReason;


exception e_subInvalidSvcProvider {
		t_InvalidSvcProviderReason reason; };


typedef string	t_InvalidSvcTemplateReason;


exception e_subInvalidSvcTemplate {
		t_InvalidSvcTemplateReason reason; };


typedef string	t_InvalidSAGReason;


exception e_subInvalidSAG {
		t_InvalidSAGReason reason; };


typedef string	t_InvalidSvcProfileReason;


exception e_subInvalidSvcProfile {
		t_InvalidSvcProfileReason reason; };


typedef string	t_InvalidUserReason;

exception e_subInvalidUser {
		t_InvalidUserReason reason; };



typedef string	t_InvalidPortfolioReason;


exception e_subInvalidPortfolio {
		t_InvalidPortfolioReason reason; };


typedef string  t_InvalidItemReason;

exception e_subInvalidItem {
                t_InvalidItemReason reason; };


///////////////////////////////////////////////////////////////////////
//	Common Subscription Interface Definitions
///////////////////////////////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////
// CO Init interface:
// This control the initialisation of the CO and also its termination.
//
// The init operation returns a list of object references needed to
// access the COs interfaces. This init interface may be unused for
// COs in prefernece to an individually defined version (prefixed with
// the CO short name) that supports any additional input parameters
// that might be required

interface i_CoInit {


	void init (
		out	t_IntRefList	generated_ref_list );

	void terminate ();

};




///////////////////////////////////////////////////////////////////////
// CO Mgmt interface:
//	This allows for the control of the COs administrative state.
//	When this is set to down client cannot access any of the other
//	CO interfaces, except for the init and mgmt interfaces

interface i_CoMgmt {


	void setAdminState (
		in	t_AdminState	admin_state )
		raises	(e_subAccessDenied);

		// used to set the administrative state of the
		// SubscriptionRegistrar to up (can be used by
		// authorized clients) or down (can not be used
		// by any client).
		//////////////////////////////////////////////////

	void getAdminState (
		out	t_AdminState	admin_state )
		raises	(e_subAccessDenied);

};




//
// End of Common Subscription Definitions
//
///////////////////////////////////////////////////////////////////////




#endif