Skip to main content
The Activity Service provides comprehensive tracking of system activities including appointments, patient records, clinical documents, and user actions. It supports filtering, pagination, statistics, and automatic cleanup.

Methods

getRecentActivities

Retrieve recent activities with pagination.
activityService.getRecentActivities(
  limit: number = 10,
  offset: number = 0
): Promise<Activity[]>
limit
number
default:10
Maximum number of activities to retrieve
offset
number
default:0
Number of activities to skip (for pagination)
Returns: Array of activities ordered by creation date (most recent first). Example:
import { api } from '../lib/api';

// Get first 20 activities
const activities = await api.activities.getRecentActivities(20, 0);

// Get next 20 activities
const moreActivities = await api.activities.getRecentActivities(20, 20);
Business unit filtering: Automatically filters by the current user’s business unit (idbu).

getFilteredActivities

Retrieve activities with advanced filtering.
activityService.getFilteredActivities(
  filters: ActivityFilters,
  limit: number = 50,
  offset: number = 0
): Promise<Activity[]>
filters
object
required
Filter criteria
filters.tipos
ActivityType[]
Array of activity types to include
filters.fechaInicio
string
Start date (ISO 8601 format)
filters.fechaFin
string
End date (ISO 8601 format)
filters.idUsuario
string
Filter by user ID
filters.idPaciente
string
Filter by patient ID
filters.esCritico
boolean
Filter critical activities only
filters.busqueda
string
Search term (searches description and patient name)
limit
number
default:50
Maximum number of results
offset
number
default:0
Number of results to skip
Example:
import { api } from '../lib/api';

// Get all appointment activities for a specific patient
const filters = {
  tipos: ['cita_nueva', 'cita_actualizada', 'cita_cancelada'],
  idPaciente: 'abc-123-def',
  fechaInicio: '2024-01-01',
  fechaFin: '2024-03-31'
};

const activities = await api.activities.getFilteredActivities(filters);
Search functionality: The busqueda parameter searches across:
  • descripcion (activity description)
  • descripcion_detalle (detailed description)
  • nombre_paciente (patient name)

getActivitiesByType

Retrieve activities of a specific type.
activityService.getActivitiesByType(
  tipo: ActivityType,
  limit: number = 20
): Promise<Activity[]>
tipo
ActivityType
required
Activity type to filter
limit
number
default:20
Maximum number of results
Activity types:
  • 'cita_nueva' - New appointment created
  • 'cita_actualizada' - Appointment updated
  • 'cita_cancelada' - Appointment cancelled
  • 'cita_completada' - Appointment completed
  • 'paciente_nuevo' - New patient registered
  • 'paciente_actualizado' - Patient record updated
  • 'receta' - Prescription created
  • 'historia_clinica' - Clinical history updated
  • 'evolucion' - Clinical evolution added
  • 'documento' - Document uploaded
  • 'sistema' - System activity
Example:
import { api } from '../lib/api';

// Get all new patient registrations
const newPatients = await api.activities.getActivitiesByType('paciente_nuevo', 50);
console.log(`${newPatients.length} new patients registered`);

getActivitiesByPatient

Retrieve all activities for a specific patient.
activityService.getActivitiesByPatient(
  patientId: string,
  limit: number = 20
): Promise<Activity[]>
patientId
string
required
Patient UUID
limit
number
default:20
Maximum number of results
Example:
import { api } from '../lib/api';

const patientActivities = await api.activities.getActivitiesByPatient(
  selectedPatient.id
);

getActivitiesByDateRange

Retrieve activities within a date range.
activityService.getActivitiesByDateRange(
  startDate: string,
  endDate: string,
  limit: number = 100
): Promise<Activity[]>
startDate
string
required
Start date (ISO 8601 format)
endDate
string
required
End date (ISO 8601 format)
limit
number
default:100
Maximum number of results
Example:
import { api } from '../lib/api';

// Get all activities for March 2024
const activities = await api.activities.getActivitiesByDateRange(
  '2024-03-01T00:00:00Z',
  '2024-03-31T23:59:59Z'
);

getActivityStats

Get activity statistics for a time period.
activityService.getActivityStats(
  period: 'day' | 'week' | 'month' = 'day'
): Promise<ActivityStats>
period
'day' | 'week' | 'month'
default:"'day'"
Time period for statistics
stats
object
totalHoy
number
Total activities today
totalSemana
number
Total activities this week
totalMes
number
Total activities this month
porTipo
object
Activity counts by type
cita_nueva
number
New appointments
cita_actualizada
number
Updated appointments
cita_cancelada
number
Cancelled appointments
paciente_nuevo
number
New patients
receta
number
Prescriptions
documento
number
Documents uploaded
usuarioMasActivo
object
Most active user
id
string
User ID
nombre
string
User name
cantidad
number
Activity count
Example:
import { api } from '../lib/api';

// Get daily statistics
const dailyStats = await api.activities.getActivityStats('day');
console.log(`Today: ${dailyStats.totalHoy} activities`);
console.log(`Most active: ${dailyStats.usuarioMasActivo?.nombre}`);

