Restrict the occurrence of a value according to the respective value in another column in a PostgreSQL table
I think you can solve this with two UNIQUE partial indexes:

CREATE UNIQUE INDEX concept_status_accepted_upx
ON temp (concept_id)
WHERE status = 'accepted' ;


CREATE UNIQUE INDEX concept_status_basionym_upx
ON temp (concept_id)
WHERE status = 'basionym' ;


This will enforce that there is only one 'accepted' per concept and only one 'basionym' per conecpt.

Not sure if you want the extra but tt will NOT enforce that every concept has an 'accepted' taxonomy. This is much harder to do with DRI and the restriction of a single table.