diff --git a/README.md b/README.md index 9098edb..175f443 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,27 @@ fakeHr.education.institutions.all[0]; // } ``` +### `education.qualifications` + +Get a list of education qualifications. + +```typescript +import { fakeHr } from 'fake-hr'; + +fakeHr.education.qualifications.all; +// EducationQualification[] + +fakeHr.education.qualifications.filter({ level: [2, 3] }); +// EducationQualification[] + +fakeHr.education.qualifications.all[0]; +// { +// countries: [ 'au' ], +// level: 2, +// name: 'Certificate I in Aboriginal and Torres Strait Islander Language and Knowledge Work' +// } +``` + ## Development ### Prerequisites diff --git a/src/education/index.ts b/src/education/index.ts index 9bf9596..2305c5c 100644 --- a/src/education/index.ts +++ b/src/education/index.ts @@ -1 +1,2 @@ export * as institutions from './institutions'; +export * as qualifications from './qualifications'; diff --git a/src/education/qualifications/au.ts b/src/education/qualifications/au.ts new file mode 100644 index 0000000..863b81f --- /dev/null +++ b/src/education/qualifications/au.ts @@ -0,0 +1,376 @@ +/** + * Sampling of Vocational Education and Training courses in Australia from the + * National Centre for Vocational Education Research's 2018 data slicer. + * + * Skill sets, graduate certificates, and graduate diplomas have been stripped + * for simplicity. + * + * {@link https://www.ncver.edu.au/research-and-statistics/data/all-data/total-vet-students-and-courses-2018-data-slicer} + * + * The data is provided under a Creative Commons Attribution 3.0 Australia + * International License. + * + * {@link https://www.ncver.edu.au/copyright} + */ + +import type { EducationQualification } from '../../types'; + +export const certificate1s: EducationQualification[] = [ + 'Aboriginal and Torres Strait Islander Language and Knowledge Work', + 'Aboriginal Language/s', + 'Access to Work and Training (Introductory)', + 'Active Volunteering', + 'AgriFood Operations', + 'Animal Studies', + 'Automotive', + 'Aviation (Foundation Skills)', + 'Basic English Language Skills', + 'Conservation and Land Management', + 'Core Skills for Employment and Training - Communication', + 'Dance', + 'Defence Force Cadets', + 'Engineering', + 'English Proficiency', + 'Financial Services', + 'Fishing Operations', + 'Food Processing', + 'French', + 'Functional Literacy', + 'Fundamental Aboriginal Languages for Personal Use', + 'Fundamental English for Speakers of Other Languages', + 'General Education for Adults (Introductory)', + 'Horticulture', + 'Hospitality (Kitchen Operations)', + 'Information Technology', + 'Initial Adult Literacy and Numeracy', + 'Japanese', + 'Leadership', + 'Local Government (Operational Works)', + 'Logistics', + 'Manufacturing (Pathways)', + 'Maritime Operations (Coxswain Grade 2 Near Coastal)', + 'Meat Processing (Meat Retailing)', + 'Pharmaceutical Manufacturing', + 'Plumbing Services', + 'Preparation for Work and Training', + 'Racing (Stablehand)', + 'Resources and Infrastructure Operations', + 'Retail Operations', + 'Seafood Processing', + 'Security Operations', + 'Skills for Education and Training Pathways', + 'Skills for Vocational Pathways', + 'Vocational Access', + 'Vocational Preparation', + 'Wider Opportunities for Work (WOW)', + 'Work Education', + 'Work Preparation (Community services)', + 'Workplace Environmental Responsibilities', +].map( + (area) => + ({ + countries: ['au'], + level: 2, + name: `Certificate I in ${area}`, + } as const), +); + +export const certificate2s: EducationQualification[] = [ + 'Active Volunteering', + 'Automotive Body Repair Technology', + 'Automotive Manufacturing Production - Passenger Motor Vehicle', + 'Automotive Studies (Pre-vocational)', + 'Automotive Tyre Servicing Technology', + 'Automotive Underbody Technology', + 'Aviation (Flight Operations-Cargo Services)', + 'Aviation (Flight Operations)', + 'Boating Services', + 'Clothing Production (Intermediate)', + 'Community Engagement', + 'Community Health Research', + 'Continence Promotion and Care', + 'Drilling Operations', + 'Driver Competence', + 'Driving Operations', + 'Electronic Assembly', + 'Engineering Studies', + 'Equine Industry', + 'Explosive Ordnance', + 'Foreign Language Studies', + 'French', + 'Further Study Skills', + 'German', + 'Health Support Services', + 'Horticulture (Arboriculture)', + 'Laundry Operations', + 'Leadership Development', + 'Motorsport Technology', + 'Music Industry', + 'Nail Technology', + 'Population Health', + 'Process Manufacturing', + 'Production Horticulture', + 'Public Safety (Firefighting and Emergency Operations)', + 'Recreational Vehicle Manufacturing', + 'Security Operations', + 'Shunting', + 'Sport Coaching', + 'Telecommunications Digital Reception Technology', + 'Transmission Structure and Line Assembly', + 'Transport & Distribution (Coastal Maritime Operations - Coxswain)', + 'Transport and Logistics (Warehousing and Storage)', + 'Underground Metalliferous Mining', + 'Understanding and Management of Diabetes', + 'Warehousing Operations', + 'Waste Management', + 'Water Operations', + 'Wine Industry Operations', + 'Work Preparation', +].map( + (area) => + ({ + countries: ['au'], + level: 2, + name: `Certificate II in ${area}`, + } as const), +); + +export const certificate3s: EducationQualification[] = [ + 'Appliance Service', + 'Automotive (Mechanical - Light Vehicle)', + 'Automotive and Marine Trimming Technology', + 'Automotive Manufacturing Technical Operations - Bus, Truck and Trailer', + 'Automotive Specialist', + 'Business Administration', + 'Business to Business Sales', + 'Civil Foundations', + 'Construction Crane Operations', + 'Cotton Ginning', + 'Data and Voice Communications', + 'Design Fundamentals', + 'Engineering - Production Systems', + 'ESI - Distribution', + 'Fitness', + 'Forest Growing and Management', + 'Formwork/Falsework', + 'Glass and Glazing', + 'Guiding', + 'Heavy Commercial Vehicle Mechanical Technology', + 'Heritage Locomotive Assistant or Steam Locomotive Fireman', + 'Home and Community Care', + 'Horticulture (Landscape)', + 'Information Technology (General)', + 'Jewellery Manufacture', + 'Marine', + 'Mattress and Base Making', + 'Mechanical Rail Signalling', + 'Mobile Crane Operations', + 'Outdoor Power Equipment Technology', + 'Pathology Collection', + 'Pest Management', + 'Property Services (Operations)', + 'Public Safety (Aquatic Search and Rescue)', + 'Recreational Vehicle Service and Repair', + 'Refrigeration and Air-Conditioning', + 'Retail Baking (Combined)', + 'Roof Plumbing', + 'Sawmilling and Processing', + 'School Support Services', + 'Security Operations', + 'Signs and Graphics', + 'Social Housing', + 'Telecommunications', + 'Terminal Train Driving', + 'Tourism (Tour Wholesaling)', + 'Tourism', + 'Transport and Logistics (Road Transport)', + 'Watch and Clock Service and Repair', + 'Woodmachining', +].map( + (area) => + ({ + countries: ['au'], + level: 3, + name: `Certificate III in ${area}`, + } as const), +); + +export const certificate4s: EducationQualification[] = [ + 'Aboriginal Performance', + 'Anaesthetic Technology', + 'Animal Control and Regulation', + 'Arts Administration', + 'Aviation (Aviation Supervision)', + 'Building Biology', + 'Business (Governance)', + 'Business and Personal Coaching', + 'Child, Youth and Family Intervention (residential and out of home care)', + 'Commercial Cookery', + 'Compliance and Risk Management', + 'Conservation and Land Management', + 'Contemporary Pilates & Teaching Methodology', + 'Coordination of volunteer programs', + 'Court Operations', + 'Digital Media Technologies', + 'Electrical - Photovoltaic systems', + 'English Proficiency - ESL', + 'Environmental Management', + 'Finance and Mortgage Broking', + 'General Insurance', + 'Government (Investigation)', + 'Government (Project Management)', + 'Government (Revenue Administration)', + 'Government Security', + 'Health Science Foundations', + 'Hospitality (Patisserie)', + 'Hyperbaric Operations (Diver Medical Technician)', + 'Information Technology (Technical Support)', + 'International Freight Forwarding (Senior Operator)', + 'Local Government (Planning)', + 'Marketing and Communication', + 'Parent, Family and Community Engagement', + 'Personal Injury Management (ReturntoWork)', + 'Pharmaceutical Manufacturing', + 'Pilates Matwork and Reformer', + 'Printing and Graphic Arts', + 'Public Safety (Community Safety)', + 'Rail Safety Investigation', + 'Recordkeeping', + 'Seafood Processing', + 'Shared Technology', + 'Sound Production', + 'Surface Extraction Operations', + 'Teaching an Endangered Aboriginal Language', + 'Telecommunications Engineering Technology', + 'Telecommunications Networks Technology', + 'Timber Truss and Frame Design', + 'Underground Coal Operations', + 'Visual Arts', +].map( + (area) => + ({ + countries: ['au'], + level: 4, + name: `Certificate IV in ${area}`, + } as const), +); + +export const diplomas: EducationQualification[] = [ + 'Accounting', + 'Aeroskills (Avionics)', + 'Applied Fashion Design and Technology', + 'Automotive Management', + 'Aviation (Aviation Management)', + 'Biblical Ministry', + 'Business Administration', + 'Carbon Management', + 'Christian Missions Leadership', + 'Clinical Hypnotherapy', + 'Clinical Pilates', + 'Community Health', + 'Consultancy', + 'Engineering Technology', + 'Financial Counselling', + 'Fire Systems Design', + 'Fitness Coaching', + 'General Insurance', + 'Geoscience', + 'Horse Breeding (Stud Management)', + 'Information Technology', + 'Insurance Broking', + 'Laboratory Technology', + 'Landscape Design', + 'Leadership Coaching and Mentoring', + 'Leadership in Expressive Arts and Group Work', + 'Life Coaching', + 'Local Government (Elected Member)', + 'Maintenance Management', + 'Nursing (Enrolled/Division 2 nursing)', + 'Ornamental Horticulture', + 'Paramedical Science (Ambulance)', + 'Paramedical Science (Anaesthesia)', + 'Pilates Movement Therapy', + 'Printing and Graphic Arts (Multimedia)', + 'Printing and Graphic Arts', + 'Professional Practice Management', + 'Property Services (Asset and Facility Management)', + 'Rehabilitation', + 'Retail Leadership', + 'Share Trading and Investment', + 'Social Housing', + 'Superannuation', + 'Surface Operations Management', + 'Sustainability', + 'Tertiary Preparation', + 'Theatre Arts', + 'Tourism', + 'Training Design and Development', + 'Venues and Events', +].map( + (area) => + ({ + countries: ['au'], + level: 5, + name: `Diploma of ${area}`, + } as const), +); + +export const advancedDiplomas: EducationQualification[] = [ + 'Advertising', + 'Aeronautics - Airline Transport Pilot', + 'Air-conditioning and Refrigeration Engineering', + 'Arts (Acting)', + 'Business', + 'Christian Ministry and Theology', + 'Clinical Hypnotherapy', + 'Community Sector Management', + 'Conservation and Land Management', + 'Disability Work', + 'Electrical - Engineering', + 'Electronics and Communications Engineering', + 'Engineering - Explosion protection', + 'Engineering (Oil and Gas)', + 'Engineering Technology - Renewable Energy', + 'Events', + 'Extractive Industries Management', + 'Fashion and Textile Design', + 'Film Television and Theatre Acting', + 'Government (Procurement and Contracting)', + 'Government (Workplace inspection/ Investigations/Fraud control)', + 'Group Facilitation', + 'Homoeopathy', + 'Industrial Automation', + 'International Business Management', + 'International Business', + 'Jewellery and Object Design', + 'Journalism', + 'Justice', + 'Legal Practice', + 'Management (Human Resources)', + 'Maritime Operations (Marine Engineering Class 1)', + 'Metalliferous Mining', + 'Multimedia', + 'Music Theatre', + 'Performance', + 'Police Investigation', + 'Program Management', + 'Public Safety (Firefighting Management)', + 'Rudolf Steiner Education', + 'Share Trading and Investment', + 'Stage Management', + 'Surveying', + 'Tourism', + 'Traditional Chinese Medicine', + 'Transpersonal Art Therapy', + 'Travel and Tourism Management', + 'Travel and Tourism', + 'Visual Communication (Design Communication / Photo Communication)', + "Children's Services", +].map( + (area) => + ({ + countries: ['au'], + level: 5, + name: `Advanced Diploma of ${area}`, + } as const), +); diff --git a/src/education/qualifications/degree.ts b/src/education/qualifications/degree.ts new file mode 100644 index 0000000..011e514 --- /dev/null +++ b/src/education/qualifications/degree.ts @@ -0,0 +1,406 @@ +/** + * Non-exhaustive list of degrees. + * + * {@link https://en.wikipedia.org/w/index.php?title=List_of_tagged_degrees&oldid=964753183} + */ + +import type { EducationQualification } from '../../types'; + +export const associates: EducationQualification[] = [ + ...[ + 'Administration of Justice', + 'Advertising', + 'Agribusiness', + 'Animal Management', + 'Architectural Building Engineering Technology', + 'Architecture and Career Options', + 'Art', + 'Automotive Maintenance Technology', + 'Aviation Mechanics', + 'Behavioral Science', + 'Boat Mechanics', + 'Boat Repair and Maintenance', + 'Cabinet Design Technology', + 'Child Development: Program Summary', + 'Christian Ministry', + 'Cosmetology Business', + 'Digital Media', + 'Early Childhood Special Education', + 'Education', + 'Elementary Education', + 'English', + 'Environmental Science', + 'Environmental Studies', + 'General Psychology', + 'History and Information', + 'Interdisciplinary Studies', + 'International Relations', + 'Landscape Architecture', + 'Landscaping Design', + 'Library Science', + 'Music', + 'Wildlife Management', + ].map((area) => `Associate Degree in ${area}`), + ...[ + 'Applied Science in Accelerated Culinary Arts', + 'Applied Science in Accounting Specialist', + 'Applied Science in Administrative Support', + 'Applied Science in Baking and Pastry', + 'Applied Science in Business Administration - Finance', + 'Applied Science in Business Administration', + 'Applied Science in Business Information Systems', + 'Applied Science in Civil Justice - Law Enforcement', + 'Applied Science in Clinical Medical Assisting', + 'Applied Science in Computer Applications', + 'Applied Science in Computer Electronics', + 'Applied Science in Computer Game Design', + 'Applied Science in Computer Information Systems', + 'Applied Science in Culinary Arts', + 'Applied Science in Digital Media Communications', + 'Applied Science in Digital Photography', + 'Applied Science in Electronic Engineering', + 'Applied Science in Emergency Medical Services', + 'Applied Science in Health Care Management', + 'Applied Science in Health Information Management', + 'Applied Science in Healthcare Administration', + 'Applied Science in Legal Office E-ministration', + 'Applied Science in Telecommunications Technology', + 'Applied Science in Television Production', + 'Applied Science in Visual Communications', + 'Arts and Science', + 'Arts in Computer Information Systems', + 'Arts in Interior Architecture and Design', + 'Arts in Internetworking Technology', + 'Arts in Psychology', + 'Biotechnology', + 'Business Science in Individualized Studies', + 'Early Childhood Education', + 'Occupational Studies in Legal Office Administration', + 'Science in Computer Information Science', + 'Science in Computer Science', + 'Science in Corrections, Probation, & Parole', + 'Science in Electronics Engineering Technology', + 'Science in Industrial Maintenance Technology', + 'Science in Interactive & Graphic Art', + ].map((area) => `Associate of ${area}`), +].map((name) => ({ level: 5, name } as const)); + +export const bachelors: EducationQualification[] = [ + 'Accountancy', + 'Architecture', + 'Arts in American Indian Studies', + 'Arts in American Studies', + 'Arts in Anthropology', + 'Arts in Applied Psychology', + 'Arts in Biology', + 'Arts in Child Advocacy', + 'Arts in Clinical Psychology', + 'Arts in Communication', + 'Arts in Forensic Psychology', + 'Arts in Organizational Psychology', + 'Biochemistry', + 'Biomedical Science', + 'Business Administration', + 'Clinical Science', + 'Commerce', + 'Community Health', + 'Computer Applications', + 'Computer Information Systems', + 'Criminal Justice', + 'Divinity', + 'Economics', + 'Education', + 'Engineering', + 'Fine Arts', + 'Information Systems', + 'Letters', + 'Management', + 'Music in Composition', + 'Music in Jazz Studies', + 'Music in Music Education', + 'Music in Performance', + 'Music in Theory', + 'Music', + 'Pharmacy', + 'Philosophy', + 'Public Affairs and Policy Management', + 'Science in Accountancy', + 'Science in Actuarial', + 'Science in Aerospace Engineering', + 'Science in Agriculture', + 'Science in Applied Economics', + 'Science in Architectural Engineering', + 'Science in Architecture', + 'Science in Athletic Training', + 'Science in Bible', + 'Science in Biology', + 'Science in Biomedical Engineering', + 'Science in Business Administration - Computer Application', + 'Science in Business Administration - Economics', + 'Science in Business Administration', + 'Science in Business and Technology', + 'Science in Chemical Engineering', + 'Science in Chemistry', + 'Science in Civil Engineering', + 'Science in Clinical Laboratory Science', + 'Science in Cognitive Science', + 'Science in Computer Engineering', + 'Science in Computer Science', + 'Science in Construction Engineering', + 'Science in Construction Management', + 'Science in Construction Technology', + 'Science in Criminal Justice', + 'Science in Criminology', + 'Science in Diagnostic Radiography', + 'Science in Education', + 'Science in Electrical Engineering', + 'Science in Engineering Physics', + 'Science in Engineering Science', + 'Science in Engineering Technology', + 'Science in English Literature', + 'Science in Environmental Engineering', + 'Science in Environmental Science', + 'Science in Environmental Studies', + 'Science in Food Science', + 'Science in Foreign Service', + 'Science in Forensic Science', + 'Science in Forestry', + 'Science in Genetic Engineering and Biotechnology', + 'Science in History', + 'Science in Hospitality Management', + 'Science in Human Resources Management', + 'Science in Industrial Engineering', + 'Science in Information Systems', + 'Science in Information Technology', + 'Science in Integrated Science', + 'Science in International Relations', + 'Science in Journalism', + 'Science in Legal Management', + 'Science in Management', + 'Science in Manufacturing Engineering', + 'Science in Marketing', + 'Science in Mathematics', + 'Science in Mechanical Engineering', + 'Science in Medical Technology', + 'Science in Metallurgical Engineering', + 'Science in Meteorology', + 'Science in Microbiology', + 'Science in Military and Strategic Studies', + 'Science in Mining Engineering', + 'Science in Molecular Biology', + 'Science in Neuroscience', + 'Science in Nursing', + 'Science in Nutrition Science', + 'Science in Petroleum Engineering', + 'Science in Pharmacology', + 'Science in Pharmacy', + 'Science in Physical Therapy', + 'Science in Physics', + 'Science in Physiology', + 'Science in Plant Science', + 'Science in Podiatry', + 'Science in Politics', + 'Science in Psychology', + 'Science in Public Safety', + 'Science in Quantity Surveying Engineering', + 'Science in Radiologic Technology', + 'Science in Real-Time Interactive Simulation', + 'Science in Religion', + 'Science in Respiratory Therapy', + 'Science in Risk Management and Insurance', + 'Science in Science Education', + 'Science in Software Engineering', + 'Science in Sports Management', + 'Science in Systems Engineering', + 'Science in Veterinary Technology', + 'Social Work', + 'Technology', +].map((area) => ({ level: 6, name: `Bachelor of ${area}` } as const)); + +export const masters: EducationQualification[] = [ + 'Master in Creative Technologies', + ...[ + 'Accountancy', + 'Accounting and Information Systems', + 'Advanced Study', + 'Applied Finance', + 'Applied Mathematical Sciences', + 'Applied Psychology', + 'Applied Science', + 'Architecture', + 'Arts in Archives and Records Management', + 'Arts in Bioethics', + 'Arts in Liberal Studies', + 'Arts in Museum Studies', + 'Arts in Strategic Communication Management', + 'Arts in Teaching', + 'Arts', + 'Athletic Training', + 'Bioethics', + 'Bioinformatics', + 'Biotechnology', + 'Business Administration Management of Technology', + 'Business Administration', + 'Business Economics', + 'Business Engineering', + 'Business Informatics', + 'Business', + 'Chemistry', + 'City Planning', + 'Commerce', + 'Communication', + 'Community Health', + 'Computational Finance', + 'Computer Applications', + 'Computer Science', + 'Counseling', + 'Counselling', + 'Criminal Justice', + 'Design', + 'Divinity', + 'Economics', + 'Education', + 'Educational Technology', + 'Engineering Management', + 'Engineering', + 'Enterprise', + 'European Law', + 'Finance', + 'Financial Economics', + 'Financial Engineering', + 'Financial Mathematics', + 'Fine Arts', + 'Geospatial Science & Technology', + 'Health Administration', + 'Health Science', + 'Humanities', + 'Industrial and Labor Relations', + 'Information Management', + 'Information System Management', + 'Information Systems', + 'Information', + 'International Affairs', + 'International Business', + 'International Economics', + 'International Public Policy', + 'International Studies', + 'Islamic Studies', + 'IT', + 'Jurisprudence', + 'Landscape Architecture', + 'Laws', + 'Letters', + 'Liberal Arts', + 'Library and Information Science', + 'Management', + 'Mass Communication and Journalism', + 'Mathematical Finance', + 'Mathematics and Computer Science', + 'Mathematics and Philosophy', + 'Mathematics', + 'Medical Science', + 'Medicine', + 'Military Art and Science', + 'Music', + 'Network and Communications Management', + 'Occupational Therapy', + 'Pharmacy', + 'Philosophy', + 'Physician Assistant Studies', + 'Physics', + 'Political Science', + 'Professional Studies', + 'Psychology', + 'Public Administration', + 'Public Affairs', + 'Public Diplomacy', + 'Public Health', + 'Public Management', + 'Public Policy', + 'Public Relations', + 'Public Service', + 'Quantitative Finance', + 'Rabbinic Studies', + 'Real Estate Development', + 'Religious Education', + 'Research', + 'Sacred Music', + 'Sacred Theology', + 'Science in Applied Cognition and Neuroscience', + 'Science in Athletic Training', + 'Science in Bioinformatics', + 'Science in Business Analytics', + 'Science in Clinical Epidemiology', + 'Science in Computing Research', + 'Science in Cyber Security', + 'Science in Development Administration', + 'Science in Education', + 'Science in Engineering', + 'Science in Finance', + 'Science in Governance & Organizational Sciences', + 'Science in Government Contracts', + 'Science in Health Informatics', + 'Science in Human Resource Development', + 'Science in Information Assurance', + 'Science in Information Systems', + 'Science in Information Technology', + 'Science in Leadership', + 'Science in Management', + 'Science in Nursing', + 'Science in Project Management', + 'Science in Quality Assurance', + 'Science in Risk Management', + 'Science in Supply Chain Management', + 'Science in Taxation', + 'Science in Teaching', + 'Science', + 'Social Science', + 'Social Work', + 'Statistics', + 'Strategic Studies', + 'Studies in Law', + 'Studies', + 'Surgery', + 'Technology', + 'Theological Studies', + 'Theology', + 'Urban Planning', + 'Veterinary Science', + ].map((area) => `Master of ${area}`), +].map((name) => ({ level: 7, name } as const)); + +export const doctorals: EducationQualification[] = [ + 'Arts', + 'Audiology', + 'Aviation', + 'Business Administration', + 'Canon Law', + 'Chiropractic', + 'Commerce', + 'Community Health', + 'Dental Surgery', + 'Divinity', + 'Education', + 'Engineering', + 'Fine Arts', + 'Health Administration', + 'Health Science', + 'Juridical Science; Juris Doctor', + 'Law; Legum Doctor', + 'Liberal Studies', + 'Management', + 'Medicine', + 'Ministry', + 'Modern Languages', + 'Musical Arts', + 'Naturopathic Medicine', + 'Optometry', + 'Osteopathic Medicine', + 'Pharmacy', + 'Philosophy', + 'Public Administration', + 'Radio Oncology', + 'Science', + 'Theology', + 'Veterinary Medicine', +].map((area) => ({ level: 8, name: `Doctor of ${area}` } as const)); diff --git a/src/education/qualifications/index.test.ts b/src/education/qualifications/index.test.ts new file mode 100644 index 0000000..ef48b0f --- /dev/null +++ b/src/education/qualifications/index.test.ts @@ -0,0 +1,21 @@ +import * as qualifications from '.'; + +describe('filter', () => { + it('passes through all by default', () => + expect(qualifications.filter()).toHaveLength(qualifications.all.length)); + + it('filters by one country', () => + qualifications + .filter({ country: 'au' }) + .forEach(({ countries }) => + expect( + typeof countries === 'undefined' || + countries.some((country) => country === 'au'), + ).toBe(true), + )); + + it('filters by two levels', () => + qualifications + .filter({ level: [1, 2] }) + .forEach(({ level }) => expect(level === 1 || level === 2).toBe(true))); +}); diff --git a/src/education/qualifications/index.ts b/src/education/qualifications/index.ts new file mode 100644 index 0000000..abd8e9d --- /dev/null +++ b/src/education/qualifications/index.ts @@ -0,0 +1,62 @@ +import { createSubsetMatcher } from '../../filter'; +import type { + CountryCode, + EducationLevel, + EducationQualification, +} from '../../types'; + +import * as au from './au'; +import * as degree from './degree'; + +/** + * A list of all education qualifications in our limited data set. + */ +export const all: EducationQualification[] = [ + au.certificate1s, + au.certificate2s, + au.certificate3s, + au.certificate4s, + au.diplomas, + au.advancedDiplomas, + degree.associates, + degree.bachelors, + degree.masters, + degree.doctorals, +].flat(); + +interface FilterProps { + /** + * Limit qualifications to those that are granted in at least one of the + * specified countries. + * + * Degrees are assumed to be non-country-specifc and are always returned. + * + * Omit this filter to return qualifications from all countries. + */ + country?: CountryCode | CountryCode[]; + + /** + * Limit qualifications to those that correspond to at least one of the + * specified ISCED 2011 levels. + * + * Omit this filter to return qualifications regardless of education level. + */ + level?: EducationLevel | EducationLevel[]; +} + +/** + * Filter the list of education qualifications in our limited data set. + */ +export const filter = ({ + country, + level, +}: FilterProps = {}): EducationQualification[] => { + const matchesCountry = createSubsetMatcher(country); + const matchesLevel = createSubsetMatcher(level); + + return all.filter( + (institution) => + (institution.countries ? matchesCountry(institution.countries) : true) && + matchesLevel(institution.level), + ); +}; diff --git a/src/index.test.ts b/src/index.test.ts index 0602e60..283c36c 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -5,5 +5,7 @@ describe('app', () => { expect(fakeHr.competencies.all).toBeDefined(); expect(fakeHr.education.institutions.all).toBeDefined(); expect(fakeHr.education.institutions.filter).toBeDefined(); + expect(fakeHr.education.qualifications.all).toBeDefined(); + expect(fakeHr.education.qualifications.filter).toBeDefined(); }); }); diff --git a/src/readme.ts b/src/readme.ts index a3acde3..b851672 100644 --- a/src/readme.ts +++ b/src/readme.ts @@ -5,3 +5,5 @@ import { fakeHr } from '.'; console.log(fakeHr.competencies.all[0]); console.log(fakeHr.education.institutions.all[0]); + +console.log(fakeHr.education.qualifications.all[0]); diff --git a/src/types.ts b/src/types.ts index c5f9429..d6ef18d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -38,3 +38,13 @@ export interface EducationInstitution { * The level of an education programme per ISCED 2011. */ export type EducationLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + +/** + * A certificate, diploma, degree, or similar that is granted upon successful + * completion of an education programme. + */ +export interface EducationQualification { + countries?: ReadonlyArray; + level: EducationLevel; + name: string; +}