// Get monthly statistics
const monthlyStats = await api.activities.getActivityStats('month');
console.log(`This month: ${monthlyStats.totalMes} activities`);
console.log(`New patients: ${monthlyStats.porTipo.paciente_nuevo}`);

createManualActivity

Manually create an activity record.
activityService.createManualActivity(
  payload: CreateActivityPayload
): Promise<Activity>
payload
object
required
Activity data
payload.tipo_actividad
ActivityType
required
Activity type
payload.descripcion
string
required
Short description
payload.descripcion_detalle
string
Detailed description
payload.id_paciente
string
Related patient ID
payload.nombre_paciente
string
Patient name (for display)
payload.metadatos
object
Additional metadata (JSON)
payload.es_critico
boolean
default:false
Whether activity is critical
payload.icono
string
default:"'Activity'"
Icon name
payload.color
string
default:"'#3B82F6'"
Color hex code
Example:
import { api } from '../lib/api';

const activity = await api.activities.createManualActivity({
  tipo_actividad: 'sistema',
  descripcion: 'Database backup completed',
  descripcion_detalle: 'Automatic daily backup finished successfully',
  es_critico: false,
  icono: 'Database',
  color: '#10B981',
  metadatos: {
    backup_size: '2.4 GB',
    duration: '3m 24s'
  }
});
Auto-populated fields:
  • id_usuario - Set from current session
  • idbu - Set from current business unit

countActivities

Count total activities with optional filters.
activityService.countActivities(
  filters?: ActivityFilters
): Promise<number>
filters
ActivityFilters
Optional filter criteria (same as getFilteredActivities)
Example:
import { api } from '../lib/api';

// Count all activities
const total = await api.activities.countActivities();

// Count critical activities
const critical = await api.activities.countActivities({ esCritico: true });

// Count activities for a patient
const patientCount = await api.activities.countActivities({
  idPaciente: 'abc-123-def'
});

cleanOldActivities

Clean up old activities based on retention settings.
activityService.cleanOldActivities(): Promise<Array<{
  idbu: string;
  deleted: number;
}>>
Returns: Array of objects showing how many records were deleted per business unit. Example:
import { api } from '../lib/api';

const results = await api.activities.cleanOldActivities();
results.forEach(result => {
  console.log(`BU ${result.idbu}: Deleted ${result.deleted} old activities`);
});
Note: This calls the fn_limpiar_actividades_antiguas RPC function, which respects the dias_retencion_actividad setting for each business unit.

Configuration methods

getActivityConfig

Get activity configuration for the current business unit.
activityService.getActivityConfig(): Promise<{
  diasRetencion: number;
  notificacionesRealtime: boolean;
  exportarActividades: boolean;
}>
Example:
const config = await api.activities.getActivityConfig();
console.log(`Retention: ${config.diasRetencion} days`);
console.log(`Realtime: ${config.notificacionesRealtime}`);

updateActivityConfig

Update activity configuration settings.
activityService.updateActivityConfig(config: {
  diasRetencion?: number;
  notificacionesRealtime?: boolean;
  exportarActividades?: boolean;
}): Promise<void>
config
object
required
Configuration to update
config.diasRetencion
number
Days to retain activities before cleanup
config.notificacionesRealtime
boolean
Enable real-time activity notifications
config.exportarActividades
boolean
Allow activity export
Example:
import { api } from '../lib/api';

// Update retention period to 90 days
await api.activities.updateActivityConfig({
  diasRetencion: 90
});

// Enable realtime notifications
await api.activities.updateActivityConfig({
  notificacionesRealtime: true
});

Type definitions

type ActivityType =
  | 'cita_nueva'
  | 'cita_actualizada'
  | 'cita_cancelada'
  | 'cita_completada'
  | 'paciente_nuevo'
  | 'paciente_actualizado'
  | 'receta'
  | 'historia_clinica'
  | 'evolucion'
  | 'documento'
  | 'sistema';

interface Activity {
  id: string;
  created_at: string;
  tipo_actividad: ActivityType;
  descripcion: string;
  descripcion_detalle?: string;
  id_usuario?: string;
  nombre_usuario?: string;
  id_paciente?: string;
  nombre_paciente?: string;
  idbu: string;
  metadatos?: Record<string, any>;
  es_critico: boolean;
  icono: string;
  color: string;
}

interface ActivityFilters {
  tipos?: ActivityType[];
  fechaInicio?: string;
  fechaFin?: string;
  idUsuario?: string;
  idPaciente?: string;
  esCritico?: boolean;
  busqueda?: string;
}

interface ActivityStats {
  totalHoy: number;
  totalSemana: number;
  totalMes: number;
  porTipo: Record<ActivityType, number>;
  usuarioMasActivo?: {
    id: string;
    nombre: string;
    cantidad: number;
  };
}

interface CreateActivityPayload {
  tipo_actividad: ActivityType;
  descripcion: string;
  descripcion_detalle?: string;
  id_paciente?: string;
  nombre_paciente?: string;
  metadatos?: Record<string, any>;
  es_critico?: boolean;
  icono?: string;
  color?: string;
}

Source location

~/workspace/source/src/services/activityService.ts

Build docs developers (and LLMs) love