Skip to content

Gestión de Cuentas

Esta sección documenta los endpoints relacionados con la gestión de cuentas empresariales, incluyendo la actualización de información de cuentas y la finalización del proceso de configuración.

  • Endpoint: PUT /api/v1/companies/update-account
  • Método: PUT
  • Autenticación: Bearer Token requerido
  • Descripción: Permite actualizar la información de una cuenta empresarial específica
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
CampoTipoRequeridoDescripción
account_idstringID de la cuenta a actualizar
rucstringNoRUC de la empresa
razon_socialstringNoRazón social de la empresa
nombre_comercialstringNoNombre comercial
direccion_matrizstringNoDirección de la matriz
environmentstringNoAmbiente: “TEST” o “PRODUCTION”
mail_ccstringNoCorreo electrónico en copia
is_rimpeintegerNoIndica si es RIMPE (1 = sí, 0 = no)
retention_agentintegerNoCódigo de agente de retención
currencystringNoMoneda: “DOLAR” o “PESO”
is_contablestringNoIndica si es contable: “SI” o “NO”
{
"account_id": "61247344",
"ruc": "0952615177001",
"razon_social": "EMPRESA ACTUALIZADA S.A.",
"nombre_comercial": "EMPRESA ACTUALIZADA",
"direccion_matriz": "Av. Principal 123, Quito",
"environment": "PRODUCTION",
"mail_cc": "[email protected]",
"is_rimpe": 0,
"retention_agent": 1234,
"currency": "DOLAR",
"is_contable": "SI"
}
{
"message": "Cuenta actualizada exitosamente",
"status": "UPDATED",
"payload": {
"uuid": 61247344,
"ruc": "0952615177001",
"name": "EMPRESA ACTUALIZADA S.A.",
"commercial_name": "EMPRESA ACTUALIZADA",
"matriz_address": "Av. Principal 123, Quito",
"environment": "PRODUCTION",
"status_process": "active",
"warnings": null,
"is_contable": "SI",
"currency": "DOLAR",
"has_configured": true,
"has_mysign": true,
"mail_cc": "[email protected]",
"is_rimpe": false,
"retention_agent": 1234,
"updated_at": "2024-01-15T10:30:00Z"
}
}
Terminal window
curl -X PUT \
{{apiFacEcDev}}/api/v1/companies/update-account \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {{bearerToken}}' \
-H 'Content-Type: application/json' \
-d '{
"account_id": "61247344",
"ruc": "0952615177001",
"razon_social": "EMPRESA ACTUALIZADA S.A.",
"nombre_comercial": "EMPRESA ACTUALIZADA",
"direccion_matriz": "Av. Principal 123, Quito",
"environment": "PRODUCTION"
}'

  • Endpoint: POST /api/v1/companies/complete-configuration
  • Método: POST
  • Autenticación: Bearer Token requerido
  • Descripción: Finaliza el proceso de configuración inicial de una empresa
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
CampoTipoRequeridoDescripción
account_idstringID de la cuenta a configurar
confirm_configurationbooleanConfirmación de configuración completa
terms_acceptedbooleanNoAceptación de términos y condiciones
notifications_enabledbooleanNoHabilitar notificaciones
{
"account_id": "61247344",
"confirm_configuration": true,
"terms_accepted": true,
"notifications_enabled": true
}
{
"message": "Configuración completada exitosamente",
"status": "CONFIGURED",
"payload": {
"uuid": 61247344,
"ruc": "0952615177001",
"name": "EMPRESA CONFIGURADA S.A.",
"commercial_name": "EMPRESA CONFIGURADA",
"has_configured": true,
"configuration_completed_at": "2024-01-15T10:30:00Z",
"status_process": "active",
"next_steps": [
"Configurar establecimientos",
"Crear puntos de emisión",
"Realizar primera facturación"
]
}
}
Terminal window
curl -X POST \
{{apiFacEcDev}}/api/v1/companies/complete-configuration \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {{bearerToken}}' \
-H 'Content-Type: application/json' \
-d '{
"account_id": "61247344",
"confirm_configuration": true,
"terms_accepted": true,
"notifications_enabled": true
}'

