O código fiscal

Cada pessoa na Itália tem um código de identificação exclusivo emitido pela autoridade fiscal nacional após o registro do nascimento: o código fiscal (Codice Fiscale). Consulte a aba Recursos para obter mais informações sobre isso.

Dado um dicionário contendo os dados pessoais de uma pessoa (nome, sobrenome, gênero e data de nascimento), retorne os 11 caracteres do código como uma string seguindo estas etapas:

  • Gere 3 letras maiúsculas a partir do sobrenome, se ele tiver:

    • Pelo menos 3 consoantes: são usadas as três primeiras consoantes. (Newman -> NWM).
    • Menos de 3 consoantes: as vogais substituem os caracteres ausentes na mesma ordem em que aparecem (Fox -> FXO | Hope -> HPO).
    • Menos de três letras: "X" ocupa a terceira posição depois da consoante e da vogal (Yu -> YUX).
  • Gere 3 letras maiúsculas a partir do nome, se ele tiver:

    • Exatamente 3 consoantes: as consoantes são usadas na ordem em que aparecem (Matt -> MTT).
    • Mais de 3 consoantes: são usadas a primeira, a terceira e a quarta consoante (Samantha -> SNT | Thomas -> TMS).
    • Menos de 3 consoantes: as vogais substituem os caracteres ausentes na mesma ordem em que aparecem (Bob -> BBO | Paula -> PLA).
    • Menos de três letras: "X" ocupa a terceira posição depois da consoante e da vogal (Al -> LAX).
  • Gere 2 números, 1 letra e 2 números a partir da data de nascimento e do gênero:

    • Pegue os dois últimos dígitos do ano de nascimento (1985 -> 85).
    • Gere uma letra correspondente ao mês de nascimento (Janeiro -> A | Dezembro -> T) usando a tabela de conversão incluída no código.
    • Para homens, pegue o dia de nascimento, adicionando um zero no início se ele for menor que 10 (qualquer dia 9 -> 09 | qualquer dia 20 -> 20).
    • Para mulheres, pegue o dia de nascimento e some 40 a ele (qualquer dia 9 -> 49 | qualquer dia 20 -> 60).

Exemplos

fiscal_code({
  "name": "Matt",
  "surname": "Edabit",
  "gender": "M",
  "dob": "1/1/1900"
}) ➞ "DBTMTT00A01"

fiscal_code({ 
  "name": "Helen",
  "surname": "Yu",
  "gender": "F",
  "dob": "1/12/1950"
}) ➞ "YUXHLN50T41"

fiscal_code({
  "name": "Mickey",
  "surname": "Mouse",
  "gender": "M",
  "dob": "16/1/1928"
}) ➞ "MSOMKY28A16"

Notas

  • As letras do código devem estar em maiúsculas.
  • A data de nascimento é fornecida no formato D/M/YYYY.
  • A tabela de conversão dos meses já está no código inicial.
  • Y não é uma vogal.