120 lines
3.1 KiB
Dart
120 lines
3.1 KiB
Dart
/// 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;
|
||
}
|
||
}
|