uto_manager/lib/domain/entities/authorized_rank.dart

120 lines
3.1 KiB
Dart
Raw Permalink 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.

/// 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;
}
}