Skip to main content
POST
/
api
/
v1
/
icsr
Create ICSR Case
curl --request POST \
  --url https://api.example.com/api/v1/icsr \
  --header 'Content-Type: application/json' \
  --data '
{
  "paciente_iniciales": "<string>",
  "paciente_edad": 123,
  "paciente_sexo": "<string>",
  "reportante_nombre": "<string>",
  "producto_sospechoso": "<string>",
  "descripcion_evento": "<string>",
  "paciente_peso": 123,
  "paciente_dni": "<string>",
  "paciente_fecha_nacimiento": "<string>",
  "paciente_grupo_etareo": "<string>",
  "paciente_diagnostico_principal": "<string>",
  "paciente_cie10": "<string>",
  "paciente_comorbilidades": "<string>",
  "paciente_gestacion_meses_raw": "<string>",
  "reportante_contacto": "<string>",
  "reportante_email": "<string>",
  "reportante_telefono": "<string>",
  "reportante_ocupacion": "<string>",
  "fecha_inicio_evento": "<string>",
  "fecha_fin_evento": "<string>",
  "gravedad": "<string>",
  "ea_causalidad": "<string>",
  "ea_desenlace": "<string>",
  "ea_grave_solo_ram": true,
  "estado": "<string>",
  "numero": "<string>",
  "tipo_notificacion": "<string>",
  "fuente_notificacion": "<string>",
  "doc_fuente_url": "<string>",
  "codigo_interno_lab": "<string>",
  "cenafyt_codigo": "<string>",
  "productos": [
    {
      "nombre_producto": "<string>",
      "ifa": "<string>",
      "forma_farmaceutica": "<string>",
      "laboratorio_pais": "<string>",
      "registro_sanitario": "<string>",
      "nro_lote": "<string>",
      "via_administracion": "<string>",
      "dosis_frecuencia": "<string>",
      "fecha_inicio": "<string>",
      "fecha_fin": "<string>",
      "desaparecio_al_suspender": "<string>",
      "desaparecio_al_disminuir_dosis": "<string>",
      "reaparecio_reexposicion": "<string>",
      "antecedente_reaccion": "<string>",
      "paciente_recibio_tratamiento_ram": "<string>",
      "detalle_tratamiento_ram": "<string>"
    }
  ],
  "concomitantes": [
    {
      "nombre_producto": "<string>",
      "dosis_frecuencia": "<string>",
      "nro_lote": "<string>",
      "via_administracion": "<string>",
      "fecha_inicio": "<string>",
      "fecha_fin": "<string>",
      "motivo_prescripcion": "<string>"
    }
  ],
  "seguimientos": [
    {
      "numero": 123,
      "fecha": "<string>",
      "comentarios": "<string>"
    }
  ],
  "lt_fecha_recibido_colaborador": "<string>",
  "lt_fecha_recibido_ufv": "<string>",
  "lt_dias_colab_ufv": 123,
  "lt_fecha_limite_digemid": "<string>",
  "lt_fecha_envio_digemid": "<string>",
  "lt_dias_ufv_digemid": 123,
  "lt_comentarios_no_sometimiento": "<string>",
  "lt_problemas_adicionales": "<string>",
  "qc_realizado_por": "<string>",
  "qc_fecha": "<string>",
  "revision_senales": "<string>",
  "comentarios_adicionales": "<string>",
  "seg_contactar_paciente": true,
  "seg_adicional_fecha": "<string>",
  "seg_adicional_comentarios": "<string>",
  "seg_adicional_estado": "<string>"
}
'
{
  "id": 123,
  "created_at": "<string>",
  "paciente_iniciales": "<string>",
  "paciente_edad": 123,
  "producto_sospechoso": "<string>",
  "descripcion_evento": "<string>",
  "productos": [
    {}
  ],
  "concomitantes": [
    {}
  ],
  "seguimientos": [
    {}
  ],
  "eventos": [
    {}
  ]
}

Endpoint

POST /api/v1/icsr

Authentication

Requires permission: icsr:create

Request Body

Required Fields

paciente_iniciales
string
required
Patient initials (e.g., “JD” for John Doe)
paciente_edad
integer
required
Patient age in years
paciente_sexo
string
required
Patient sex: “M” (male), “F” (female), or “O” (other)
reportante_nombre
string
required
Name of the person reporting the adverse event
producto_sospechoso
string
required
Name of the suspected product causing the adverse event
descripcion_evento
string
required
Detailed narrative description of the adverse event

Patient Information

