Flujo de Operaciones

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

Registro de 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 My Business Studio.

2

Backend valida

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

3

Cifrado y guardado

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

4

Hash generado

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

5

Firmado digital

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

6

Enviado a Hedera

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

7

TxId guardado

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

Ejemplo de Código

// Pseudocódigo simplificado
async function registerTransaction(data, userId) {
  // 1. Validar permisos y datos
  await validatePermissions(userId, data.departmentId)
  await validateData(data)
  
  // 2. Cifrar 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 clave de 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. Enlazar 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 cifrado de Supabase
  2. 2Calcular SHA-256 de los datos cifrados
  3. 3Consultar el mensaje en Hedera usando el txId
  4. 4Comparar hashes: si coinciden, el registro no ha sido alterado