Skip to main content
Version: 1.2.4

Configuración

Cada módulo de SUDOCU tiene su propia configuración, de las cuales la más importante es la del api-server. Hasta el momento son en total 6 archivos:

API-Server#

{
"organismo": {
// Completar el campo código con el número de SAF asignado a la institución
"codigo": 815,
"nombre": "Universidad Nacional de General Sarmiento",
"sigla": "UNGS"
},
"servidor": {
"path": "/",
"host": "0.0.0.0",
"subdomain": "sudocu",
"domain": ".ungs.edu.ar",
"port": "8080",
"seguro": {
"habilitado": true,
"certificados": {
"ca": "/etc/ssl/crt/sudocu.ca-bundle",
"cert": "/etc/ssl/crt/sudocu.crt",
"key": "/etc/ssl/crt/sudocu.key"
},
"cookies": {
// Tiempo de cookies de sesión
// Opciones: [Número] hours | minutes | seconds
"expires": "1 hours"
}
},
"websocket": {
// Configuración librería socket.io
"path": "/socket.io",
"secure": false
},
"environment": "development" // Agrega marca de agua a documentos cerrados con leyenda "test". Opciones: development | production
},
"reverse_proxy": {
// Agrega https a las url
"seguro": true
},
"debug": {
"SQL": false, // Habilita debug para consultas postgres (solo develop)
"verbose": true // Habilita debug de mensajes para cada función
},
"auth": {
// Estrategias de login
"providers": {
"basic": {
"user": "",
"challenge": true,
"realm": ""
},
"local": {
"habilitado": false
},
"twitter": {
"habilitado": false,
"consumerKey": "consumerKey",
"consumerSecret": "consumerSecret"
},
"facebook": {
"habilitado": false,
"clientID": "clientID",
"clientSecret": "clientSecret"
},
"google": {
"habilitado": false,
"clientID": "clientID",
"clientSecret": "clientSecret"
},
"saml": {
"identifier": "uid", // Este valor depende de la versión de saml
"crearSiNoExiste": true, // Crea nuevo usuario en SUDOCU si este no existe
"habilitacionAutomatica": true,
"perfilXDefecto": 1,
"claustroXDefecto": "ND",
"habilitado": true,
"entryPoint": "https://idp.edu.ar/saml2/idp/SSOService.php",
"logoutUrl": "https://idp.edu.ar/saml2/idp/SingleLogoutService.php?ReturnTo=http://sudocu.edu.ar/",
"cert_pem": "" // Permite incorporar certificado en formato .pem para autenticación saml
}
}
},
"repositorios": {
//Repositorio
"documentos": "arai", // Opciones: arai | filesystem
"adjuntos": "filesystem",
"arai": {
"url_notificacion":"https://sudocu.edu.ar/api/integracion/notificacion",
"url": "https://sudocu.edu.ar/docs/rest/backend/documentos",
"username": "documentos",
"id_instalacion": "sudocu"
}
},
"firma": {
//Firma
"modelo_autorizacion": "siu", // Opciones: siu | sudocu
"api": "https://sudocu.edu.ar/docs/rest/backend", // Exclusivo modelo siu
"api_front": "https://sudocu.edu.ar/docs/rest/frontend", // Exclusivo modelo siu
"username": "documentos"
},
"filesystem": {
// Carpeta donde se guardan los adjuntos
"rootFolder": "/app/sudocu-files/"
},
"ungsxt": {
// Conexión con base de datos
"host": "10.0.0.1",
"port": "5435",
"database": "sudocu",
"user": "postgres",
"max": 20, // Cantidad máxima pool de conexión
"idleTimeoutMillis": 30000,
"connectionTimeoutMillis": 2000
},
"nuxeo": {
// Configuración nuxeo en caso de no usar arai
"api": "",
"admin": {
"username": ""
}
},
"carpetas": {
// Path dentro del contenedor para almacenar archivos temporales
"archivos": "/tmp"
},
"alertas": {
// Funcionalidad alertas permite recibir notificaciones con errores producidos en el api-server
"traceinconsole": false, // Oculta el trace
"rawinmessage": false, // Incorpora el error completo convertido en texto en el mensaje de la notificación
"telegram": {
// Habilita mensajes con errores por telegram
"_comment": "https://www.npmjs.com/package/messaging-api-telegram",
"enabled": false,
"token": "",
"chat_id": ""
},
"email": {
// Habilita mensajes con errores por email
"enabled": false,
"dev": {
"_comment": "https://stackoverflow.com/questions/24098461/nodemailer-gmail-what-exactly-is-a-refresh-token-and-how-do-i-get-one",
"destinatario": "",
"client_id": "",
"client_secret": "",
"refresh_token": "",
"auth": {
"user": ""
}
}
}
},
"email": {
// Configuración de funcionalidad seguimientos
"seguimientos": {
"notificaciones": {
// Variables disponibles para asunto y cuerpo: $novedad $tipo $numero $caratula $area_usuario_origen $estado $permalink
"asunto":"$novedad ($tipo)",
"cuerpo":"Tipo: $tipo<br/>Número: $numero <br/>Carátula: $caratula<br/>Area y usuario de origen: $area_usuario_uario_origen <br/>Novedad: $novedad<br/>Estado: $estado<br/>link: $permalink<br/>",
"escenarios": "compartir|enviar", // Opciones: remitir|enviar|solicitar|autorizar|rechazar|compartir
"novedades": {
// Permite especificar el texto para cada evento
"remitir": "Se remite un expediente",
"enviar": "Se envía un documento",
"solicitar": "Solicitud de autorización",
"autorizar": "Solicitud autorizada",
"rechazar": "Rechazo solicitud de autorización",
"compartir": "Se comparte un documento"
}
},
// Configuración servidor de email
"_comment": "Modo puede ser smtp o gmail",
"modo": "gmail",
// smtp
"smtp": {
"remitente": "",
"host": "",
"port": "",
"secure": "",
"auth": {
"user": "",
"pass": ""
}
},
// gmail
"gmail": {
"remitente": "SUDOCU",
"client_id": "",
"client_secret": "",
"refresh_token": "",
"auth": {
"user": ""
}
}
}
},
"redis": {
// Servidor redis
"host": "cache",
"port": 6379,
"db": "UNGSxt",
"ttl": 28800,
"options": {}
},
"pdf": {
// Host servidor pdf
"host": "http://pdf:3000"
},
// Configuración CORS
"whitelist": [
8080,
8181,
8383,
443
],
"documentos": {
"_comment": "recepcion por vista o por edicion",
"recepcion": "edicion", // Opciones: vista | edicion
"google_analytics": {
// Permite incoporar el id para tracking
"habilitado": false,
"id": ""
}
},
"archivos": {
// Herramienta merge archivos pdf
"merge_tool" : "gs", // Opciones: gs o pdftk
"merge_skip_error": false // En caso de recibir errores todo el tiempo
},
"gestion": {
"incorporar_expedientes" : true, // Permite o no incorporar expedientes
"integracion": {
"esencias": [ "contenedor" ] // Tipos de esencia habilitadas en integración
},
"ver_expedientes_enviados": false, // Habilita herramienta vista avanzada para expedientes en vista enviados
"agregar_seguimiento_docs_compartidos": false, // Muestra seguimientos en la vista preview
"vista_rapida_descargar": "ubicacion", // Habilita botón descargar para la vista previa
"mostrar_validez": true, // Habilita toggle en formulario para indicar validez digital o papel
"contar_novedades": false, // Habilita ícono con cantidad de documentos en cada solapa
"archivos_adjuntos" : {
"max_mb": 100, // Tamaño máximo por archivo
"sum_max_mb" : 100, // Tamaño máximo de todos los adjuntos por documento
"max_cant" : 100 // Cantidad máxima de adjuntos por documentos
},
"herramientas_vistas": {
// Habilita herramientas según la vista
"documentos" : {
"anular":true
},
"compartidos" : {
"vista_previa":true
},
"busqueda": {
"compartir": false,
"vista_avanzada": false,
"descargar": false,
"abrir": false
}
},
"fonts": [
//Agrega fuentes en módulo templates pdf de mpc
{
"name": "Oswald=oswald",
"style": "https://fonts.googleapis.com/css2?family=Oswald&display=swap"
}
]
},
"admin": {
// Parámetros módulo admin
"logged_users_refresh_rate": 30,
"notificaciones_delay": 100,
"jobs_timer": "0 */1 * * * *"
},
"imagemin": {
// Parámetros librería imagemin
"width_pixels": 20,
"jpeg_quality": 50 // Permite definir la calidad de los archivos .jpg subidos como adjuntos Opciones: 1 a 100
},
"http-proxy": {
// Librería http-proxy-middleware
// Permite redireccionar request hacia otro servidor
// Ejemplo: http://localhost:3000/api/foo/bar -> http://www.example.org/api/foo/bar
"service": {
"target": "",
"auth": "user:password"
}
},
"secrets": {
// Secrets para modo desarrollo
"auth_providers_basic_password": "integracion",
"auth_admin_basic_password": "admin",
"repositorios_arai_password": "password_arai",
"firma_password": "password_arai",
"db_password": "password_db",
"redis_options_password": "redis",
"nuxeo_admin_password": "Administrator"
}
}