paciente_peso
number
Patient weight in kilograms
paciente_dni
string
Patient identification document number. Aliases: dni, doc_identidad, documento_identidad
paciente_fecha_nacimiento
string
Patient date of birth (ISO format: YYYY-MM-DD)
paciente_grupo_etareo
string
Age group classification (e.g., “Adulto”, “Pediátrico”, “Geriátrico”)
paciente_diagnostico_principal
string
Primary medical diagnosis
paciente_cie10
string
ICD-10 diagnosis code
paciente_comorbilidades
string
Comorbidities and relevant medical history
paciente_gestacion_meses_raw
string
Pregnancy status in months. Accepts numeric values, “No aplica”, or “Desconocido”

Reporter Information

reportante_contacto
string
Reporter contact information (phone or email). System will auto-detect and populate reportante_email or reportante_telefono fields.
reportante_email
string
Reporter email address
reportante_telefono
string
Reporter phone number
reportante_ocupacion
string
Reporter occupation/profession

Event Information

fecha_inicio_evento
string
Date when the adverse event started. Aliases: fecha_inicio, ea_fecha_inicio, evento_fecha_inicio
fecha_fin_evento
string
Date when the adverse event resolved. Aliases: fecha_fin, ea_fecha_fin, evento_fecha_fin
gravedad
string
Event severity classification (e.g., “Grave”, “No grave”)
ea_causalidad
string
Causality assessment. Alias: causalidad
ea_desenlace
string
Event outcome. Alias: desenlace. Common values: “Recuperado”, “En recuperación”, “Secuelas”, “Muerte”, “Desconocido”
ea_grave_solo_ram
boolean
Whether the event is serious only due to the adverse reaction

Case Metadata

estado
string
Case status (e.g., “Pendiente”, “En progreso”, “Cerrado”)
numero
string
Case number or identifier
tipo_notificacion
string
Notification type (e.g., “Inicial”, “Seguimiento”)
fuente_notificacion
string
Source of notification (e.g., “Profesional de salud”, “Paciente”, “Farmacéutico”)
doc_fuente_url
string
URL to source document or attachment
codigo_interno_lab
string
Laboratory internal code
cenafyt_codigo
string
CENAFYT reference code

Product Arrays

productos
array
Array of suspected products. Each product includes:
concomitantes
array
Array of concomitant medications. Each entry includes:
seguimientos
array
Array of followup entries. Alias: seguimiento, seguimiento_items. Each entry includes:

Timeline Fields

lt_fecha_recibido_colaborador
string
Date received by collaborator
lt_fecha_recibido_ufv
string
Date received by pharmacovigilance unit (UFV)
lt_dias_colab_ufv
integer
Days between collaborator receipt and UFV receipt
lt_fecha_limite_digemid
string
DIGEMID submission deadline. Alias: lt_fecha_limite_envio_digemid
lt_fecha_envio_digemid
string
Actual DIGEMID submission date
lt_dias_ufv_digemid
integer
Days between UFV receipt and DIGEMID submission
lt_comentarios_no_sometimiento
string
Comments if not submitted to DIGEMID
lt_problemas_adicionales
string
Additional timeline problems or notes

Quality Control

qc_realizado_por
string
QC performed by (user/reviewer name). Alias: cc_realizado_por
qc_fecha
string
QC date
revision_senales
string
Signal detection review notes
comentarios_adicionales
string
Additional comments

Followup Settings

seg_contactar_paciente
boolean
Whether patient wishes to be contacted. Alias: paciente_desea_contacto
seg_adicional_fecha
string
Additional followup date
seg_adicional_comentarios
string
Additional followup comments
seg_adicional_estado
string
Additional followup status

Response

id
integer
Unique ICSR identifier assigned by the system
created_at
string
Timestamp when the case was created
paciente_iniciales
string
Patient initials
paciente_edad
integer
Patient age
producto_sospechoso
string
Suspected product
descripcion_evento
string
Event description
productos
array
Array of product objects with id field added
concomitantes
array
Array of concomitant medication objects with id field added
seguimientos
array
Array of followup objects with id field added
eventos
array
Array of adverse event objects (initially empty for new cases)

Behavior

Auto-Processing

When a new ICSR is created:
  1. Contact Auto-Detection: If reportante_contacto contains ”@”, it’s copied to reportante_email. Otherwise, it’s copied to reportante_telefono.
  2. Internal Notifications: Configured users receive email notification based on environment variables:
    • ICSR_NOTIFY_CARGOS - Job titles to notify
    • ICSR_NOTIFY_AREAS - Department areas to notify
    • ICSR_NOTIFY_EMAILS - Additional email addresses
  3. Missing Data Auto-Reply: If reporter email is available and required fields are missing, an automatic followup email is sent requesting additional information.
  4. Duplicate Detection: Background duplicate detection runs automatically comparing against existing cases.

Validation

