def _generate_employee_no(tenant_id: int) -> str:
    from django.db import transaction

    from simorgh.apps.app_settings.services import resolve
    from simorgh.apps.hr_core.models import EmployeeNumberSequence

    prefix = resolve("hr.employee_no_prefix", tenant_id=tenant_id) or "EMP"
    digits = int(resolve("hr.employee_no_digits", tenant_id=tenant_id) or 4)

    with transaction.atomic():
        sequence, _ = EmployeeNumberSequence.objects.select_for_update().get_or_create(
            tenant_id=tenant_id,
            prefix=prefix,
        )
        sequence.last_seq += 1
        sequence.save(update_fields=["last_seq"])

    return f"{prefix}-{str(sequence.last_seq).zfill(digits)}"
