# Campos canonicos enviados a la API

Este documento lista los campos que la app normaliza/canoniza antes de enviarlos a la API. La canonizacion es para contrato de backend y consistencia de datos; la UI debe mapear estos codigos a textos localizados antes de mostrarlos al usuario.

## Campos enviados

| Campo API | Contexto | Formato enviado | Valores actuales |
|---|---|---|---|
| `sex` | People create/update/profile details | String canonico | `MALE`, `FEMALE`, `UNKNOWN` si llega un valor invalido |
| `care_type` | People create/update/profile details | String canonico | `SELF`, `SENIOR`, `DISABILITY`, `CHILD`, `OTHER`, `UNKNOWN` |
| `contact_relationship` | Profile details / people domain previo a envio | String normalizado uppercase | Ej. `OWNER`, `FATHER`, `SON_OR_DAUGHTER`; valores de catalogo normalizados |
| `secondary_contact_relationship` | Profile details / people domain previo a envio | String normalizado uppercase | Igual que `contact_relationship` |
| `blood` | People medical create/update/profile medical | String canonico | `A_POSITIVE`, `A_NEGATIVE`, `B_POSITIVE`, `B_NEGATIVE`, `AB_POSITIVE`, `AB_NEGATIVE`, `O_POSITIVE`, `O_NEGATIVE`, `UNKNOWN` |
| `breed` | Pet create/update | String compuesto | `DOG`, `CAT`, `OTHER`, o formato `{SPECIES} \| {breedCode}`. Para perros mixtos: `DOG \| {breedCode} Mix` o `DOG \| Mix` |
| `vaccines` | Pet medical create/update | Codigos de catalogo separados por `\|` | Codigos devueltos por catalogo de vacunas |
| `sex` | Pet medical create/update | Boolean | `MALE` se convierte a `true`; `FEMALE` se convierte a `false` |

## Codigos canonicos definidos

### Especie de mascota

| Codigo | Significado UI esperado |
|---|---|
| `DOG` | Perro |
| `CAT` | Gato |
| `OTHER` | Otro |

### Sexo

| Codigo | Significado UI esperado |
|---|---|
| `MALE` | Masculino / Macho |
| `FEMALE` | Femenino / Hembra |

### Tipo de cuidado

| Codigo | Significado UI esperado |
|---|---|
| `SELF` | Perfil propio / Mi perfil |
| `SENIOR` | Adulto mayor |
| `DISABILITY` | Persona con discapacidad |
| `CHILD` | Nino/a |
| `OTHER` | Otro |

### Relacion

| Codigo | Significado UI esperado |
|---|---|
| `OWNER` | Titular |
| Catalog relationship codes | Se normalizan a uppercase con `_`, por ejemplo `son_or_daughter` -> `SON_OR_DAUGHTER` |

### Grupo sanguineo

| Codigo | Significado UI esperado |
|---|---|
| `A_POSITIVE` | A+ |
| `A_NEGATIVE` | A- |
| `B_POSITIVE` | B+ |
| `B_NEGATIVE` | B- |
| `AB_POSITIVE` | AB+ |
| `AB_NEGATIVE` | AB- |
| `O_POSITIVE` | O+ |
| `O_NEGATIVE` | O- |

### Estado de perfil

Estos codigos existen como constantes:

| Codigo | Nota |
|---|---|
| `ACTIVE` | Definido, pero los endpoints actuales envian `active: Boolean` |
| `INACTIVE` | Definido, pero los endpoints actuales envian `active: Boolean` |
| `LOST` | Definido, pero los endpoints actuales envian `lost: Boolean` |

## Reglas de fallback

- Para `sex`, `care_type`, `blood` y `pet species`, si el valor no esta dentro de los permitidos, se envia `UNKNOWN`.
- Para relaciones, el valor se transforma a codigo canonico con uppercase y guiones bajos. Ejemplo: `son or daughter` -> `SON_OR_DAUGHTER`.
- Para `breed`, la especie se guarda dentro del mismo campo porque el contrato actual no tiene un campo `species` separado en `CreatePetRequest` / `UpdatePetRequest`.
- Para vacunas, se envian codigos de catalogo separados por `|`.

## Mappers relevantes

- Codigos definidos: `composeApp/src/commonMain/kotlin/cl/mycode/appmycode/domain/canonical/CanonicalCodes.kt`
- Normalizacion: `composeApp/src/commonMain/kotlin/cl/mycode/appmycode/domain/canonical/CanonicalValueMapper.kt`
- People requests: `composeApp/src/commonMain/kotlin/cl/mycode/appmycode/data/remote/model/PeopleRequests.kt`
- Profile details request: `composeApp/src/commonMain/kotlin/cl/mycode/appmycode/data/remote/model/UserProfileDtos.kt`
- Pet requests: `composeApp/src/commonMain/kotlin/cl/mycode/appmycode/data/remote/model/PetRequests.kt`
- Codificacion especie/raza: `composeApp/src/commonMain/kotlin/cl/mycode/appmycode/presentation/pet/catalog/PetSpeciesAndBreedCodec.kt`

