Skip to content

Commit

Permalink
Merge pull request #139 from prefeitura-rio/staging/create-profession…
Browse files Browse the repository at this point in the history
…al-endpoints

Create cbo and cbo family if doent exist in db
  • Loading branch information
TanookiVerde committed Jun 26, 2024
2 parents ee4a96c + 11404da commit 6627e75
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 4 deletions.
1 change: 1 addition & 0 deletions api/app/pydantic_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ class MergedPatientTelecom(BaseModel):

class OccupationModel(BaseModel):
id_cbo: str
cbo: str
id_cbo_familia: Optional[str]
cbo_familia: Optional[str]

Expand Down
45 changes: 42 additions & 3 deletions api/app/routers/entities_mrg.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
ProfessionalModel
)
from app.models import (
Occupation,
OccupationFamily,
User,
City,
Race,
Expand Down Expand Up @@ -242,23 +244,60 @@ async def create_or_update_professionals(
update_fields=["name", "cpf","cns"]
)

# Retrieve all Ocupations and Families
occupation_ids = [x.cbo for x in await Occupation.all()]
occupation_family_ids = [x.code for x in await OccupationFamily.all()]

# Retrieve Inserted Professionals
professionals = await HealthCareProfessional.filter(
id_sus__in=list(professionals_indexed.keys())
)

new_occupations = []
new_occupation_families = []
new_professional_occupation = []

# Insert Health Care Professionals Occupations
occupation_inserts = []
for id_sus, professional in zip(list(professionals_indexed.keys()), professionals):
for cbo in professionals_indexed[id_sus]['cbo']:
occupation_inserts.append(

# If CBO Family does not exist in our base, prepare to insert it
if cbo.get("id_cbo_familia") not in occupation_family_ids:
new_occupation_families.append(
OccupationFamily(
code=cbo.get("id_cbo_familia"),
name=cbo.get("cbo_familia")
)
)

# If CBO does not exist in our base, prepare to insert it
if cbo.get("id_cbo") not in occupation_ids:
new_occupations.append(
Occupation(
cbo=cbo.get("id_cbo"),
description=cbo.get("cbo"),
family_id=cbo.get("id_cbo_familia")
)
)

new_professional_occupation.append(
HealthCareProfessionalOccupation(
professional_id=professional.id_sus,
role_id=cbo.get("id_cbo")
)
)
await OccupationFamily.bulk_create(
new_occupation_families,
batch_size=500,
ignore_conflicts=True
)
await Occupation.bulk_create(
new_occupations,
batch_size=500,
ignore_conflicts=True
)
await HealthCareProfessionalOccupation.bulk_create(
occupation_inserts,
new_professional_occupation,
batch_size=500,
ignore_conflicts=True
)
Expand Down
4 changes: 3 additions & 1 deletion api/tests/test_mrg.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,9 @@ async def test_create_or_update_mrgprofessionals(
"nome": "PESSOA QUALQUER",
"cbo": [{
"id_cbo": "111415",
"cbo": None
"cbo": "Teste",
"id_cbo_familia": "1114",
"cbo_familia": "TESTE"
}],
"conselho": [{
"id_registro_conselho": "1111111",
Expand Down

0 comments on commit 6627e75

Please sign in to comment.