Skip to main content

List IPS Reports

GET /api/v1/ips?limit=50&offset=0&estado=borrador&producto=123
Authorization: Bearer <token>

Query Parameters

limit
integer
default:"50"
Number of reports to return (1-200)
offset
integer
default:"0"
Number of reports to skip for pagination
estado
string
Filter by report state: borrador, validado, or aprobado
producto
integer
Filter by product ID (producto_id)

Response

array
array<IPSReportOut>
List of IPS reports with product details and case counts
Response Example
[
  {
    "id": 123,
    "producto_id": 456,
    "producto": {
      "id": 456,
      "nombre": "PARACETAMOL 500MG TABLETAS",
      "principio_activo": "PARACETAMOL",
      "forma_farmaceutica": "TABLETAS",
      "registro_sanitario": "2021-123456",
      "fecha_autorizacion": "2021-03-15",
      "created_at": "2024-01-01T00:00:00Z",
      "updated_at": "2024-01-01T00:00:00Z"
    },
    "periodo_inicio": "2024-01-01",
    "periodo_fin": "2024-12-31",
    "version": 1,
    "estado": "borrador",
    "unidades_comercializadas": 50000,
    "lotes_distribuidos": 25,
    "casos": 12,
    "created_at": "2024-03-15T10:30:00Z",
    "updated_at": "2024-03-15T14:20:00Z"
  }
]

Get Single Report

GET /api/v1/ips/123
Authorization: Bearer <token>

Path Parameters

report_id
integer
required
ID of the IPS report to retrieve

Response

id
integer
Report ID
producto_id
integer
Associated product ID
producto
object
Full product details (IPSProducto)
periodo_inicio
date
Report period start date (YYYY-MM-DD)
periodo_fin
date
Report period end date (YYYY-MM-DD)
version
integer
Report version number
estado
string
Report state: borrador, validado, or aprobado
unidades_comercializadas
integer
Number of units commercialized during period
casos
integer
Number of adverse event cases in this period

Create IPS Report

POST /api/v1/ips
Authorization: Bearer <token>
Content-Type: application/json

{
  "producto_id": 456,
  "periodo_inicio": "2024-01-01",
  "periodo_fin": "2024-12-31",
  "version": 1,
  "unidades_comercializadas": 50000
}

Request Body (IPSReportCreate)

producto_id
integer
required
ID of the product for this report
periodo_inicio
date
required
Report period start date (YYYY-MM-DD)
periodo_fin
date
required
Report period end date (YYYY-MM-DD). Must be >= periodo_inicio
version
integer
Report version number (defaults to 1 if not provided)
unidades_comercializadas
integer
Number of units commercialized during the period

Optional Extra Payload

You can pass an additional extra object in the request to include sources and KPIs:
{
  "producto_id": 456,
  "periodo_inicio": "2024-01-01",
  "periodo_fin": "2024-12-31",
  "extra": {
    "fuentes": [
      {
        "title": "Safety profile of paracetamol",
        "collection": "PMC",
        "year": 2024,
        "url": "https://pubmed.ncbi.nlm.nih.gov/12345"
      }
    ],
    "kpis": {
      "literaturas_detected": 150,
      "pmc_detected": 80,
      "lilacs_detected": 40,
      "scielo_detected": 30
    }
  }
}

Response

Returns the created report as IPSReportOut with HTTP 200.

Update IPS Report

PUT /api/v1/ips/123
Authorization: Bearer <token>
Content-Type: application/json

{
  "unidades_comercializadas": 55000,
  "eventos_resumen": {
    "total_events": 12,
    "serious_events": 2
  }
}

Path Parameters

report_id
integer
required
ID of the report to update

Request Body (IPSReportUpdate)

All fields are optional. Only include fields you want to update.
periodo_inicio
date
Report period start date
periodo_fin
date
Report period end date
version
integer
Report version number
estado
string
Report state (use workflow endpoints instead)
unidades_vendidas
integer
Units sold during period
lotes_distribuidos
integer
Batches distributed during period
unidades_comercializadas
integer
Units commercialized during period
eventos_resumen
object
Summary of adverse events (JSONB)
senales_detectadas
object
Detected safety signals (JSONB)
acciones_regulatorias
object
Regulatory actions taken (JSONB)
evaluacion_benef_riesgo
object
Benefit-risk evaluation (JSONB)
conclusiones
object
Report conclusions (JSONB)
extras
object
Additional metadata (JSONB)

Business Rules

  • Only reports in borrador state can be updated
  • Approved reports (aprobado) return HTTP 409 Conflict

Delete IPS Report

DELETE /api/v1/ips/123
Authorization: Bearer <token>
Content-Type: application/json

{
  "password": "user_password"
}

Path Parameters

report_id
integer
required
ID of the report to delete

Request Body

password
string
required
Current user’s password for confirmation

Response

{
  "ok": true,
  "deleted_id": 123
}

Business Rules

  • Only borrador (draft) reports can be deleted
  • Requires ips:delete permission
  • User must provide their password for confirmation
  • Returns HTTP 409 if report is not in draft state

Workflow State Transitions

QA Validate Report

Transition from borrador to validado.
POST /api/v1/ips/123/qa-validate
Authorization: Bearer <token>
Requirements:
  • Report must be in borrador state
  • Requires ips:qa permission
  • Returns HTTP 409 if validation conditions not met

Approve Report

Transition from validado to aprobado.
POST /api/v1/ips/123/approve
Authorization: Bearer <token>
Requirements:
  • Report must be in validado state
  • Requires ips:approve permission
  • Once approved, report cannot be edited
  • Returns HTTP 409 if not validated

Export Reports

Export to DOCX

GET /api/v1/ips/123/export/docx
Authorization: Bearer <token>
Response: Binary DOCX file with MIME type application/vnd.openxmlformats-officedocument.wordprocessingml.document

Export to PDF

GET /api/v1/ips/123/export/pdf
Authorization: Bearer <token>
Response: Binary PDF file with MIME type application/pdf

Create Product

Create a new product before creating IPS reports.
POST /api/v1/ips/productos
Authorization: Bearer <token>
Content-Type: application/json

{
  "nombre": "PARACETAMOL 500MG TABLETAS",
  "principio_activo": "PARACETAMOL",
  "forma_farmaceutica": "TABLETAS",
  "presentacion": "CAJA X 20 TABLETAS",
  "via": "ORAL",
  "registro_sanitario": "2021-123456",
  "fecha_autorizacion": "2021-03-15",
  "fabricante": "Laboratorio ABC S.A."
}

Request Body (IPSProductoCreate)

nombre
string
required
Product name with strength and form
principio_activo
string
Active ingredient (IFA)
forma_farmaceutica
string
Pharmaceutical form (e.g., TABLETAS, CAPSULAS, SUSPENSION)
presentacion
string
Presentation/packaging details
via
string
Route of administration (e.g., ORAL, INTRAVENOSA)
registro_sanitario
string
Sanitary registration number
fecha_autorizacion
date
Authorization date (YYYY-MM-DD)
fabricante
string
Manufacturer name

Response

Returns the created product as IPSProductoOut with HTTP 200.

Build docs developers (and LLMs) love