← el documento de integración
Catalizadora · TN GlobalLink

El permiso para escribir citas en la agenda del vendedor

GlobalLink ya lee dbo.Tareas y no ofrece un horario ocupado. Lo que falta es el inverso: cuando un prospecto reserva, esa fila tiene que existir en su sistema. Este pedido es sólo el calendario. El write-back de prospectos (Clientes, Contactos, Servicios, Propuestas) sigue en el A1 y no se toca aquí.

13 de septiembre de 2026 · para el equipo de base de datos y de operación de Truly Nolen International · el A1.2 no se manda a firma hasta que nombren el tipo de tarea

0 Lo que hay que hacer ahora

Sin esto no se escribe una sola cita

Correr el GRANT de abajo en TrulyGestion y responder las cuatro líneas del cierre. El usuario user_globallink_writer ya existe: no hay que crear login ni abrir firewall. La IP no cambia: 178.156.243.235/32.

1 · DBA · el GRANT

El mismo candado que ya tienen: SELECT e INSERT sobre dbo.Tareas. UPDATE y DELETE denegados. Primero en la base de pruebas.

2 · operación · el tipo

Qué IdTipoTarea es una cita agendada por GlobalLink. No lo inventamos. El catálogo tiene once tipos y ninguno encaja solo.

3 · confirmación

Automatica = true es cola del sistema (no ocupa hueco). Las horas son las de la oficina, con la fecha centinela 1900-01-01.

4 · al reprogramar

Fila nueva + ustedes cierran la anterior. No podemos mover ni borrar: el DENY es a propósito.

1 El GRANT, listo para copiar

El usuario ya inserta en las cuatro tablas del A1. dbo.Tareas no está en esa lista, y la cláusula 2.5(b) del A1 prohíbe insertar en cualquier otra «salvo addendum adicional firmado». Este GRANT es la mitad técnica; el papel (A1.2) lo redactamos cuando contesten el punto 2.

/* Primero en TrulyGestion. Las productivas, cuando abran. */
USE [TrulyGestion];
GRANT SELECT, INSERT ON dbo.Tareas TO [user_globallink_writer];
DENY  UPDATE, DELETE ON dbo.Tareas TO [user_globallink_writer];

-- Cuando abran producción, lo mismo en Truly, TrulyNew y TrulyRuso.

Verificación, conectados como ese usuario. Tienen que salir dos filas concedidas y dos denegadas:

SELECT o.name AS tabla, p.permission_name, p.state_desc
FROM   sys.database_permissions p
JOIN   sys.objects o ON o.object_id = p.major_id
WHERE  p.grantee_principal_id = DATABASE_PRINCIPAL_ID('user_globallink_writer')
  AND    o.name = 'Tareas'
ORDER BY p.permission_name;

-- prueba negativa: esto TIENE que fallar con error 229
UPDATE dbo.Tareas SET Observaciones = Observaciones WHERE 1 = 0;

2 Qué ya está hecho de nuestro lado

27columnas en dbo.Tareas en origen
19las que ahora guarda el espejo (eran 14)
98,4 %2.707.868 de 2.752.189 filas tienen hora
0oficinas sin zona horaria

Hasta el 12 de septiembre el espejo guardaba 14 columnas: el día, el vendedor, el tipo, el texto y si estaba hecha. Faltaban las cinco que hacen de eso una agenda: HoraInicio, HoraFin, Automatica, Superpuesta e IdNivel. Esas cinco ya están. No copiamos las 27 —Nuevo, Marca, Sel y las de corrección no sirven para agendar—.

La lectura ya descuenta lo ocupado

Si el vendedor tiene un tramo escrito a mano, GlobalLink no ofrece esa hora. Lo que genera su sistema (cola de control de calidad y de renovación) se ve y no bloquea un hueco. Lo que falta es el INSERT cuando el prospecto reserva.

3 El tipo de tarea: esto lo deciden ustedes

El catálogo AuxTiposTareas tiene once tipos. Medido sobre las 2,7 millones de tareas del espejo:

