API de Organizaciones
Descripción
API para gestionar organizaciones a las que tiene acceso el usuario autenticado. Incluye consulta de organizaciones asignadas, información detallada por RUC y registro de facturación electrónica.
Base URL
/api/v1/organizations
Autenticación requerida: Bearer Token (Sanctum)
Endpoints
1. Obtener Organizaciones del Usuario
GET /api/v1/organizations
Obtiene todas las organizaciones asignadas al usuario autenticado, incluyendo información del token actual.
Headers
Authorization: Bearer {token}
Accept: application/json
Respuesta Exitosa (200)
{
"data": [
{
"id": 1,
"name": "Empresa Demo S.A.",
"ruc": "1234567-8-123456"
},
{
"id": 2,
"name": "Comercial XYZ",
"ruc": "9876543-1-654321"
}
],
"token_organization": {
"organization_id": 1,
"point_sale": "001-001",
"name": "Token Principal"
}
}
2. Obtener Información de Organización por RUC
GET /api/v1/organizations/{ruc}
Obtiene información detallada de una organización específica usando su RUC.
Parámetros de Ruta
ruc(string, requerido): RUC de la organización (ej: "1234567-8-123456")
Headers
Authorization: Bearer {token}
Accept: application/json
Respuesta Exitosa (200)
{
"id": 1,
"codigo_provincia_distrito": "8-1",
"coordenadas_geograficas": "8.9824,-79.5199",
"provincia_id": 8,
"distrito_id": 1,
"corregimiento_id": 1,
"province_name": "PANAMA",
"district_name": "PANAMA",
"corregimiento_name": "SAN FELIPE",
"nombre": "Empresa Demo S.A.",
"ruc": "1234567-8-123456",
"dv": "8",
"tipo_contribuyente_id": 1,
"telefono": "507-1234-5678",
"direccion_sucursal": "Calle 50, Edificio Torre del Sol",
"email_empresa": "contacto@empresademo.com",
"id_empresa": "EMP001",
"province": {
"id": 8,
"nombre": "PANAMA",
"codigo": "8"
},
"district": {
"id": 1,
"nombre": "PANAMA",
"codigo": "8"
},
"corregimiento": {
"id": 1,
"nombre": "SAN FELIPE",
"codigo": "1"
},
"contributor_type": {
"id": 1,
"nombre": "Natural"
},
"company": {
"id": 1,
"nombre": "Matriz Principal"
},
"type_contribution_name": "Natural",
"token_organization": {
"organization_id": 1,
"point_sale": "001-001",
"name": "Token Principal"
}
}
Respuesta de Error (404)
{
"token_organization": {
"organization_id": 1,
"point_sale": "001-001",
"name": "Token Principal"
}
}
3. Registrar Emisión de Facturación Electrónica
POST /api/v1/organizations/emission_fe
Registra una factura para verificación de emisión desde ACI-CLOUD.
Headers
Authorization: Bearer {token}
Accept: application/json
Content-Type: application/json
Cuerpo de la Petición
{
"aci_organizacion_id": "ORG123456",
"zoho_invoice_id": "INV789012",
"date": "2025-01-15",
"status": "pending",
"type": "invoice",
"message": "Factura pendiente de procesamiento"
}
Respuesta Exitosa (200)
{
"id": 1,
"aci_organizacion_id": "ORG123456",
"zoho_invoice_id": "INV789012",
"date": "2025-01-15T00:00:00.000000Z",
"status": "pending",
"type": "invoice",
"message": "Factura pendiente de procesamiento",
"created_at": "2025-01-15T10:30:00.000000Z",
"updated_at": "2025-01-15T10:30:00.000000Z"
}
Estructura de Datos
Organización (Lista)
| Campo | Tipo | Descripción |
|---|---|---|
id |
integer | ID único de la organización |
name |
string | Nombre comercial de la organización (pretty_name) |
ruc |
string | RUC de la organización |
Organización (Detallada)
| Campo | Tipo | Descripción |
|---|---|---|
id |
integer | ID único de la organización |
codigo_provincia_distrito |
string | Código de provincia-distrito |
coordenadas_geograficas |
string | Coordenadas GPS (latitud,longitud) |
provincia_id |
integer | ID de la provincia |
distrito_id |
integer | ID del distrito |
corregimiento_id |
integer | ID del corregimiento |
province_name |
string | Nombre de la provincia |
district_name |
string | Nombre del distrito |
corregimiento_name |
string | Nombre del corregimiento |
nombre |
string | Razón social completa |
ruc |
string | RUC completo |
dv |
string | Dígito verificador |
tipo_contribuyente_id |
integer | ID del tipo de contribuyente |
telefono |
string | Teléfono de contacto |
direccion_sucursal |
string | Dirección física |
email_empresa |
string | Email corporativo |
id_empresa |
string | Identificador interno |
Token Organization
| Campo | Tipo | Descripción |
|---|---|---|
organization_id |
integer | ID de la organización del token |
point_sale |
string | Punto de venta asignado |
name |
string | Nombre del token |
Emisión FE
| Campo | Tipo | Descripción |
|---|---|---|
aci_organizacion_id |
string | ID de organización en ACI |
zoho_invoice_id |
string | ID de factura en Zoho |
date |
date | Fecha de la emisión |
status |
string | Estado de la factura |
type |
string | Tipo de documento |
message |
string | Mensaje descriptivo (opcional) |
Validaciones
EmissionFERequest
| Campo | Tipo | Validación |
|---|---|---|
aci_organizacion_id |
string | Requerido, máximo 20 caracteres |
zoho_invoice_id |
string | Requerido, máximo 20 caracteres |
date |
date | Requerido, formato fecha válido |
status |
string | Requerido, máximo 15 caracteres |
type |
string | Requerido, máximo 15 caracteres |
message |
string | Opcional |
Casos de Uso
1. Listar Organizaciones del Usuario
curl -X GET "http://localhost:8000/api/v1/organizations" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
2. Consultar Organización por RUC
curl -X GET "http://localhost:8000/api/v1/organizations/1234567-8-123456" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
3. Registrar Emisión FE
curl -X POST "http://localhost:8000/api/v1/organizations/emission_fe" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"aci_organizacion_id": "ORG123456",
"zoho_invoice_id": "INV789012",
"date": "2025-01-15",
"status": "pending",
"type": "invoice",
"message": "Factura pendiente"
}'
Códigos de Estado HTTP
| Código | Descripción |
|---|---|
| 200 | Operación exitosa |
| 401 | No autenticado |
| 403 | Sin permisos |
| 404 | Organización no encontrada |
| 422 | Error de validación |
| 500 | Error interno del servidor |
Notas Adicionales
- Autenticación obligatoria: Todos los endpoints requieren Bearer Token
- Multi-tenant: Cada usuario solo ve sus organizaciones asignadas
- Token Organization: Siempre se incluye información del token actual
- RUC único: Cada organización tiene un RUC único en formato panameño
- Ubicación geográfica: Incluye relaciones con provincia, distrito y corregimiento
- UpdateOrCreate: El endpoint emission_fe actualiza o crea registros basado en aci_organizacion_id y zoho_invoice_id
- Transformer específico: La respuesta detallada usa OrganizationTransform que incluye relaciones anidadas
- Lista simplificada: La lista usa OrganizationArrTransform que solo devuelve campos básicos
- Middleware: Incluye check.activate.organization para validación adicional } ], "token_organization": { "organization_id": 1, "point_sale": "001", "name": "Token Principal" } }
### 2. Obtener Información de Organización por RUC
**GET** `/api/v1/organizations/{ruc}`
Obtiene los detalles de una organización específica por su RUC.
#### Parámetros de Ruta
- `ruc` (string, requerido): RUC de la organización
#### Headers
```http
Authorization: Bearer {token}
Accept: application/json
Respuesta Exitosa (200)
{
"id": 1,
"codigo_provincia_distrito": "8-8",
"coordenadas_geograficas": "8.9936,-79.5197",
"provincia_id": 8,
"distrito_id": 1,
"corregimiento_id": 1,
"province_name": "Panamá",
"district_name": "Panamá",
"corregimiento_name": "Ancón",
"nombre": "Empresa Ejemplo S.A.",
"ruc": "155757563-2-2024",
"dv": "75",
"tipo_contribuyente_id": 1,
"telefono": "+507 6000-0000",
"direccion_sucursal": "Calle 50, Edificio Torre Global, Piso 15",
"email_empresa": "contacto@empresa.com",
"id_empresa": "EMP001",
"province": {
"id": 8,
"name": "Panamá",
"code": "8"
},
"district": {
"id": 1,
"name": "Panamá",
"code": "8-1"
},
"corregimiento": {
"id": 1,
"name": "Ancón",
"code": "8-1-1"
},
"contributor_type": {
"id": 1,
"name": "Contribuyente Ordinario"
},
"company": {
"id": 1,
"name": "Empresa Principal",
"status": "active"
},
"type_contribution_name": "Persona Jurídica",
"token_organization": {
"organization_id": 1,
"point_sale": "001",
"name": "Token Principal"
}
}
Respuesta de Error (404)
{
"error": "Organization not found",
"message": "No se encontró organización con el RUC proporcionado"
}
3. Registrar Emisión de Facturación Electrónica
POST /api/v1/organizations/emission_fe
Registra una factura para verificación de emisión desde ACI-CLOUD.
Headers
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
Cuerpo de la Solicitud
{
"aci_organizacion_id": "ORG123456",
"zoho_invoice_id": "INV789012",
"date": "2024-01-20",
"status": "pending",
"type": "invoice",
"message": "Factura registrada para emisión"
}
Validaciones
| Campo | Tipo | Requerido | Validación |
|---|---|---|---|
aci_organizacion_id |
string | ✅ | Máximo 20 caracteres |
zoho_invoice_id |
string | ✅ | Máximo 20 caracteres |
date |
string | ✅ | Fecha válida (YYYY-MM-DD) |
status |
string | ✅ | Máximo 15 caracteres |
type |
string | ✅ | Máximo 15 caracteres |
message |
string | ❌ | Mensaje opcional |
Respuesta Exitosa (200)
{
"id": 15,
"aci_organizacion_id": "ORG123456",
"zoho_invoice_id": "INV789012",
"date": "2024-01-20T00:00:00.000000Z",
"status": "pending",
"type": "invoice",
"message": "Factura registrada para emisión",
"created_at": "2024-01-20T10:30:00.000000Z",
"updated_at": "2024-01-20T10:30:00.000000Z"
}
Respuesta de Error (422)
{
"message": "Los datos enviados no son válidos.",
"errors": {
"aci_organizacion_id": [
"El campo aci organizacion id es obligatorio."
],
"date": [
"El campo date no corresponde con una fecha válida."
]
}
}
4. Obtener Información del Usuario Autenticado
GET /api/user
Obtiene la información completa del usuario autenticado, incluyendo sus organizaciones asociadas.
Headers
Authorization: Bearer {token}
Accept: application/json
Respuesta Exitosa (200)
{
"id": 1,
"name": "Juan Pérez",
"email": "juan.perez@empresa.com",
"organization_id": 1,
"organization": {
"id": 1,
"name": "Empresa Principal",
"ruc": "155757563-2-2024"
},
"organizations": [
{
"id": 1,
"name": "Empresa Principal"
},
{
"id": 2,
"name": "Sucursal Norte"
}
],
"import_configuration": {
"auto_import": true,
"default_format": "xml"
},
"token_organization": {
"organization_id": 1,
"point_sale": "001",
"name": "Token Activo"
}
}
Estructura de Datos
Organización Completa
| Campo | Tipo | Descripción |
|---|---|---|
id |
integer | ID único de la organización |
codigo_provincia_distrito |
string | Código geográfico (ej: "8-8") |
coordenadas_geograficas |
string | Coordenadas GPS |
provincia_id |
integer | ID de la provincia |
distrito_id |
integer | ID del distrito |
corregimiento_id |
integer | ID del corregimiento |
province_name |
string | Nombre de la provincia |
district_name |
string | Nombre del distrito |
corregimiento_name |
string | Nombre del corregimiento |
nombre |
string | Nombre de la organización |
ruc |
string | RUC de la organización |
dv |
string | Dígito verificador |
tipo_contribuyente_id |
integer | ID del tipo de contribuyente |
telefono |
string | Teléfono de contacto |
direccion_sucursal |
string | Dirección de la sucursal |
email_empresa |
string | Email de la empresa |
id_empresa |
string | ID interno de la empresa |
Token Organization
| Campo | Tipo | Descripción |
|---|---|---|
organization_id |
integer | ID de la organización del token |
point_sale |
string | Punto de venta (ej: "001") |
name |
string | Nombre del token |
Casos de Uso
1. Obtener Organizaciones del Usuario
curl -X GET "http://localhost:8000/api/v1/organizations" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
2. Consultar Organización por RUC
curl -X GET "http://localhost:8000/api/v1/organizations/155757563-2-2024" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
3. Registrar Emisión FE
curl -X POST "http://localhost:8000/api/v1/organizations/emission_fe" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"aci_organizacion_id": "ORG123456",
"zoho_invoice_id": "INV789012",
"date": "2024-01-20",
"status": "pending",
"type": "invoice"
}'
4. Obtener Información del Usuario
curl -X GET "http://localhost:8000/api/user" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
Códigos de Estado HTTP
| Código | Descripción |
|---|---|
| 200 | Operación exitosa |
| 401 | No autorizado |
| 404 | Recurso no encontrado |
| 422 | Error de validación |
| 500 | Error interno del servidor |
Notas Adicionales
- Las organizaciones se obtienen según las asignadas al usuario autenticado
- El RUC debe seguir el formato panameño válido
- La información token_organization incluye datos del token actual
- Las emisiones FE se registran para tracking desde ACI-CLOUD
- Todas las fechas se manejan en formato ISO 8601
- El endpoint
/api/userno requiere middleware de organización activa