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 |
| 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") |
| 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 |