Saltar al contenido principal

Esquema de datos

🏷️ Modelos de artículos

Los artículos en Ninox pueden tener diferentes tipos de variantes según su configuración:

TipoTalleColor

export enum TipoTalleColor {
NINGUNO = 0, // Artículo sin variantes
TALLES = 1, // Solo variantes de talle
COLORES = 2, // Solo variantes de color
TALLES_COLORES = 3 // Variantes de talle y color
}

Articulo (Estructura compleja)

Modelo principal con arrays anidados para variantes y etiquetas:

export interface Articulo {
articuloId: number;
codigo: string;
descripcion: string;
descripcionWeb: string;
nombre: string; // Generado automáticamente según código y descripción
talleColor: TipoTalleColor;

// Precios por nivel
precio1: number;
precio2: number;
precio3: number;
precio4: number;
precio5: number;

stockTotal: number;

// Arrays relacionados
curva: ArticuloCurva[];
tags: ArticuloTag[];
}

ArticuloCurva

Representa las variantes de stock por talle/color:

export interface ArticuloCurva {
articuloId: number;
colorId?: number;
talleId?: number;
colorNombre: string;
colorCodigo: string;
talleNombre: string;
talleCodigo: string;
unidades: number; // Stock disponible para esta variante
}

ArticuloConCurva (Estructura plana)

Modelo optimizado donde cada variante es un registro independiente, ideal para procesamiento masivo:

export interface ArticuloConCurva {
// Información básica del artículo
articuloId: number;
codigo: string;
descripcion: string;
descripcionWeb: string;
nombre: string;
talleColor: TipoTalleColor;

// Precios
precio1: number;
precio2: number;
precio3: number;
precio4: number;
precio5: number;

// Información de variante específica
colorId?: number;
talleId?: number;
colorNombre: string;
colorCodigo: string;
colorHex: string; // Código hexadecimal del color
talleNombre: string;
talleCodigo: string;

// Stock y clasificaciones
unidades: number;
etiquetasIds: string; // IDs separados por coma
etiquetasNombres: string; // Nombres separados por coma
categoriasIds: string; // IDs separados por coma
categoriasNombres: string; // Nombres separados por coma

// Estado del artículo
eliminado: boolean; // Indica si el artículo fue desactivado de la integración
}

🏪 Sistema de etiquetas y categorías

TipoTag

export enum TipoTag {
TODAS = -1,
TAG = 0, // Etiqueta libre
CATEGORIA, // Categoría de producto
MARCA, // Marca del producto
TEMPORADA // Temporada/colección
}

ArticuloTag

export interface ArticuloTag {
articuloId: number;
articuloTagId: number;
tipo: TipoTag;
tagId: number;
tagNombre: string;
padreId?: number; // Para categorías jerárquicas
destacada: boolean; // Si es una etiqueta destacada
}
Etiquetas vs Categorías

En Ninox, tanto las etiquetas como las categorías se manejan mediante el sistema de Tags, diferenciándose por el campo tipo.

🛒 Modelos de pedidos

CondicionIva

Condiciones fiscales según AFIP:

enum CondicionIva {
SIN_CATEGORIA = 0,
CONSUMIDOR_FINAL = 1,
RESPONSABLE_INSCRIPTO = 2,
MONOTRIBUTO = 3,
EXENTO = 4,
RESPONSABLE_NO_INSCRIPTO = 5,
}

PedidoTerceros

Estructura principal para crear un pedido:

export interface PedidoTerceros {
ordenId: number; // ID único de tu sistema
numero: number; // Número de orden
detalle: string; // Descripción del pedido

// Direcciones
direccionEnvio: DireccionTerceros;
direccionFacturacion: DireccionTerceros;

// Productos y usuario
productos: ArticuloTerceros[];
usuario: UsuarioTerceros;

// Cálculos financieros
subtotal: number;
descuento: number;
envio: number;
recargo: number;
total: number; // Debe ser: subtotal + envio + recargo - descuento
}

DireccionTerceros

export interface DireccionTerceros {
provincia: string;
localidad: string;
direccion: string;
codigoPostal: string;
}

UsuarioTerceros

Información del cliente que realiza el pedido:

export interface UsuarioTerceros {
nombre: string;
email: string;
dni: string; // Documento Nacional de Identidad
cuit: string; // CUIT/CUIL (opcional según condición)
telefono: string;
condicion: CondicionIva;
}

ArticuloTerceros

Items del pedido:

export interface ArticuloTerceros {
articuloId: number;
precio: number; // Precio unitario
talleId?: number; // ID del talle (opcional)
colorId?: number; // ID del color (opcional)
cantidad: number; // Cantidad solicitada
}
Comportamiento del pedido

Dependiendo de la configuración de tu integración, un PedidoTerceros puede resultar en:

  • Pedido de venta: Venta inmediata con facturación
  • Preventa: Reserva de stock sin facturar

📋 Modelos de respuesta

PedidoResultado

Respuesta al crear un pedido exitosamente:

export interface PedidoResultado {
facturaId: number; // Si es 0, el pedido no se realizó
numero: number; // Número de factura generada
pVNumero: number; // Número de preventa (si aplica)
sref: string; // Referencia del sistema
estado: number; // Estado actual del pedido

// Metadatos adicionales
datos: { [key: string]: string };

// Facturación electrónica
electronica: boolean;
cae: string; // Código de Autorización Electrónico
caevencimiento: string; // Fecha de vencimiento del CAE
resultado: string; // Resultado de la operación
observaciones: string; // Observaciones adicionales
errorFE: string; // Error de facturación electrónica (si hay)

saldo?: number; // Saldo pendiente (opcional)
errores: boolean; // Indica si hubo errores
}

NxResultado

Respuesta estándar del sistema para operaciones generales:

export enum NxTipoResultado {
ERROR = 0, // Operación fallida
OK = 1, // Operación exitosa
VALIDACION = 2 // Error de validación
}

export class NxResultado {
tipo: NxTipoResultado;
id: number; // ID relacionado a la operación
data: object; // Datos adicionales de respuesta
valores: string[]; // Valores retornados
mensajes: string[]; // Mensajes informativos
errores: string[]; // Lista de errores (si los hay)
}

📊 Modelos adicionales

Entidad

export interface Entidad {
entidadId: number;
version: number;
nombre: string;
razonSocial: string;
contacto: string;
provinciaId?: number;
localidadId?: number;
cuit: string;
dni: string;
telefono: string;
direccion: string;
codigoPostal: string;
email: string;
}

Comprobantes

export interface Factura {
facturaId: number;
comprobanteTipo: number;

numero: number;
numeroFull: string;
detalle: string;

sucursalId?: number;
sucursalNombre: string;
puntoVentaId?: number;

depositoId: number;
depositoNombre: string;

entidadId: number;
entidadNombre: string;
entidadRazonSocial: string;
entidadContacto: string;
entidadDireccion: string;
entidadEmail: string;

subtotal: number;
descuento: number;
envio: number;
recargo: number;
iva: number;
subTotal2: number;
total: number;

items: FacturaItem[];
}

export interface FacturaItem {
facturaItemid: number;
facturaId: number;

articuloId: number;
talleId?: number;
colorId?: number;

cantidad: number;
precio: number;
subTotal: number;
descuento: number;
total: number;
}