Estructura
1. Campos Principales del Recurso Client
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | String | ✅ Sí | Identificador único autogenerado (ej: CL-0000000079). |
companyName | String | ✅ Sí | Nombre oficial de la empresa/cliente. |
companyEmail | ✅ Sí | Correo principal de contacto. | |
companyPhone | String | ❌ No | Teléfono de contacto. |
website | URL | ❌ No | URL del sitio web de la empresa. |
linkedinUrl | URL | ❌ No | Perfil de LinkedIn corporativo. |
address | String | ❌ No | Dirección física (calle, ciudad, país). |
country | String | ✅ Sí | País del cliente (código ISO o nombre completo). |
area | String | ❌ No | Área de negocio (ej: Technology, Mining, Retail). |
companyType | String | ✅ Sí | Tipo de empresa (ej: Holding, Subsidiary, Partner). |
status | Enum | ✅ Sí | Estado del cliente (ACTIVE, INACTIVE, PROSPECT). |
createdAt | DateTime | ✅ Sí | Fecha de creación del registro. |
updatedAt | DateTime | ✅ Sí | Fecha de la última modificación. |
2. Subcolecciones Internas
Cada Client tiene tres subcolecciones clave que permiten un seguimiento granular:
2.1 Contacts
-
Estructura de un Contacto:
Campo Tipo Obligatorio Descripción idString ✅ Sí Identificador único del contacto. nameString ✅ Sí Nombre del contacto. lastNameString ❌ No Apellido (opcional). emailEmail ✅ Sí Correo principal. secondEmailEmail ❌ No Correo alternativo. phoneString ❌ No Teléfono fijo o extensión. mobileString ❌ No Teléfono móvil. secondPhoneString ❌ No Segundo teléfono (opcional). secondMobileString ❌ No Segundo móvil (opcional). positionString ✅ Sí Cargo o título (ej: Manager). functionString ❌ No Rol o departamento. linkedinUrlURL ❌ No Perfil LinkedIn personal. commentsText ❌ No Notas internas sobre el contacto.
2.2 Events
-
Estructura de un Evento:
Campo Tipo Obligatorio Descripción idString ✅ Sí Identificador único del evento. eventTypeEnum ✅ Sí Tipo de evento (Meeting, Client Won, Proposal Sent…). contactIdString ✅ Sí ID del contacto asociado (o nullsi no aplica).descriptionText ❌ No Comentarios o detalles adicionales. documentsArray ❌ No Archivos adjuntos (PDF, imágenes, etc.). createdAtDateTime ✅ Sí Fecha y hora de registro del evento.
2.3 Jobs
-
Estructura de una Oferta (
Job Posting):Campo Tipo Obligatorio Descripción idString ✅ Sí Identificador único de la oferta. jobTitleString ✅ Sí Título de la posición. positionTypeString ✅ Sí Categoría de la posición (IT & Digital, Sales…). salaryRangeObject ✅ Sí { min: Number, max: Number }feePercentageNumber ✅ Sí Porcentaje de comisión (0–100%). commercialSchemeString ✅ Sí Esquema comercial (Success Fee, Retainer…). guaranteeMonthsNumber ✅ Sí Garantía en meses (p.ej. 1, 3). hasCancellationBoolean ✅ Sí Indica si aplica cláusula de cancelación. cancellationRateNumber ❌ Cond. Porcentaje de cancelación (0–100%), solo si hasCancellation.notesText ❌ No Notas adicionales o condiciones especiales. forecastRevenueCurrency ✅ Sí Cálculo de ingresos estimados (salario * feePercentage). createdAtDateTime ✅ Sí Fecha de publicación de la oferta.
3. Relaciones con Otros Modelos
flowchart LR
Lead["Lead"] -->|Won Deal| Client["Client"]
Client --> Contacts["Contact"]
Client --> Events["Event"]
Client --> Jobs["Job Posting"]
Jobs --> Candidates["Candidate"]:::future
style Candidates stroke-dasharray: 5 5,fill:none