const validateRUC = (ruc) => {
// Validación básica de RUC ecuatoriano
if (!/^\d{13}$/.test(ruc)) {
throw new Error('RUC debe tener 13 dígitos');
}
// Validación de dígito verificador
const digits = ruc.split('').map(Number);
const coefficients = [2, 1, 2, 1, 2, 1, 2, 1, 2];
let sum = 0;
for (let i = 0; i < 9; i++) {
let product = digits[i] * coefficients[i];
if (product >= 10) {
product = Math.floor(product / 10) + (product % 10);
}
sum += product;
}
const checkDigit = (10 - (sum % 10)) % 10;
return checkDigit === digits[9];
};
class EnvironmentValidator
{
const VALID_ENVIRONMENTS = ['TEST', 'PRODUCTION'];
public static function validate($environment)
{
if (!in_array($environment, self::VALID_ENVIRONMENTS)) {
throw new InvalidArgumentException(
'Ambiente debe ser TEST o PRODUCTION'
);
}
return true;
}
}
  • 200 OK: Operación exitosa
  • 201 Created: Configuración creada exitosamente
  • 400 Bad Request: Datos inválidos en la solicitud
  • 401 Unauthorized: Token de autorización inválido
  • 404 Not Found: Cuenta no encontrada
  • 422 Unprocessable Entity: Error de validación en los datos
  • 500 Internal Server Error: Error interno del servidor
  • Valide todos los datos antes del envío
  • Use conexiones HTTPS exclusivamente
  • Implemente rate limiting para prevenir abuso
  • Registre todas las operaciones para auditoría
  • Implemente caché para datos frecuentemente accedidos
  • Use paginación para listados extensos
  • Optimice consultas a base de datos
  • Considere operaciones asíncronas para procesos largos
  • Implemente reintentos con backoff exponencial
  • Proporcione mensajes de error descriptivos
  • Registre errores para análisis posterior
  • Implemente circuit breakers para servicios externos
  • Registre métricas de rendimiento
  • Monitoree tasas de error
  • Implemente alertas para operaciones críticas
  • Use logging estructurado
const migrateCompanyData = async (companies) => {
const results = [];
for (const company of companies) {
try {
// Validar datos antes de migración
validateCompanyData(company);
// Actualizar cuenta
const result = await updateAccount(company);
// Completar configuración si es necesario
if (!result.payload.has_configured) {
await completeConfiguration(company.account_id);
}
results.push({ success: true, company: company.name });
} catch (error) {
results.push({
success: false,
company: company.name,
error: error.message
});
}
}
return results;
};
class CompanySync
{
public function syncWithExternalSystem($accountId)
{
try {
// Obtener datos del sistema externo
$externalData = $this->getExternalData($accountId);
// Mapear datos al formato de la API
$mappedData = $this->mapExternalData($externalData);
// Actualizar cuenta
$response = $this->updateAccount($mappedData);
Log::info("Cuenta {$accountId} sincronizada exitosamente");
return $response;
} catch (Exception $e) {
Log::error("Error sincronizando cuenta {$accountId}: {$e->getMessage()}");
throw $e;
}
}
}
  • RUC: Debe ser válido según algoritmo de verificación ecuatoriano
  • Ambiente: Solo se permiten valores “TEST” y “PRODUCTION”
  • RIMPE: Régimen Impositivo para Microempresas (0 = No, 1 = Sí)
  • Moneda: Actualmente soporta “DOLAR” y “PESO”
  • Configuración: Una vez completada, algunos campos no pueden modificarse
  • Auditoría: Todas las operaciones quedan registradas en logs del sistema
  • Validaciones: Se aplican reglas fiscales ecuatorianas en tiempo real