Skip to main content

Overview

The Communications API handles formal communications, transmittals, and document exchange between parties. This is commonly used for RFIs (Requests for Information), memos, and formal document transmittals.

Authentication

All API requests require Django session authentication. See Authentication for details.

Endpoints

Create Transmittal

Create a new transmittal communication. Endpoint: POST /comunicaciones/api/create-transmittal/
tipo_id
integer
required
Type of communication (RFI, MEMO, etc.)
asunto
string
required
Subject line
cuerpo
string
required
Message body content
destinatarios
array
required
Array of recipient user IDs
documentos
array
Array of document IDs to attach
activos
array
Array of asset IDs to reference
Example Request:
fetch('/comunicaciones/api/create-transmittal/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-CSRFToken': csrfToken
  },
  body: JSON.stringify({
    tipo_id: 1,  // RFI type
    asunto: "Request for Information - Equipment Specifications",
    cuerpo: "Please provide technical specifications for the cooling tower.",
    destinatarios: [5, 12],  // User IDs
    documentos: [45, 67],  // Document IDs
    activos: [100]  // Asset IDs
  })
});
Response:
id
integer
Created transmittal ID
consecutivo
string
Auto-generated consecutive number (e.g., “RFI-2025-0001”)
estado
string
Status: BORRADOR or ENVIADO
fecha_envio
datetime
Send timestamp (null if draft)
Response Example
{
  "id": 123,
  "consecutivo": "RFI-2025-0001",
  "estado": "ENVIADO",
  "fecha_envio": "2025-03-06T10:30:00Z"
}

List Transmittals

View transmittals (sent and received). Endpoint: GET /comunicaciones/transmittals/ Query Parameters:
tipo
string
Filter by communication type code
estado
string
Filter by status (BORRADOR, ENVIADO)
Response: Returns HTML page with transmittal list.

Transmittal Detail

View complete transmittal details including attachments and recipients. Endpoint: GET /comunicaciones/transmittals/<comunicado_id>/ Response: Returns HTML page with:
  • Transmittal header (consecutive, subject, sender, date)
  • Message body
  • Attached documents
  • Referenced assets
  • Recipient list with read status
  • Reply thread

Data Models

Comunicado (Transmittal)

comunicaciones/models.py
class Comunicado(models.Model):
    ESTADOS = (
        ('BORRADOR', 'Borrador'),
        ('ENVIADO', 'Enviado'),
    )
    
    tipo = models.ForeignKey('TipoComunicado', on_delete=models.PROTECT)
    consecutivo = models.CharField(max_length=50, unique=True)
    asunto = models.CharField(max_length=255)
    cuerpo = models.TextField()
    
    remitente = models.ForeignKey(User, on_delete=models.PROTECT)
    fecha_envio = models.DateTimeField(blank=True, null=True)
    estado = models.CharField(max_length=20, choices=ESTADOS)
    
    # Reply threading
    parent = models.ForeignKey('self', on_delete=models.PROTECT, 
                              null=True, blank=True)

Destinatario (Recipient)

comunicaciones/models.py
class Destinatario(models.Model):
    comunicado = models.ForeignKey('Comunicado', on_delete=models.CASCADE)
    usuario = models.ForeignKey(User, on_delete=models.CASCADE)
    tipo = models.CharField(max_length=10)  # TO, CC, BCC
    
    # Read tracking
    leido = models.BooleanField(default=False)
    fecha_lectura = models.DateTimeField(blank=True, null=True)

AdjuntoComunicado (Attachment)

comunicaciones/models.py
class AdjuntoComunicado(models.Model):
    comunicado = models.ForeignKey('Comunicado', on_delete=models.CASCADE)
    
    # Can attach documents or assets
    documento = models.ForeignKey('documentos.Documento', 
                                 on_delete=models.CASCADE,
                                 null=True, blank=True)
    activo = models.ForeignKey('activos.Activo',
                              on_delete=models.CASCADE,
                              null=True, blank=True)
    archivo = models.FileField(upload_to='comunicados/', 
                              blank=True, null=True)

Transmittal Workflow

1

Create Draft

User creates transmittal in draft state
2

Add Recipients

Specify TO, CC, and BCC recipients
3

Attach Documents

Link existing documents or upload new files
4

Send

Change status to ENVIADO, assigns consecutive number
5

Track Reads

System tracks when recipients view the transmittal
6

Reply Thread

Recipients can reply, creating threaded conversations

Use Cases

RFI Management

Formal requests for information with response tracking

Document Transmittals

Formal transmission of technical documents

Memos

Internal communications and announcements

Change Notices

Notification of changes or updates

Documents

Attach documentation

Assets

Reference equipment

Projects

Link to project communications

Build docs developers (and LLMs) love