use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginatedResponse<T> {
#[serde(rename = "totalFilas")]
pub total_rows: u32,
#[serde(rename = "pagina")]
pub page: u32,
#[serde(rename = "tamanioPagina")]
pub page_size: u32,
#[serde(rename = "resultados")]
pub results: Vec<T>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthorizationStatus {
#[serde(skip_serializing_if = "Option::is_none")]
pub aut: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub susp: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rev: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MasterItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(rename = "codigo", skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(rename = "nombre")]
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SupplyProblem {
pub cn: String,
#[serde(rename = "nombre")]
pub name: String,
pub fini: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub ffin: Option<i64>,
#[serde(rename = "observ", skip_serializing_if = "Option::is_none")]
pub observations: Option<String>,
#[serde(rename = "activo")]
pub active: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Section {
#[serde(rename = "seccion")]
pub section: String,
#[serde(rename = "titulo")]
pub title: String,
#[serde(rename = "orden")]
pub order: i32,
#[serde(rename = "contenido", skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[repr(u8)]
pub enum DocumentType {
#[serde(rename = "FichaTecnica")]
TechnicalSheet = 1,
#[serde(rename = "Prospecto")]
PackageLeaflet = 2,
#[serde(rename = "InformePublico")]
PublicReport = 3,
#[serde(rename = "PlanGestionRiesgos")]
RiskManagementPlan = 4,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Document {
#[serde(rename = "tipo")]
pub doc_type: u8,
pub url: String,
#[serde(rename = "secc")]
pub has_sections: bool,
#[serde(rename = "urlHtml", skip_serializing_if = "Option::is_none")]
pub url_html: Option<String>,
#[serde(rename = "fecha", skip_serializing_if = "Option::is_none")]
pub date: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SafetyNote {
#[serde(rename = "tipo")]
pub note_type: u8,
pub num: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#ref: Option<String>,
#[serde(rename = "asunto")]
pub subject: String,
#[serde(rename = "fecha")]
pub date: i64,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaterialDocument {
#[serde(rename = "nombre")]
pub name: String,
pub url: String,
#[serde(rename = "fecha")]
pub date: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SafetyMaterial {
#[serde(rename = "listaDocsProfesional", default)]
pub professional_docs: Vec<MaterialDocument>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClinicalDescription {
pub vmp: String,
#[serde(rename = "vmpDesc")]
pub vmp_desc: String,
pub vmpp: String,
#[serde(rename = "vmppDesc")]
pub vmpp_desc: String,
#[serde(rename = "presComerc")]
pub commercialized_presentations: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AtcCode {
#[serde(rename = "codigo")]
pub code: String,
#[serde(rename = "nombre")]
pub name: String,
#[serde(rename = "nivel")]
pub level: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActiveIngredient {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(rename = "codigo", skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(rename = "nombre")]
pub name: String,
#[serde(rename = "cantidad", skip_serializing_if = "Option::is_none")]
pub amount: Option<String>,
#[serde(rename = "unidad", skip_serializing_if = "Option::is_none")]
pub unit: Option<String>,
#[serde(rename = "orden", skip_serializing_if = "Option::is_none")]
pub order: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Excipient {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(rename = "nombre")]
pub name: String,
#[serde(rename = "cantidad", skip_serializing_if = "Option::is_none")]
pub amount: Option<String>,
#[serde(rename = "unidad", skip_serializing_if = "Option::is_none")]
pub unit: Option<String>,
#[serde(rename = "orden", skip_serializing_if = "Option::is_none")]
pub order: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Photo {
#[serde(rename = "tipo")]
pub photo_type: String,
pub url: String,
#[serde(rename = "fecha", skip_serializing_if = "Option::is_none")]
pub date: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PresentationSummary {
pub cn: String,
#[serde(rename = "nombre")]
pub name: String,
#[serde(rename = "estado")]
pub status: AuthorizationStatus,
#[serde(rename = "comerc")]
pub commercialized: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub psum: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Presentation {
pub cn: String,
#[serde(rename = "nombre")]
pub name: String,
#[serde(rename = "estado")]
pub status: AuthorizationStatus,
#[serde(rename = "comerc")]
pub commercialized: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub psum: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MedicationSummary {
pub nregistro: String,
#[serde(rename = "nombre")]
pub name: String,
pub labtitular: String,
#[serde(rename = "estado")]
pub status: AuthorizationStatus,
pub cpresc: String,
#[serde(rename = "comerc", skip_serializing_if = "Option::is_none")]
pub commercialized: Option<bool>,
#[serde(rename = "receta", skip_serializing_if = "Option::is_none")]
pub prescription_required: Option<bool>,
#[serde(rename = "conduc", skip_serializing_if = "Option::is_none")]
pub affects_driving: Option<bool>,
#[serde(rename = "triangulo", skip_serializing_if = "Option::is_none")]
pub black_triangle: Option<bool>,
#[serde(rename = "huerfano", skip_serializing_if = "Option::is_none")]
pub orphan: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub biosimilar: Option<bool>,
#[serde(rename = "nosustituible", skip_serializing_if = "Option::is_none")]
pub non_substitutable: Option<MasterItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub psum: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ema: Option<bool>,
#[serde(rename = "notas", skip_serializing_if = "Option::is_none")]
pub has_notes: Option<bool>,
#[serde(rename = "materialesInf", skip_serializing_if = "Option::is_none")]
pub has_materials: Option<bool>,
#[serde(default)]
pub docs: Vec<Document>,
#[serde(rename = "fotos", default)]
pub photos: Vec<Photo>,
#[serde(rename = "viasAdministracion", default)]
pub administration_routes: Vec<MasterItem>,
#[serde(rename = "formaFarmaceutica", skip_serializing_if = "Option::is_none")]
pub pharmaceutical_form: Option<MasterItem>,
#[serde(
rename = "formaFarmaceuticaSimplificada",
skip_serializing_if = "Option::is_none"
)]
pub simplified_pharmaceutical_form: Option<MasterItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dosis: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Medication {
pub nregistro: String,
#[serde(rename = "nombre")]
pub name: String,
pub pactivos: String,
pub labtitular: String,
#[serde(rename = "estado")]
pub status: AuthorizationStatus,
pub cpresc: String,
#[serde(rename = "comerc", skip_serializing_if = "Option::is_none")]
pub commercialized: Option<bool>,
#[serde(rename = "receta", skip_serializing_if = "Option::is_none")]
pub prescription_required: Option<bool>,
#[serde(rename = "conduc", skip_serializing_if = "Option::is_none")]
pub affects_driving: Option<bool>,
#[serde(rename = "triangulo", skip_serializing_if = "Option::is_none")]
pub black_triangle: Option<bool>,
#[serde(rename = "huerfano", skip_serializing_if = "Option::is_none")]
pub orphan: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub biosimilar: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ema: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub psum: Option<bool>,
#[serde(default)]
pub docs: Vec<Document>,
#[serde(rename = "fotos", default)]
pub photos: Vec<Photo>,
#[serde(rename = "notas", skip_serializing_if = "Option::is_none")]
pub has_notes: Option<bool>,
#[serde(rename = "materialesInf", skip_serializing_if = "Option::is_none")]
pub has_materials: Option<bool>,
#[serde(default)]
pub atcs: Vec<AtcCode>,
#[serde(rename = "principiosActivos", default)]
pub active_ingredients: Vec<ActiveIngredient>,
#[serde(rename = "excipientes", default)]
pub excipients: Vec<Excipient>,
#[serde(rename = "viasAdministracion", default)]
pub administration_routes: Vec<MasterItem>,
#[serde(rename = "nosustituible", skip_serializing_if = "Option::is_none")]
pub non_substitutable: Option<MasterItem>,
#[serde(rename = "presentaciones", default)]
pub presentations: Vec<PresentationSummary>,
#[serde(rename = "formaFarmaceutica", skip_serializing_if = "Option::is_none")]
pub pharmaceutical_form: Option<MasterItem>,
#[serde(
rename = "formaFarmaceuticaSimplificada",
skip_serializing_if = "Option::is_none"
)]
pub simplified_pharmaceutical_form: Option<MasterItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dosis: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangeRecord {
pub nregistro: String,
#[serde(rename = "fecha")]
pub date: i64,
#[serde(rename = "tipoCambio")]
pub change_type: u8,
#[serde(rename = "cambios", default)]
pub changes: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum MasterDataType {
ActiveIngredients = 1,
PharmaceuticalForms = 3,
AdministrationRoutes = 4,
Laboratories = 6,
AtcCodes = 7,
ActiveIngredientsSNOMED = 11,
SimplifiedPharmaceuticalFormsSNOMED = 13,
AdministrationRoutesSNOMED = 14,
Medications = 15,
CommercializedMedicationsSNOMED = 16,
}
impl MasterDataType {
pub fn as_u8(self) -> u8 {
self as u8
}
}