Saltar a contenido

Entidades SAP B1 — Modelo de Datos

Entidades del Service Layer involucradas en el ciclo de oportunidad de venta. Complemento tecnico de diagramas_oportunidades.md. Generado: febrero 2026

Referencia de nombres

Entidad Codigo SAP Descripcion
SalesOpportunity OOPR Oportunidad de venta (nodo central)
OpportunityLine OOPR.Lines Linea de etapa dentro de la oportunidad
Quotation OQUT Cotizacion al cliente
QuotationTextLine OQUT.SpecialLines Linea de texto libre (draft)
QuotationItemLine OQUT.Lines Linea con item real (formal)
SalesOrder ORDR Pedido de venta
Activity OACT Tarea, reunion, llamada
Item OITM Producto o servicio en catalogo
PurchaseOrder OPOR Orden de compra al proveedor
GoodsReceipt OPDN Recepcion de mercaderia

A3. Diagrama de entidades

Diagrama ER

erDiagram
    SalesOpportunity ||--o{ OpportunityLine : "lines"
    SalesOpportunity ||--o{ Activity : "activities"
    OpportunityLine }o--o| Quotation : "DocumentNumber"
    OpportunityLine }o--o| SalesOrder : "DocumentNumber"
    Quotation ||--o{ QuotationTextLine : "texto libre (draft)"
    Quotation ||--o{ QuotationItemLine : "items reales (formal)"
    QuotationItemLine }o--|| Item : "ItemCode"
    Quotation |o--|| SalesOrder : "conversion"
    Activity }o--|| SalesOpportunity : "SalesOpportunityId"
    PurchaseOrder ||--o{ PurchaseOrderLine : "lines"
    PurchaseOrderLine }o--|| Item : "ItemCode"
    PurchaseOrder |o--|| GoodsReceipt : "recepcion"

    SalesOpportunity {
        int OpportunityId PK
        string OpportunityName
        string CardCode FK "Cliente"
        int SalesPerson
        date StartDate
        date PredictedClosingDate
        date CloseDate
        decimal MaxLocalTotal
        int CurrentStageNo
        decimal ClosingPercentage
        enum Status "sos_Open | sos_Won | sos_Missed"
        string ReasonForClosing
        decimal WeightedSumLC "Calculado por SAP"
    }

    OpportunityLine {
        int LineNum PK
        int StageKey FK "SalesStages"
        decimal PercentageRate
        enum DocumentType "bodt_Quotation | bodt_Order | bodt_MinusOne"
        int DocumentNumber FK "Quotation o SalesOrder"
        date StartDate
        date ClosingDate
    }

    Quotation {
        int DocEntry PK
        int DocNum
        string CardCode FK "Cliente"
        date DocDate
        date DocDueDate
        decimal DocTotal "0 si solo tiene lineas de texto"
        enum DocStatus "bost_Open | bost_Close"
    }

    QuotationTextLine {
        int LineNum PK
        int AfterLineNumber
        int OrderNumber
        enum LineType "dslt_Text"
        string LineText "Descripcion + precio en texto libre"
    }

    QuotationItemLine {
        int LineNum PK
        string ItemCode FK "Item"
        string ItemDescription
        decimal Quantity
        decimal UnitPrice
        decimal LineTotal
    }

    SalesOrder {
        int DocEntry PK
        int DocNum
        string CardCode FK "Cliente"
        date DocDate
        decimal DocTotal
        int BaseEntry FK "Quotation.DocEntry (origen)"
        enum DocStatus "bost_Open | bost_Close"
    }

    Activity {
        int ActivityCode PK
        int SalesOpportunityId FK "SalesOpportunity"
        int SalesOpportunityLine FK "Linea de etapa"
        enum ActivityType "meeting | call | task | email"
        int HandledBy FK "Empleado asignado"
        date ActivityDate
        enum Status "open | closed"
        string Notes
    }

    Item {
        string ItemCode PK
        string ItemName
        string ItemType "itItems | itService"
        decimal PurchasePrice "Precio costo"
        decimal SalesPrice "Precio venta sugerido"
        string SupplierCode FK "Proveedor principal"
    }

    PurchaseOrder {
        int DocEntry PK
        int DocNum
        string CardCode FK "Proveedor"
        date DocDate
        decimal DocTotal
        enum DocStatus "bost_Open | bost_Close"
    }

    PurchaseOrderLine {
        int LineNum PK
        string ItemCode FK "Item"
        decimal Quantity
        decimal UnitPrice
        decimal LineTotal
    }

    GoodsReceipt {
        int DocEntry PK
        int DocNum
        string CardCode FK "Proveedor"
        date DocDate
        int BaseEntry FK "PurchaseOrder.DocEntry"
        decimal DocTotal
    }

Relaciones clave

Origen Destino Campo de vinculo Tipo
SalesOpportunity OpportunityLine OpportunityId 1:N
OpportunityLine Quotation DocumentNumber (type=bodt_Quotation) N:1
OpportunityLine SalesOrder DocumentNumber (type=bodt_Order) N:1
Activity SalesOpportunity SalesOpportunityId + Line N:1
Quotation SalesOrder DocEntry → BaseEntry 1:1
QuotationItemLine Item ItemCode N:1
PurchaseOrderLine Item ItemCode N:1
PurchaseOrder GoodsReceipt DocEntry → BaseEntry 1:1

Quotation: draft vs formal

Aspecto Draft (Etapa 2) Formal (Etapa 4)
Lineas QuotationTextLine (dslt_Text) QuotationItemLine con ItemCode real
Totales DocTotal = 0 (precio en texto) DocTotal calculado por SAP
Items SAP No existen Existen en Item
Creado por COMP (calcula margen) COMP (formaliza con items reales)
Proposito Propuesta orientativa para negociacion Documento financiero formal

