Addresses with several parties (occupants)

How to manage addresses with several parties without having creating duplicate addresses?

Currently, addresses seems to allow a single party and the party contact name is an attribute of the address, whereas there should probably be a class of contact providing that.

We frequently need both owners and occupant(s) addresses.

Something I’m missing or is bloat the only way?

Another difficult category of parties that we have are public institutions.
Schools, for example, under the Ministry of National Education, are found

indicating that each contact needs in this case an establishment code
(somewhat similar to what French companies need for each legal establishment (SIRET))

You do not. You create an address for each one. This prevents the error to modify an address on a party which would silently also change for others.

There is no such thing as contact name on address. An address is not a contact.
A contact can be just another party with a relation to the first one. Or it is just stored as a contact mechanism.

Okay, too bad.
This makes it more difficult to manage ‘warehouses’ at the customer site though.
Which party to select when there are more than one? Unfortunately party is required for an address.
That is, the address remains whether the party (owner and/or occupants have changed)
Also, now there are ‘n’ addresses to manage for address related data (community code, plus.code, etc)

Sorry, I guess I abused the term contact, it is party_name I referred to

party_name = fields.Char(
          "Party Name", states=STATES, depends=DEPENDS,
        help="If filled, replace the name of the party for address formatting")

The more I think about this, I balk. This in very myopic modeling.

The address is a real geographical place, which has place related attributes.

The party, on the other hand, uses these places, typically for a period of time, either as an owner and/or occupant or with some other role. Any party specific address locator may have many attributes which are on the tuple (such as SIRET, establishment name, business sector, director et cetera ).

The simple fact a commercial lease expires and another one begins elsewhere doesn’t mean that the previous address disappears from the face of the earth…
If the address was used as a warehouse, how could one possible delete the address? The specific party relationship is simply expired.

In short, I believe this should be more rigorously examined.

Practical beats purity here. If we share the address, users will update them by mistake (we already see that with the Many2One relation even if it is pretty obvious).
But if someone can propose a modification that makes our modeling closer to The Data Model Resource Book but without the practical issues, it will be welcomed.