Inicio#

{
"server": {
"host": "",
"port": 0,
"secure": true,
"clusters": false,
"apiUrl": "",
"urlHome": "",
"livereload": 35738,
"urlLogout": ""
},
"cookiesOptions": {
"path":"/",
"domain": "",
"secure": true
},
"crts": {
"ca": "/etc/ssl/crt/sudocu.ca-bundle",
"key": "/etc/ssl/crt/sudocu.key",
"cert": "/etc/ssl/crt/sudocu.crt"
},
"links": {
"gestion": "",
"mpd": "",
"config": "",
}
}

Gestión#

{
"server": {
"path":"/",
"host": "",
"modName": "gestion",
"port": 0,
"secure": true,
"clusters": false,
"apiUrl": "",
"socketUrl": "",
"socketPath": "/socket.io",
"socketSecure": false,
"urlHome": "",
"livereload": 35745,
"contexto": "fr_sudocu_gestion",
"formato_fecha": "dd-MM-yyyy HH:mm",
"modelo_autorizacion": "sudocu"
},
"cookiesOptions": {
"domain": "",
"secure": true
},
"crts": {
"ca": "/etc/ssl/crt/sudocu.ca-bundle",
"cert": "/etc/ssl/crt/sudocu.crt",
"key": "/etc/ssl/crt/sudocu.key"
}
}