Nota: PurchaseOrder y GoodsReceipt no tienen vinculo directo con SalesOpportunity en SAP. La trazabilidad se mantiene a traves de la Activity de Compra (Etapa 4) y los comentarios Firebase.


A4. Campos por entidad

Convenciones: Sistema = SAP lo asigna automaticamente. Calculado = mantenido por SAP, no se setea manualmente.

SalesOpportunity

Campo Tipo Quien Cuando Default
OpportunityId int (PK) Sistema Alta Auto
OpportunityName string VEND Alta — (obligatorio)
CardCode string (FK) VEND Alta — (obligatorio)
SalesPerson int Sistema Alta Empleado logueado
StartDate date Sistema Alta Hoy
PredictedClosingDate date VEND Alta Hoy + 30 dias
CloseDate date Sistema Cierre null hasta cierre
MaxLocalTotal decimal VEND Alta — (obligatorio)
CurrentStageNo int Sistema Cambio de etapa 1 (Lead)
ClosingPercentage decimal Sistema Cambio de etapa 10
Status enum Sistema Alta / Cierre sos_Open
ReasonForClosing string VEND Cierre perdido null (obligatorio si Missed)
WeightedSumLC decimal Calculado Auto MaxLocalTotal * ClosingPercentage / 100

OpportunityLine

Campo Tipo Quien Cuando Default
LineNum int (PK) Sistema Cambio de etapa Auto
StageKey int (FK) Sistema Cambio de etapa 1-5 segun etapa
PercentageRate decimal Sistema Cambio de etapa 10/30/50/80/100
DocumentType enum Sistema Vinculo documento bodt_MinusOne
DocumentNumber int (FK) Sistema Vinculo documento -1
StartDate date Sistema Entrada a etapa Hoy
ClosingDate date Sistema Salida de etapa null

Quotation

Campo Tipo Quien Cuando Default
DocEntry int (PK) Sistema Creacion Auto
DocNum int Sistema Creacion Secuencial
CardCode string (FK) COMP/VEND Creacion Mismo de la oportunidad
DocDate date Sistema Creacion Hoy
DocDueDate date COMP/VEND Creacion Hoy + validez
DocTotal decimal Calculado Auto 0 en draft; calculado en formal
DocStatus enum Sistema Creacion/Cierre bost_Open

QuotationTextLine (lineas de texto — draft)

Campo Tipo Quien Cuando Default
LineNum int (PK) Sistema Creacion Auto
AfterLineNumber int COMP Creacion -1
OrderNumber int COMP Creacion Secuencial
LineType enum Sistema Creacion dslt_Text
LineText string COMP Creacion/Edicion — (formato libre: "PRODUCTO - SPECS - PRECIO")

QuotationItemLine (lineas de item — formal)

Campo Tipo Quien Cuando Default
LineNum int (PK) Sistema Formalizacion Auto
ItemCode string (FK) COMP Formalizacion (Etapa 4) — (obligatorio)
ItemDescription string Sistema Al asignar ItemCode De Item.ItemName
Quantity decimal COMP Formalizacion 1
UnitPrice decimal COMP Formalizacion Precio negociado
LineTotal decimal Calculado Auto Quantity * UnitPrice

SalesOrder

Se genera por conversion del Quotation formal. VEND ejecuta la conversion.

Campo Tipo Quien Cuando Default
DocEntry int (PK) Sistema Conversion Auto
DocNum int Sistema Conversion Secuencial
CardCode string (FK) Sistema Conversion Heredado del Quotation
DocDate date Sistema Conversion Hoy
DocTotal decimal Calculado Auto Suma de lineas
BaseEntry int (FK) Sistema Conversion Quotation.DocEntry
DocStatus enum Sistema Conversion bost_Open

Activity

Campo Tipo Quien Cuando Default
ActivityCode int (PK) Sistema Creacion Auto
SalesOpportunityId int (FK) Sistema Creacion — (obligatorio)
SalesOpportunityLine int (FK) Sistema Creacion Linea de etapa actual
ActivityType enum VEND Creacion task (Cotizacion/Compra), meeting/call/email otros
Subject string Sistema Creacion "Cotizacion" o "Compra" (fijo, no editable)
HandledBy int (FK) VEND Creacion Empleado COMP asignado
ActivityDate date Sistema Creacion Hoy
Status enum COMP Creacion/Cierre open
Notes string VEND Creacion Descripcion de solicitud

El estado "En Proceso" es logico (modelado en la UI). SAP solo conoce open y closed. El campo Subject diferencia Cotizacion de Compra — ambas son task en ActivityType.

Entidades estandar SAP (campos relevantes al flujo)

Item — Creado por COMP en Etapa 4.

Campo Tipo Default
ItemCode string (PK) — (obligatorio)
ItemName string — (obligatorio)
ItemType enum itItems / itService
PurchasePrice decimal Precio costo proveedor
SalesPrice decimal Precio venta sugerido
SupplierCode string (FK) Proveedor principal

PurchaseOrder — Generada por COMP en Etapa 4.

Campo Tipo Default
DocEntry int (PK) Auto
CardCode string (FK) Proveedor
Lines → ItemCode string (FK) Item del catalogo
Lines → Quantity decimal Cantidad requerida
Lines → UnitPrice decimal Precio costo

GoodsReceipt — Recepcion de mercaderia contra PurchaseOrder.

Campo Tipo Default
DocEntry int (PK) Auto
DocDate date Hoy
BaseEntry int (FK) PurchaseOrder.DocEntry