TransientFailure & Bounce events type: soft & hard?

Hello, I am currently using bounce classification granularity to categorize some events as soft or hard bounces.
I would like to know if I can use type instead of bounce classification instead and be 100% sure that TransientFailure are soft bounces and Bounces are hardbounces.
Does the event typing comes from response code classification ?
Thanks in advance

Based on my understanding, if a bounce classification file is not provided, all 4XX errors are categorized as transient failures, whereas 5XX are considered as bounces.

Here’s a ruleset you could convert to KumoMTA and use: email-specter/config/bounce_categories/bounces.txt at main · maileroo/email-specter · GitHub

And, some more:

[rules]
InvalidRecipient = [
    "^550[ \\-]5\\.4\\.1.*Recipient address rejected: Access denied.* \\[.*\\.prod\\.(protection\\.)?outlook\\.com",
    "^554[ \\-]+.*This user doesn't have",
    "^550[ \\-]+5\\.1\\.1\\s+.*does not exist",
    "^550[ \\-]+5\\.1\\.1\\s+.*Invalid recipient",
    "^550[ \\-]+5\\.2\\.1\\s+.*is expired account",
    "^554[ \\-]+5\\.2\\.1\\s+.*Inactive user",
    "^554[ \\-]+5\\.7\\.1\\s.*Unknown recipient",
    "^550[ \\-]+5\\.1\\.1\\s.*User unknown",
    "^554\\s.*#5\\.1\\.1\\b",
    "^550[ \\-]+5\\.1\\.1.*Recipient Unknown",
    "^550[ \\-]+5\\.1\\.1.*recipient rejected",
    "^554[ \\-]+.*Not a valid recipient",
    "^553[ \\-]+.*list of allowed rcpthost",
    "^\\d{3}[ \\-]+4\\.1\\.6\\b",
    "^\\d{3}[ \\-]+4\\.1\\.9\\b",
    "^\\d{3}[ \\-]+4\\.3\\.5\\b",
    "^\\d{3}[ \\-]+5\\.1\\.4\\b",
    "^\\d{3}[ \\-]+5\\.1\\.5\\b",
    "^\\d{3}[ \\-]+5\\.1\\.6\\b",
    "^\\d{3}[ \\-]+5\\.1\\.9\\b",
    "^\\d{3}[ \\-]+5\\.2\\.0\\b",
    "^\\d{3}[ \\-]+5\\.3\\.0\\b",
    "^5\\d{2}[ \\-]+5\\.2\\.4\\b",
    "^5\\d{2}[ \\-]+5\\.3\\.2\\b",
    "^521\\b",
]

QuotaIssues = [
    "^452[ \\-]+4\\.2\\.2\\s+.*over quota",
    "(?i)\\bout of storage\\b",
    "(?i)^user quota exceeded$",
    "^552[ \\-]+5\\.1\\.1\\s+.*Recipient overquota",
    "^552[ \\-]+5\\.2\\.2\\s+.*Mailbox is full",
    "^\\d{3}[ \\-]+4\\.2\\.1\\b",
    "^\\d{3}[ \\-]+4\\.2\\.2\\b",
    "^\\d{3}[ \\-]+4\\.3\\.1\\b",
    "^\\d{3}[ \\-]+5\\.2\\.1\\b",
    "^\\d{3}[ \\-]+5\\.2\\.2\\b",
    "^\\d{3}[ \\-]+5\\.3\\.1\\b",
]

Exactly. Technically, all 4xx DSNs can be retried and so should be considered “soft”. All 5xx DSNs should be permanently failed and so should be considered “hard”.
HOWEVER… over the years, many service providers have conflated those to the point where DSN rewrites became a desired function. We offer that ability as well. Rewriting Remote Server Responses - KumoMTA Docs
And it can be helpful when a 4xx could be retried but really shouldn’t. EG: hard bouncing an over quota mailbox.
"4\\.2\\.2 The email account that you tried to reach is over quota\\.": 500