MPD#

{
"server": {
"host": "",
"port": 0,
"modName": "mpd",
"secure": true,
"clusters": false,
"apiUrl": "",
"urlHome": "",
"socketUrl": "",
"socketPath": "/socket.io",
"socketSecure": false,
"livereload": 35738
},
"cookiesOptions": {
"domain": "",
"secure": true
},
"crts": {
"ca": "/etc/ssl/crt/sudocu.ca-bundle",
"cert": "/etc/ssl/crt/sudocu.crt",
"key": "/etc/ssl/crt/sudocu.key"
}
}

MPC#

{
"server": {
"host": "",
"port": 0,
"modName": "mpc",
"securePort": 0,
"secure": true,
"clusters": false,
"apiUrl": "",
"urlHome": "",
"socketUrl": "",
"socketPath": "/socket.io",
"socketSecure": false,
"livereload": 35738,
"contexto": "fr_sudocu_mpc"
},
"cookiesOptions": {
"domain": "",
"secure": true
},
"crts": {
"ca": "/etc/ssl/crt/sudocu.ca-bundle",
"cert": "/etc/ssl/crt/sudocu.crt",
"key": "/etc/ssl/crt/sudocu.key"
}
}

Configuración para agregar Fuentes Tipográficas externas.#

Pasos para agregar fuentes a los template de PDF:

  1. En config-api-server.json agregar dentro del key gestion lo siguiente:

    "gestion":{
    "fonts":[
    {
    "name":"Oswald=oswald",
    "style":"https://fonts.googleapis.com/css2?family=Oswald&display=swap"
    }
    ]
    }
  2. En el .yml de deploy agregar en el servicio de pdf el siguiente volumen:

    volumes:
    -./fonts:/usr/share/fonts/truetype/sudocu
  3. En la carpeta del deploy crear la carpeta fonts y por cada fuente que se agrega en el config crear una carpeta y copiar dentro de ella todos los archivos TrueType de la familia que se establezca en la configuración. Por ejemplo para fuentes de google descargar el zip y descomprimirlo dentro de la carpeta de manera que quede:

    /fonts
    -- /Oswald
    ---- /OFL.txt
    ---- /Oswald-Bold.ttf
    ---- /Oswald-ExtraLight.ttf
    ---- /Oswald-Light.ttf
    ---- /Oswald-Medium.ttf
    ---- /Oswald-Regular.ttf
    ---- /Oswald-SemiBold.ttf
    ---- /Oswald-VariableFont_wght.ttf
    ---- /README.txt
  4. Finalmente eliminar stack sudocu y volver a realizar el deploy.

    Caso de fuentes que no son de Google

    En caso de necesitar cargar fuentes que no sean de google, la url colocada en el config-api-server.json tendría que apuntar a un archivo .CSS que tenga las definciones de las fuentes. Si se ingresa a la url mencionada anteriormente https://fonts.googleapis.com/css2?family=Oswald&display=swap se puede observar que devuelve un css con una serie de estilos. En el caso de una fuente no-google se debe replicar lo mismo con una url propia. Existen generadores de font-face online, por ejemplo: https://transfonter.org.

Anonimizar la base de datos#

Se detallan a continuación los scripts para anonimizar documentos, usuarios y personas sin necesidad de instalar librerías externas a postgres:

