Skip to content

Commit 06201f9

Browse files
committed
updates related to recent changes to the OAM
1 parent 3a0f327 commit 06201f9

File tree

4 files changed

+76
-29
lines changed

4 files changed

+76
-29
lines changed

engine/plugins/api/gleif/fuzzy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func (fc *fuzzyCompletions) nameMatch(o *org.Organization, name string) bool {
156156
}
157157

158158
func (fc *fuzzyCompletions) locMatch(e *et.Event, orgent *dbt.Entity, rec *leiRecord) bool {
159-
if edges, err := e.Session.Cache().OutgoingEdges(orgent, time.Time{}, "location"); err == nil {
159+
if edges, err := e.Session.Cache().OutgoingEdges(orgent, time.Time{}, "legal_address", "hq_address", "location"); err == nil {
160160
for _, edge := range edges {
161161
if a, err := e.Session.Cache().FindEntityById(edge.ToEntity.ID); err == nil && a != nil {
162162
if loc, ok := a.Asset.(*contact.Location); ok &&

engine/plugins/api/gleif/org_lei.go

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,29 +48,55 @@ func (g *gleif) leiToOrgEntity(e *et.Event, ident *dbt.Entity) *dbt.Entity {
4848
func (g *gleif) updateOrgFromLEIRecord(e *et.Event, orgent *dbt.Entity, lei *leiRecord) {
4949
o := orgent.Asset.(*org.Organization)
5050

51+
if _, err := g.createLEIFromRecord(e, orgent, lei); err != nil {
52+
msg := fmt.Sprintf("failed to create the LEI Identifier from the record: %s", err.Error())
53+
e.Session.Log().Error(msg, slog.Group("plugin", "name", g.name, "handler", g.name))
54+
}
55+
5156
o.LegalName = lei.Attributes.Entity.LegalName.Name
57+
if o.LegalName != "" {
58+
_ = g.addIdentifiersToOrg(e, orgent, general.LegalName, []string{o.LegalName})
59+
}
60+
5261
o.FoundingDate = lei.Attributes.Entity.CreationDate
62+
o.Jurisdiction = lei.Attributes.Entity.Jurisdiction
63+
o.RegistrationID = lei.Attributes.Entity.RegisteredAs
5364
if lei.Attributes.Entity.Status == "ACTIVE" {
5465
o.Active = true
5566
} else {
5667
o.Active = false
5768
}
5869

59-
street := strings.Join(lei.Attributes.Entity.HeadquartersAddress.AddressLines, " ")
60-
city := lei.Attributes.Entity.HeadquartersAddress.City
61-
province := lei.Attributes.Entity.HeadquartersAddress.Region
62-
if parts := strings.Split(province, "-"); len(parts) > 1 {
63-
province = parts[1]
70+
addr := g.buildAddrFromLEIAddress(&lei.Attributes.Entity.LegalAddress)
71+
_ = g.addAddress(e, orgent, general.SimpleRelation{Name: "legal_address"}, addr)
72+
73+
addr = g.buildAddrFromLEIAddress(&lei.Attributes.Entity.HeadquartersAddress)
74+
_ = g.addAddress(e, orgent, general.SimpleRelation{Name: "hq_address"}, addr)
75+
76+
for _, a := range lei.Attributes.Entity.OtherAddresses {
77+
addr = g.buildAddrFromLEIAddress(&a)
78+
_ = g.addAddress(e, orgent, general.SimpleRelation{Name: "location"}, addr)
6479
}
65-
postalCode := lei.Attributes.Entity.HeadquartersAddress.PostalCode
66-
country := lei.Attributes.Entity.HeadquartersAddress.Country
6780

68-
addr := fmt.Sprintf("%s %s %s %s %s", street, city, province, postalCode, country)
69-
_ = g.addAddress(e, orgent, general.SimpleRelation{Name: "location"}, addr)
81+
_ = g.addIdentifiersToOrg(e, orgent, general.BankIDCode, lei.Attributes.BIC)
82+
_ = g.addIdentifiersToOrg(e, orgent, general.MarketIDCode, lei.Attributes.MIC)
83+
_ = g.addIdentifiersToOrg(e, orgent, general.GlobalOCID, []string{lei.Attributes.OCID})
84+
_ = g.addIdentifiersToOrg(e, orgent, general.SPGlobalCompanyID, lei.Attributes.SPGlobal)
7085

7186
_, _ = e.Session.Cache().CreateEntity(orgent)
7287
}
7388

89+
func (g *gleif) buildAddrFromLEIAddress(addr *leiAddress) string {
90+
street := strings.Join(addr.AddressLines, " ")
91+
92+
province := addr.Region
93+
if parts := strings.Split(province, "-"); len(parts) > 1 {
94+
province = parts[1]
95+
}
96+
97+
return fmt.Sprintf("%s %s %s %s %s", street, addr.City, province, addr.PostalCode, addr.Country)
98+
}
99+
74100
func (g *gleif) addAddress(e *et.Event, orgent *dbt.Entity, rel oam.Relation, addr string) error {
75101
loc := support.StreetAddressToLocation(addr)
76102
if loc == nil {
@@ -88,20 +114,40 @@ func (g *gleif) addAddress(e *et.Event, orgent *dbt.Entity, rel oam.Relation, ad
88114
Confidence: g.source.Confidence,
89115
})
90116

91-
edge, err := e.Session.Cache().CreateEdge(&dbt.Edge{
92-
Relation: rel,
93-
FromEntity: orgent,
94-
ToEntity: a,
95-
})
96-
if err != nil && edge == nil {
117+
if err := g.createRelation(e.Session, orgent, rel, a); err != nil {
97118
e.Session.Log().Error(err.Error(), slog.Group("plugin", "name", g.name, "handler", g.name))
98119
return err
99120
}
100121

101-
_, _ = e.Session.Cache().CreateEdgeProperty(edge, &general.SourceProperty{
102-
Source: g.source.Name,
103-
Confidence: g.source.Confidence,
104-
})
122+
return nil
123+
}
124+
125+
func (g *gleif) addIdentifiersToOrg(e *et.Event, orgent *dbt.Entity, idtype string, ids []string) error {
126+
for _, id := range ids {
127+
if id == "" {
128+
continue
129+
}
130+
131+
oamid := &general.Identifier{
132+
UniqueID: fmt.Sprintf("%s:%s", idtype, id),
133+
EntityID: id,
134+
Type: idtype,
135+
}
136+
137+
ident, err := e.Session.Cache().CreateAsset(oamid)
138+
if err != nil || ident == nil {
139+
return err
140+
}
141+
142+
_, _ = e.Session.Cache().CreateEntityProperty(ident, &general.SourceProperty{
143+
Source: g.source.Name,
144+
Confidence: g.source.Confidence,
145+
})
146+
147+
if err := g.createRelation(e.Session, orgent, general.SimpleRelation{Name: "id"}, ident); err != nil {
148+
return err
149+
}
150+
}
105151

106152
return nil
107153
}

engine/plugins/api/gleif/related.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ func (ro *relatedOrgs) store(e *et.Event, ident *dbt.Entity, leirec, parent *lei
180180
if err == nil {
181181
orgs = append(orgs, parentent)
182182
ro.plugin.updateOrgFromLEIRecord(e, parentent, parent)
183-
_, _ = ro.plugin.createLEIFromRecord(e, parentent, parent)
184183
}
185184
}
186185

@@ -192,7 +191,6 @@ func (ro *relatedOrgs) store(e *et.Event, ident *dbt.Entity, leirec, parent *lei
192191
if err == nil {
193192
orgs = append(orgs, childent)
194193
ro.plugin.updateOrgFromLEIRecord(e, childent, child)
195-
_, _ = ro.plugin.createLEIFromRecord(e, childent, child)
196194
}
197195
}
198196

engine/plugins/support/database.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,10 @@ func CreateServiceAsset(session et.Session, src *dbt.Entity, rel oam.Relation, s
238238
}
239239

240240
func CreateOrgAsset(session et.Session, obj *dbt.Entity, rel oam.Relation, o *org.Organization, src *et.Source) (*dbt.Entity, error) {
241-
if obj != nil && rel != nil && o != nil && src != nil {
241+
if o == nil || o.Name == "" {
242+
return nil, errors.New("missing the organization name")
243+
}
244+
if obj != nil && rel != nil && src != nil {
242245
if orgent := orgDedupChecks(session, obj, o); orgent != nil {
243246
if err := createRelation(session, obj, rel, orgent, src); err != nil {
244247
return nil, err
@@ -249,9 +252,9 @@ func CreateOrgAsset(session et.Session, obj *dbt.Entity, rel oam.Relation, o *or
249252

250253
name := strings.ToLower(o.Name)
251254
id := &general.Identifier{
252-
UniqueID: fmt.Sprintf("%s:%s", "org_name", name),
255+
UniqueID: fmt.Sprintf("%s:%s", general.OrganizationName, name),
253256
EntityID: name,
254-
Type: "org_name",
257+
Type: general.OrganizationName,
255258
}
256259

257260
if ident, err := session.Cache().CreateAsset(id); err == nil && ident != nil {
@@ -362,7 +365,7 @@ func orgNameRelatedToOrganization(session et.Session, orgent *dbt.Entity, name s
362365
func orgExistsAndSharesLocEntity(session et.Session, obj *dbt.Entity, o *org.Organization) (*dbt.Entity, error) {
363366
var locs []*dbt.Entity
364367

365-
if edges, err := session.Cache().OutgoingEdges(obj, time.Time{}, "location"); err == nil {
368+
if edges, err := session.Cache().OutgoingEdges(obj, time.Time{}, "legal_address", "hq_address", "location"); err == nil {
366369
for _, edge := range edges {
367370
if a, err := session.Cache().FindEntityById(edge.ToEntity.ID); err == nil && a != nil {
368371
if _, ok := a.Asset.(*contact.Location); ok {
@@ -374,7 +377,7 @@ func orgExistsAndSharesLocEntity(session et.Session, obj *dbt.Entity, o *org.Org
374377

375378
var orgents, crecords []*dbt.Entity
376379
for _, loc := range locs {
377-
if edges, err := session.Cache().IncomingEdges(loc, time.Time{}, "location"); err == nil {
380+
if edges, err := session.Cache().IncomingEdges(loc, time.Time{}, "legal_address", "hq_address", "location"); err == nil {
378381
for _, edge := range edges {
379382
if a, err := session.Cache().FindEntityById(edge.FromEntity.ID); err == nil && a != nil {
380383
if _, ok := a.Asset.(*contact.ContactRecord); ok && a.ID != obj.ID {
@@ -413,9 +416,9 @@ func orgExistsAndSharesAncestorEntity(session et.Session, obj *dbt.Entity, o *or
413416

414417
name := strings.ToLower(o.Name)
415418
if assets, err := session.Cache().FindEntitiesByContent(&general.Identifier{
416-
UniqueID: fmt.Sprintf("%s:%s", "org_name", name),
419+
UniqueID: fmt.Sprintf("%s:%s", general.OrganizationName, name),
417420
EntityID: name,
418-
Type: "org_name",
421+
Type: general.OrganizationName,
419422
}, time.Time{}); err == nil {
420423
for _, a := range assets {
421424
if _, ok := a.Asset.(*general.Identifier); ok {

0 commit comments

Comments
 (0)