{ "agent_absences": { "comment": "Records instances when agents are absent from classes", "columns": [ { "name": "absence_id", "data_type": "integer", "comment": "Unique internal absence ID" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the absent agent" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class affected by the absence" }, { "name": "absence_date", "data_type": "date", "comment": "Date of the agent's absence" }, { "name": "reported_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the absence was reported" }, { "name": "reason", "data_type": "text", "comment": "Reason for the agent's absence" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "agent_notes": { "comment": "Stores historical notes and remarks about agents", "columns": [ { "name": "note_id", "data_type": "integer", "comment": "Unique internal note ID" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent" }, { "name": "note_date", "data_type": "timestamp without time zone", "comment": "Timestamp when the note was created" }, { "name": "note", "data_type": "text", "comment": "Content of the note regarding the agent" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } } ] }, "agent_orders": { "comment": "Stores order information related to agents and classes", "columns": [ { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the order record was last updated" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the order record was created" }, { "name": "order_id", "data_type": "integer", "comment": "Unique internal order ID" }, { "name": "class_time", "data_type": "time without time zone", "comment": "Time when the class is scheduled" }, { "name": "order_hours", "data_type": "integer", "comment": "Number of hours linked to the agent's order for a specific class" }, { "name": "order_number", "data_type": "character varying", "comment": "Valid order number associated with the agent" }, { "name": "class_days", "data_type": "character varying", "comment": "Days when the class is scheduled" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "agent_products": { "comment": "Associates agents with the products they are trained to teach", "columns": [ { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent" }, { "name": "product_id", "data_type": "integer", "comment": "Reference to the product the agent is trained in" }, { "name": "trained_start_date", "data_type": "date", "comment": "Start date when the agent began training in the product" }, { "name": "trained_end_date", "data_type": "date", "comment": "End date when the agent finished training in the product" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "product_id", "references": { "table": "products", "column": "product_id" } } ] }, "agent_qa_visits": { "comment": "Records QA visits involving agents and classes", "columns": [ { "name": "visit_id", "data_type": "integer", "comment": "Unique internal QA visit ID" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "visit_date", "data_type": "date", "comment": "Date of the QA visit" }, { "name": "qa_report_id", "data_type": "integer", "comment": "Reference to the associated QA report" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "class_id", "references": { "table": "classes", "column": "class_id" } }, { "column": "qa_report_id", "references": { "table": "qa_reports", "column": "qa_report_id" } } ] }, "agent_replacements": { "comment": "Records instances of agent replacements in classes", "columns": [ { "name": "replacement_id", "data_type": "integer", "comment": "Unique internal replacement ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "original_agent_id", "data_type": "integer", "comment": "Reference to the original agent" }, { "name": "replacement_agent_id", "data_type": "integer", "comment": "Reference to the replacement agent" }, { "name": "start_date", "data_type": "date", "comment": "Date when the replacement starts" }, { "name": "end_date", "data_type": "date", "comment": "Date when the replacement ends" }, { "name": "reason", "data_type": "text", "comment": "Reason for the agent's replacement" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } }, { "column": "original_agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "replacement_agent_id", "references": { "table": "agents", "column": "agent_id" } } ] }, "agents": { "comment": "Stores information about agents (instructors or facilitators)", "columns": [ { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the agent record was last updated" }, { "name": "residential_town_id", "data_type": "integer", "comment": "Reference to the town where the agent lives" }, { "name": "preferred_working_area_1", "data_type": "integer", "comment": "Agent's first preferred working area" }, { "name": "preferred_working_area_2", "data_type": "integer", "comment": "Agent's second preferred working area" }, { "name": "preferred_working_area_3", "data_type": "integer", "comment": "Agent's third preferred working area" }, { "name": "sace_registration_date", "data_type": "date", "comment": "Date when the agent's SACE registration became effective" }, { "name": "sace_expiry_date", "data_type": "date", "comment": "Expiry date of the agent's provisional SACE registration" }, { "name": "quantum_assesment", "data_type": "numeric", "comment": "Agent's competence score in Communications (percentage)" }, { "name": "agent_training_date", "data_type": "date", "comment": "Date when the agent received induction training" }, { "name": "signed_agreement", "data_type": "boolean", "comment": "Indicates if the agent has a signed agreement (true) or not (false)" }, { "name": "signed_agreement_date", "data_type": "date", "comment": "Date when the agent signed the agreement" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the agent record was created" }, { "name": "agent_id", "data_type": "integer", "comment": "Unique internal agent ID" }, { "name": "residential_postal_code", "data_type": "character varying", "comment": "Postal code of the agent's residential area" }, { "name": "bank_branch_code", "data_type": "character varying", "comment": "Branch code of the agent's bank" }, { "name": "bank_account_number", "data_type": "character varying", "comment": "Agent's bank account number" }, { "name": "agent_notes", "data_type": "text", "comment": "Notes regarding the agent's performance, issues, or other relevant information" }, { "name": "highest_qualification", "data_type": "character varying", "comment": "Highest qualification the agent has achieved" }, { "name": "sace_registration_number", "data_type": "character varying", "comment": "Agent's SACE (South African Council for Educators) registration number" }, { "name": "first_name", "data_type": "character varying", "comment": "Agent's first name" }, { "name": "initials", "data_type": "character varying", "comment": "Agent's initials" }, { "name": "surname", "data_type": "character varying", "comment": "Agent's surname" }, { "name": "gender", "data_type": "character varying", "comment": "Agent's gender" }, { "name": "race", "data_type": "character varying", "comment": "Agent's race; options include 'African', 'Coloured', 'White', 'Indian'" }, { "name": "sa_id_no", "data_type": "character varying", "comment": "Agent's South African ID number" }, { "name": "passport_number", "data_type": "character varying", "comment": "Agent's passport number if they are a foreigner" }, { "name": "tel_number", "data_type": "character varying", "comment": "Agent's primary telephone number" }, { "name": "email_address", "data_type": "character varying", "comment": "Agent's email address" }, { "name": "residential_address_line", "data_type": "character varying", "comment": "Agent's residential street address" }, { "name": "residential_suburb", "data_type": "character varying", "comment": "Agent's residential suburb" }, { "name": "bank_name", "data_type": "character varying", "comment": "Name of the agent's bank" } ], "foreign_keys": [ { "column": "preferred_working_area_1", "references": { "table": "locations", "column": "location_id" } }, { "column": "preferred_working_area_2", "references": { "table": "locations", "column": "location_id" } }, { "column": "preferred_working_area_3", "references": { "table": "locations", "column": "location_id" } }, { "column": "residential_town_id", "references": { "table": "locations", "column": "location_id" } } ] }, "attendance_records": { "comment": "Associates learners with their attendance status on specific dates", "columns": [ { "name": "register_id", "data_type": "integer", "comment": "Reference to the attendance register" }, { "name": "learner_id", "data_type": "integer", "comment": "Reference to the learner" }, { "name": "status", "data_type": "character varying", "comment": "Attendance status of the learner (e.g., 'Present', 'Absent')" } ], "foreign_keys": [ { "column": "learner_id", "references": { "table": "learners", "column": "learner_id" } }, { "column": "register_id", "references": { "table": "attendance_registers", "column": "register_id" } } ] }, "attendance_registers": { "comment": "Records attendance registers for classes", "columns": [ { "name": "register_id", "data_type": "integer", "comment": "Unique internal attendance register ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "date", "data_type": "date", "comment": "Date of the attendance" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent who conducted the attendance" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the attendance register was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the attendance register was last updated" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "class_agents": { "comment": "Associates agents with classes they facilitate, including their roles and durations", "columns": [ { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent facilitating the class" }, { "name": "start_date", "data_type": "date", "comment": "Date when the agent started facilitating the class" }, { "name": "end_date", "data_type": "date", "comment": "Date when the agent stopped facilitating the class" }, { "name": "role", "data_type": "character varying", "comment": "Role of the agent in the class (e.g., 'Original', 'Backup', 'Replacement')" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "class_notes": { "comment": "Stores historical notes and remarks about classes", "columns": [ { "name": "note_id", "data_type": "integer", "comment": "Unique internal note ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "note_date", "data_type": "timestamp without time zone", "comment": "Timestamp when the note was created" }, { "name": "note", "data_type": "text", "comment": "Content of the note regarding the class" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "class_schedules": { "comment": "Stores scheduling information for classes", "columns": [ { "name": "schedule_id", "data_type": "integer", "comment": "Unique internal schedule ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "start_time", "data_type": "time without time zone", "comment": "Class start time" }, { "name": "end_time", "data_type": "time without time zone", "comment": "Class end time" }, { "name": "day_of_week", "data_type": "character varying", "comment": "Day of the week when the class occurs (e.g., 'Monday')" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "class_subjects": { "comment": "Associates classes with the subjects or products being taught", "columns": [ { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "product_id", "data_type": "integer", "comment": "Reference to the subject or product taught in the class" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } }, { "column": "product_id", "references": { "table": "products", "column": "product_id" } } ] }, "classes": { "comment": "Stores information about classes, including scheduling and associations", "columns": [ { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the class record was last updated" }, { "name": "client_id", "data_type": "integer", "comment": "Reference to the client associated with the class" }, { "name": "stop_date", "data_type": "date", "comment": "Date when the class stopped" }, { "name": "restart_date", "data_type": "date", "comment": "Date when the class restarted" }, { "name": "seta_funded", "data_type": "boolean", "comment": "Indicates if the project is SETA funded (true) or not (false)" }, { "name": "exam_class", "data_type": "boolean", "comment": "Indicates if this is an exam project (true) or not (false)" }, { "name": "project_supervisor_id", "data_type": "integer", "comment": "Reference to the project supervisor managing the class" }, { "name": "delivery_date", "data_type": "date", "comment": "Date when materials or resources must be delivered to the class" }, { "name": "collection_date", "data_type": "date", "comment": "Date when portfolios or materials must be collected from the class" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the class record was created" }, { "name": "class_id", "data_type": "integer", "comment": "Unique internal class ID" }, { "name": "class_town_id", "data_type": "integer", "comment": "Reference to the town where the class takes place" }, { "name": "original_start_date", "data_type": "date", "comment": "Original start date of the class" }, { "name": "class_site_name", "data_type": "character varying", "comment": "Name of the class or site" }, { "name": "class_address_line", "data_type": "character varying", "comment": "Street address where the class takes place" }, { "name": "class_suburb", "data_type": "character varying", "comment": "Suburb where the class takes place" }, { "name": "class_notes", "data_type": "text", "comment": "Notes about the class; important information to remember" }, { "name": "class_postal_code", "data_type": "character varying", "comment": "Postal code of the class location" }, { "name": "class_type", "data_type": "character varying", "comment": "Type of class; determines the 'rules' (e.g., 'Employed', 'Community')" }, { "name": "class_status", "data_type": "character varying", "comment": "Status of the class (e.g., 'New', 'Restarted', 'Stopped')" }, { "name": "exam_type", "data_type": "character varying", "comment": "Type of exam associated with the class" }, { "name": "seta", "data_type": "character varying", "comment": "Name of the SETA (Sector Education and Training Authority) the client belongs to" } ], "foreign_keys": [ { "column": "class_town_id", "references": { "table": "locations", "column": "location_id" } }, { "column": "client_id", "references": { "table": "clients", "column": "client_id" } }, { "column": "project_supervisor_id", "references": { "table": "users", "column": "user_id" } } ] }, "client_communications": { "comment": "Stores records of communications with clients", "columns": [ { "name": "client_id", "data_type": "integer", "comment": "Reference to the client" }, { "name": "communication_date", "data_type": "timestamp without time zone", "comment": "Date and time when the communication occurred" }, { "name": "user_id", "data_type": "integer", "comment": "Reference to the user who communicated with the client" }, { "name": "communication_id", "data_type": "integer", "comment": "Unique internal communication ID" }, { "name": "subject", "data_type": "character varying", "comment": "Subject of the communication" }, { "name": "communication_type", "data_type": "character varying", "comment": "Type of communication (e.g., 'Email', 'Phone Call')" }, { "name": "content", "data_type": "text", "comment": "Content or summary of the communication" } ], "foreign_keys": [ { "column": "client_id", "references": { "table": "clients", "column": "client_id" } }, { "column": "user_id", "references": { "table": "users", "column": "user_id" } } ] }, "client_contact_persons": { "comment": "Stores contact person information for clients", "columns": [ { "name": "contact_id", "data_type": "integer", "comment": "Unique internal contact person ID" }, { "name": "client_id", "data_type": "integer", "comment": "Reference to the client" }, { "name": "first_name", "data_type": "character varying", "comment": "First name of the contact person" }, { "name": "surname", "data_type": "character varying", "comment": "Surname of the contact person" }, { "name": "email", "data_type": "character varying", "comment": "Email address of the contact person" }, { "name": "cellphone_number", "data_type": "character varying", "comment": "Cellphone number of the contact person" }, { "name": "tel_number", "data_type": "character varying", "comment": "Landline number of the contact person" }, { "name": "position", "data_type": "character varying", "comment": "Position or role of the contact person at the client company" } ], "foreign_keys": [ { "column": "client_id", "references": { "table": "clients", "column": "client_id" } } ] }, "clients": { "comment": "Stores information about clients (companies or organizations)", "columns": [ { "name": "client_id", "data_type": "integer", "comment": "Unique internal client ID" }, { "name": "branch_of", "data_type": "integer", "comment": "Reference to the parent client if this client is a branch" }, { "name": "town_id", "data_type": "integer", "comment": "Reference to the town where the client is located" }, { "name": "financial_year_end", "data_type": "date", "comment": "Date of the client's financial year-end" }, { "name": "bbbee_verification_date", "data_type": "date", "comment": "Date of the client's BBBEE verification" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the client record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the client record was last updated" }, { "name": "postal_code", "data_type": "character varying", "comment": "Postal code of the client's location" }, { "name": "client_name", "data_type": "character varying", "comment": "Name of the client company or organization" }, { "name": "seta", "data_type": "character varying", "comment": "SETA the client belongs to" }, { "name": "company_registration_number", "data_type": "character varying", "comment": "Company registration number of the client" }, { "name": "address_line", "data_type": "character varying", "comment": "Client's street address" }, { "name": "suburb", "data_type": "character varying", "comment": "Suburb where the client is located" }, { "name": "client_status", "data_type": "character varying", "comment": "Current status of the client (e.g., 'Active Client', 'Lost Client')" } ], "foreign_keys": [ { "column": "branch_of", "references": { "table": "clients", "column": "client_id" } }, { "column": "town_id", "references": { "table": "locations", "column": "location_id" } } ] }, "collections": { "comment": "Records collections made from classes", "columns": [ { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the collection record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the collection record was last updated" }, { "name": "collection_date", "data_type": "date", "comment": "Date when the collection is scheduled or occurred" }, { "name": "collection_id", "data_type": "integer", "comment": "Unique internal collection ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "items", "data_type": "text", "comment": "Items collected from the class" }, { "name": "status", "data_type": "character varying", "comment": "Collection status (e.g., 'Pending', 'Collected')" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "deliveries": { "comment": "Records deliveries made to classes", "columns": [ { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the delivery record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the delivery record was last updated" }, { "name": "delivery_date", "data_type": "date", "comment": "Date when the delivery is scheduled or occurred" }, { "name": "delivery_id", "data_type": "integer", "comment": "Unique internal delivery ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "items", "data_type": "text", "comment": "Items included in the delivery" }, { "name": "status", "data_type": "character varying", "comment": "Delivery status (e.g., 'Pending', 'Delivered')" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "employers": { "comment": "Stores information about employers or sponsors of learners", "columns": [ { "name": "employer_id", "data_type": "integer", "comment": "Unique internal employer ID" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the employer record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the employer record was last updated" }, { "name": "employer_name", "data_type": "character varying", "comment": "Name of the employer or sponsoring organization" } ], "foreign_keys": [] }, "exam_results": { "comment": "Stores detailed exam results for learners", "columns": [ { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the exam result was last updated" }, { "name": "exam_id", "data_type": "integer", "comment": "Reference to the exam" }, { "name": "learner_id", "data_type": "integer", "comment": "Reference to the learner" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the exam result was created" }, { "name": "result_id", "data_type": "integer", "comment": "Unique internal exam result ID" }, { "name": "mock_exam_number", "data_type": "integer", "comment": "Number of the mock exam (e.g., 1, 2, 3)" }, { "name": "score", "data_type": "numeric", "comment": "Learner's score in the exam" }, { "name": "exam_date", "data_type": "date", "comment": "Date when the exam was taken" }, { "name": "subject", "data_type": "character varying", "comment": "Subject of the exam" }, { "name": "result", "data_type": "character varying", "comment": "Exam result (e.g., 'Pass', 'Fail')" } ], "foreign_keys": [ { "column": "exam_id", "references": { "table": "exams", "column": "exam_id" } }, { "column": "learner_id", "references": { "table": "learners", "column": "learner_id" } } ] }, "exams": { "comment": "Stores exam results for learners", "columns": [ { "name": "exam_id", "data_type": "integer", "comment": "Unique internal exam ID" }, { "name": "learner_id", "data_type": "integer", "comment": "Reference to the learner" }, { "name": "product_id", "data_type": "integer", "comment": "Reference to the product or subject" }, { "name": "exam_date", "data_type": "date", "comment": "Date when the exam was taken" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the exam record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the exam record was last updated" }, { "name": "score", "data_type": "numeric", "comment": "Learner's score in the exam" }, { "name": "exam_type", "data_type": "character varying", "comment": "Type of exam (e.g., 'Mock', 'Final')" }, { "name": "result", "data_type": "character varying", "comment": "Exam result (e.g., 'Pass', 'Fail')" } ], "foreign_keys": [ { "column": "learner_id", "references": { "table": "learners", "column": "learner_id" } }, { "column": "product_id", "references": { "table": "products", "column": "product_id" } } ] }, "files": { "comment": "Stores references to files associated with various entities", "columns": [ { "name": "file_id", "data_type": "integer", "comment": "Unique internal file ID" }, { "name": "owner_id", "data_type": "integer", "comment": "ID of the owner entity" }, { "name": "uploaded_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the file was uploaded" }, { "name": "owner_type", "data_type": "character varying", "comment": "Type of entity that owns the file (e.g., 'Learner', 'Class', 'Agent')" }, { "name": "file_path", "data_type": "character varying", "comment": "File path or URL to the stored file" }, { "name": "file_type", "data_type": "character varying", "comment": "Type of file (e.g., 'Scanned Portfolio', 'QA Report')" } ], "foreign_keys": [] }, "history": { "comment": "Records historical changes and actions performed on entities", "columns": [ { "name": "action_date", "data_type": "timestamp without time zone", "comment": "Timestamp when the action occurred" }, { "name": "user_id", "data_type": "integer", "comment": "Reference to the user who performed the action" }, { "name": "entity_id", "data_type": "integer", "comment": "ID of the entity" }, { "name": "history_id", "data_type": "integer", "comment": "Unique internal history ID" }, { "name": "changes", "data_type": "jsonb", "comment": "Details of the changes made, stored in JSON format" }, { "name": "action", "data_type": "character varying", "comment": "Type of action performed (e.g., 'Created', 'Updated', 'Deleted')" }, { "name": "entity_type", "data_type": "character varying", "comment": "Type of entity the history record refers to (e.g., 'Learner', 'Agent', 'Class')" } ], "foreign_keys": [ { "column": "user_id", "references": { "table": "users", "column": "user_id" } } ] }, "learner_products": { "comment": "Associates learners with the products they are enrolled in", "columns": [ { "name": "learner_id", "data_type": "integer", "comment": "Reference to the learner" }, { "name": "product_id", "data_type": "integer", "comment": "Reference to the product the learner is enrolled in" }, { "name": "start_date", "data_type": "date", "comment": "Start date of the learner's enrollment in the product" }, { "name": "end_date", "data_type": "date", "comment": "End date of the learner's enrollment in the product" } ], "foreign_keys": [ { "column": "learner_id", "references": { "table": "learners", "column": "learner_id" } }, { "column": "product_id", "references": { "table": "products", "column": "product_id" } } ] }, "learner_progressions": { "comment": "Tracks the progression of learners between products", "columns": [ { "name": "progression_id", "data_type": "integer", "comment": "Unique internal progression ID" }, { "name": "learner_id", "data_type": "integer", "comment": "Reference to the learner" }, { "name": "from_product_id", "data_type": "integer", "comment": "Reference to the initial product" }, { "name": "to_product_id", "data_type": "integer", "comment": "Reference to the new product after progression" }, { "name": "progression_date", "data_type": "date", "comment": "Date when the learner progressed to the new product" }, { "name": "notes", "data_type": "text", "comment": "Additional notes regarding the progression" } ], "foreign_keys": [ { "column": "from_product_id", "references": { "table": "products", "column": "product_id" } }, { "column": "learner_id", "references": { "table": "learners", "column": "learner_id" } }, { "column": "to_product_id", "references": { "table": "products", "column": "product_id" } } ] }, "learners": { "comment": "Stores personal, educational, and assessment information about learners", "columns": [ { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the learner record was last updated" }, { "name": "city_town_id", "data_type": "integer", "comment": "Reference to the city or town where the learner lives" }, { "name": "province_region_id", "data_type": "integer", "comment": "Reference to the province/region where the learner lives" }, { "name": "placement_assessment_date", "data_type": "date", "comment": "Date when the learner took the placement assessment" }, { "name": "employment_status", "data_type": "boolean", "comment": "Indicates if the learner is employed (true) or not (false)" }, { "name": "employer_id", "data_type": "integer", "comment": "Reference to the learner's employer or sponsor" }, { "name": "disability_status", "data_type": "boolean", "comment": "Indicates if the learner has a disability (true) or not (false)" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the learner record was created" }, { "name": "learner_id", "data_type": "integer", "comment": "Unique internal learner ID" }, { "name": "alternative_tel_number", "data_type": "character varying", "comment": "Learner's alternative contact number" }, { "name": "email_address", "data_type": "character varying", "comment": "Learner's email address" }, { "name": "address_line_1", "data_type": "character varying", "comment": "First line of learner's physical address" }, { "name": "address_line_2", "data_type": "character varying", "comment": "Second line of learner's physical address" }, { "name": "scanned_portfolio", "data_type": "character varying", "comment": "File path or URL to the learner's scanned portfolio in PDF format" }, { "name": "placement_level", "data_type": "character varying", "comment": "Learner's initial placement level in Communications (e.g., 'CL1b', 'CL1', 'CL2')" }, { "name": "postal_code", "data_type": "character varying", "comment": "Postal code of the learner's area" }, { "name": "highest_qualification", "data_type": "character varying", "comment": "Highest qualification the learner has achieved" }, { "name": "assessment_status", "data_type": "character varying", "comment": "Assessment status; indicates if the learner was assessed ('Assessed', 'Not Assessed')" }, { "name": "first_name", "data_type": "character varying", "comment": "Learner's first name" }, { "name": "initials", "data_type": "character varying", "comment": "Learner's initials" }, { "name": "surname", "data_type": "character varying", "comment": "Learner's surname" }, { "name": "gender", "data_type": "character varying", "comment": "Learner's gender" }, { "name": "race", "data_type": "character varying", "comment": "Learner's race; options include 'African', 'Coloured', 'White', 'Indian'" }, { "name": "sa_id_no", "data_type": "character varying", "comment": "Learner's South African ID number" }, { "name": "passport_number", "data_type": "character varying", "comment": "Learner's passport number if they are a foreigner" }, { "name": "tel_number", "data_type": "character varying", "comment": "Learner's primary telephone number" } ], "foreign_keys": [ { "column": "city_town_id", "references": { "table": "locations", "column": "location_id" } }, { "column": "employer_id", "references": { "table": "employers", "column": "employer_id" } }, { "column": "province_region_id", "references": { "table": "locations", "column": "location_id" } } ] }, "locations": { "comment": "Stores geographical location data for addresses", "columns": [ { "name": "location_id", "data_type": "integer", "comment": "Unique internal location ID" }, { "name": "longitude", "data_type": "numeric", "comment": "Geographical longitude coordinate" }, { "name": "latitude", "data_type": "numeric", "comment": "Geographical latitude coordinate" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the location record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the location record was last updated" }, { "name": "suburb", "data_type": "character varying", "comment": "Suburb name" }, { "name": "town", "data_type": "character varying", "comment": "Town name" }, { "name": "province", "data_type": "character varying", "comment": "Province name" }, { "name": "postal_code", "data_type": "character varying", "comment": "Postal code" } ], "foreign_keys": [] }, "products": { "comment": "Stores information about educational products or courses", "columns": [ { "name": "product_id", "data_type": "integer", "comment": "Unique internal product ID" }, { "name": "product_duration", "data_type": "integer", "comment": "Total duration of the product in hours" }, { "name": "learning_area_duration", "data_type": "integer", "comment": "Duration of each learning area in hours" }, { "name": "parent_product_id", "data_type": "integer", "comment": "Reference to a parent product for hierarchical structuring" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the product record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the product record was last updated" }, { "name": "product_notes", "data_type": "text", "comment": "Notes or additional information about the product" }, { "name": "product_name", "data_type": "character varying", "comment": "Name of the product or course" }, { "name": "product_rules", "data_type": "text", "comment": "Rules or guidelines associated with the product" }, { "name": "learning_area", "data_type": "character varying", "comment": "Learning areas covered by the product (e.g., 'Communication', 'Numeracy')" }, { "name": "product_flags", "data_type": "text", "comment": "Flags or alerts for the product (e.g., attendance thresholds)" }, { "name": "reporting_structure", "data_type": "text", "comment": "Structure of progress reports for the product" } ], "foreign_keys": [ { "column": "parent_product_id", "references": { "table": "products", "column": "product_id" } } ] }, "progress_reports": { "comment": "Stores progress reports for learners in specific classes and products", "columns": [ { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the progress report was last updated" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "learner_id", "data_type": "integer", "comment": "Reference to the learner" }, { "name": "product_id", "data_type": "integer", "comment": "Reference to the product or subject" }, { "name": "progress_percentage", "data_type": "numeric", "comment": "Learner's progress percentage in the product" }, { "name": "report_date", "data_type": "date", "comment": "Date when the progress report was generated" }, { "name": "report_id", "data_type": "integer", "comment": "Unique internal progress report ID" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the progress report was created" }, { "name": "remarks", "data_type": "text", "comment": "Additional remarks or comments" } ], "foreign_keys": [ { "column": "class_id", "references": { "table": "classes", "column": "class_id" } }, { "column": "learner_id", "references": { "table": "learners", "column": "learner_id" } }, { "column": "product_id", "references": { "table": "products", "column": "product_id" } } ] }, "qa_reports": { "comment": "Stores QA (Quality Assurance) reports for classes and agents", "columns": [ { "name": "qa_report_id", "data_type": "integer", "comment": "Unique internal QA report ID" }, { "name": "class_id", "data_type": "integer", "comment": "Reference to the class" }, { "name": "agent_id", "data_type": "integer", "comment": "Reference to the agent" }, { "name": "report_date", "data_type": "date", "comment": "Date when the QA report was created" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the QA report was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the QA report was last updated" }, { "name": "report_file", "data_type": "character varying", "comment": "File path or URL to the QA report" }, { "name": "notes", "data_type": "text", "comment": "Additional notes or observations from the QA report" } ], "foreign_keys": [ { "column": "agent_id", "references": { "table": "agents", "column": "agent_id" } }, { "column": "class_id", "references": { "table": "classes", "column": "class_id" } } ] }, "user_permissions": { "comment": "Grants specific permissions to users", "columns": [ { "name": "permission_id", "data_type": "integer", "comment": "Unique internal permission ID" }, { "name": "user_id", "data_type": "integer", "comment": "Reference to the user" }, { "name": "permission", "data_type": "character varying", "comment": "Specific permission granted to the user" } ], "foreign_keys": [ { "column": "user_id", "references": { "table": "users", "column": "user_id" } } ] }, "user_roles": { "comment": "Defines roles and associated permissions for users", "columns": [ { "name": "role_id", "data_type": "integer", "comment": "Unique internal role ID" }, { "name": "permissions", "data_type": "jsonb", "comment": "Permissions associated with the role, stored in JSON format" }, { "name": "role_name", "data_type": "character varying", "comment": "Name of the role (e.g., 'Admin', 'Project Supervisor')" } ], "foreign_keys": [] }, "users": { "comment": "Stores system user information", "columns": [ { "name": "user_id", "data_type": "integer", "comment": "Unique internal user ID" }, { "name": "created_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the user record was created" }, { "name": "updated_at", "data_type": "timestamp without time zone", "comment": "Timestamp when the user record was last updated" }, { "name": "email", "data_type": "character varying", "comment": "User's email address" }, { "name": "cellphone_number", "data_type": "character varying", "comment": "User's cellphone number" }, { "name": "role", "data_type": "character varying", "comment": "User's role in the system, e.g., 'Admin', 'Project Supervisor'" }, { "name": "password_hash", "data_type": "character varying", "comment": "Hashed password for user authentication" }, { "name": "first_name", "data_type": "character varying", "comment": "User's first name" }, { "name": "surname", "data_type": "character varying", "comment": "User's surname" } ], "foreign_keys": [] } }