How do the campaign finance Committee
and core Organization
models overlap?
#113
Labels
elections
Relating to the elections app
I'm working on filling out @aepton's implementation of the Campaign Finance enhancement proposal, and I've uncovered an issue @jamesturk might need to consider sooner rather than later.
In the campaign finance OCDEP,
Committee
is described as a "Subclass of Popolo Organization", and adds a couple of attributes not expected on the base class. The existing OCDOrganization
class is a non-abstract model, and my understanding is that, as a general rule, we don't want to subclass non-abstract models.This is similar to the
Event
/Election
situation we got into previously. The solution then was to partially copy the definition of theEvent
model and create a newElection
model. We also copied the definitions of theEventIdentifier
andEventSource
models to make newElectionIdentifier
andElectionSource
models.I'm following this same approach for
Committee
and it's related models, but a few things give me pause:Event
was in thelegislative
module and was tailored to those use cases,Organization
is in thecore
module and is defined rather generically.Organization
has a couple of other related model thatCommittee
also needs:OrganizationIdentifier
for storing alternate ids for the campaign finance committeeOrganizationName
for storing the committee's various different namesMembership
andPost
for storing relationships committees and their treasurers, officers, staff, etc.OrganizationSource
andOrganizationContactDetails
Transaction
has a.sender
and.recipient
each of which will have either a.person
or.organization
attribute populated, depending on the entity type. Under the current pattern, I think we also need a.committee
attribute, since these can also send and receive transactions.If 4 is a real need, then it feels like exactly what Django's multi-table inheritance was designed for. Even if it isn't, multi-table inheritance would also address the issues raised in 2 and 3.
The text was updated successfully, but these errors were encountered: