Original Message:
Sent: Apr 25, 2023 01:56
From: Dan d'Albuquerque
Subject: "role" in relatedParty
As far as I understand, relatedParty is an EntityRef (PartyRef or PartyRoleRef) and hence you need to use the @referredType (and not @type).
As such, the RelatedParty itself cannot contain nested RelatedParty entities, however, an individual, organisation, customer, etc can have an array of RelatedParty too.
------------------------------
Dan d'Albuquerque
TO BE VERIFIED
Original Message:
Sent: Apr 25, 2023 01:27
From: Mahesh Choudhari
Subject: "role" in relatedParty
Also, One quick question/query on above, Can we have relatedParty within relatedParty. I mean its object array where we can define multiple related parties however can we have relatedParty under relatedParty as below: Is this valid structure to use in any TMF Open API where ever applicable?
"relatedParty": [
{
"id": "1001",
"name": "DRT/Interxion",
"role": "site-owner",
"@type": "Organisation"
},
{
"id": "2001",
"name": "DRT/Interxion",
"role": "site-supplier",
"@type": "Organisation"
},
{
"id": "89763",
"name": "Verizon",
"role": "p2a-aepl-gateway-supplier",
"@type": "Organisation",
"relatedParty": [
{
"id": "43763",
"name": "AlicesLocalTelco",
"role": "last-mile-gateway-supplier",
"@type": "Organisation"
},
{
"id": "59263",
"name": "BobsLocalTelco",
"role": "last-mile-gateway-supplier",
"@type": "Organisation"
}
]
},
{
"id": "90801",
"name": "ATT",
"role": "p2a-evpl-gateway-supplier",
"@type": "Organisation",
"relatedParty": [
{
"id": "43763",
"name": "AlicesLocalTelco",
"role": "last-mile-gateway-supplier",
"@type": "Organisation"
}
]
},
{
"id": "90901",
"name": null,
"role": "p2p-epl-gateway-supplier",
"@type": "Organisation",
"relatedParty": []
}
],
------------------------------
Mahesh Choudhari
UNSPECIFIED
Original Message:
Sent: Apr 16, 2023 05:36
From: Jonathan Goldberg
Subject: "role" in relatedParty
To your questions, Dan, yes and yes
------------------------------
Jonathan Goldberg
Amdocs Management Limited
Any opinions and statements made by me on this forum are purely personal, and do not necessarily reflect the position of the TM Forum or my employer.
Original Message:
Sent: Apr 13, 2023 20:10
From: Dan d'Albuquerque
Subject: "role" in relatedParty
Hi Jonathan
Presumably the name field in the spec will define the Party Role in v5. Was this (also) the original intention of the name field in the Party Role entity in pre v5?
------------------------------
Dan d'Albuquerque
TO BE VERIFIED
Original Message:
Sent: Apr 13, 2023 15:01
From: Jonathan Goldberg
Subject: "role" in relatedParty
I'm afraid that I don't agree with these changes:
* There is NO need for a role in PartyRole - PartyRole is itself, as an entity, the role played by a Party. Especially in v5, when PartyRole points to a PartyRoleSpecification, that defines the role (Dealer, Partner, Employee, etc.)
* The Party playing a PartyRole is the PartyRole.engagedParty. The type of this attribute must be PartyRef - as others have already pointed out above it does not make sense for an engagedParty to be itself a PartyRole. This was a mistake in v4 schemas and was approved for correction (as you will see in earlier items in this thread).
------------------------------
Jonathan Goldberg
Amdocs Management Limited
Any opinions and statements made by me on this forum are purely personal, and do not necessarily reflect the position of the TM Forum or my employer.
Original Message:
Sent: Apr 11, 2023 22:34
From: Dan d'Albuquerque
Subject: "role" in relatedParty
Hi Olivier
I agree with your change to add role into the PartyRole entity. This makes more sense than at the engagedParty level.
For the engagedParty itself, I do not think that this should be PartyRole[Ref]. Presumably you added this as a result of the original v3/4 API that used RelatedParty type to represent this.
Regarding Koen's reply indicating the embedded Party should be an Individual or Organisation, I noticed that other v5.0.0 specs used the RefOrValue pattern to support embedded resources. When ByValue, they have used the @type, @baseType, @schemaLocation for the polymorphism (Individual/Organisation). When ByRef, they have used @referredType.
Thoughts?
------------------------------
Dan d'Albuquerque
TO BE VERIFIED
Original Message:
Sent: Apr 11, 2023 08:15
From: olivier arnaud
Subject: "role" in relatedParty
Hi
I'm working on the v5.0 version of TMF669 Party Role API. Today, the v5.0 draft swagger is like this.
So :
- partyRole has a mandatory role attribute
- engagedParty is a oneOf : Party, PartyRef, PartyRole, PartyRoleRef
- relatedParty has a role + partyOrPartyRole
Hope it fits most needs, please tell me if it doesn't fit your needs, or any comment on it. I'm quite new on the topic so may not have catched all subtelties.
------------------------------
olivier arnaud
Orange
Original Message:
Sent: Mar 01, 2023 23:34
From: Dan d'Albuquerque
Subject: "role" in relatedParty
Apologies for dragging this issue back up...
Can I presume that the role for a PartyRole resource is within the engagedParty sub-resource (role attribute) as per the examples in the TMF669 Party Role Management or by using the PartyRole sub-class name (through relatedParty @referredType)?
Just want to clarify whether this has been formalised within Party Role Management for v5.0.0.
Thanks!
------------------------------
Dan d'Albuquerque
TO BE VERIFIED
Original Message:
Sent: Dec 15, 2022 18:08
From: Mustafa Yusufoglu
Subject: "role" in relatedParty
Hello members,
When I read the latest posts, I thought:
Since a party may have many roles, thus, there is a PartyRole resource to provide manyToMany relationship between party and its possible roles. An additional role attribute on Party entity is meaningless to me.
I have a few words I want to say about this. I tried to explain with examples.
As you know, neither Party nor PartyRole resource has a role field. I needed to add the role attribute to the PartyRole entity for our billing system.
Because it is required to define many party roles such as user, contact, billReceiver, billPayer etc. in the system, and all these roles are less popular than Customer and ServiceProvider roles and they are managed through TMF669_Party_Role_Management_API.
We have customized popular roles such as Customer, ServiceProvider by extending PartyRole (as subclasses). They have their own API endpoints. This specified popular resources also has the role attribute like others but it is less important.
We create/read/update/delete the customer resource from both TMF629_Customer_Management and TMF669_Party_Role_Management_API. If I access the customer resource through TMF669, it is possible to distinguish customer data record from @type and @referredType fields and additionally role attibute is defined as 'customer'.
// This is an example that shows the Customer Reference in another Resource as reletedParty attribute{..."relatedParty": [ { "@baseType": "RelatedParty", "@referredType": "Customer", "@type": "CustomerRef", "href": null, "id": 5454560513, "name": "Demo Customer", "role": "customer", "status": "active" } ],...}
A request from PartyRoleManagment API:
Note: This JSON annotation displays 3 different role of Party.id=21654 (see engagedParty node below).
ServiceProvider is always assigned to all roles as related party, because of multi-tenancy.
// JSON string trimmed to simplify[ { "@type": "Customer", "@baseType": "PartyRole", "engagedParty": { "@baseType": "PartyRef", "@referredType": "Individual", "@type": "IndividualRef", "href": null, "id": 21654, "name": "Person Person", "status": "initialized", "type": "individual" }, "href": "http://localhost:8004/partyRoleManagement/v4/partyRole/5454587051", "id": 5454587051, "name": "Person Person", "relatedParty": [ { "@baseType": "RelatedParty", "@referredType": "ServiceProvider", "@type": "ServiceProviderRef", "href": null, "id": 5454560513, "name": "Demo CSP", "role": "serviceProvider", "status": "active" } ], "role": "customer", "status": "active" }, { "@type": "PartyRole", "engagedParty": { "@baseType": "PartyRef", "@referredType": "Individual", "@type": "IndividualRef", "href": null, "id": 21654, "name": "Person Person", "status": "initialized", "type": "individual" }, "href": "http://localhost:8004/partyRoleManagement/v4/partyRole/5454587052", "id": 5454587052, "name": "Person Person", "relatedParty": [ { "@baseType": "RelatedParty", "@referredType": "ServiceProvider", "@type": "ServiceProviderRef", "href": null, "id": 5454560513, "name": "Demo CSP", "role": "serviceProvider", "status": "active" } ], "role": "user", "status": "active" }, { "@type": "PartyRole", "engagedParty": { "@baseType": "PartyRef", "@referredType": "Individual", "@type": "IndividualRef", "href": null, "id": 21654, "name": "Person Person", "status": "initialized", "type": "individual" }, "href": "http://localhost:8004/partyRoleManagement/v4/partyRole/5454587053", "id": 5454587053, "name": "Person Person", "relatedParty": [ { "@baseType": "RelatedParty", "@referredType": "ServiceProvider", "@type": "ServiceProviderRef", "href": null, "id": 5454560513, "name": "Demo CSP", "role": "serviceProvider", "status": "active" } ], "role": "billPayer", "status": "closed" }]
Conclusion:
#1- No need to define seperate API for user, billReceiver, billPayer and etc. The @type attribute is 'PartyRole' for all of them. At that point role atribute helps a lot.
I don't understand why there is no role attribute in the Open API PartyRole swagger definition. It is a very important field for our solution.
#2- I always use relatedParty as a reference to PartyRole resource, no needed to refere it to Party resource. Why not? Because, Party, its presence in the system must mean something to us. It gains its meaning by the role it is playing.
-Party always need a playing role in the system. For example, if you are going to sell products, you need a customer party role.
#3- I do not recommend to use RelatedParty to provide a reference direcly to a Party. I think this is an unreasonable design and cause confusion.
#4- But, in very few places, we need to refere to the Party. In this case, we use PartyRef (IndividualRef and OrganizationRef). It is now more clear to us.
Example:
PartyRole has engagedParty attribute to indicate which Party does it belongs to. The confusion, I guess, always starts here because RelatedParty is used instead of PartyRef for engageParty assignment. But here we have simplified the logic by using PartyRef (OrganizationRef or IndividualRef) instead of RelatedParty. See the JSON example below and focus on engagedParty node.
{ "@type": "Customer", "@baseType": "PartyRole", "engagedParty": { "@baseType": "PartyRef", "@referredType": "Individual", "@type": "IndividualRef", "href": null, "id": 21654, "name": "Person Person", "status": "initialized", "type": "individual" }, "href": "http://localhost:8004/partyRoleManagement/v4/partyRole/5454587051", "id": 5454587051, "name": "Person Person", "role": "customer", "status": "active"}
Thank you!
------------------------------
Mustafa Yusufoglu
i2i Systems
Original Message:
Sent: Dec 15, 2022 01:58
From: Danijel zecevic.danijel@marand.si
Subject: "role" in relatedParty
Hi Jonathan.
You mentioned two use cases for Related Party:
"Related Party is intended to provide a reference to either a Party (RelatedParty.role will be blank) or a PartyRole (RelatedParty.role will have the name of the role)."
I can see another one and I'm wondering if you think it's valid. If the Related Party references a Party ("@referredType" attribute has value "Party") and the role is not empty (e.g. "user", "contactPerson"), can we consider it a valid use case that describes the Party having a specific role in some system. A concrete example would be a Product in TMF 637 that can be associated with the many Parties via Related Party. In this scenario, each Party from TMF 632 can also be a "user" or "contactPerson" of a Product.
Such an approach removes the need to update roles in that only have value in TMF 637. This comes into play especially when the Product is only referenced by the Quote (TMF 679) and is not necessarily going to be realized. In such cases we would need to add the role to the Party in TMF 669 and remove it in the case of the Quote rejection.
Please advise. Thank you.
------------------------------
Danijel zecevic.danijel@marand.si
Marand, software ltd
Original Message:
Sent: Sep 11, 2019 07:03
From: Jonathan Goldberg
Subject: "role" in relatedParty
Related Party is intended to provide a reference to either a Party (RelatedParty.role will be blank) or a PartyRole (RelatedParty.role will have the name of the role). Related Party is not in itself a managed entity.
If a Party plays multiple roles, there will be a PartyRole (or concrete subclass) for each such role. Suppose John Doe works for H.A.L computers as the communications expert, and H.A.L. uses NXT Communications for its business wireline services. John Doe also has personal cellphone service from NXT for himself and his daughter.
So:
- There will be an Individual (subclass of Party) with first name John, last name Doe
- There will be an Organization (subclass of Party) with name H.A.L.
- There will be a Customer (subclass of PartyRole) with name John Doe, and the engagedParty for this Customer will be the Individual John Doe
- There will be a Customer (subclass of PartyRole) with name H.A.L., and the engagedParty for this Customer will be the Organization H.A.L.
- There will be a PartyRole with name John Doe and role Contact, and the engagedParty for this PartyRole will be the Individual John Doe
- The Customer H.A.L. will have a RelatedParty that points to the John Doe PartyRole
Hope this helps
------------------------------
Jonathan Goldberg
Amdocs Management Limited
Original Message:
Sent: Sep 11, 2019 06:41
From: Shibin CK
Subject: "role" in relatedParty
Hi All,
The role field in relatedParty is usually a String. What should be done if a person is serving more than one role?. There are three approaches I can think of. Which one of these is better?
1. Replicate the data
{ id: P1 name: John relatedParty: [ { role: "Primary Contact" id: P2 name: "George" @referredType: Individual }, { role: "Father" id: P2 name: "George" @referredType: Individual } ]}
2. Change data type of role from String to an Array
{ id: P1 name: John relatedParty: [ { role: ["Primary Contact", "Father"] id: P2 name: "George" @referredType: Individual } ]}
3. Encode the information in the role String
{ id: P1 name: John relatedParty: [ { role: "Primary Contact,Father" id: P2 name: "George" @referredType: Individual } ]}
------------------------------
Shibin CK
Tecnotree
------------------------------