IdQué esDuración modaAutomáticasFilas
1Llamar por teléfono60 min91 %1.705.731
5Otro60 min0 %357.095
26Realizar supervisión120 min90 %254.137
8Entrevista120 min55 %120.015
22Seguimiento de cliente potencial60 min89 %112.573
15Entregar propuesta30 min0 %6.010

El 8 («Entrevista») suena al natural, pero más de la mitad de sus filas las genera el sistema: meter ahí las citas de GlobalLink las mezcla con trabajo automático. Los únicos dos enteramente humanos son el 5 y el 15, y ninguno describe una cita con un prospecto.

Hay un IdTipoTarea = 24 con una fila en sus datos, que el catálogo no nombra. Puede ser exactamente el que falta. Esto lo deciden ustedes: un tipo que ya exista, o uno nuevo en AuxTiposTareas.

4 Las 27 columnas · qué escribimos y qué no

Una cita de GlobalLink es una fila nueva en dbo.Tareas, y nada más. No escribimos una tarea por cada avance del prospecto: las etapas siguen en dbo.Contactos, como el A1 ya autoriza. La cita no es Automatica: la acordó una persona con el prospecto. Si a esa hora el vendedor ya tiene algo ocupado, no escribimos en ningún lado.

Lo que escribiríamos · 13 columnas

ColumnaQué escribimos
IdEmpleadoEl vendedor. El mismo que ya viaja en el token de acceso.
IdClienteEl cliente o prospecto, si ya existe. Si todavía no, NULL.
IdTipoTareaEl que ustedes indiquen en el punto 2. Hasta que no esté, no hay INSERT.
TareaEl texto de la cita (quién, con quién, de qué).
FechaTareaEl día acordado.
HoraInicio · HoraFinHora local de la oficina, con la convención 1900-01-01 + la hora.
Automaticafalse — la cita no la generó un proceso.
Superpuestafalse — no ofrecemos un horario ocupado.
Realizadafalse — sólo ustedes marcan una tarea como hecha.
ObservacionesLa marca GLOBALLINK:{id_cita}, para no insertar dos veces la misma.
IdUsuarioCreacion · IdUsuarioActualEl IdEmpleado del vendedor. El mismo criterio que el A1.1.

Lo que no tocamos · las otras 14

ColumnaPor qué no
IdTareaLa genera su identity. Nosotros no la inventamos.
IdTarea_OriginalVacía en el origen casi siempre. No la usamos.
Nuevo · Marca · SelMarcas internas suyas. Irrelevantes para una cita.
IdServicio · IdReclamoUna cita con un prospecto todavía no tiene servicio ni reclamo. Van en NULL.
IdNivel · IdSubTipoTareaNo las inventamos. Si el tipo que nombren las exige, díganos el valor.
TareaCorregida · FechaTareaCorregidaCorrecciones suyas. Quedan vacías.
FechaActualLa pone su sistema al tocar la fila. No la escribimos.
FechaCreacionEn el origen suele ir vacía. No la rellenamos.
upsize_tsLa mueve el motor de SQL Server. No se escribe a mano.

Si alguna de estas, en su operación, no puede ir vacía, díganos cuál y qué valor poner. Hasta entonces, NULL.

5 Cómo contestarnos · cuatro líneas

  1. El GRANT. ¿Corrido en TrulyGestion? (sí / no). Las productivas, cuando abran.
  2. El tipo. IdTipoTarea = ___ para una cita de GlobalLink. Si hay que crear la fila en AuxTiposTareas, el nombre en español, inglés y portugués.
  3. La lectura. ¿Automatica y el huso local de la oficina son como los describimos? (sí / la regla es otra: ___).
  4. Al reprogramar. ¿Aceptan fila nueva + ustedes cierran la anterior? (sí / prefieren: ___).
El A1.2 no se manda todavía

El addendum que la cláusula 2.5(b) pide para esta tabla lo redactamos con esas cuatro respuestas y se los mandamos a firma. Mandarlo antes obligaría a escribir en el papel un tipo que nos inventamos. Hasta que existan el GRANT, el tipo y el A1.2 firmado, el programa no emite el INSERT.