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[]>
Maximum number of activities to retrieve
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[]>
Filter criteriaArray of activity types to include
Start date (ISO 8601 format)
End date (ISO 8601 format)
Filter critical activities only
Search term (searches description and patient name)
Maximum number of results
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[]>
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[]>
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[]>
Start date (ISO 8601 format)
End date (ISO 8601 format)
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
Total activities this week
Total activities this month
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>
Activity datapayload.descripcion_detalle
Detailed description
Patient name (for display)
Additional metadata (JSON)
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>
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>
Configuration to updateDays to retain activities before cleanup
config.notificacionesRealtime
Enable real-time activity notifications
config.exportarActividades
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