careersgateway/src/visa-data.js
King Omar c3fa7fc96c Add Visa Tracker Pro features to user dashboard
9 new tools modelled on Visa Tracker Pro (iOS):
- Points Calculator: full 189/190/491 points test with live breakdown
- Visa Case Timeline: 7-stage tracker (Skills Assess → EOI → Invite → Lodge → Grant) with date + notes
- Document Expiry Tracker: passport/visa/English test/assessment with colour-coded countdown
- VAC Fee Calculator: all major subclasses, primary + partner + children, live JS calc
- Occupation Search: 55 MLTSSL/STSOL occupations with ANZSCO, authority, visa eligibility
- State Nomination Criteria: all 8 states/territories, SC 190 + 491 min points + notes
- Processing Times: P25/P50/P75/P90 percentile table for 11 visa subclasses
- English Requirements: IELTS/PTE/TOEFL/OET table for 6 visa types
- Student Fund Calculator: DHA 2025-26 living costs + tuition + partner/children, live JS calc

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-10 13:25:37 +10:00

326 lines
23 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ── POINTS CALCULATOR ───────────────────────────────────────────────────────
export const POINTS_TABLE = {
age: [
{ label: '1824', min: 18, max: 24, points: 25 },
{ label: '2532', min: 25, max: 32, points: 30 },
{ label: '3339', min: 33, max: 39, points: 25 },
{ label: '4044', min: 40, max: 44, points: 15 },
{ label: '45+', min: 45, max: 99, points: 0 },
],
english: [
{ label: 'Competent (IELTS 6 / PTE 50)', value: 'competent', points: 0 },
{ label: 'Proficient (IELTS 7 / PTE 65)', value: 'proficient', points: 10 },
{ label: 'Superior (IELTS 8 / PTE 79)', value: 'superior', points: 20 },
],
education: [
{ label: 'Doctorate (PhD)', value: 'phd', points: 20 },
{ label: 'Bachelor / Masters / Diploma', value: 'bachelor', points: 15 },
{ label: 'None of the above', value: 'none', points: 0 },
],
ausStudy: [
{ label: 'No Australian study', value: 'none', points: 0 },
{ label: '12 years in Australia', value: '1-2', points: 5 },
{ label: '2+ years in Australia', value: '2+', points: 5 },
],
professionalYear: { points: 5, label: 'Completed Professional Year program (+5)' },
overseasWork: [
{ label: 'Less than 3 years', value: 'lt3', points: 0 },
{ label: '34 years', value: '3-4', points: 5 },
{ label: '57 years', value: '5-7', points: 10 },
{ label: '8+ years', value: '8+', points: 15 },
],
ausWork: [
{ label: 'Less than 1 year', value: 'lt1', points: 0 },
{ label: '12 years', value: '1-2', points: 5 },
{ label: '34 years', value: '3-4', points: 10 },
{ label: '57 years', value: '5-7', points: 15 },
{ label: '8+ years', value: '8+', points: 20 },
],
partnerSkills: { points: 10, label: 'Partner has competent English + nominated occupation / AQF Cert IV or above (+10)' },
singleOrAusCitizen: { points: 10, label: 'Single / partner is Australian citizen or PR (+10)' },
naati: { points: 5, label: 'NAATI community language credential (+5)' },
nomination190: { points: 5, label: 'State/Territory nomination — Subclass 190 (+5)' },
nomination491: { points: 15, label: 'State/Territory nomination — Subclass 491 (+15)' },
regionalStudy: { points: 5, label: 'Study in regional Australia (+5)' },
};
export function calcPoints(profile) {
let pts = 0;
const breakdown = [];
// Age
const age = parseInt(profile.age) || 0;
const ageBand = POINTS_TABLE.age.find(b => age >= b.min && age <= b.max);
if (ageBand) { pts += ageBand.points; breakdown.push({ label: `Age (${ageBand.label})`, points: ageBand.points }); }
// English
const eng = POINTS_TABLE.english.find(e => e.value === profile.english_level);
if (eng) { pts += eng.points; breakdown.push({ label: `English (${eng.label})`, points: eng.points }); }
// Education
const edu = POINTS_TABLE.education.find(e => e.value === profile.education_level);
if (edu) { pts += edu.points; breakdown.push({ label: `Education (${edu.label})`, points: edu.points }); }
// Australian study
const ausStudy = POINTS_TABLE.ausStudy.find(e => e.value === profile.aus_study_years);
if (ausStudy && ausStudy.points) { pts += ausStudy.points; breakdown.push({ label: `Australian Study (${ausStudy.label})`, points: ausStudy.points }); }
// Professional year
if (profile.professional_year == 1) { pts += 5; breakdown.push({ label: 'Professional Year', points: 5 }); }
// Overseas work
const owork = POINTS_TABLE.overseasWork.find(e => e.value === profile.overseas_work_years);
if (owork && owork.points) { pts += owork.points; breakdown.push({ label: `Overseas Work (${owork.label})`, points: owork.points }); }
// Australian work
const awork = POINTS_TABLE.ausWork.find(e => e.value === profile.aus_work_years);
if (awork && awork.points) { pts += awork.points; breakdown.push({ label: `Australian Work (${awork.label})`, points: awork.points }); }
// Partner / single
if (profile.partner_skills == 1) { pts += 10; breakdown.push({ label: 'Partner Skills', points: 10 }); }
else if (profile.partner_skills == 2) { pts += 10; breakdown.push({ label: 'Single / AUS Citizen Partner', points: 10 }); }
// NAATI
if (profile.naati == 1) { pts += 5; breakdown.push({ label: 'NAATI Community Language', points: 5 }); }
// Regional study
if (profile.regional_study == 1) { pts += 5; breakdown.push({ label: 'Regional Australian Study', points: 5 }); }
// State nomination
if (profile.state_nomination === '190') { pts += 5; breakdown.push({ label: 'State Nomination (190)', points: 5 }); }
else if (profile.state_nomination === '491') { pts += 15; breakdown.push({ label: 'State Nomination (491)', points: 15 }); }
return { total: pts, breakdown };
}
// ── VAC FEES ─────────────────────────────────────────────────────────────────
export const VAC_FEES = [
{ subclass: '189', name: 'Skilled Independent', primary: 4770, secondary: 2385, child: 1195 },
{ subclass: '190', name: 'Skilled Nominated', primary: 4770, secondary: 2385, child: 1195 },
{ subclass: '491', name: 'Skilled Work Regional', primary: 4770, secondary: 2385, child: 1195 },
{ subclass: '186', name: 'Employer Nomination (ENS)', primary: 4770, secondary: 2385, child: 1195 },
{ subclass: '187', name: 'Regional Sponsored (RSMS)', primary: 4770, secondary: 2385, child: 1195 },
{ subclass: '482', name: 'Temporary Skill Shortage', primary: 3115, secondary: 1560, child: 1560 },
{ subclass: '494', name: 'Skilled Employer Sponsored Regional', primary: 4770, secondary: 2385, child: 1195 },
{ subclass: '500', name: 'Student Visa', primary: 710, secondary: 355, child: 355 },
{ subclass: '485', name: 'Graduate Temporary', primary: 1895, secondary: 950, child: 475 },
{ subclass: '820', name: 'Partner (onshore)', primary: 8850, secondary: 4425, child: 0 },
{ subclass: '801', name: 'Partner (permanent onshore)',primary: 0, secondary: 0, child: 0, note: 'No additional fee if applying with 820' },
{ subclass: '309', name: 'Partner (offshore)', primary: 8850, secondary: 4425, child: 0 },
{ subclass: '100', name: 'Partner (permanent offshore)',primary: 0, secondary: 0, child: 0, note: 'No additional fee if applying with 309' },
{ subclass: '600', name: 'Visitor Visa', primary: 190, secondary: 190, child: 190 },
{ subclass: '407', name: 'Training Visa', primary: 335, secondary: 170, child: 170 },
];
// ── PROCESSING TIMES ──────────────────────────────────────────────────────────
export const PROCESSING_TIMES = [
{ subclass: '189', name: 'Skilled Independent', p25: 12, p50: 20, p75: 30, p90: 48, note: 'Invitation required via SkillSelect EOI' },
{ subclass: '190', name: 'Skilled Nominated', p25: 8, p50: 14, p75: 22, p90: 36, note: 'State nomination required first' },
{ subclass: '491', name: 'Skilled Work Regional',p25: 8, p50: 14, p75: 22, p90: 36, note: 'State/family nomination required' },
{ subclass: '482', name: 'TSS (employer)', p25: 1, p50: 3, p75: 5, p90: 9, note: 'Short stream approx.' },
{ subclass: '186', name: 'ENS (employer nom.)', p25: 8, p50: 14, p75: 24, p90: 36, note: 'Direct entry stream' },
{ subclass: '494', name: 'Employer Sponsored Regional', p25: 8, p50: 14, p75: 22, p90: 36, note: '' },
{ subclass: '500', name: 'Student Visa', p25: 1, p50: 2, p75: 3, p90: 5, note: 'Varies by nationality and provider' },
{ subclass: '485', name: 'Graduate Temporary', p25: 2, p50: 4, p75: 7, p90: 12, note: '2-year or 4-year stream' },
{ subclass: '820', name: 'Partner (onshore)', p25: 12, p50: 24, p75: 36, p90: 48, note: 'Bridging visa granted while waiting' },
{ subclass: '309', name: 'Partner (offshore)', p25: 12, p50: 24, p75: 36, p90: 48, note: '' },
{ subclass: '600', name: 'Visitor Visa', p25: 1, p50: 1, p75: 2, p90: 3, note: 'Online applications' },
];
// ── STATE NOMINATION CRITERIA ─────────────────────────────────────────────────
export const STATE_CRITERIA = [
{
state: 'NSW', fullName: 'New South Wales',
sc190: { minPoints: 90, notes: 'Must have employment offer or strong ties to NSW. High demand occupations only.' },
sc491: { minPoints: 85, notes: 'Regional NSW only. Must live/work in designated regional areas.' },
website: 'https://www.nsw.gov.au/working-in-nsw/visa-and-migration',
},
{
state: 'VIC', fullName: 'Victoria',
sc190: { minPoints: 90, notes: 'Expression of Interest submitted via Victoria\'s Skilled Visa portal. Occupations from Victorian list.' },
sc491: { minPoints: 85, notes: 'Must live and work in regional Victoria.' },
website: 'https://business.vic.gov.au/visa-and-migration',
},
{
state: 'QLD', fullName: 'Queensland',
sc190: { minPoints: 85, notes: 'QLD Skills in Demand list. Must intend to live and work in QLD.' },
sc491: { minPoints: 80, notes: 'Regional QLD. Must live in designated regions.' },
website: 'https://migration.qld.gov.au/',
},
{
state: 'WA', fullName: 'Western Australia',
sc190: { minPoints: 80, notes: 'WA Skilled Migration Occupation List. Strong preference for in-demand trades/healthcare.' },
sc491: { minPoints: 75, notes: 'Regional WA. Must reside in regional WA.' },
website: 'https://www.wa.gov.au/service/employment/migration/migrate-western-australia',
},
{
state: 'SA', fullName: 'South Australia',
sc190: { minPoints: 75, notes: 'SA Critical Skills List. Lower threshold but strong occupation requirement.' },
sc491: { minPoints: 65, notes: 'Regional SA. Must live and work in SA.' },
website: 'https://www.migration.sa.gov.au/',
},
{
state: 'TAS', fullName: 'Tasmania',
sc190: { minPoints: 65, notes: 'Open to most eligible occupations. Must intend to live and work in Tasmania.' },
sc491: { minPoints: 60, notes: 'All of Tasmania is classified as regional.' },
website: 'https://www.migration.tas.gov.au/',
},
{
state: 'ACT', fullName: 'Australian Capital Territory',
sc190: { minPoints: 90, notes: 'ACT Critical Skills List. Must have an ACT-based job offer in most cases.' },
sc491: { minPoints: null, notes: 'ACT does not participate in SC 491 (not a regional state).' },
website: 'https://www.act.gov.au/migration',
},
{
state: 'NT', fullName: 'Northern Territory',
sc190: { minPoints: 65, notes: 'NT occupation list. Lower points threshold. Strong demand for trades, healthcare, agriculture.' },
sc491: { minPoints: 60, notes: 'All of NT is classified as regional.' },
website: 'https://migration.nt.gov.au/',
},
];
// ── ENGLISH REQUIREMENTS ──────────────────────────────────────────────────────
export const ENGLISH_REQUIREMENTS = [
{
visa: '189 / 190 / 491',
name: 'Skilled Migration',
level: 'Competent English (minimum)',
ielts: 'L6 / R6 / W6 / S6',
pte: 'L50 / R50 / W50 / S50',
toefl: 'L12 / R13 / W21 / S18',
oet: 'B in all components',
notes: 'Proficient (IELTS 7) earns +10 pts; Superior (IELTS 8) earns +20 pts',
},
{
visa: '482 (TSS)',
name: 'Temporary Skill Shortage',
level: 'Competent English',
ielts: 'L4.5 / R4.5 / W4.5 / S4.5 (avg 5.0)',
pte: '36 in each component (avg 42)',
toefl: 'L3 / R3 / W14 / S12 (total 24)',
oet: 'B in each component',
notes: 'Some exemptions for certain nationalities and assessment pathways',
},
{
visa: '186 (ENS)',
name: 'Employer Nomination',
level: 'Competent English',
ielts: 'L6 / R6 / W6 / S6',
pte: 'L50 / R50 / W50 / S50',
toefl: 'L12 / R13 / W21 / S18',
oet: 'B in all components',
notes: 'Direct entry stream',
},
{
visa: '500',
name: 'Student Visa',
level: 'Provider-dependent',
ielts: 'Typically 5.56.5 overall',
pte: 'Typically 4258',
toefl: 'Typically 4679',
oet: 'Typically C+ in all',
notes: 'Each institution sets its own minimum; confirm with your provider',
},
{
visa: '485',
name: 'Graduate Temporary',
level: 'Competent English',
ielts: 'L6 / R6 / W6 / S6',
pte: 'L50 / R50 / W50 / S50',
toefl: 'L12 / R13 / W21 / S18',
oet: 'B in all components',
notes: 'Must have met English requirement for the SC 500 student visa',
},
{
visa: '820 / 801 / 309 / 100',
name: 'Partner Visa',
level: 'No minimum required',
ielts: 'N/A',
pte: 'N/A',
toefl: 'N/A',
oet: 'N/A',
notes: 'English is not mandatory for partner visas; affects some citizenship pathways',
},
];
// ── STUDENT FUND CALCULATOR ───────────────────────────────────────────────────
export const STUDENT_FUND = {
livingCostPerYear: 29710, // AUD (2025 DHA figure)
partnerPerYear: 10394,
childPerYear: 4449,
note: 'Based on DHA 2024-25 financial capacity requirements. Does not include tuition fees, travel, or health cover.',
};
// ── OCCUPATIONS (MLTSSL + key STSOL) ─────────────────────────────────────────
export const OCCUPATIONS = [
// ICT
{ anzsco: '261111', title: 'ICT Business Analyst', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '261112', title: 'Systems Analyst', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '261311', title: 'Analyst Programmer', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '261312', title: 'Developer Programmer', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '261313', title: 'Software Engineer', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '261314', title: 'Software Tester', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '261399', title: 'Software/Apps Programmers NEC', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '262111', title: 'Database Administrator', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '262112', title: 'ICT Security Specialist', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '263111', title: 'Computer Network Engineer', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '263112', title: 'Network Administrator', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '263211', title: 'ICT Quality Assurance Engineer', list: 'MLTSSL', authority: 'ACS', visas: ['189','190','491','482','186'] },
{ anzsco: '263311', title: 'Telecommunications Engineer', list: 'MLTSSL', authority: 'ANZSCO', visas: ['189','190','491','482','186'] },
// Nursing / Healthcare
{ anzsco: '254111', title: 'Occupational Therapist', list: 'MLTSSL', authority: 'AOTC', visas: ['189','190','491','482','186'] },
{ anzsco: '252411', title: 'Physiotherapist', list: 'MLTSSL', authority: 'APC', visas: ['189','190','491','482','186'] },
{ anzsco: '252511', title: 'Podiatrist', list: 'MLTSSL', authority: 'PODAC', visas: ['189','190','491','482','186'] },
{ anzsco: '252711', title: 'Radiographer', list: 'MLTSSL', authority: 'AIR', visas: ['189','190','491','482','186'] },
{ anzsco: '252211', title: 'Medical Laboratory Scientist', list: 'MLTSSL', authority: 'AIMS', visas: ['189','190','491','482','186'] },
{ anzsco: '272311', title: 'Registered Nurse (Medical)', list: 'MLTSSL', authority: 'ANMAC', visas: ['189','190','491','482','186'] },
{ anzsco: '272312', title: 'Registered Nurse (Surgical)', list: 'MLTSSL', authority: 'ANMAC', visas: ['189','190','491','482','186'] },
{ anzsco: '272317', title: 'Registered Nurse (Mental Health)', list: 'MLTSSL', authority: 'ANMAC', visas: ['189','190','491','482','186'] },
{ anzsco: '272399', title: 'Registered Nurses NEC', list: 'MLTSSL', authority: 'ANMAC', visas: ['189','190','491','482','186'] },
{ anzsco: '251211', title: 'Medical Practitioner (General)', list: 'MLTSSL', authority: 'AMC', visas: ['189','190','491','482','186'] },
{ anzsco: '253111', title: 'General Practitioner', list: 'MLTSSL', authority: 'AMC', visas: ['189','190','491','482','186'] },
{ anzsco: '253321', title: 'Psychiatrist', list: 'MLTSSL', authority: 'AMC', visas: ['189','190','491','482','186'] },
{ anzsco: '253999', title: 'Medical Specialists NEC', list: 'MLTSSL', authority: 'AMC', visas: ['189','190','491','482','186'] },
// Engineering
{ anzsco: '233111', title: 'Chemical Engineer', list: 'MLTSSL', authority: 'Engineers Australia', visas: ['189','190','491','482','186'] },
{ anzsco: '233211', title: 'Civil Engineer', list: 'MLTSSL', authority: 'Engineers Australia', visas: ['189','190','491','482','186'] },
{ anzsco: '233214', title: 'Structural Engineer', list: 'MLTSSL', authority: 'Engineers Australia', visas: ['189','190','491','482','186'] },
{ anzsco: '233512', title: 'Mechanical Engineer', list: 'MLTSSL', authority: 'Engineers Australia', visas: ['189','190','491','482','186'] },
{ anzsco: '233611', title: 'Mining Engineer', list: 'MLTSSL', authority: 'Engineers Australia', visas: ['189','190','491','482','186'] },
{ anzsco: '233999', title: 'Engineering Professionals NEC', list: 'MLTSSL', authority: 'Engineers Australia', visas: ['189','190','491','482','186'] },
{ anzsco: '232111', title: 'Architect', list: 'MLTSSL', authority: 'AACA', visas: ['189','190','491','482','186'] },
{ anzsco: '232212', title: 'Landscape Architect', list: 'MLTSSL', authority: 'AILA', visas: ['189','190','491','482','186'] },
// Accounting / Finance
{ anzsco: '221111', title: 'Accountant (General)', list: 'MLTSSL', authority: 'CPAA/CAANZ/IPA', visas: ['189','190','491','482','186'] },
{ anzsco: '221112', title: 'Management Accountant', list: 'MLTSSL', authority: 'CPAA/CAANZ/IPA', visas: ['189','190','491','482','186'] },
{ anzsco: '221113', title: 'Taxation Accountant', list: 'MLTSSL', authority: 'CPAA/CAANZ/IPA', visas: ['189','190','491','482','186'] },
{ anzsco: '221114', title: 'External Auditor', list: 'MLTSSL', authority: 'CPAA/CAANZ', visas: ['189','190','491','482','186'] },
{ anzsco: '222111', title: 'Financial Investment Adviser', list: 'STSOL', authority: 'FINSIA', visas: ['190','491','482'] },
// Education
{ anzsco: '241111', title: 'Early Childhood Teacher', list: 'MLTSSL', authority: 'ACECQA', visas: ['189','190','491','482','186'] },
{ anzsco: '241411', title: 'Special Education Teacher', list: 'MLTSSL', authority: 'AITSL', visas: ['189','190','491','482','186'] },
{ anzsco: '241213', title: 'Secondary School Teacher', list: 'STSOL', authority: 'AITSL', visas: ['190','491','482'] },
// Trades
{ anzsco: '323211', title: 'Fitter (general)', list: 'MLTSSL', authority: 'TRA', visas: ['189','190','491','482','186'] },
{ anzsco: '342111', title: 'Electrician (general)', list: 'MLTSSL', authority: 'TRA', visas: ['189','190','491','482','186'] },
{ anzsco: '334111', title: 'Plumber (general)', list: 'MLTSSL', authority: 'TRA', visas: ['189','190','491','482','186'] },
{ anzsco: '331112', title: 'Bricklayer', list: 'MLTSSL', authority: 'TRA', visas: ['189','190','491','482','186'] },
{ anzsco: '331211', title: 'Carpenter and Joiner', list: 'MLTSSL', authority: 'TRA', visas: ['189','190','491','482','186'] },
{ anzsco: '333111', title: 'Painting Tradesperson', list: 'MLTSSL', authority: 'TRA', visas: ['189','190','491','482','186'] },
{ anzsco: '361111', title: 'Veterinarian', list: 'MLTSSL', authority: 'AVA', visas: ['189','190','491','482','186'] },
{ anzsco: '251411', title: 'Optometrist', list: 'MLTSSL', authority: 'OCANZ', visas: ['189','190','491','482','186'] },
{ anzsco: '251611', title: 'Dental Therapist', list: 'MLTSSL', authority: 'ADC', visas: ['189','190','491','482','186'] },
{ anzsco: '252311', title: 'Dental Specialist', list: 'MLTSSL', authority: 'ADC', visas: ['189','190','491','482','186'] },
{ anzsco: '271311', title: 'Social Worker', list: 'MLTSSL', authority: 'AASW', visas: ['189','190','491','482','186'] },
{ anzsco: '272111', title: 'Counsellor', list: 'STSOL', authority: 'VETASSESS',visas: ['190','491','482'] },
];
export const TIMELINE_STAGES = [
{ key: 'skill_assessment', label: 'Skills Assessment', icon: '📋', desc: 'Skills assessed by relevant authority (TRA, ACS, ANMAC, Engineers Australia, etc.)' },
{ key: 'english_test', label: 'English Test', icon: '🗣️', desc: 'IELTS, PTE, TOEFL, or OET completed' },
{ key: 'eoi_lodged', label: 'EOI Submitted', icon: '📝', desc: 'Expression of Interest submitted in SkillSelect' },
{ key: 'invitation', label: 'Invitation Received', icon: '✉️', desc: 'Invitation to Apply (ITA) received from DHA or state authority' },
{ key: 'visa_lodged', label: 'Visa Application Lodged', icon: '🚀', desc: 'Visa application submitted to the Department of Home Affairs' },
{ key: 'decision', label: 'Decision Made', icon: '⚖️', desc: 'DHA has made a decision on the application' },
{ key: 'visa_granted', label: 'Visa Granted! 🎉', icon: '🎉', desc: 'Visa approved — welcome to Australia!' },
];