--
-- Assessment Package
--
-- @author nperper@it.uc3m.es
-- @creation-date 2004-08-05
--

-- Assessment Sessions: provides the central definition of a given subject's performance of an Assessment.
create table as_sessions (
	session_id integer
		constraint as_sessions_session_id_pk
		primary key
		constraint as_sessions_session_id_fk
		references cr_revisions(revision_id),
	assessment_id integer
		constraint as_sessions_assessment_id_fk
		references as_assessments(assessment_id),
	-- References a Subjects entity that we don't define in this package.
	-- if subjects can't be "persons" then Assessment will have to define an as_subjects table for its own use.
	subject_id integer
		constraint as_sessions_subject_id_fk
		references persons(person_id),
	-- references Users if someone is doing the Assessment as a proxy for the real subject
	staff_id integer
		constraint as_sessions_staff_id_fk
		references users(user_id),
	-- when the subject should do the Assessment
	target_datetime		date,
	-- when the subject initiated the Assessment
	creation_datetime 	date,
	-- when the subject first sent something back in
	first_mod_datetime 	date,
	-- the most recent submission
	last_mod_datetime 	date,
	-- when the final submission produced a complete Assessment
	completed_datetime 	date,
	session_status varchar(20),
	assessment_status 	varchar(20),
	-- current percentage of the subject achieved so far
	percent_score integer
		constraint as_sessions_percent_score_ck
		check (percent_score <= 100)
);

--Assessment Section Data: tracks the state of each Section in the Assessment.
create table as_section_data (
	section_data_id integer
		constraint as_section_data_section_data_id_pk
		primary key
		constraint as_section_data_section_data_id_fk
		references cr_revisions(revision_id),
	session_id integer
		constraint as_section_data_session_id_fk
		references as_sessions(session_id),
	section_id integer
		constraint as_section_data_section_id_fk
		references as_sections(section_id),
-- if subjects can't be "persons" then Assessment will have to define an as_subjects table for its own use.
	subject_id integer
		constraint as_section_data_subject_id_fk
		references persons(person_id),
	staff_id integer
		constraint as_section_data_staff_id_fk
		references users(user_id)
);

-- Assessment Item Data: is the "long skinny table" where all the primary data go
create table as_item_data (
	item_data_id integer
		constraint as_item_data_item_data_id_pk
		primary key
		constraint as_item_data_item_data_id_fk
		references cr_revisions(revision_id),
	session_id integer
		constraint as_item_data_session_id_fk
		references as_sessions(session_id),
	-- if subjects can't be "persons" then Assessment will have to define an as_subjects table for its own use
	subject_id integer
		constraint as_item_data_subject_id_fk
		references persons(person_id),
	-- missing foreign key
	staff_id integer
		constraint as_item_data_staff_id_fk
		references users(user_id),
	as_item_id integer
		constraint as_item_data_item_id
		references as_items(as_item_id),
	is_unknown_p char(1) default 'f'
		constraint as_item_data_is_unknown_p_ck
		check (is_unknown_p in ('t','f')),
	-- references as_item_choices
	choice_id_answer integer
		constraint as_item_data_choice_id_answer_fk
		references as_item_choices(choice_id),
	boolean_answer	char(1)
			constraint as_item_data_boolean_ck
			check (boolean_answer in ('t','f')),
	clob_answer 	clob,
	numeric_answer	number,
	integer_answer	integer,
	-- presumably can store both varchar and text datatypes 
	text_answer	varchar(500),
	timestamp_answer	date,
	-- references cr_revisions
	content_answer	integer
		constraint as_item_data_content_answer_fk
		references cr_revisions,
	-- This field stores the signed entered data
	signed_data varchar(500)
	--percent_score integer
	-- constraint as_item_data_percent_score_ck
	--check (percent_score <=100)
	-- to do: figure out how attachment answers should be supported; the Attachment package is still in need of considerable help. Can we rely on it here?
);