The API validates:
  • Required fields are present
  • Data types match schema
  • Date formats are ISO-8601 (YYYY-MM-DD)
  • Nested arrays contain valid objects
  • Field lengths don’t exceed limits

Example Request

{
  "paciente_iniciales": "JD",
  "paciente_edad": 45,
  "paciente_sexo": "M",
  "paciente_peso": 72.5,
  "paciente_dni": "12345678",
  "paciente_fecha_nacimiento": "1978-03-15",
  "reportante_nombre": "Dr. Maria Garcia",
  "reportante_email": "[email protected]",
  "reportante_ocupacion": "Médico",
  "producto_sospechoso": "Amoxicilina 500mg",
  "descripcion_evento": "Paciente desarrolló rash eritematoso generalizado 3 días después de iniciar tratamiento con amoxicilina para infección respiratoria. El rash fue pruriginoso y se resolvió 48 horas después de suspender el antibiótico.",
  "fecha_inicio_evento": "2024-01-15",
  "fecha_fin_evento": "2024-01-18",
  "gravedad": "No grave",
  "ea_causalidad": "Probable",
  "ea_desenlace": "Recuperado",
  "estado": "Pendiente",
  "tipo_notificacion": "Inicial",
  "fuente_notificacion": "Profesional de salud",
  "productos": [
    {
      "nombre_producto": "Amoxicilina",
      "ifa": "Amoxicilina trihidratada",
      "forma_farmaceutica": "Tableta",
      "laboratorio_pais": "Laboratorio ABC - Perú",
      "registro_sanitario": "EE-123456",
      "nro_lote": "LOT2024-001",
      "via_administracion": "Oral",
      "dosis_frecuencia": "500mg cada 8 horas",
      "fecha_inicio": "2024-01-12",
      "fecha_fin": "2024-01-16",
      "desaparecio_al_suspender": "si",
      "reaparecio_reexposicion": "no_aplica"
    }
  ],
  "concomitantes": [
    {
      "nombre_producto": "Paracetamol",
      "dosis_frecuencia": "500mg PRN",
      "via_administracion": "Oral",
      "motivo_prescripcion": "Fiebre"
    }
  ]
}

Example Response

{
  "id": 1234,
  "created_at": "2024-01-20T10:30:00Z",
  "paciente_iniciales": "JD",
  "paciente_edad": 45,
  "paciente_sexo": "M",
  "paciente_peso": 72.5,
  "paciente_dni": "12345678",
  "paciente_fecha_nacimiento": "1978-03-15",
  "reportante_nombre": "Dr. Maria Garcia",
  "reportante_email": "[email protected]",
  "reportante_ocupacion": "Médico",
  "producto_sospechoso": "Amoxicilina 500mg",
  "descripcion_evento": "Paciente desarrolló rash eritematoso generalizado...",
  "fecha_inicio_evento": "2024-01-15",
  "fecha_fin_evento": "2024-01-18",
  "gravedad": "No grave",
  "ea_causalidad": "Probable",
  "ea_desenlace": "Recuperado",
  "estado": "Pendiente",
  "tipo_notificacion": "Inicial",
  "fuente_notificacion": "Profesional de salud",
  "productos": [
    {
      "id": 5678,
      "nombre_producto": "Amoxicilina",
      "ifa": "Amoxicilina trihidratada",
      "forma_farmaceutica": "Tableta",
      "laboratorio_pais": "Laboratorio ABC - Perú",
      "registro_sanitario": "EE-123456",
      "nro_lote": "LOT2024-001",
      "via_administracion": "Oral",
      "dosis_frecuencia": "500mg cada 8 horas",
      "fecha_inicio": "2024-01-12",
      "fecha_fin": "2024-01-16",
      "desaparecio_al_suspender": "si",
      "reaparecio_reexposicion": "no_aplica"
    }
  ],
  "concomitantes": [
    {
      "id": 9012,
      "nombre_producto": "Paracetamol",
      "dosis_frecuencia": "500mg PRN",
      "via_administracion": "Oral",
      "motivo_prescripcion": "Fiebre"
    }
  ],
  "seguimientos": [],
  "eventos": []
}

Error Responses

400 Bad Request

{
  "detail": [
    {
      "loc": ["body", "paciente_iniciales"],
      "msg": "field required",
      "type": "value_error.missing"
    }
  ]
}

401 Unauthorized

{
  "detail": "Not authenticated"
}

403 Forbidden

{
  "detail": "Permission denied: icsr:create required"
}

Notes

  • The system automatically creates audit log entries for case creation
  • Duplicate detection runs asynchronously and doesn’t block case creation
  • Internal codes can be auto-generated using /api/v1/icsr/codigo-interno/next
  • Product registration data is automatically enriched from the product catalog if registro_sanitario matches an existing product

Build docs developers (and LLMs) love