馃毀 La documentacion de Bloque est谩 en desarrollo

Organizaciones

Aprende c贸mo crear y gestionar organizaciones usando el SDK de Bloque.

Descripci贸n General

Las organizaciones son la base de la plataforma Bloque. Pueden ser empresas o individuos y contienen toda la informaci贸n de perfil y cumplimiento normativo necesaria.

Crear una Organizaci贸n

Organizaci贸n de Negocios

import { SDK } from '@bloque/sdk';
import type { CreateOrgParams } from '@bloque/sdk/orgs';

const bloque = new SDK({
  origin: 'your-origin',
  auth: {
    type: 'apiKey',
    apiKey: process.env.BLOQUE_API_KEY!,
  },
  mode: 'production',
});

const params: CreateOrgParams = {
  org_type: 'business',
  profile: {
    legal_name: 'Acme Corporation',
    tax_id: '123456789',
    incorporation_date: '2020-01-01',
    business_type: 'llc',
    incorporation_country_code: 'US',
    incorporation_state: 'CA',
    address_line1: '123 Main St',
    postal_code: '94103',
    city: 'San Francisco',
  },
  metadata: {
    source: 'web_app',
    campaign: 'q1_2024',
  },
};

const organization = await bloque.orgs.create(params);

Organizaci贸n Individual

const params: CreateOrgParams = {
  org_type: 'individual',
  profile: {
    legal_name: 'John Doe',
    tax_id: '123-45-6789',
    incorporation_date: '1990-05-20',
    business_type: 'sole_proprietorship',
    incorporation_country_code: 'US',
    address_line1: '456 Oak Ave',
    postal_code: '10001',
    city: 'New York',
  },
};

const organization = await bloque.orgs.create(params);

Par谩metros

CreateOrgParams

CampoTipoRequeridoDescripci贸n
org_type'business' | 'individual'S铆Tipo de organizaci贸n
profileOrgProfileS铆Detalles del perfil de la organizaci贸n
metadataRecord<string, unknown>NoMetadatos personalizados

OrgProfile

CampoTipoRequeridoDescripci贸n
legal_namestringS铆Nombre legal de la organizaci贸n
tax_idstringS铆N煤mero de ID fiscal
incorporation_datestringS铆Fecha de incorporaci贸n (YYYY-MM-DD)
business_typestringS铆Tipo de negocio (ej: 'llc', 'corporation')
incorporation_country_codestringS铆C贸digo de pa铆s (ISO 3166-1 alpha-2)
incorporation_statestringNoEstado/provincia
address_line1stringS铆L铆nea de direcci贸n principal
address_line2stringNoL铆nea de direcci贸n secundaria
postal_codestringS铆C贸digo postal/ZIP
citystringS铆Ciudad
logo_urlstringNoURL del logo
placesPlace[]NoUbicaciones adicionales

Respuesta

Organization

interface Organization {
  urn: string;                           // Nombre 煤nico de recurso
  org_type: 'business' | 'individual';   // Tipo de organizaci贸n
  profile: OrgProfile;                   // Perfil de la organizaci贸n
  metadata?: Record<string, unknown>;    // Metadatos personalizados
  status: OrgStatus;                     // Estado de la organizaci贸n
}

Estado de la Organizaci贸n

EstadoDescripci贸nPuede Transicionar A
awaiting_compliance_verificationPendiente de verificaci贸n de cumplimiento normativoactive, rejected
activeLa organizaci贸n est谩 activasuspended, closed
suspendedLa organizaci贸n est谩 suspendidaactive, closed
closedLa organizaci贸n est谩 cerrada-
stateDiagram-v2
    [*] --> awaiting_compliance_verification
    awaiting_compliance_verification --> active
    awaiting_compliance_verification --> rejected
    active --> suspended
    active --> closed
    suspended --> active
    suspended --> closed
    rejected --> [*]
    closed --> [*]

Organizaciones con M煤ltiples Ubicaciones

Para organizaciones con m煤ltiples ubicaciones, utiliza el campo places:

const params: CreateOrgParams = {
  org_type: 'business',
  profile: {
    legal_name: 'Global Tech Inc',
    tax_id: '98-7654321',
    incorporation_date: '2018-03-10',
    business_type: 'corporation',
    incorporation_country_code: 'US',
    incorporation_state: 'DE',
    address_line1: '789 Corporate Blvd',
    postal_code: '19801',
    city: 'Wilmington',
    places: [
      {
        country_code: 'US',
        state: 'CA',
        address_line1: '100 Silicon Valley Dr',
        postal_code: '94025',
        city: 'Menlo Park',
        is_primary: true,
      },
      {
        country_code: 'US',
        state: 'NY',
        address_line1: '250 Broadway',
        postal_code: '10007',
        city: 'New York',
        is_primary: false,
      },
    ],
  },
};

