Aplicacion interna HRIS para LINHER con integracion de solo lectura a Microsip.
frontend/: React + Vite (workspace UI).backend/: Node.js + Express + MySQL (API principal, auth, RBAC, sincronizacion).microsip-bridge/: servicio aislado que consulta Microsip (mock o DLL) y expone datasets normalizados.database/: esquema canonico, seeds y migraciones.
- El backend invoca al bridge con API key y
x-request-id. - El bridge consulta Microsip y retorna colecciones normalizadas por dataset.
MicrosipSyncServicehace upsert en tablasext_microsip_*y mantieneemployee_microsip_links.- Las APIs de perfil (
/api/me/profile,/api/employees/:id/profile-360) leen snapshots locales en MySQL. - El frontend renderiza vistas de solo lectura (
Mi Perfil 360yPerfil de Colaborador).
PORT=5000DB_HOST,DB_USER,DB_PASSWORD,DB_NAMEJWT_SECRET,JWT_REFRESH_SECRETMICROSIP_CONNECTOR_ENABLED=true|falseMICROSIP_CONNECTOR_URL=http://localhost:5101MICROSIP_CONNECTOR_API_KEY=<api-key>MICROSIP_SYNC_TIMEOUT_MS=20000MICROSIP_PAYROLL_RETENTION_MONTHS=24(0desactiva limpieza historica)MICROSIP_CONNECTOR_HEALTH_PATH=/healthMICROSIP_CONNECTOR_DEPARTMENTS_PATH=/exports/departmentsMICROSIP_CONNECTOR_JOB_TITLES_PATH=/exports/job-titlesMICROSIP_CONNECTOR_EMPLOYEES_PATH=/exports/employeesMICROSIP_CONNECTOR_COUNTRIES_PATH=/exports/countriesMICROSIP_CONNECTOR_STATES_PATH=/exports/statesMICROSIP_CONNECTOR_CITIES_PATH=/exports/citiesMICROSIP_CONNECTOR_PAYROLL_PAYMENTS_PATH=/exports/payroll-payments
PORT=5101MICROSIP_DATA_MODE=mock|dllMICROSIP_CONNECTOR_REQUIRE_API_KEY=true|falseMICROSIP_CONNECTOR_API_KEY=<api-key>MICROSIP_DLL_PATH=<ruta_a_ApiMicrosip.dll>MICROSIP_DATABASE_NAME=<ruta_o_alias_bd_firebird>MICROSIP_DATABASE_USER=<usuario_firebird>MICROSIP_DATABASE_PASSWORD=<password_firebird>
El adaptador PowerShell usa estas variables:
MICROSIP_SQL_DEPARTMENTSMICROSIP_SQL_JOB_TITLESMICROSIP_SQL_EMPLOYEESMICROSIP_SQL_COUNTRIESMICROSIP_SQL_STATESMICROSIP_SQL_CITIESMICROSIP_SQL_PAYROLL_PAYMENTS
Y mapeo opcional de aliases por dataset:
MICROSIP_FIELDS_DEPARTMENTSMICROSIP_FIELDS_JOB_TITLESMICROSIP_FIELDS_EMPLOYEESMICROSIP_FIELDS_COUNTRIESMICROSIP_FIELDS_STATESMICROSIP_FIELDS_CITIESMICROSIP_FIELDS_PAYROLL_PAYMENTS
Formato de mapeo soportado: target:source,target2:source2.
POST /api/admin/microsip/sync con sync_type:
fullprofile_fulllocationsdepartmentsjob_titlesemployeespayroll
Orden efectivo para full/profile_full:
locations -> departments -> job_titles -> employees -> payroll
GET /api/me/profileGET /api/me/payroll-payments?limit=&date_from=&date_to=GET /api/employees/:id/profile-360GET /api/employees/:id/payroll-payments?limit=&date_from=&date_to=
GET /api/admin/microsip/healthGET /api/admin/microsip/sync-logs?limit=GET /api/admin/microsip/employees?limit=POST /api/admin/microsip/syncPOST /api/admin/microsip/reconcile-links
- La retencion se controla con
MICROSIP_PAYROLL_RETENTION_MONTHS. - Valor por defecto recomendado:
24. - Valor
0: no se elimina historial. - La limpieza se ejecuta al final de cada sincronizacion que incluya dataset
payroll.
EMPLEADO:view_profile_self,view_payroll_self(propio).SUPERVISOR: perfil de equipo en modo resumen (sin datos sensibles).RRHH: perfil y pagos completos de cualquier empleado.ADMIN: acceso completo.RECLUTADOR: sin acceso a datos administrativos de perfil/pagos.
- Verifica
Authorization: Bearer <token>en llamadas a/api/*. - Confirma que
GET /api/auth/meresponde usuario activo.
- Revisa que bridge este arriba (
GET http://localhost:5101/health). - Valida
MICROSIP_CONNECTOR_API_KEYigual en backend y bridge. - Revisa
MICROSIP_CONNECTOR_URLy puertos.
- El empleado interno aun no tiene enlace en
employee_microsip_links. - Ejecuta sync de
employeesofull/profile_fully confirmaemployee_numbercontraemployees.internal_id.
- Verifica SQL del dataset en
MICROSIP_SQL_*. - Revisa aliases en
MICROSIP_FIELDS_*. - Confirma que la conexion Firebird y la ruta de BD sean correctas.
npm run dev(backend + frontend)npm run dev:full(backend + frontend + bridge)npm run lintnpm run build --prefix frontend
database/migration.sql: migracion incremental idempotente para bases existentes.database/reset_microsip_data.sql: limpia snapshots/extensiones de Microsip para reiniciar sincronizacion sin borrar usuarios/roles.