Flujo de Operaciones

Paso a paso de cómo se procesa y registra una operación típica en Polaris.

Registro de una Transacción

1

Usuario crea registro

El usuario ingresa los datos de la transacción (monto, descripción, categoría, etc.) desde el dashboard de Polaris.

2

Backend valida

El servidor valida permisos del usuario, formato de datos, límites de presupuesto y reglas de negocio configuradas.

3

Se encripta y guarda

Los datos se encriptan con AES-256-GCM y se guardan en Supabase con Row Level Security.

4

Se genera hash

Se calcula SHA-256 del registro encriptado para crear una huella digital única e irreversible.

5

Se firma digitalmente

El hash se firma con la llave privada del usuario/departamento para garantizar autenticidad.

6

Se envía a Hedera

El mensaje firmado se publica en Hedera Consensus Service (HCS), quedando inmutable en la red.

7

Se guarda txId

El ID de transacción de Hedera se vincula al registro en Supabase para futuras verificaciones.

Ejemplo de Código

// Pseudocódigo simplificado
async function registrarTransaccion(data, userId) {
  // 1. Validar permisos y datos
  await validarPermisos(userId, data.departmentId)
  await validarDatos(data)
  
  // 2. Encriptar datos
  const encrypted = await encrypt(data, MASTER_KEY)
  
  // 3. Guardar en Supabase
  const record = await supabase
    .from('transactions')
    .insert({ encrypted_data: encrypted, user_id: userId })
    .select()
    .single()
  
  // 4. Generar hash
  const hash = sha256(encrypted)
  
  // 5. Firmar con llave del usuario
  const signature = await sign(hash, userPrivateKey)
  
  // 6. Publicar en Hedera HCS
  const txResponse = await hederaClient.submitMessage({
    topicId: COMPANY_TOPIC_ID,
    message: JSON.stringify({
      type: 'transaction',
      hash,
      signature,
      timestamp: Date.now()
    })
  })
  
  // 7. Vincular txId
  await supabase
    .from('transactions')
    .update({ hedera_tx_id: txResponse.transactionId })
    .eq('id', record.id)
  
  return { success: true, txId: txResponse.transactionId }
}

Verificación

Para verificar la integridad de cualquier registro:

  1. 1Obtener el registro encriptado de Supabase
  2. 2Calcular SHA-256 del dato encriptado
  3. 3Consultar el mensaje en Hedera usando el txId
  4. 4Comparar hashes: si coinciden, el registro no ha sido alterado