Metadatos Personalizados

Agrega campos personalizados para rastrear informaci贸n adicional:

const params: CreateOrgParams = {
  org_type: 'business',
  profile: {
    // ... profile fields
  },
  metadata: {
    source: 'api',
    customer_id: 'cust_123',
    plan: 'enterprise',
    referral_code: 'REF2024',
  },
};

Consultar Organizaciones

Obtener por URN

const org = await bloque.orgs.get('bloque:org:abc123');
console.log(org.profile.legal_name, org.status);

Listar tus Organizaciones

const orgs = await bloque.orgs.list();
orgs.forEach(org => console.log(org.urn, org.profile.legal_name));

Verificar Disponibilidad de Slug

const result = await bloque.orgs.verifySlug('acme-corp');
console.log('Disponible:', result.available);

Eliminar una Organizaci贸n

await bloque.orgs.delete('bloque:org:abc123');

Miembros

Gestiona los miembros de la organizaci贸n.

// Listar miembros
const members = await bloque.orgs.listMembers('bloque:org:abc123');

// Actualizar rol de un miembro
await bloque.orgs.members.update('bloque:member:m1', {
  role: 'admin',
});

// Eliminar un miembro
await bloque.orgs.members.remove('bloque:org:abc123', 'bloque:member:m1');
M茅todoPar谩metrosDescripci贸n
listMembers(orgUrn)stringListar todos los miembros de la org
members.update(urn, params)URN + { role }Actualizar rol del miembro
members.remove(orgUrn, memberUrn)Dos URNsEliminar miembro de la org

Equipos

Organiza miembros en equipos con roles espec铆ficos.

// Listar equipos
const teams = await bloque.orgs.teams.list('bloque:org:abc123');

// Actualizar un equipo
await bloque.orgs.teams.update('bloque:team:t1', { name: 'Ingenier铆a' });

// Listar miembros del equipo
const teamMembers = await bloque.orgs.teams.listMembers('bloque:team:t1');

// Actualizar rol de un miembro del equipo
await bloque.orgs.teams.updateMember('bloque:team:t1', 'bloque:member:m1', {
  role: 'lead',
});

// Eliminar del equipo
await bloque.orgs.teams.removeMember('bloque:team:t1', 'bloque:member:m1');
M茅todoDescripci贸n
teams.list(orgUrn)Listar todos los equipos de la org
teams.update(teamUrn, params)Actualizar nombre o metadatos del equipo
teams.listMembers(teamUrn)Listar miembros de un equipo
teams.updateMember(teamUrn, memberUrn, params)Actualizar rol del miembro en el equipo
teams.removeMember(teamUrn, memberUrn)Eliminar un miembro del equipo

Invitaciones

Env铆a, acepta, rechaza y gestiona invitaciones a la organizaci贸n.

// Crear una invitaci贸n
const invite = await bloque.orgs.invites.create('bloque:org:abc123', {
  email: 'nuevo-miembro@example.com',
  role: 'member',
});

// Listar invitaciones
const invites = await bloque.orgs.invites.list({ orgUrn: 'bloque:org:abc123' });

// Aceptar una invitaci贸n
await bloque.orgs.invites.accept('invite-code-123');

// Rechazar una invitaci贸n
await bloque.orgs.invites.reject('invite-code-123', 'No me interesa');

// Reenviar una invitaci贸n
await bloque.orgs.invites.resend('invite-code-123');
M茅todoDescripci贸n
invites.create(orgUrn, params)Enviar una invitaci贸n
invites.get(code)Obtener detalles de invitaci贸n por c贸digo
invites.list(params?)Listar invitaciones (filtrar por orgUrn, status)
invites.accept(code)Aceptar una invitaci贸n
invites.reject(code, reason?)Rechazar una invitaci贸n
invites.resend(code)Reenviar email de invitaci贸n

Mejores Pr谩cticas

  1. Valida los Datos: Aseg煤rate de que todos los campos requeridos est茅n presentes antes de llamar a la API
  2. Maneja Errores: Siempre usa bloques try-catch
  3. Guarda URNs: Almacena el URN de la organizaci贸n para operaciones futuras
  4. Usa Metadatos: Rastrea contexto adicional usando metadatos
  5. Prueba en Sandbox: Siempre prueba con mode: 'sandbox' primero

Pr贸ximos Pasos