WITH docs AS (SELECT d.id, d.nro->>'nro' AS nro, d.nro->>'anio' AS anio, dt.nombre_singular FROM sudocu.documentos d
INNER JOIN sudocu.documentos_tipos dt ON d.id_tipo=dt.id)
UPDATE sudocu.documentos SET titulo = docs.nombre_singular || ' nro:' || COALESCE (docs.nro,'#') || '/' || COALESCE (docs.anio, '#'), atributos = '{"contenido": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut fringilla. Suspendisse convallis viverra nunc. Etiam magna. Etiam nunc. Praesent leo nibh, lacinia at, blandit ac, congue eget, nunc. Sed nec dui. Proin tincidunt turpis nec justo. Vivamus gravida interdum elit. Etiam scelerisque. Quisque leo orci, placerat vel, lobortis in, eleifend quis, massa. Pellentesque lobortis. Maecenas pede. Duis tempor ornare pede. Nam accumsan metus sed massa. Praesent dignissim eros id mi. Ut malesuada molestie mauris. Vivamus varius sollicitudin dui. Phasellus dapibus tempor ante. Quisque euismod. Vivamus augue. Praesent aliquet cursus ante. Pellentesque urna. Sed vestibulum faucibus felis. Mauris magna. Vestibulum cursus. Vivamus iaculis. Integer tincidunt dolor sed diam. Quisque consequat convallis eros. Etiam vel lacus a justo dapibus sagittis. Nunc metus eros, laoreet ac, pretium ut, venenatis eu, velit. Curabitur quis nulla a lorem posuere consectetuer. Curabitur arcu. Nullam pulvinar condimentum augue. Nam nec arcu sit amet risus molestie condimentum. Aliquam at nulla. Proin consequat nulla in est. Aliquam varius. Maecenas vel tortor. Curabitur suscipit, massa vel pulvinar commodo, ante risus ullamcorper neque, nec convallis tellus diam ut velit. Sed vehicula dolor at dolor. Praesent ipsum. Nam enim. Nunc id diam id lectus rhoncus tristique. Vestibulum placerat tempor pede. Etiam vitae magna. Pellentesque quam. Maecenas magna. Donec vel massa. Praesent elementum, nunc ut mattis interdum, magna diam congue odio, a suscipit odio leo eget nulla. Sed molestie vestibulum metus. Maecenas elementum auctor mauris. In hac habitasse platea dictumst. Aliquam ultrices, lectus sed consectetuer consequat, sapien neque pretium purus, vitae auctor pede neque sed nulla. Duis eget leo vel enim vehicula convallis. Proin ultricies dui quis sapien. Aenean sem ante, tristique non, tincidunt eget, scelerisque non, lacus. Sed sit amet tellus. Integer luctus. Quisque ligula. Nam nulla ligula, elementum sed, tempus id, elementum in, nibh. Vestibulum scelerisque. Donec bibendum. Morbi rutrum sapien nec massa. Duis vel wisi a libero mattis porta. Nulla neque. Proin lectus felis, viverra at, consequat sed, vestibulum ac, neque. In facilisis eros et turpis. In vulputate tincidunt urna. Nulla in erat. Proin bibendum. Aliquam faucibus euismod libero. Maecenas ante. Suspendisse potenti. Duis dictum. Nam eget purus vel erat fringilla rutrum. Suspendisse nec erat. Vestibulum wisi. Etiam ultricies. Proin venenatis porttitor ante. Nam venenatis metus ut eros. Vivamus ligula. Donec dui ipsum, elementum vitae, vestibulum eu, scelerisque et, libero. Sed rhoncus lorem id elit. Cras dapibus leo semper leo. Nulla euismod nulla nec ante. Cras accumsan posuere sapien. Ut wisi. Sed hendrerit. Aliquam blandit. Nunc semper sapien. Ut sollicitudin vehicula sapien. Praesent ultrices dolor a nisl. Aliquam consequat placerat libero. Donec aliquam. Duis elit. Nullam orci. Pellentesque porta, ligula at sodales posuere, orci dolor mattis urna, eu tincidunt risus elit nec sapien. Donec pellentesque, arcu at pharetra vestibulum, velit elit vulputate tortor, in interdum purus nibh nec mauris. Donec placerat. Mauris rhoncus tellus semper purus. In ipsum mauris, dapibus et, lobortis nec, venenatis id, magna. Mauris eros. Aenean eu nibh. Ut quis leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam arcu. Donec porttitor. Cras quis ante vitae elit sodales cursus. Donec rutrum, tortor ut facilisis gravida, neque justo ornare velit, nec eleifend enim eros id dolor. Nunc mi. Aliquam porta suscipit turpis. Etiam euismod, quam eu facilisis bibendum, magna sem pretium magna, eget hendrerit odio erat nec tortor. Integer varius ultrices mauris. Integer pharetra lorem vel neque. In vitae elit quis mi placerat bibendum. Sed in massa non tellus porttitor vulputate. Pellentesque volutpat tellus non tellus. Vivamus dictum neque nec wisi. Nulla porttitor quam id augue. Nam eleifend. Nam posuere scelerisque odio. Morbi elementum elit sed quam. Sed cursus fringilla nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam pellentesque est in sem. Curabitur sed dui at nibh facilisis sagittis. Proin posuere tellus et wisi. Praesent auctor. Phasellus dapibus. Pellentesque porttitor. Mauris sagittis. Morbi ac lacus vel arcu euismod malesuada. Morbi aliquet. Nunc tortor erat, eleifend semper, commodo quis, gravida ac, magna. Nulla condimentum. Integer vehicula vulputate neque. Integer mattis. In mattis fringilla purus. Donec nec nulla nec arcu dapibus varius. Vivamus enim. Donec nunc nibh, tempor vel, dignissim quis, congue in, orci. Morbi nulla. Duis pellentesque tempus leo. Nunc accumsan ante at justo. Etiam faucibus lectus vitae odio. Sed sed nisl sed sapien faucibus aliquam. Nam lectus. Fusce sem. Pellentesque gravida gravida orci. Morbi nulla. Sed elementum, arcu a mollis pretium, ante massa aliquam ligula, vel feugiat elit elit non lorem. Vestibulum molestie. Nam quis libero vel nulla pharetra auctor. Fusce vitae tortor. Cras vel nulla id magna aliquam venenatis. Fusce cursus diam quis sem. In massa. Donec nibh tortor, volutpat eu, lacinia vel, consequat eu, nibh. Phasellus mauris nibh, tempor ut, nonummy at, vehicula eget, arcu. Vestibulum a justo. Proin urna velit, ultrices at, faucibus in, consectetuer nec, erat. Vestibulum venenatis, sem eget nonummy interdum, ipsum metus cursus wisi, in convallis orci mi non quam. Nam convallis varius dui. Etiam ac metus vel ipsum venenatis cursus. Aliquam orci ipsum, placerat ac, faucibus eu, commodo nec, est. Nulla ligula. Etiam sed sem vel enim malesuada fringilla. Sed dignissim. Duis quam sem, semper ut, congue eget, tincidunt eget, turpis. Integer auctor gravida ligula. Sed ante. Donec felis massa, adipiscing nec, mollis vitae, aliquet nec, sem. Curabitur lacinia. Nam vel lacus eu libero semper commodo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas lectus. Pellentesque consectetuer convallis felis. Nam facilisis, erat quis rhoncus dignissim, ipsum nulla fringilla tellus, nec rhoncus felis lorem id ligula. Proin placerat porttitor dui. Etiam sagittis nulla id dolor. Nullam augue. Cras porta scelerisque orci. Vestibulum malesuada. Duis placerat. Phasellus felis. In tristique. Aenean blandit imperdiet turpis. Vestibulum vulputate varius tellus. Phasellus a sem. Vestibulum vel turpis. Nullam imperdiet egestas turpis. Suspendisse vel mi et odio vestibulum posuere. Maecenas in turpis. Vestibulum blandit justo sit amet dui. Phasellus semper orci. Sed viverra sem vitae leo. Sed eu quam et lectus vulputate suscipit. Nulla cursus dictum lacus. Sed in libero. Sed eu massa ut mauris tincidunt tempus. Sed tincidunt. Sed fermentum. Proin tincidunt. Nullam id velit. Fusce facilisis odio id metus. Fusce mi diam, cursus vel, congue in, laoreet quis, sapien. Aliquam quis quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum magna lectus, porta vitae, porttitor sit amet, rutrum eget, ante. Vivamus faucibus. Quisque tellus. Nulla est mi, ultrices non, sodales quis, dapibus at, mi. Etiam rutrum egestas mauris. Quisque lobortis. Praesent mattis, ligula vel convallis semper, nibh purus vestibulum lorem, semper laoreet augue eros eget wisi. Curabitur luctus lectus vitae lectus. Vivamus nisl tellus, consequat quis, tincidunt vel, ultrices nec, metus. Phasellus elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nullam urna quam, euismod a, viverra vitae, vulputate nec, quam. Fusce magna ipsum, rutrum ut, tempus id, porttitor in, arcu. Donec adipiscing. Aenean feugiat porta purus. Aenean semper elit. Ut lacus. Sed gravida, wisi id posuere aliquam, nibh lacus venenatis elit, nec mollis velit odio vel ligula. Proin tempor pede eget velit. Proin diam. Nunc vel erat vel augue malesuada commodo. Nam tristique, enim a tempor nonummy, dolor ante ornare augue, ac sodales lacus est in odio. Quisque nec velit. Proin et est id tortor bibendum pretium. Duis eu nunc. Etiam aliquet purus id tellus. Etiam vel turpis. Morbi at purus ut odio consectetuer eleifend. Pellentesque fringilla. Pellentesque dolor sem, lacinia nec, blandit vel, placerat sit amet, nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed massa est, tristique nec, blandit eget, posuere sit amet, sem. Quisque vel ligula. Donec mi. Nulla pellentesque, purus sed posuere congue, elit urna consectetuer elit, quis ultricies lorem mi ut nulla. Donec auctor, velit sit amet iaculis ullamcorper, massa nisl scelerisque est, ut aliquet purus ipsum et nibh. In congue libero eget urna. Nulla tortor arcu, fermentum ut, condimentum sit amet, porttitor in, ipsum. Nunc eros massa, congue ac, interdum sed, accumsan et, leo. Aliquam rhoncus varius mauris. Morbi sodales egestas nisl. Pellentesque mauris velit, aliquet id, consectetuer in, mattis vel, felis. Quisque tellus justo, porttitor semper, feugiat vitae, tincidunt quis, turpis. Nulla egestas interdum odio. Morbi commodo. Mauris nulla augue, laoreet ut, pharetra vel, tempus non, metus. In interdum rhoncus metus. Nullam consequat volutpat sem. Aenean odio. Ut lobortis. Sed pede. Maecenas fringilla. Vivamus diam quam, condimentum id, vestibulum eu, facilisis eu, felis. Maecenas velit. Vestibulum accumsan. Etiam sit amet velit. Donec sollicitudin, justo sed feugiat gravida, elit lectus bibendum erat, sed congue mauris leo nec enim. Vivamus quam orci, condimentum nec, egestas vel, venenatis vitae, libero. Pellentesque sollicitudin tristique neque. Pellentesque vehicula. Sed tristique, ipsum sit amet commodo cursus, tellus lorem scelerisque eros, vel convallis risus eros sed orci. Integer dapibus. Praesent semper, lectus vel rutrum ornare, risus sapien cursus lectus, sed pharetra odio quam semper pede. Nullam luctus. Suspendisse at arcu quis nisl facilisis posuere. Mauris sagittis. Cras ultricies bibendum dui. Nulla facilisi. Proin nec purus sit amet est luctus suscipit. Curabitur ut neque."}' FROM docs
WHERE documentos.id = docs.id;
WITH docs AS (SELECT d.id, d.nro->>'nro' AS nro, d.nro->>'anio' AS anio, dt.nombre_singular FROM sudocu.documentos d
INNER JOIN sudocu.documentos_tipos dt ON d.id_tipo=dt.id)
UPDATE sudocu.documentos_versiones SET titulo = docs.nombre_singular || ' nro:' || COALESCE (docs.nro,'#') || '/' || COALESCE (docs.anio, '#'), atributos = '{"contenido": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut fringilla. Suspendisse convallis viverra nunc. Etiam magna. Etiam nunc. Praesent leo nibh, lacinia at, blandit ac, congue eget, nunc. Sed nec dui. Proin tincidunt turpis nec justo. Vivamus gravida interdum elit. Etiam scelerisque. Quisque leo orci, placerat vel, lobortis in, eleifend quis, massa. Pellentesque lobortis. Maecenas pede. Duis tempor ornare pede. Nam accumsan metus sed massa. Praesent dignissim eros id mi. Ut malesuada molestie mauris. Vivamus varius sollicitudin dui. Phasellus dapibus tempor ante. Quisque euismod. Vivamus augue. Praesent aliquet cursus ante. Pellentesque urna. Sed vestibulum faucibus felis. Mauris magna. Vestibulum cursus. Vivamus iaculis. Integer tincidunt dolor sed diam. Quisque consequat convallis eros. Etiam vel lacus a justo dapibus sagittis. Nunc metus eros, laoreet ac, pretium ut, venenatis eu, velit. Curabitur quis nulla a lorem posuere consectetuer. Curabitur arcu. Nullam pulvinar condimentum augue. Nam nec arcu sit amet risus molestie condimentum. Aliquam at nulla. Proin consequat nulla in est. Aliquam varius. Maecenas vel tortor. Curabitur suscipit, massa vel pulvinar commodo, ante risus ullamcorper neque, nec convallis tellus diam ut velit. Sed vehicula dolor at dolor. Praesent ipsum. Nam enim. Nunc id diam id lectus rhoncus tristique. Vestibulum placerat tempor pede. Etiam vitae magna. Pellentesque quam. Maecenas magna. Donec vel massa. Praesent elementum, nunc ut mattis interdum, magna diam congue odio, a suscipit odio leo eget nulla. Sed molestie vestibulum metus. Maecenas elementum auctor mauris. In hac habitasse platea dictumst. Aliquam ultrices, lectus sed consectetuer consequat, sapien neque pretium purus, vitae auctor pede neque sed nulla. Duis eget leo vel enim vehicula convallis. Proin ultricies dui quis sapien. Aenean sem ante, tristique non, tincidunt eget, scelerisque non, lacus. Sed sit amet tellus. Integer luctus. Quisque ligula. Nam nulla ligula, elementum sed, tempus id, elementum in, nibh. Vestibulum scelerisque. Donec bibendum. Morbi rutrum sapien nec massa. Duis vel wisi a libero mattis porta. Nulla neque. Proin lectus felis, viverra at, consequat sed, vestibulum ac, neque. In facilisis eros et turpis. In vulputate tincidunt urna. Nulla in erat. Proin bibendum. Aliquam faucibus euismod libero. Maecenas ante. Suspendisse potenti. Duis dictum. Nam eget purus vel erat fringilla rutrum. Suspendisse nec erat. Vestibulum wisi. Etiam ultricies. Proin venenatis porttitor ante. Nam venenatis metus ut eros. Vivamus ligula. Donec dui ipsum, elementum vitae, vestibulum eu, scelerisque et, libero. Sed rhoncus lorem id elit. Cras dapibus leo semper leo. Nulla euismod nulla nec ante. Cras accumsan posuere sapien. Ut wisi. Sed hendrerit. Aliquam blandit. Nunc semper sapien. Ut sollicitudin vehicula sapien. Praesent ultrices dolor a nisl. Aliquam consequat placerat libero. Donec aliquam. Duis elit. Nullam orci. Pellentesque porta, ligula at sodales posuere, orci dolor mattis urna, eu tincidunt risus elit nec sapien. Donec pellentesque, arcu at pharetra vestibulum, velit elit vulputate tortor, in interdum purus nibh nec mauris. Donec placerat. Mauris rhoncus tellus semper purus. In ipsum mauris, dapibus et, lobortis nec, venenatis id, magna. Mauris eros. Aenean eu nibh. Ut quis leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam arcu. Donec porttitor. Cras quis ante vitae elit sodales cursus. Donec rutrum, tortor ut facilisis gravida, neque justo ornare velit, nec eleifend enim eros id dolor. Nunc mi. Aliquam porta suscipit turpis. Etiam euismod, quam eu facilisis bibendum, magna sem pretium magna, eget hendrerit odio erat nec tortor. Integer varius ultrices mauris. Integer pharetra lorem vel neque. In vitae elit quis mi placerat bibendum. Sed in massa non tellus porttitor vulputate. Pellentesque volutpat tellus non tellus. Vivamus dictum neque nec wisi. Nulla porttitor quam id augue. Nam eleifend. Nam posuere scelerisque odio. Morbi elementum elit sed quam. Sed cursus fringilla nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam pellentesque est in sem. Curabitur sed dui at nibh facilisis sagittis. Proin posuere tellus et wisi. Praesent auctor. Phasellus dapibus. Pellentesque porttitor. Mauris sagittis. Morbi ac lacus vel arcu euismod malesuada. Morbi aliquet. Nunc tortor erat, eleifend semper, commodo quis, gravida ac, magna. Nulla condimentum. Integer vehicula vulputate neque. Integer mattis. In mattis fringilla purus. Donec nec nulla nec arcu dapibus varius. Vivamus enim. Donec nunc nibh, tempor vel, dignissim quis, congue in, orci. Morbi nulla. Duis pellentesque tempus leo. Nunc accumsan ante at justo. Etiam faucibus lectus vitae odio. Sed sed nisl sed sapien faucibus aliquam. Nam lectus. Fusce sem. Pellentesque gravida gravida orci. Morbi nulla. Sed elementum, arcu a mollis pretium, ante massa aliquam ligula, vel feugiat elit elit non lorem. Vestibulum molestie. Nam quis libero vel nulla pharetra auctor. Fusce vitae tortor. Cras vel nulla id magna aliquam venenatis. Fusce cursus diam quis sem. In massa. Donec nibh tortor, volutpat eu, lacinia vel, consequat eu, nibh. Phasellus mauris nibh, tempor ut, nonummy at, vehicula eget, arcu. Vestibulum a justo. Proin urna velit, ultrices at, faucibus in, consectetuer nec, erat. Vestibulum venenatis, sem eget nonummy interdum, ipsum metus cursus wisi, in convallis orci mi non quam. Nam convallis varius dui. Etiam ac metus vel ipsum venenatis cursus. Aliquam orci ipsum, placerat ac, faucibus eu, commodo nec, est. Nulla ligula. Etiam sed sem vel enim malesuada fringilla. Sed dignissim. Duis quam sem, semper ut, congue eget, tincidunt eget, turpis. Integer auctor gravida ligula. Sed ante. Donec felis massa, adipiscing nec, mollis vitae, aliquet nec, sem. Curabitur lacinia. Nam vel lacus eu libero semper commodo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas lectus. Pellentesque consectetuer convallis felis. Nam facilisis, erat quis rhoncus dignissim, ipsum nulla fringilla tellus, nec rhoncus felis lorem id ligula. Proin placerat porttitor dui. Etiam sagittis nulla id dolor. Nullam augue. Cras porta scelerisque orci. Vestibulum malesuada. Duis placerat. Phasellus felis. In tristique. Aenean blandit imperdiet turpis. Vestibulum vulputate varius tellus. Phasellus a sem. Vestibulum vel turpis. Nullam imperdiet egestas turpis. Suspendisse vel mi et odio vestibulum posuere. Maecenas in turpis. Vestibulum blandit justo sit amet dui. Phasellus semper orci. Sed viverra sem vitae leo. Sed eu quam et lectus vulputate suscipit. Nulla cursus dictum lacus. Sed in libero. Sed eu massa ut mauris tincidunt tempus. Sed tincidunt. Sed fermentum. Proin tincidunt. Nullam id velit. Fusce facilisis odio id metus. Fusce mi diam, cursus vel, congue in, laoreet quis, sapien. Aliquam quis quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum magna lectus, porta vitae, porttitor sit amet, rutrum eget, ante. Vivamus faucibus. Quisque tellus. Nulla est mi, ultrices non, sodales quis, dapibus at, mi. Etiam rutrum egestas mauris. Quisque lobortis. Praesent mattis, ligula vel convallis semper, nibh purus vestibulum lorem, semper laoreet augue eros eget wisi. Curabitur luctus lectus vitae lectus. Vivamus nisl tellus, consequat quis, tincidunt vel, ultrices nec, metus. Phasellus elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nullam urna quam, euismod a, viverra vitae, vulputate nec, quam. Fusce magna ipsum, rutrum ut, tempus id, porttitor in, arcu. Donec adipiscing. Aenean feugiat porta purus. Aenean semper elit. Ut lacus. Sed gravida, wisi id posuere aliquam, nibh lacus venenatis elit, nec mollis velit odio vel ligula. Proin tempor pede eget velit. Proin diam. Nunc vel erat vel augue malesuada commodo. Nam tristique, enim a tempor nonummy, dolor ante ornare augue, ac sodales lacus est in odio. Quisque nec velit. Proin et est id tortor bibendum pretium. Duis eu nunc. Etiam aliquet purus id tellus. Etiam vel turpis. Morbi at purus ut odio consectetuer eleifend. Pellentesque fringilla. Pellentesque dolor sem, lacinia nec, blandit vel, placerat sit amet, nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed massa est, tristique nec, blandit eget, posuere sit amet, sem. Quisque vel ligula. Donec mi. Nulla pellentesque, purus sed posuere congue, elit urna consectetuer elit, quis ultricies lorem mi ut nulla. Donec auctor, velit sit amet iaculis ullamcorper, massa nisl scelerisque est, ut aliquet purus ipsum et nibh. In congue libero eget urna. Nulla tortor arcu, fermentum ut, condimentum sit amet, porttitor in, ipsum. Nunc eros massa, congue ac, interdum sed, accumsan et, leo. Aliquam rhoncus varius mauris. Morbi sodales egestas nisl. Pellentesque mauris velit, aliquet id, consectetuer in, mattis vel, felis. Quisque tellus justo, porttitor semper, feugiat vitae, tincidunt quis, turpis. Nulla egestas interdum odio. Morbi commodo. Mauris nulla augue, laoreet ut, pharetra vel, tempus non, metus. In interdum rhoncus metus. Nullam consequat volutpat sem. Aenean odio. Ut lobortis. Sed pede. Maecenas fringilla. Vivamus diam quam, condimentum id, vestibulum eu, facilisis eu, felis. Maecenas velit. Vestibulum accumsan. Etiam sit amet velit. Donec sollicitudin, justo sed feugiat gravida, elit lectus bibendum erat, sed congue mauris leo nec enim. Vivamus quam orci, condimentum nec, egestas vel, venenatis vitae, libero. Pellentesque sollicitudin tristique neque. Pellentesque vehicula. Sed tristique, ipsum sit amet commodo cursus, tellus lorem scelerisque eros, vel convallis risus eros sed orci. Integer dapibus. Praesent semper, lectus vel rutrum ornare, risus sapien cursus lectus, sed pharetra odio quam semper pede. Nullam luctus. Suspendisse at arcu quis nisl facilisis posuere. Mauris sagittis. Cras ultricies bibendum dui. Nulla facilisi. Proin nec purus sit amet est luctus suscipit. Curabitur ut neque."}' FROM docs
WHERE documentos_versiones.id_original = docs.id;
Create or replace function random_string(length integer) returns text as
$$
declare
chars text[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}';
result text := '';
i integer := 0;
begin
if length < 0 then
raise exception 'Given length cannot be less than 0';
end if;
for i in 1..length loop
result := result || chars[1+random()*(array_length(chars, 1)-1)];
end loop;
return result;
end;
$$ language plpgsql;
UPDATE sudocu.usuarios SET dni = random_string(10), password = random_string(20), username = random_string(5)||'@ungs.edu.ar', email = random_string(5)||'@ungs.edu.ar', apellido = random_string(7);
UPDATE sudocu.personas SET nro_doc = random_string(10), apellido = random_string(7);