```lua
return {
    uid = "dnr",
    name = {
        en = "DNR",
        ru = "ДНР"
    },
    description = {
        en = "Armed forces of the Donetsk People's Republic, defending their land with courage and determination.",
        ru = "Вооружённые силы Донецкой Народной Республики, защищающие свою землю с мужеством и решимостью."
    },
    notify = {
        en = "You have joined the DNR forces!",
        ru = "Вы вступили в ряды ДНР!"
    },
    maxPlayersNotify = {
        en = "The DNR forces are at maximum capacity!",
        ru = "Отряды ДНР переполнены!"
    },
    color = Color(200, 0, 0),  -- Красный цвет, ассоциирующийся с ДНР
    icon = "materials/dnr_icon.png",
    models = {
        "models/npc/dpr_militia_heavy_e.mdl",
        "models/npc/dpr_militia_heavy_f.mdl",
        "models/npc/dpr_militia_light_e.mdl"
    },
    weapons = {"tfa_ins2_ak103", "tfa_ins2_pm"},  -- Основное оружие (АК-47)
    walkSound = "npc/metropolice/gear" .. math.random(1, 6) .. ".wav",
    teamID = 2,
    maxPlayers = 8,
    classes = {
        private = {  -- Рядовой (доступен сразу)
            name = {
                en = "Private",
                ru = "Рядовой"
            },
            description = {
                en = "Standard infantry soldier equipped with an AK-47 and basic gear.",
                ru = "Обычный пехотинец, вооружённый АК-47 и базовой экипировкой."
            },
            icon = "materials/dnr_private_icon.png",
            weapons = {"tfa_ins2_ak103", "tfa_ins2_pm"},
            models = {
                "models/npc/dpr_militia_heavy_e.mdl",
                "models/npc/dpr_militia_heavy_f.mdl"
            },
            OnSpawn = function(self, ply, progress)
                if not SERVER then return end
                progress = progress or {
                    level = 1,
                    exp = 0,
                    maxExp = 100
                }

                ply:SetHealth(100 + progress.level * 5)  -- Здоровье растёт с уровнем
                ply:SetArmor(50)
                ply:SetRunSpeed(ply:GetRunSpeed() * 1.0)  -- Базовая скорость
            end
        },
        corporal = {  -- Ефрейтор (требует 10 уровня)
            name = {
                en = "Corporal",
                ru = "Ефрейтор"
            },
            description = {
                en = "Experienced soldier with improved equipment and tactical skills.",
                ru = "Опытный боец с улучшенным снаряжением и тактическими навыками."
            },
            icon = "materials/dnr_corporal_icon.png",
            weapons = {
                "tfa_ins2_wpn_ak47",  -- АК-47
                "tfa_ins2_wpn_pp19",   -- ПП-19 Бизон (доп. оружие)
                "tfa_nade_rgd5"        -- Граната
            },
            models = {
                "models/player/PMC_3/PMC__03.mdl",
                "models/player/PMC_4/PMC__04.mdl"
            },
            requiredLevel = 10,  -- Требуется 10 уровень рядового
            requiredClass = "private",  -- Должен быть сначала рядовым
            OnSpawn = function(self, ply, progress)
                if not SERVER then return end
                progress = progress or {
                    level = 1,
                    exp = 0,
                    maxExp = 100
                }

                ply:SetHealth(150 + progress.level * 8)  -- Больше здоровья
                ply:SetArmor(100)  -- Улучшенная броня
                ply:SetRunSpeed(ply:GetRunSpeed() * 1.05)  -- Чуть быстрее
            end
        }
    },
    OnSpawn = function(self, ply, progress)
        if not SERVER then return end
        ply:SetHealth(100)
        ply:SetArmor(50)
        ply:SetRunSpeed(ply:GetRunSpeed() * 1.0)
    end
}
```
Как структурировать код лучше?