/// Represents authorized pay grades in the U.S. Army. /// /// Covers Enlisted (E1–E9), Warrant Officer (W1–W5), and /// Commissioned Officer (O1–O10) grades. enum AuthorizedRank { // Enlisted e1, e2, e3, e4, e5, e6, e7, e8, e9, // Warrant Officers w1, w2, w3, w4, w5, // Commissioned Officers o1, o2, o3, o4, o5, o6, o7, o8, o9, o10; /// Returns the pay grade string (e.g., "E-4", "W-2", "O-3"). String get payGrade { final name = this.name.toUpperCase(); return '${name[0]}-${name.substring(1)}'; } /// Returns the common rank title for this pay grade. String get rankTitle { switch (this) { case AuthorizedRank.e1: return 'Private'; case AuthorizedRank.e2: return 'Private Second Class'; case AuthorizedRank.e3: return 'Private First Class'; case AuthorizedRank.e4: return 'Specialist / Corporal'; case AuthorizedRank.e5: return 'Sergeant'; case AuthorizedRank.e6: return 'Staff Sergeant'; case AuthorizedRank.e7: return 'Sergeant First Class'; case AuthorizedRank.e8: return 'Master Sergeant / First Sergeant'; case AuthorizedRank.e9: return 'Sergeant Major / Command Sergeant Major'; case AuthorizedRank.w1: return 'Warrant Officer 1'; case AuthorizedRank.w2: return 'Chief Warrant Officer 2'; case AuthorizedRank.w3: return 'Chief Warrant Officer 3'; case AuthorizedRank.w4: return 'Chief Warrant Officer 4'; case AuthorizedRank.w5: return 'Chief Warrant Officer 5'; case AuthorizedRank.o1: return 'Second Lieutenant'; case AuthorizedRank.o2: return 'First Lieutenant'; case AuthorizedRank.o3: return 'Captain'; case AuthorizedRank.o4: return 'Major'; case AuthorizedRank.o5: return 'Lieutenant Colonel'; case AuthorizedRank.o6: return 'Colonel'; case AuthorizedRank.o7: return 'Brigadier General'; case AuthorizedRank.o8: return 'Major General'; case AuthorizedRank.o9: return 'Lieutenant General'; case AuthorizedRank.o10: return 'General'; } } /// Returns true if this rank is an enlisted grade. bool get isEnlisted => name.startsWith('e'); /// Returns true if this rank is a warrant officer grade. bool get isWarrantOfficer => name.startsWith('w'); /// Returns true if this rank is a commissioned officer grade. bool get isCommissionedOfficer => name.startsWith('o'); /// Returns the numeric grade level (1–10 within each category). int get gradeLevel => int.parse(name.substring(1)); /// Returns true if this rank meets or exceeds [minimum]. bool meetsMinimum(AuthorizedRank minimum) { if (isEnlisted && minimum.isEnlisted) { return gradeLevel >= minimum.gradeLevel; } if (isWarrantOfficer && minimum.isWarrantOfficer) { return gradeLevel >= minimum.gradeLevel; } if (isCommissionedOfficer && minimum.isCommissionedOfficer) { return gradeLevel >= minimum.gradeLevel; } return false; } }