10. Apéndices
10. Apéndices
Esta sección contiene información complementaria, referencias técnicas, glosario y checklists para facilitar la administración y operación del sistema DTEM.
10.1. Referencias Técnicas
10.1.1. Especificaciones SII
Resoluciones y Normativas
| Documento | Número | Año | Descripción |
|---|---|---|---|
| Resolución Exenta | 60 | 2023 | Requisitos técnicos para DTE |
| Resolución Exenta | 3.497 | 2022 | Certificados digitales |
| Norma Técnica | 73 | 2023 | Formatos y estándares XML |
| Circular | 57 | 2023 | Validación de firmas digitales |
| Resolución Exenta | 11 | 2023 | Libro de Compras y Ventas Electrónico |
Formatos XML Estandarizados
<!-- Estructura básica DTE -->
<DTE version="1.0">
<Documento ID="F60T33">
<Encabezado>
<IdDoc>
<TipoDTE>33</TipoDTE>
<Folio>1</Folio>
<FchEmision>2023-12-01</FchEmision>
<FmaPago>1</FmaPago>
<FchVencimiento>2023-12-31</FchVencimiento>
</IdDoc>
<Emisor>
<RUTEmisor>12345678-9</RUTEmisor>
<RznSoc>EMPRESA DE PRUEBA LTDA</RznSoc>
<GiroEmis>VENTA AL POR MENOR</GiroEmis>
<ActEco>502000</ActEco>
<DirOrigen>AV. PRINCIPAL 100</DirOrigen>
<CmnaOrigen>SANTIAGO</CmnaOrigen>
<CiudadOrigen>SANTIAGO</CiudadOrigen>
</Emisor>
<Receptor>
<RUTRecep>98765432-1</RUTReceptor>
<RznSocRecep>CLIENTE DE PRUEBA</RznSocRecep>
<GiroRecep>COMERCIO</GiroRecep>
<DirRecep>CALLE SECUNDARIA 200</DirRecep>
<CmnaRecep>SANTIAGO</CmnaRecep>
<CiudadRecep>SANTIAGO</CiudadRecep>
</Receptor>
<Totales>
<MontoNeto>10000</MontoNeto>
<MontoExento>0</MontoExento>
<TasaIVA>19</TasaIVA>
<IVA>1900</IVA>
<MontoTotal>11900</MontoTotal>
</Totales>
</Encabezado>
<Detalle>
<NroLinDet>1</NroLinDet>
<CdgItem>
<TpoCodigo>INT1</TpoCodigo>
<VlrCodigo>PROD001</VlrCodigo>
</CdgItem>
<NmbItem>PRODUCTO DE PRUEBA</NmbItem>
<QtyItem>10</QtyItem>
<UnmdItem>UN</UnmdItem>
<PrcItem>1000</PrcItem>
<MontoItem>10000</MontoItem>
</Detalle>
</Documento>
</DTE>
10.1.2. APIs Externas
SII API Endpoints
| Endpoint | Método | Descripción | Autenticación |
|---|---|---|---|
/cgi_dte/UPL/DTEUpload |
POST | Subir DTE al SII | Certificado Digital |
/cgi_dte/UPL/getEstado |
GET | Consultar estado DTE | Certificado Digital |
/cgi_dte/UPL/getDocumento |
GET | Descargar DTE | Certificado Digital |
/cgi_dte/UPL/getLibro |
POST | Enviar Libro Compras/Ventas | Certificado Digital |
/cgi_dte/UPL/getEstLibro |
GET | Consultar estado Libro | Certificado Digital |
Webhook Payloads
// DTE Creado
{
"event": "dte.created",
"timestamp": "2023-12-01T10:00:00Z",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"documentType": "33",
"folio": 1,
"rutEmisor": "12345678-9",
"rutReceptor": "98765432-1",
"montoTotal": 11900,
"status": "draft",
"createdAt": "2023-12-01T10:00:00Z"
}
}
// DTE Enviado
{
"event": "dte.sent",
"timestamp": "2023-12-01T10:05:00Z",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"folio": 1,
"siiTrackId": "1234567890",
"sentAt": "2023-12-01T10:05:00Z"
}
}
// DTE Aprobado
{
"event": "dte.approved",
"timestamp": "2023-12-01T10:10:00Z",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"folio": 1,
"siiStatus": "Aprobado",
"siiResponseAt": "2023-12-01T10:10:00Z"
}
}
10.2. Glosario de Términos
10.2.1. Términos Técnicos
| Término | Definición | Contexto |
|---|---|---|
| DTE | Documento Tributario Electrónico | Sistema de facturación electrónica chileno |
| CAF | Código de Autorización de Folios | Autorización del SII para emitir DTEs |
| RUT | Rol Único Tributario | Identificador único de contribuyentes en Chile |
| SII | Servicio de Impuestos Internos | Servicio público chileno de impuestos |
| XML | eXtensible Markup Language | Formato estándar para DTEs |
| TLS | Transport Layer Security | Protocolo de seguridad para comunicaciones |
| API | Application Programming Interface | Interfaz de programación de aplicaciones |
| JWT | JSON Web Token | Token estándar para autenticación |
| RBAC | Role-Based Access Control | Control de acceso basado en roles |
| RTO | Recovery Time Objective | Tiempo objetivo de recuperación |
| RPO | Recovery Point Objective | Punto objetivo de recuperación |
| SLA | Service Level Agreement | Acuerdo de nivel de servicio |
| HA | High Availability | Alta disponibilidad |
| DR | Disaster Recovery | Recuperación ante desastres |
10.2.2. Términos de Negocio
| Término | Definición | Ejemplo |
|---|---|---|
| Factura Electrónica | DTE tipo 33 | Documento que registra una venta |
| Nota de Crédito | DTE tipo 34 | Documento que corrige una factura |
| Nota de Débito | DTE tipo 39 | Documento que incrementa una factura |
| Guía de Despacho | DTE tipo 52 | Documento que acompaña mercancías |
| Factura de Compra | DTE tipo 46 | Documento para compras internas |
| Factura de Exportación | DTE tipo 110 | Documento para ventas al extranjero |
| Boleta | DTE tipo 39/41 | Documento para ventas a consumidores finales |
| IECV | Ingreso Electrónico de Consumo | Boleta electrónica para retail |
| BVE | Boleta de Venta Electrónica | Boleta electrónica general |
10.3. Checklists Operativos
10.3.1. Checklist de Instalación
Pre-Instalación
-
Requisitos de Hardware Verificados
- CPU: 8+ cores (producción)
- RAM: 16+ GB (producción)
- Storage: 500+ GB SSD
- Network: 1+ Gbps
-
Requisitos de Software
- Docker 20.10+ instalado
- Docker Compose 2.0+ instalado
- Node.js 18+ (para desarrollo)
- Git 2.30+ instalado
-
Configuración de Red
- Puertos 80, 443 abiertos al público
- Puertos internos configurados
- DNS configurado correctamente
- Certificados SSL obtenidos
-
Seguridad
- Firewall configurado
- Usuarios creados con permisos adecuados
- SSH keys configuradas
- Políticas de seguridad aplicadas
Instalación
-
Código Fuente
- Repositorio clonado
- Rama correcta seleccionada
- Últimos cambios descargados
-
Configuración
- Archivo .env creado
- Variables de entorno configuradas
- Certificados digitales configurados
- Base de datos inicializada
-
Despliegue
- Imágenes Docker construidas
- Contenedores levantados
- Servicios verificados
- Health checks funcionando
Post-Instalación
-
Verificación
- Todos los servicios operativos
- Conectividad a base de datos
- Conectividad a Redis
- Integración con SII funcionando
-
Configuración Inicial
- Usuarios administradores creados
- CAFs cargados y activados
- Notificaciones configuradas
- Backups programados
-
Monitoreo
- Métricas configuradas
- Logs centralizados
- Alertas configuradas
- Dashboards creados
10.3.2. Checklist de Mantenimiento
Mantenimiento Diario
-
Health Checks
- Verificar estado de todos los servicios
- Revisar logs de errores
- Verificar uso de recursos
- Revisar alertas activas
-
Backups
- Verificar que los backups se ejecutaron
- Validar integridad de backups
- Verificar espacio de almacenamiento
- Revisar logs de backup
-
Limpieza
- Rotar logs antiguos
- Limpiar archivos temporales
- Limpiar cache expirada
- Liberar espacio en disco
Mantenimiento Semanal
-
Actualizaciones
- Verificar actualizaciones de seguridad
- Revisar actualizaciones de dependencias
- Planificar ventanas de mantenimiento
- Documentar cambios
-
Rendimiento
- Analizar métricas de rendimiento
- Revisar consultas lentas
- Optimizar índices de base de datos
- Revisar uso de memoria
-
Seguridad
- Revisar logs de seguridad
- Verificar accesos no autorizados
- Actualizar certificados si es necesario
- Revisar políticas de seguridad
Mantenimiento Mensual
-
Base de Datos
- Ejecutar VACUUM FULL
- Reconstruir índices fragmentados
- Actualizar estadísticas
- Archivar datos antiguos
-
Infraestructura
- Revisar configuración de servidores
- Actualizar documentación
- Realizar pruebas de DR
- Revisar capacidades y planificar escalado
-
Reportes
- Generar reportes de disponibilidad
- Analizar tendencias de uso
- Revisar SLAs
- Planificar mejoras
10.3.3. Checklist de Disaster Recovery
Preparación
-
Plan de DR
- Plan documentado y actualizado
- Equipo de respuesta entrenado
- Contactos de emergencia actualizados
- Procedimientos validados
-
Infraestructura DR
- Región DR configurada
- Replicación activa y funcionando
- DNS configurado para failover
- Monitoreo de DR activo
-
Backups
- Backups automáticos configurados
- Backups almacenados en múltiples ubicaciones
- Procedimientos de restauración validados
- Encriptación de backups verificada
Ejecución de DR
-
Declaración de Desastre
- Impacto evaluado
- Stakeholders notificados
- Sala de guerra activada
- Comunicación externa iniciada
-
Activación DR
- Región DR activada
- Base de datos promovida
- Aplicaciones levantadas
- DNS actualizado
-
Verificación
- Servicios verificados
- Funcionalidad validada
- Performance aceptable
- Seguridad verificada
Post-DR
-
Operación Normal
- Monitoreo intensivo
- Soporte extendido
- Comunicación continua
- Documentación de eventos
-
Retorno
- Región primaria restaurada
- Datos sincronizados
- Failback planificado
- Operación normal restaurada
-
Lecciones Aprendidas
- Post-mortem realizado
- Mejoras identificadas
- Plan actualizado
- Equipo entrenado
10.4. Scripts de Utilidad
10.4.1. Scripts de Monitoreo
Health Check Completo
#!/bin/bash
# health-check.sh
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
check_service() {
local service_name="$1"
local url="$2"
local expected_status="${3:-200}"
echo -n "Checking $service_name... "
if curl -s -o /dev/null -w "%{http_code}" "$url" | grep -q "$expected_status"; then
echo -e "${GREEN}OK${NC}"
return 0
else
echo -e "${RED}FAILED${NC}"
return 1
fi
}
check_database() {
echo -n "Checking database... "
if psql -U postgres -d dtem_prod -c "SELECT 1;" >/dev/null 2>&1; then
echo -e "${GREEN}OK${NC}"
return 0
else
echo -e "${RED}FAILED${NC}"
return 1
fi
}
check_redis() {
echo -n "Checking Redis... "
if redis-cli ping | grep -q "PONG"; then
echo -e "${GREEN}OK${NC}"
return 0
else
echo -e "${RED}FAILED${NC}"
return 1
fi
}
check_disk_space() {
echo -n "Checking disk space... "
local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -lt 80 ]; then
echo -e "${GREEN}OK (${usage}%)${NC}"
return 0
elif [ "$usage" -lt 90 ]; then
echo -e "${YELLOW}WARNING (${usage}%)${NC}"
return 1
else
echo -e "${RED}CRITICAL (${usage}%)${NC}"
return 2
fi
}
check_memory() {
echo -n "Checking memory... "
local available=$(free -m | awk 'NR==2{printf "%.0f", $7}')
if [ "$available" -gt 1024 ]; then
echo -e "${GREEN}OK (${available}MB available)${NC}"
return 0
elif [ "$available" -gt 512 ]; then
echo -e "${YELLOW}WARNING (${available}MB available)${NC}"
return 1
else
echo -e "${RED}CRITICAL (${available}MB available)${NC}"
return 2
fi
}
echo "=== DTEM System Health Check ==="
echo "Timestamp: $(date)"
echo
# Check services
check_service "API Gateway" "http://localhost:3000/health"
check_service "Web Frontend" "http://localhost:80/health"
# Check infrastructure
check_database
check_redis
check_disk_space
check_memory
echo
echo "=== Health Check Complete ==="
Monitor de Recursos
#!/bin/bash
# resource-monitor.sh
LOG_FILE="/var/log/resource-monitor.log"
ALERT_THRESHOLD_CPU=80
ALERT_THRESHOLD_MEMORY=85
ALERT_THRESHOLD_DISK=90
log_alert() {
local message="$1"
echo "$(date): ALERT - $message" >> "$LOG_FILE"
# Send Slack notification
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"🚨 Resource Alert: $message\"}" \
"$SLACK_WEBHOOK_URL"
}
monitor_resources() {
# CPU Usage
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')
if (( $(echo "$cpu_usage > $ALERT_THRESHOLD_CPU" | bc -l) )); then
log_alert "High CPU usage: ${cpu_usage}%"
fi
# Memory Usage
local memory_usage=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}')
if [ "$memory_usage" -gt "$ALERT_THRESHOLD_MEMORY" ]; then
log_alert "High memory usage: ${memory_usage}%"
fi
# Disk Usage
local disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$disk_usage" -gt "$ALERT_THRESHOLD_DISK" ]; then
log_alert "High disk usage: ${disk_usage}%"
fi
# Log current status
echo "$(date): CPU=${cpu_usage}%, Memory=${memory_usage}%, Disk=${disk_usage}%" >> "$LOG_FILE"
}
# Run monitoring
monitor_resources
10.4.2. Scripts de Mantenimiento
Limpieza Automática
#!/bin/bash
# cleanup.sh
LOG_FILE="/var/log/cleanup.log"
RETENTION_DAYS=30
log() {
echo "$(date): $1" >> "$LOG_FILE"
}
cleanup_logs() {
log "Starting log cleanup..."
# Rotate application logs
find /var/log/dtem -name "*.log" -mtime +7 -exec gzip {} \;
find /var/log/dtem -name "*.log.gz" -mtime +$RETENTION_DAYS -delete
# Rotate system logs
logrotate -f /etc/logrotate.d/dtem
log "Log cleanup completed"
}
cleanup_temp_files() {
log "Starting temporary files cleanup..."
# Clean temporary uploads
find /app/uploads/temp -type f -mtime +1 -delete
# Clean cache files
find /tmp -name "dtem_*" -mtime +1 -delete
# Clean session files
find /var/lib/php/sessions -name "sess_*" -mtime +7 -delete
log "Temporary files cleanup completed"
}
cleanup_database() {
log "Starting database cleanup..."
# Clean old audit logs
psql -U postgres -d dtem_prod -c "
DELETE FROM audit_logs
WHERE timestamp < NOW() - INTERVAL '2 years';
"
# Clean expired sessions
psql -U postgres -d dtem_prod -c "
DELETE FROM sessions
WHERE expires_at < NOW();
"
# Vacuum and analyze
psql -U postgres -d dtem_prod -c "VACUUM ANALYZE;"
log "Database cleanup completed"
}
cleanup_backups() {
log "Starting backup cleanup..."
# Clean old local backups
find /backups -name "*.gz" -mtime +$RETENTION_DAYS -delete
# Clean old S3 backups
aws s3 ls s3://dtem-backups/ | while read -r line; do
create_date=$(echo "$line" | awk '{print $1" "$2}')
create_epoch=$(date -d "$create_date" +%s)
current_epoch=$(date +%s)
age_days=$(( (current_epoch - create_epoch) / 86400 ))
if [ $age_days -gt $RETENTION_DAYS ]; then
filename=$(echo "$line" | awk '{print $4}')
aws s3 rm "s3://dtem-backups/$filename"
log "Deleted old backup: $filename"
fi
done
log "Backup cleanup completed"
}
# Execute cleanup functions
cleanup_logs
cleanup_temp_files
cleanup_database
cleanup_backups
log "All cleanup tasks completed"
10.5. Contactos y Soporte
10.5.1. Contactos Internos
| Rol | Nombre | Teléfono | Horario | |
|---|---|---|---|---|
| System Administrator | [Nombre] | admin@empresa.cl | +56 2 XXXX XXXX | 24/7 |
| Database Administrator | [Nombre] | dba@empresa.cl | +56 2 XXXX XXXX | 24/7 |
| Security Officer | [Nombre] | security@empresa.cl | +56 2 XXXX XXXX | 24/7 |
| DevOps Lead | [Nombre] | devops@empresa.cl | +56 2 XXXX XXXX | 24/7 |
| Application Support | [Nombre] | support@empresa.cl | +56 2 XXXX XXXX | L-V 8:00-18:00 |
10.5.2. Contactos Externos
| Servicio | Proveedor | Contacto | Teléfono | |
|---|---|---|---|---|
| Certificados Digitales | [Proveedor] | [Contacto] | +56 2 XXXX XXXX | certificados@proveedor.cl |
| Hosting/Cloud | [Proveedor] | [Contacto] | +56 2 XXXX XXXX | soporte@proveedor.cl |
| Conectividad | [Proveedor] | [Contacto] | +56 2 XXXX XXXX | red@proveedor.cl |
| SII | Servicio de Impuestos Internos | Mesa de Ayuda | +56 2 XXXX XXXX | ayuda@sii.cl |
10.5.3. Escalation Matrix
| Nivel | Condición | Contacto | Tiempo de Respuesta |
|---|---|---|---|
| Nivel 1 | Incidente menor | Application Support | 2 horas |
| Nivel 2 | Incidente mayor | System Administrator | 30 minutos |
| Nivel 3 | Crítico | DevOps Lead + Security | 15 minutos |
| Nivel 4 | Catastrófico | Todos los niveles | Inmediato |
Conclusión del Manual
Este Manual de Sistema DTEM proporciona una guía completa para la administración, operación y mantenimiento del sistema. La documentación está diseñada para evolucionar con el sistema y debe mantenerse actualizada regularmente.
Próximos Pasos
- Revisión Periódica: Revisar y actualizar este manual trimestralmente
- Capacitación Continua: Asegurar que todo el personal esté capacitado en los procedimientos
- Mejora Continua: Incorporar lecciones aprendidas y mejores prácticas
- Automatización: Continuar automatizando procedimientos manuales
- Validación: Realizar pruebas regulares de todos los procedimientos documentados
Para preguntas o sugerencias sobre este manual, contacte al equipo de administración de sistemas en admin@empresa.cl.
Fin del Manual de Sistema DTEM