xyp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- xyp-0.1.0/.gitignore +29 -0
- xyp-0.1.0/LICENSE +21 -0
- xyp-0.1.0/PKG-INFO +245 -0
- xyp-0.1.0/README.md +221 -0
- xyp-0.1.0/examples/smoke.py +37 -0
- xyp-0.1.0/pyproject.toml +84 -0
- xyp-0.1.0/scripts/release_check.py +147 -0
- xyp-0.1.0/src/xyp/__init__.py +60 -0
- xyp-0.1.0/src/xyp/_client.py +176 -0
- xyp-0.1.0/src/xyp/_groups.py +264 -0
- xyp-0.1.0/src/xyp/_models.py +224 -0
- xyp-0.1.0/src/xyp/_operations.py +511 -0
- xyp-0.1.0/src/xyp/_service.py +15 -0
- xyp-0.1.0/src/xyp/_signer.py +74 -0
- xyp-0.1.0/src/xyp/_soap.py +163 -0
- xyp-0.1.0/src/xyp/_tls.py +39 -0
- xyp-0.1.0/src/xyp/_transport.py +162 -0
- xyp-0.1.0/src/xyp/auth.py +103 -0
- xyp-0.1.0/src/xyp/certs/MNICA-2022.pem +32 -0
- xyp-0.1.0/src/xyp/certs/MNRCA-2021.pem +32 -0
- xyp-0.1.0/src/xyp/errors.py +146 -0
- xyp-0.1.0/src/xyp/models/__init__.py +4 -0
- xyp-0.1.0/src/xyp/models/citizen.py +422 -0
- xyp-0.1.0/src/xyp/models/education.py +122 -0
- xyp-0.1.0/src/xyp/models/foreign_service.py +36 -0
- xyp-0.1.0/src/xyp/models/government_service.py +280 -0
- xyp-0.1.0/src/xyp/models/health.py +406 -0
- xyp-0.1.0/src/xyp/models/insurance.py +328 -0
- xyp-0.1.0/src/xyp/models/labor_welfare.py +104 -0
- xyp-0.1.0/src/xyp/models/legal_entity.py +134 -0
- xyp-0.1.0/src/xyp/models/meta.py +36 -0
- xyp-0.1.0/src/xyp/models/payment.py +188 -0
- xyp-0.1.0/src/xyp/models/pki.py +14 -0
- xyp-0.1.0/src/xyp/models/private_service.py +40 -0
- xyp-0.1.0/src/xyp/models/property.py +178 -0
- xyp-0.1.0/src/xyp/models/statistic.py +126 -0
- xyp-0.1.0/src/xyp/models/tax.py +54 -0
- xyp-0.1.0/src/xyp/models/transport.py +262 -0
- xyp-0.1.0/src/xyp/operations/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/citizen/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/citizen/active_vocational_student_info.py +109 -0
- xyp-0.1.0/src/xyp/operations/citizen/address_apartment_info.py +86 -0
- xyp-0.1.0/src/xyp/operations/citizen/address_street_info.py +86 -0
- xyp-0.1.0/src/xyp/operations/citizen/address_type_info.py +65 -0
- xyp-0.1.0/src/xyp/operations/citizen/affiliation_registration_info.py +100 -0
- xyp-0.1.0/src/xyp/operations/citizen/aimag_city_info.py +65 -0
- xyp-0.1.0/src/xyp/operations/citizen/authorize_citizen.py +78 -0
- xyp-0.1.0/src/xyp/operations/citizen/bag_khoroo_info.py +83 -0
- xyp-0.1.0/src/xyp/operations/citizen/border_ban.py +116 -0
- xyp-0.1.0/src/xyp/operations/citizen/check_citizen_address_info.py +107 -0
- xyp-0.1.0/src/xyp/operations/citizen/check_citizen_info.py +84 -0
- xyp-0.1.0/src/xyp/operations/citizen/check_citizen_non_passport.py +78 -0
- xyp-0.1.0/src/xyp/operations/citizen/check_citizen_regnum.py +72 -0
- xyp-0.1.0/src/xyp/operations/citizen/check_id_card_service.py +112 -0
- xyp-0.1.0/src/xyp/operations/citizen/check_twin_info.py +119 -0
- xyp-0.1.0/src/xyp/operations/citizen/children_rank_statistic_info.py +120 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_address_list_english.py +125 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_birth_info.py +101 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_birth_info_ws101123.py +103 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_denationalization_info.py +133 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_doing_criminal_liabilityl_info.py +94 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_doing_criminal_liabilty_eng_info.py +124 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_graduate_school_description.py +93 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_graduate_school_info.py +104 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_graduate_school_list.py +96 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_high_school_description.py +84 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_kindergarten_description.py +84 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_look_up_address.py +152 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_look_up_info.py +150 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_new_diploma_info.py +147 -0
- xyp-0.1.0/src/xyp/operations/citizen/citizen_was_criminal_liabilityl_info.py +124 -0
- xyp-0.1.0/src/xyp/operations/citizen/civil_info_at_burtgelmn.py +92 -0
- xyp-0.1.0/src/xyp/operations/citizen/civil_service_employee_info.py +117 -0
- xyp-0.1.0/src/xyp/operations/citizen/conformity_certificate_detail_service.py +142 -0
- xyp-0.1.0/src/xyp/operations/citizen/conformity_certificate_list.py +256 -0
- xyp-0.1.0/src/xyp/operations/citizen/current_passport_info.py +133 -0
- xyp-0.1.0/src/xyp/operations/citizen/decease_list_by_date.py +123 -0
- xyp-0.1.0/src/xyp/operations/citizen/entity_affil_by_regnum_service.py +102 -0
- xyp-0.1.0/src/xyp/operations/citizen/extend_term_of_granted_name.py +104 -0
- xyp-0.1.0/src/xyp/operations/citizen/extend_term_of_granted_name_update.py +90 -0
- xyp-0.1.0/src/xyp/operations/citizen/first_time_passport_info.py +93 -0
- xyp-0.1.0/src/xyp/operations/citizen/foreign_passport_unregistered_info_english.py +83 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_children_info.py +119 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_address_info.py +119 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_before_address_info.py +87 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_below_subsistence_level_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_birth_info.py +107 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_change_name_info.py +104 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_change_regnum_info.py +88 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_decease_info.py +91 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_foul_info.py +74 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_health_insurance_info.py +89 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_id_card_info.py +173 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_marriage_divorce_info.py +99 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_marriage_info.py +97 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_no_marriage_info.py +90 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_non_id_card_info.py +141 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_non_payment_info.py +111 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_citizen_regnum_info.py +89 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_dictionary_name_info.py +85 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_dissolved_legal_entity_info.py +85 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_election_location.py +91 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_id_card_photo.py +97 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_marriage_restore_info.py +122 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_organization_where_citizen_works_info.py +132 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_passport_civil_info.py +138 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_passport_issued_place.py +81 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_stamp_reference.py +95 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_topic_scope.py +81 -0
- xyp-0.1.0/src/xyp/operations/citizen/get_topics.py +99 -0
- xyp-0.1.0/src/xyp/operations/citizen/graduated_vocational_student_info.py +121 -0
- xyp-0.1.0/src/xyp/operations/citizen/internal_troops_description.py +86 -0
- xyp-0.1.0/src/xyp/operations/citizen/legal_entity_name_validity_service.py +103 -0
- xyp-0.1.0/src/xyp/operations/citizen/list_of_civil_titles.py +110 -0
- xyp-0.1.0/src/xyp/operations/citizen/passport_info.py +114 -0
- xyp-0.1.0/src/xyp/operations/citizen/passport_info_second_time.py +104 -0
- xyp-0.1.0/src/xyp/operations/citizen/passport_invalid_info.py +153 -0
- xyp-0.1.0/src/xyp/operations/citizen/passport_validity_checker.py +102 -0
- xyp-0.1.0/src/xyp/operations/citizen/police_weapon_movement_transfer_service.py +140 -0
- xyp-0.1.0/src/xyp/operations/citizen/regnum_change_info_english.py +101 -0
- xyp-0.1.0/src/xyp/operations/citizen/regnum_info_english.py +89 -0
- xyp-0.1.0/src/xyp/operations/citizen/soum_district_info.py +77 -0
- xyp-0.1.0/src/xyp/operations/citizen/svc_marriage_restores.py +93 -0
- xyp-0.1.0/src/xyp/operations/education/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/education/basic_edu_cert_request.py +97 -0
- xyp-0.1.0/src/xyp/operations/education/basic_education_certificate_supplement_en.py +139 -0
- xyp-0.1.0/src/xyp/operations/education/basic_education_certificate_supplement_mn.py +139 -0
- xyp-0.1.0/src/xyp/operations/education/certificate_supplement_look_up.py +139 -0
- xyp-0.1.0/src/xyp/operations/education/certificate_supplement_lookup_mn.py +139 -0
- xyp-0.1.0/src/xyp/operations/education/check_kindergarten_enrollment.py +115 -0
- xyp-0.1.0/src/xyp/operations/education/children_info_by_parent_civil_id.py +140 -0
- xyp-0.1.0/src/xyp/operations/education/civil_capacity_certificate_detail_service.py +97 -0
- xyp-0.1.0/src/xyp/operations/education/diploma_copy_bilingual_service.py +80 -0
- xyp-0.1.0/src/xyp/operations/education/foreign_higher_education_detail_service.py +111 -0
- xyp-0.1.0/src/xyp/operations/education/foreign_higher_education_service_one.py +111 -0
- xyp-0.1.0/src/xyp/operations/education/get_citizen_capacity_certificate_list.py +90 -0
- xyp-0.1.0/src/xyp/operations/education/kindergarten_description.py +88 -0
- xyp-0.1.0/src/xyp/operations/education/send_kindergarten_enrollment.py +290 -0
- xyp-0.1.0/src/xyp/operations/education/student_card.py +117 -0
- xyp-0.1.0/src/xyp/operations/education/teacher_card_info.py +84 -0
- xyp-0.1.0/src/xyp/operations/education/uee_reference_service.py +77 -0
- xyp-0.1.0/src/xyp/operations/education/umns_education_info.py +87 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/foreign_citizen_info_service.py +93 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/foreigner_residence_permit_inquiry.py +90 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/get_border_crossing_info.py +151 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/new_executive_management_registration_verification.py +88 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/non_governmental_organization_info.py +96 -0
- xyp-0.1.0/src/xyp/operations/foreign_service/visa_residency_info.py +139 -0
- xyp-0.1.0/src/xyp/operations/government_service/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/government_service/agricultural_incentive_receipt_service.py +102 -0
- xyp-0.1.0/src/xyp/operations/government_service/available_courtroom_schedule_service.py +91 -0
- xyp-0.1.0/src/xyp/operations/government_service/check_imei.py +99 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_birth_info_eng.py +98 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_covid19_e_pass.py +77 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_id_card_info_eng.py +162 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_international_cert.py +116 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_legal_entity_weapons.py +96 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_marriage_info_eng.py +91 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_no_marriage_info_data.py +83 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_non_payment_eng_info.py +116 -0
- xyp-0.1.0/src/xyp/operations/government_service/citizen_weapon_registration_booking_service.py +107 -0
- xyp-0.1.0/src/xyp/operations/government_service/covid19_medical_certificate_info.py +132 -0
- xyp-0.1.0/src/xyp/operations/government_service/covid_vaccine_dose_count.py +80 -0
- xyp-0.1.0/src/xyp/operations/government_service/create_complaint_rating.py +99 -0
- xyp-0.1.0/src/xyp/operations/government_service/create_feedback_fact_call.py +144 -0
- xyp-0.1.0/src/xyp/operations/government_service/create_feedback_session.py +168 -0
- xyp-0.1.0/src/xyp/operations/government_service/docx_access_verification_service.py +80 -0
- xyp-0.1.0/src/xyp/operations/government_service/feedback_dimension_departments.py +74 -0
- xyp-0.1.0/src/xyp/operations/government_service/firearm_owner_certificate_info.py +79 -0
- xyp-0.1.0/src/xyp/operations/government_service/foreign_citizen_international_cert.py +98 -0
- xyp-0.1.0/src/xyp/operations/government_service/gas_gun_bullet_registration_certificate.py +111 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_aimag_city_info_by_zipcode.py +81 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_bag_district_list_by_zipcode.py +81 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_complaint_status.py +100 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_electoral_station_info.py +119 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_explosive_tools_info.py +74 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_explosives_info.py +81 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_feedback_dimension_tags.py +74 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_feedback_fact_call.py +123 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_gun_models_info.py +94 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_list_of_countries_info.py +81 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_person_complaint_status_list.py +88 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_pos_receipt_dtl_product.py +86 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_raw_materials_info.py +81 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_soum_district_list_by_zipcode.py +81 -0
- xyp-0.1.0/src/xyp/operations/government_service/get_tree_register.py +93 -0
- xyp-0.1.0/src/xyp/operations/government_service/lawyer_info_service.py +170 -0
- xyp-0.1.0/src/xyp/operations/government_service/non_adult_citizen_info.py +138 -0
- xyp-0.1.0/src/xyp/operations/government_service/notary_trust_archived_info.py +120 -0
- xyp-0.1.0/src/xyp/operations/government_service/notary_trust_info.py +140 -0
- xyp-0.1.0/src/xyp/operations/government_service/notary_vehicle_info.py +126 -0
- xyp-0.1.0/src/xyp/operations/government_service/operation_archive_by_regnum_service.py +101 -0
- xyp-0.1.0/src/xyp/operations/government_service/payment_confirmation_service.py +138 -0
- xyp-0.1.0/src/xyp/operations/government_service/payment_info_service.py +105 -0
- xyp-0.1.0/src/xyp/operations/government_service/registration_number_validator.py +73 -0
- xyp-0.1.0/src/xyp/operations/government_service/risk_reference_service.py +163 -0
- xyp-0.1.0/src/xyp/operations/government_service/risk_registration_service.py +149 -0
- xyp-0.1.0/src/xyp/operations/government_service/risk_status_change_service.py +107 -0
- xyp-0.1.0/src/xyp/operations/government_service/special_equipment_cartridge_registration_certificate.py +111 -0
- xyp-0.1.0/src/xyp/operations/government_service/student_soldier_info.py +127 -0
- xyp-0.1.0/src/xyp/operations/government_service/tree_register.py +99 -0
- xyp-0.1.0/src/xyp/operations/government_service/weapon_ballistic_registration_certificate.py +111 -0
- xyp-0.1.0/src/xyp/operations/government_service/weapon_registration_schedule_service.py +94 -0
- xyp-0.1.0/src/xyp/operations/health/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/health/check_payment_months.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/check_prescription_infoby_regnum.py +110 -0
- xyp-0.1.0/src/xyp/operations/health/citizen_image_diagnosis_and_analysis_info.py +112 -0
- xyp-0.1.0/src/xyp/operations/health/citizen_monthly_service_usage_inquiry_service.py +124 -0
- xyp-0.1.0/src/xyp/operations/health/citizen_questionnaire_submit_service.py +99 -0
- xyp-0.1.0/src/xyp/operations/health/citizen_service_package_number_inquiry_service.py +88 -0
- xyp-0.1.0/src/xyp/operations/health/covid_pcr_last_result_info.py +91 -0
- xyp-0.1.0/src/xyp/operations/health/docter_degree_info.py +84 -0
- xyp-0.1.0/src/xyp/operations/health/doctor_license_check.py +85 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_check_patient_exists.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_create_patient.py +122 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_get_analysis_dates.py +82 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_get_analysis_result.py +88 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_get_free_time_list.py +100 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_get_hospitals.py +86 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_get_medical_services.py +91 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_list_service.py +78 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_online_appointment_order.py +113 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_online_time_order_list.py +103 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_time_order_approve.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/e_health_time_order_cancel.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_by_address.py +78 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_check_patient_exists.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_citizen_analysis_info.py +100 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_create_patient.py +122 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_find_address.py +68 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_get_analysis_dates.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_get_analysis_result.py +88 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_get_free_time_list.py +100 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_get_hospitals.py +86 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_get_medical_services.py +91 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_online_appointment_order.py +113 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_online_time_order_list.py +103 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_time_order_approve.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/e_hospital_time_order_cancel.py +80 -0
- xyp-0.1.0/src/xyp/operations/health/early_detection_service.py +85 -0
- xyp-0.1.0/src/xyp/operations/health/get_active_pregnancy.py +90 -0
- xyp-0.1.0/src/xyp/operations/health/get_all_druglistings_info.py +139 -0
- xyp-0.1.0/src/xyp/operations/health/get_ambulatory.py +101 -0
- xyp-0.1.0/src/xyp/operations/health/get_ambulatory_dtl.py +112 -0
- xyp-0.1.0/src/xyp/operations/health/get_blood_type_service.py +78 -0
- xyp-0.1.0/src/xyp/operations/health/get_child_birth.py +84 -0
- xyp-0.1.0/src/xyp/operations/health/get_child_book.py +105 -0
- xyp-0.1.0/src/xyp/operations/health/get_child_book_check_ups.py +81 -0
- xyp-0.1.0/src/xyp/operations/health/get_children_birth_info.py +92 -0
- xyp-0.1.0/src/xyp/operations/health/get_data_by_form_summary.py +101 -0
- xyp-0.1.0/src/xyp/operations/health/get_drug_info.py +135 -0
- xyp-0.1.0/src/xyp/operations/health/get_ecare_by_regnum.py +123 -0
- xyp-0.1.0/src/xyp/operations/health/get_emd_service_history.py +111 -0
- xyp-0.1.0/src/xyp/operations/health/get_form13_a_info.py +146 -0
- xyp-0.1.0/src/xyp/operations/health/get_form13_a_list.py +94 -0
- xyp-0.1.0/src/xyp/operations/health/get_health_insurance_premium_list.py +91 -0
- xyp-0.1.0/src/xyp/operations/health/get_hospital_list_info.py +148 -0
- xyp-0.1.0/src/xyp/operations/health/get_hospital_operation_info.py +89 -0
- xyp-0.1.0/src/xyp/operations/health/get_hospitals_from_distance.py +174 -0
- xyp-0.1.0/src/xyp/operations/health/get_kid_question_result.py +104 -0
- xyp-0.1.0/src/xyp/operations/health/get_kindergarten_analysis_result_by_child_regno.py +107 -0
- xyp-0.1.0/src/xyp/operations/health/get_personal_info.py +84 -0
- xyp-0.1.0/src/xyp/operations/health/get_receipt_by_regnum_and_number.py +200 -0
- xyp-0.1.0/src/xyp/operations/health/get_streptococcus.py +100 -0
- xyp-0.1.0/src/xyp/operations/health/get_vaccine_by_regnum_info.py +151 -0
- xyp-0.1.0/src/xyp/operations/health/h_info_nc_diseases_report.py +157 -0
- xyp-0.1.0/src/xyp/operations/health/medicine_import_insert.py +87 -0
- xyp-0.1.0/src/xyp/operations/health/multi_degree_info.py +99 -0
- xyp-0.1.0/src/xyp/operations/health/multi_license_info.py +102 -0
- xyp-0.1.0/src/xyp/operations/health/pregnancy_control_note_reference_info.py +100 -0
- xyp-0.1.0/src/xyp/operations/health/pregnancy_summary.py +98 -0
- xyp-0.1.0/src/xyp/operations/health/preventive_screening_info.py +108 -0
- xyp-0.1.0/src/xyp/operations/health/receive_service_complain_data.py +89 -0
- xyp-0.1.0/src/xyp/operations/health/receive_tablet_complain.py +119 -0
- xyp-0.1.0/src/xyp/operations/health/request_prescription_register.py +126 -0
- xyp-0.1.0/src/xyp/operations/health/search_drug_images_by_barcode.py +85 -0
- xyp-0.1.0/src/xyp/operations/health/search_for_drug_instructions_by_barcode.py +87 -0
- xyp-0.1.0/src/xyp/operations/health/service_for_donor_card_check.py +90 -0
- xyp-0.1.0/src/xyp/operations/health/service_for_sending_health_insurance.py +179 -0
- xyp-0.1.0/src/xyp/operations/health/white_book_detail_info.py +121 -0
- xyp-0.1.0/src/xyp/operations/insurance/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/insurance/check_child_money.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/check_house_hold_child.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/check_house_hold_food.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/check_insured_eng_info.py +83 -0
- xyp-0.1.0/src/xyp/operations/insurance/check_is_insured_info.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/check_mother_time_all_info.py +75 -0
- xyp-0.1.0/src/xyp/operations/insurance/citizen_insurance_info_for_statistic.py +115 -0
- xyp-0.1.0/src/xyp/operations/insurance/citizen_loss_of_ability_to_work_info.py +80 -0
- xyp-0.1.0/src/xyp/operations/insurance/disability_benefits_apply.py +115 -0
- xyp-0.1.0/src/xyp/operations/insurance/disability_medical_cert_edit.py +229 -0
- xyp-0.1.0/src/xyp/operations/insurance/disability_medical_cert_info.py +224 -0
- xyp-0.1.0/src/xyp/operations/insurance/disability_medical_cert_invalid.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/disability_pension_document_eng_info.py +175 -0
- xyp-0.1.0/src/xyp/operations/insurance/disability_pension_document_info.py +163 -0
- xyp-0.1.0/src/xyp/operations/insurance/disabled_human_english_info.py +120 -0
- xyp-0.1.0/src/xyp/operations/insurance/disabled_human_info.py +120 -0
- xyp-0.1.0/src/xyp/operations/insurance/enterprises_org_contribution_info.py +178 -0
- xyp-0.1.0/src/xyp/operations/insurance/funeral_allowance_info.py +74 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_bank_account.py +81 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_camp_voucher_of_elder_info.py +88 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_check_mother_time_info.py +84 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_citizen_pension_inquiry.py +94 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_citizen_salary_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_citizen_salary_info_eng.py +104 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_disabled_person_supply_info.py +86 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_health_insurance_fee.py +98 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_insurance_products.py +65 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_insured_for_last_three_month_info.py +79 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_insured_for_last_three_month_occupation_info.py +90 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_insuree_work_history_info.py +80 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_invoice_by_number.py +93 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_org_ben_num_by36_month.py +100 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_organization_dept_info.py +78 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_payment_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_pension_info.py +163 -0
- xyp-0.1.0/src/xyp/operations/insurance/get_total_work_month.py +74 -0
- xyp-0.1.0/src/xyp/operations/insurance/health_insurance_info.py +103 -0
- xyp-0.1.0/src/xyp/operations/insurance/insurance_info_by_org_service.py +90 -0
- xyp-0.1.0/src/xyp/operations/insurance/insurance_org_contribution_info.py +200 -0
- xyp-0.1.0/src/xyp/operations/insurance/insured_list_last3_month_by_date.py +87 -0
- xyp-0.1.0/src/xyp/operations/insurance/investment_application_service.py +103 -0
- xyp-0.1.0/src/xyp/operations/insurance/investment_bank_service.py +94 -0
- xyp-0.1.0/src/xyp/operations/insurance/list_of_investment_requests.py +98 -0
- xyp-0.1.0/src/xyp/operations/insurance/lost_caregiver_pension_document_eng_info.py +175 -0
- xyp-0.1.0/src/xyp/operations/insurance/lost_caregiver_pension_document_info.py +163 -0
- xyp-0.1.0/src/xyp/operations/insurance/medical_cert_check.py +85 -0
- xyp-0.1.0/src/xyp/operations/insurance/org_debt_with_transac_info.py +90 -0
- xyp-0.1.0/src/xyp/operations/insurance/org_has_debt.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/org_info_for_statistic.py +128 -0
- xyp-0.1.0/src/xyp/operations/insurance/pension_document_eng_info.py +175 -0
- xyp-0.1.0/src/xyp/operations/insurance/pension_document_info.py +163 -0
- xyp-0.1.0/src/xyp/operations/insurance/pension_five_years_average_change.py +89 -0
- xyp-0.1.0/src/xyp/operations/insurance/pension_five_years_average_check_status.py +98 -0
- xyp-0.1.0/src/xyp/operations/insurance/pregnancy_childbirth_cert_invalid.py +72 -0
- xyp-0.1.0/src/xyp/operations/insurance/pregnancy_childbirth_cert_list.py +193 -0
- xyp-0.1.0/src/xyp/operations/insurance/pregnancy_childbirth_edit.py +223 -0
- xyp-0.1.0/src/xyp/operations/insurance/pregnancy_childbirth_info.py +218 -0
- xyp-0.1.0/src/xyp/operations/insurance/refund_half_account_list.py +89 -0
- xyp-0.1.0/src/xyp/operations/insurance/refund_half_bank_list.py +76 -0
- xyp-0.1.0/src/xyp/operations/insurance/refund_half_create_account.py +90 -0
- xyp-0.1.0/src/xyp/operations/insurance/refund_half_update_account.py +90 -0
- xyp-0.1.0/src/xyp/operations/insurance/retirement_list_info.py +88 -0
- xyp-0.1.0/src/xyp/operations/insurance/send_investment_request.py +102 -0
- xyp-0.1.0/src/xyp/operations/insurance/set_invoice_payment.py +90 -0
- xyp-0.1.0/src/xyp/operations/insurance/social_insurance_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/insurance/unemployment_benefits_apply.py +169 -0
- xyp-0.1.0/src/xyp/operations/insurance/unemployment_benefits_count.py +79 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/below_standard_level_citizen.py +91 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/check_letter.py +89 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/citizen_info_disability_certified.py +88 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/civilized_confirmed_services.py +93 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_child_notification.py +76 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_child_request_info.py +96 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_citizen_labor_info.py +196 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_foster_parent_service_info.py +95 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_household_info_by_regnum.py +108 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_service_document_list.py +95 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/get_total_transaction_monthly.py +101 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/household_score_calculate_request.py +78 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/household_score_check.py +132 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/household_score_check_info.py +109 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/household_score_info.py +173 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/job_seeker_info.py +78 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/pension_info.py +86 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/set_child_request.py +91 -0
- xyp-0.1.0/src/xyp/operations/labor_welfare/set_user_service.py +85 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/check_legal_entity_name_info.py +80 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/citizen_legal_entity_info_list.py +86 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/citizen_legal_entity_list.py +83 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/copy_of_the_legal_entity_cert.py +80 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/copy_of_the_legal_entity_rules.py +80 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/energy_license_certificate_info.py +97 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_customs_offns_info.py +120 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_ebalance_info.py +89 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_legal_entity_info.py +139 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_legal_entity_info_with_regnum.py +466 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_non_legal_entity_info.py +74 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_trade_service_license_citizen.py +96 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_trade_service_license_org.py +102 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/get_valid_special_permission.py +117 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/legal_entity_general_info.py +140 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/legal_entity_non_payment_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/legal_entity_open_data.py +88 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/liquidation_info_service.py +102 -0
- xyp-0.1.0/src/xyp/operations/legal_entity/valid_contracts_by_regnum.py +99 -0
- xyp-0.1.0/src/xyp/operations/meta/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/meta/auth_service_check_by_citizen.py +90 -0
- xyp-0.1.0/src/xyp/operations/meta/auth_service_check_by_otp.py +78 -0
- xyp-0.1.0/src/xyp/operations/meta/check_access.py +98 -0
- xyp-0.1.0/src/xyp/operations/meta/check_otp.py +78 -0
- xyp-0.1.0/src/xyp/operations/meta/list_access.py +80 -0
- xyp-0.1.0/src/xyp/operations/meta/register_otp_request.py +109 -0
- xyp-0.1.0/src/xyp/operations/payment/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/payment/check_transaction_info.py +114 -0
- xyp-0.1.0/src/xyp/operations/payment/citizen_bs_loan_info.py +102 -0
- xyp-0.1.0/src/xyp/operations/payment/citizen_create_invoice.py +118 -0
- xyp-0.1.0/src/xyp/operations/payment/citizen_fico_info.py +127 -0
- xyp-0.1.0/src/xyp/operations/payment/citizen_loan_info.py +74 -0
- xyp-0.1.0/src/xyp/operations/payment/citizen_loan_info_titan.py +167 -0
- xyp-0.1.0/src/xyp/operations/payment/court_decision_return.py +120 -0
- xyp-0.1.0/src/xyp/operations/payment/credit_score_nd_salary_income.py +80 -0
- xyp-0.1.0/src/xyp/operations/payment/exchange_rate.py +83 -0
- xyp-0.1.0/src/xyp/operations/payment/get_all_authority_info.py +121 -0
- xyp-0.1.0/src/xyp/operations/payment/get_list_of_ett_dividend_info.py +74 -0
- xyp-0.1.0/src/xyp/operations/payment/invoice_number_uth_payment_service.py +141 -0
- xyp-0.1.0/src/xyp/operations/payment/invoice_payment_info_service.py +87 -0
- xyp-0.1.0/src/xyp/operations/payment/invoice_payment_inquiry_servicer.py +121 -0
- xyp-0.1.0/src/xyp/operations/payment/invoice_status_service.py +84 -0
- xyp-0.1.0/src/xyp/operations/payment/legal_entity_bs_loan_info.py +117 -0
- xyp-0.1.0/src/xyp/operations/payment/orgenzation_loan_info_titan.py +116 -0
- xyp-0.1.0/src/xyp/operations/payment/overdue_citizen_loan_debt_reference.py +87 -0
- xyp-0.1.0/src/xyp/operations/payment/overdue_organization_loan_debt_reference.py +87 -0
- xyp-0.1.0/src/xyp/operations/payment/paid_fine_by_register_service.py +137 -0
- xyp-0.1.0/src/xyp/operations/payment/paid_fine_service.py +137 -0
- xyp-0.1.0/src/xyp/operations/payment/payment_info_by_register_service.py +161 -0
- xyp-0.1.0/src/xyp/operations/payment/payment_order_invoice_generator.py +154 -0
- xyp-0.1.0/src/xyp/operations/payment/payment_received.py +145 -0
- xyp-0.1.0/src/xyp/operations/payment/payment_verification_service.py +74 -0
- xyp-0.1.0/src/xyp/operations/payment/person_loan_info_titan.py +120 -0
- xyp-0.1.0/src/xyp/operations/payment/qr_code_generation_for_payment_orders_service.py +83 -0
- xyp-0.1.0/src/xyp/operations/payment/tax_payer_info.py +87 -0
- xyp-0.1.0/src/xyp/operations/payment/tax_receipt_bank_by_regnum.py +138 -0
- xyp-0.1.0/src/xyp/operations/payment/unpaid_fine_by_register_service.py +137 -0
- xyp-0.1.0/src/xyp/operations/payment/unpaid_fine_service.py +137 -0
- xyp-0.1.0/src/xyp/operations/payment/violation_payment_by_plate_number.py +291 -0
- xyp-0.1.0/src/xyp/operations/payment/violation_payment_by_regnum.py +289 -0
- xyp-0.1.0/src/xyp/operations/pki/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/pki/certificate_info.py +87 -0
- xyp-0.1.0/src/xyp/operations/private_service/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/private_service/check_kindergarten_enrollment.py +115 -0
- xyp-0.1.0/src/xyp/operations/private_service/children_info_by_parent_civil_id.py +172 -0
- xyp-0.1.0/src/xyp/operations/private_service/id_card_info_em.py +167 -0
- xyp-0.1.0/src/xyp/operations/private_service/kindergarten_description.py +88 -0
- xyp-0.1.0/src/xyp/operations/private_service/result_kindergarten_enrollment.py +98 -0
- xyp-0.1.0/src/xyp/operations/private_service/send_kindergarten_enrollment.py +293 -0
- xyp-0.1.0/src/xyp/operations/property/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/property/cadastre_applicant_status_info.py +97 -0
- xyp-0.1.0/src/xyp/operations/property/electric_requirement_request.py +215 -0
- xyp-0.1.0/src/xyp/operations/property/electric_requirement_request_details.py +160 -0
- xyp-0.1.0/src/xyp/operations/property/electric_requirement_request_hold.py +72 -0
- xyp-0.1.0/src/xyp/operations/property/electric_requirement_request_list.py +125 -0
- xyp-0.1.0/src/xyp/operations/property/electric_requirement_request_remove.py +72 -0
- xyp-0.1.0/src/xyp/operations/property/get_bank_property_inquiry.py +110 -0
- xyp-0.1.0/src/xyp/operations/property/get_cadastral_map.py +72 -0
- xyp-0.1.0/src/xyp/operations/property/get_property_info.py +118 -0
- xyp-0.1.0/src/xyp/operations/property/get_property_info_by_national_property_number_eng.py +82 -0
- xyp-0.1.0/src/xyp/operations/property/get_property_info_certificate.py +80 -0
- xyp-0.1.0/src/xyp/operations/property/get_property_info_eng.py +92 -0
- xyp-0.1.0/src/xyp/operations/property/get_property_list.py +95 -0
- xyp-0.1.0/src/xyp/operations/property/get_property_type_list.py +147 -0
- xyp-0.1.0/src/xyp/operations/property/has_bank_property_inquiry.py +109 -0
- xyp-0.1.0/src/xyp/operations/property/is_property_check.py +73 -0
- xyp-0.1.0/src/xyp/operations/property/land_cadastral_map_info.py +110 -0
- xyp-0.1.0/src/xyp/operations/property/land_cadastre_agreement_info.py +111 -0
- xyp-0.1.0/src/xyp/operations/property/land_cadastre_applicant_info.py +103 -0
- xyp-0.1.0/src/xyp/operations/property/land_cadastre_qr.py +72 -0
- xyp-0.1.0/src/xyp/operations/property/land_cadastre_vicinity_info.py +111 -0
- xyp-0.1.0/src/xyp/operations/property/land_info_by_person_id_and_parcel_id.py +190 -0
- xyp-0.1.0/src/xyp/operations/property/land_owning_certificate_info.py +117 -0
- xyp-0.1.0/src/xyp/operations/property/land_owning_contract_info.py +147 -0
- xyp-0.1.0/src/xyp/operations/property/land_owning_decision_info.py +101 -0
- xyp-0.1.0/src/xyp/operations/property/land_settlement_act.py +148 -0
- xyp-0.1.0/src/xyp/operations/property/property_details_between_date.py +128 -0
- xyp-0.1.0/src/xyp/operations/property/property_info_eng.py +114 -0
- xyp-0.1.0/src/xyp/operations/property/property_value_info.py +75 -0
- xyp-0.1.0/src/xyp/operations/property/umns_property_info.py +90 -0
- xyp-0.1.0/src/xyp/operations/statistic/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/statistic/additional_survey_service.py +124 -0
- xyp-0.1.0/src/xyp/operations/statistic/change_name_info.py +93 -0
- xyp-0.1.0/src/xyp/operations/statistic/change_register_info.py +86 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_address_info.py +99 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_and_legal_entity_livestock_info.py +93 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_and_legal_entity_livestock_info_ws200135.py +105 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_feedback_verify.py +88 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_info.py +81 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_livestock_info.py +102 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_livestock_list.py +175 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_pasture_info.py +187 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_statistic_info.py +103 -0
- xyp-0.1.0/src/xyp/operations/statistic/citizen_suggestion_info.py +295 -0
- xyp-0.1.0/src/xyp/operations/statistic/delete_additional_survey_service.py +76 -0
- xyp-0.1.0/src/xyp/operations/statistic/delete_livestock_tax_survey_service.py +76 -0
- xyp-0.1.0/src/xyp/operations/statistic/get_household_info.py +175 -0
- xyp-0.1.0/src/xyp/operations/statistic/get_imei_lost_device_list.py +96 -0
- xyp-0.1.0/src/xyp/operations/statistic/get_livestock_tax_type.py +81 -0
- xyp-0.1.0/src/xyp/operations/statistic/ldfunded_survey_service.py +94 -0
- xyp-0.1.0/src/xyp/operations/statistic/legal_entity_livestock_info.py +93 -0
- xyp-0.1.0/src/xyp/operations/statistic/legal_entity_livestock_list.py +82 -0
- xyp-0.1.0/src/xyp/operations/statistic/livestock_tax_survey_service.py +106 -0
- xyp-0.1.0/src/xyp/operations/statistic/umns_household_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/statistic/umns_livestock_info.py +77 -0
- xyp-0.1.0/src/xyp/operations/tax/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/tax/citizen_tax_report_info.py +147 -0
- xyp-0.1.0/src/xyp/operations/tax/get_individual_info.py +116 -0
- xyp-0.1.0/src/xyp/operations/tax/get_organization_info.py +119 -0
- xyp-0.1.0/src/xyp/operations/tax/get_vehicle_paid_tax_history.py +110 -0
- xyp-0.1.0/src/xyp/operations/tax/licensing_info.py +154 -0
- xyp-0.1.0/src/xyp/operations/tax/tax_payment_service.py +108 -0
- xyp-0.1.0/src/xyp/operations/tax/tax_payment_verification_service.py +80 -0
- xyp-0.1.0/src/xyp/operations/tax/trade_info.py +151 -0
- xyp-0.1.0/src/xyp/operations/tax/unpaid_tax_information_service.py +135 -0
- xyp-0.1.0/src/xyp/operations/transport/__init__.py +4 -0
- xyp-0.1.0/src/xyp/operations/transport/border_registered_passengers.py +181 -0
- xyp-0.1.0/src/xyp/operations/transport/border_registered_transport.py +150 -0
- xyp-0.1.0/src/xyp/operations/transport/check_border_permit_vehicle.py +113 -0
- xyp-0.1.0/src/xyp/operations/transport/check_ecl_icense_from_kiosk.py +87 -0
- xyp-0.1.0/src/xyp/operations/transport/driver_license_ordered_log.py +71 -0
- xyp-0.1.0/src/xyp/operations/transport/ec_license_cancel.py +78 -0
- xyp-0.1.0/src/xyp/operations/transport/ec_license_checker.py +82 -0
- xyp-0.1.0/src/xyp/operations/transport/ec_license_creator.py +111 -0
- xyp-0.1.0/src/xyp/operations/transport/freight_transport_train_document_detail.py +108 -0
- xyp-0.1.0/src/xyp/operations/transport/freight_transport_train_document_list.py +92 -0
- xyp-0.1.0/src/xyp/operations/transport/get_citizen_vehicle_list.py +168 -0
- xyp-0.1.0/src/xyp/operations/transport/get_driver_info_with_register_and_license.py +125 -0
- xyp-0.1.0/src/xyp/operations/transport/get_driver_license_info.py +176 -0
- xyp-0.1.0/src/xyp/operations/transport/get_fine_info_using_fine_number.py +97 -0
- xyp-0.1.0/src/xyp/operations/transport/get_international_driver_info.py +106 -0
- xyp-0.1.0/src/xyp/operations/transport/get_organization_vehicle_list.py +171 -0
- xyp-0.1.0/src/xyp/operations/transport/get_pre_owned_org_vehicle_total.py +74 -0
- xyp-0.1.0/src/xyp/operations/transport/get_pre_owned_vehicle.py +107 -0
- xyp-0.1.0/src/xyp/operations/transport/get_pre_owned_vehicle_with_org_regnum.py +105 -0
- xyp-0.1.0/src/xyp/operations/transport/get_reserved_number_list.py +88 -0
- xyp-0.1.0/src/xyp/operations/transport/get_saved_number_list.py +88 -0
- xyp-0.1.0/src/xyp/operations/transport/get_vehicle_info.py +169 -0
- xyp-0.1.0/src/xyp/operations/transport/get_vehicle_inspection_data_by_plate_no.py +89 -0
- xyp-0.1.0/src/xyp/operations/transport/get_vehicle_inspection_info.py +82 -0
- xyp-0.1.0/src/xyp/operations/transport/get_vehicle_owner_history_list.py +109 -0
- xyp-0.1.0/src/xyp/operations/transport/get_vehicle_penalty_list.py +96 -0
- xyp-0.1.0/src/xyp/operations/transport/order_driver_license.py +192 -0
- xyp-0.1.0/src/xyp/operations/transport/pensioner_transport_service.py +100 -0
- xyp-0.1.0/src/xyp/operations/transport/plate_border_info.py +124 -0
- xyp-0.1.0/src/xyp/operations/transport/police_ec_license_checker.py +82 -0
- xyp-0.1.0/src/xyp/operations/transport/product_list.py +81 -0
- xyp-0.1.0/src/xyp/operations/transport/sas_company_info_list.py +70 -0
- xyp-0.1.0/src/xyp/operations/transport/special_driver_info.py +118 -0
- xyp-0.1.0/src/xyp/operations/transport/toll_invoice_details.py +99 -0
- xyp-0.1.0/src/xyp/operations/transport/train_border_info.py +126 -0
- xyp-0.1.0/src/xyp/operations/transport/transport_company_create_worker.py +253 -0
- xyp-0.1.0/src/xyp/operations/transport/transport_company_employee_list.py +88 -0
- xyp-0.1.0/src/xyp/operations/transport/transport_company_list.py +110 -0
- xyp-0.1.0/src/xyp/operations/transport/transport_company_route_list.py +94 -0
- xyp-0.1.0/src/xyp/operations/transport/transport_company_vehicles_list.py +97 -0
- xyp-0.1.0/src/xyp/operations/transport/umns_vehicle_info.py +92 -0
- xyp-0.1.0/src/xyp/operations/transport/unlicensed_vehicles_list.py +240 -0
- xyp-0.1.0/src/xyp/operations/transport/vehicle_and_driver_border_report.py +80 -0
- xyp-0.1.0/src/xyp/operations/transport/vehicle_border_info.py +128 -0
- xyp-0.1.0/src/xyp/operations/transport/vehicle_certificate.py +174 -0
- xyp-0.1.0/src/xyp/operations/transport/vehicle_legal_entity_info.py +227 -0
- xyp-0.1.0/src/xyp/operations/transport/vehicle_legal_entity_total.py +74 -0
- xyp-0.1.0/src/xyp/operations/transport/vehicle_tax_info_service.py +107 -0
- xyp-0.1.0/src/xyp/py.typed +0 -0
- xyp-0.1.0/src/xyp/services/__init__.py +4 -0
- xyp-0.1.0/src/xyp/services/citizen.py +516 -0
- xyp-0.1.0/src/xyp/services/education.py +147 -0
- xyp-0.1.0/src/xyp/services/foreign_service.py +57 -0
- xyp-0.1.0/src/xyp/services/government_service.py +349 -0
- xyp-0.1.0/src/xyp/services/health.py +479 -0
- xyp-0.1.0/src/xyp/services/insurance.py +424 -0
- xyp-0.1.0/src/xyp/services/labor_welfare.py +126 -0
- xyp-0.1.0/src/xyp/services/legal_entity.py +136 -0
- xyp-0.1.0/src/xyp/services/meta.py +51 -0
- xyp-0.1.0/src/xyp/services/payment.py +224 -0
- xyp-0.1.0/src/xyp/services/pki.py +24 -0
- xyp-0.1.0/src/xyp/services/private_service.py +57 -0
- xyp-0.1.0/src/xyp/services/property.py +195 -0
- xyp-0.1.0/src/xyp/services/statistic.py +151 -0
- xyp-0.1.0/src/xyp/services/tax.py +70 -0
- xyp-0.1.0/src/xyp/services/transport.py +309 -0
- xyp-0.1.0/tests/conftest.py +45 -0
- xyp-0.1.0/tests/test_client.py +219 -0
- xyp-0.1.0/tests/test_generated.py +70 -0
- xyp-0.1.0/tests/test_models.py +130 -0
- xyp-0.1.0/tests/test_signer.py +92 -0
- xyp-0.1.0/tests/test_soap.py +140 -0
- xyp-0.1.0/tests/test_zeep_parity.py +216 -0
- xyp-0.1.0/uv.lock +1091 -0
xyp-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
.venv/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
.pytest_cache/
|
|
9
|
+
.ruff_cache/
|
|
10
|
+
.pyright/
|
|
11
|
+
|
|
12
|
+
# Node
|
|
13
|
+
node_modules/
|
|
14
|
+
|
|
15
|
+
# PHP (composer.json is at the root because Packagist reads it from there)
|
|
16
|
+
/vendor/
|
|
17
|
+
/composer.lock
|
|
18
|
+
|
|
19
|
+
# Credentials must never be committed
|
|
20
|
+
*.key
|
|
21
|
+
*.pem
|
|
22
|
+
!packages/python/src/xyp/certs/*.pem
|
|
23
|
+
!packages/go/xyp/certs/*.pem
|
|
24
|
+
!packages/php/resources/certs/*.pem
|
|
25
|
+
!packages/java/src/main/resources/io/github/baljinnyamday/xyp/certs/*.pem
|
|
26
|
+
.env
|
|
27
|
+
.env.*
|
|
28
|
+
|
|
29
|
+
.DS_Store
|
xyp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 baljinnyamday
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
xyp-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: xyp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Typed Python SDK for XYP (ХУР), Mongolia's government data exchange system
|
|
5
|
+
Project-URL: Homepage, https://github.com/baljinnyamday/xyp-sdk
|
|
6
|
+
Project-URL: Documentation, https://github.com/baljinnyamday/xyp-sdk/tree/main/packages/python#readme
|
|
7
|
+
Project-URL: Issues, https://github.com/baljinnyamday/xyp-sdk/issues
|
|
8
|
+
Project-URL: Source, https://github.com/baljinnyamday/xyp-sdk/tree/main/packages/python
|
|
9
|
+
Author: baljinnyamday
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: e-mongolia,khur,mongolia,sdk,soap,xyp
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Typing :: Typed
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Requires-Dist: cryptography>=42
|
|
19
|
+
Requires-Dist: defusedxml>=0.7.1
|
|
20
|
+
Requires-Dist: httpx<1,>=0.27
|
|
21
|
+
Requires-Dist: pydantic<3,>=2.6
|
|
22
|
+
Requires-Dist: typing-extensions>=4.6
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# xyp
|
|
26
|
+
|
|
27
|
+
Typed Python SDK for **XYP (ХУР)**, Mongolia's government data exchange system.
|
|
28
|
+
Every XYP service, sync and async, fully type-hinted.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install xyp # or: uv add xyp
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from xyp import Xyp
|
|
36
|
+
|
|
37
|
+
xyp = Xyp(access_token="...", private_key="private.key")
|
|
38
|
+
|
|
39
|
+
card = xyp.citizen.get_citizen_id_card_info(regnum="РД00000000")
|
|
40
|
+
print(card.firstname, card.lastname)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
That is the whole integration. The SDK signs every request, builds the SOAP
|
|
44
|
+
envelope, verifies XYP's certificate and turns the XML into typed objects.
|
|
45
|
+
|
|
46
|
+
> **How it is tested.** The production system is only reachable from the National
|
|
47
|
+
> Data Center VPN, so the SDK is verified differentially instead: for every
|
|
48
|
+
> operation in the WSDLs we hold, the test suite checks that the XML this SDK
|
|
49
|
+
> sends is identical to what [zeep](https://docs.python-zeep.org) — the SOAP
|
|
50
|
+
> library behind the official samples and known-working integrations — builds
|
|
51
|
+
> from the WSDL, that responses are decoded to the same values, and that the
|
|
52
|
+
> request signature is byte-identical to the official `XypSign.py`. Endpoints
|
|
53
|
+
> whose WSDL is not public are covered by the same code paths but not by that
|
|
54
|
+
> comparison. Please open an issue with anything that differs in practice.
|
|
55
|
+
|
|
56
|
+
## Requirements
|
|
57
|
+
|
|
58
|
+
- Python 3.10+
|
|
59
|
+
- An access token and RSA key issued by the National Data Center, and a working
|
|
60
|
+
connection to their VPN with `xyp.gov.mn` in your hosts file
|
|
61
|
+
([connection guide](https://developer.xyp.gov.mn/docs/guide)). The SDK cannot
|
|
62
|
+
replace that step.
|
|
63
|
+
|
|
64
|
+
## Credentials
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
Xyp(access_token="...", private_key="private.key") # file path
|
|
68
|
+
Xyp(access_token="...", private_key=pem_text_or_bytes) # from your secret manager
|
|
69
|
+
Xyp() # XYP_ACCESS_TOKEN + XYP_PRIVATE_KEY (path)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Keep the token and key out of your source code; environment variables or a
|
|
73
|
+
secret manager are the intended way. Neither ever appears in `repr()`, logs or
|
|
74
|
+
exception messages.
|
|
75
|
+
|
|
76
|
+
## Finding a service
|
|
77
|
+
|
|
78
|
+
Services are grouped by XYP endpoint, and named after the original operation in
|
|
79
|
+
snake_case. Your editor autocompletes all of them:
|
|
80
|
+
|
|
81
|
+
| Group | Services | | Group | Services |
|
|
82
|
+
| --- | --- | --- | --- | --- |
|
|
83
|
+
| `xyp.citizen` | 83 | | `xyp.property` | 30 |
|
|
84
|
+
| `xyp.health` | 76 | | `xyp.statistic` | 24 |
|
|
85
|
+
| `xyp.insurance` | 67 | | `xyp.labor_welfare` | 19 |
|
|
86
|
+
| `xyp.government_service` | 54 | | `xyp.legal_entity` | 19 |
|
|
87
|
+
| `xyp.transport` | 48 | | `xyp.education` | 18 |
|
|
88
|
+
| `xyp.payment` | 33 | | `xyp.tax`, `xyp.meta`, `xyp.foreign_service`, `xyp.private_service`, `xyp.pki` | 28 |
|
|
89
|
+
|
|
90
|
+
`WS100101_getCitizenIDCardInfo` becomes `xyp.citizen.get_citizen_id_card_info`.
|
|
91
|
+
Every method's docstring starts with the original name, so searching the
|
|
92
|
+
package for `WS100101` finds it. Inputs are keyword arguments; the result is a
|
|
93
|
+
[Pydantic](https://docs.pydantic.dev) model (`.model_dump()`, `.model_dump_json()`).
|
|
94
|
+
Need the type for an annotation? `from xyp.models.citizen import GetCitizenIdCardInfoResponse`.
|
|
95
|
+
|
|
96
|
+
Prefer the original names? Call any service by name and get the raw data:
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
xyp.call("WS100101_getCitizenIDCardInfo", {"regnum": "РД00000000"}) # -> dict
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
This also works for services XYP adds before the SDK is updated — pass
|
|
103
|
+
`endpoint="citizen-1.5.0"` for those.
|
|
104
|
+
|
|
105
|
+
## Async
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from xyp import AsyncXyp
|
|
109
|
+
|
|
110
|
+
async with AsyncXyp(access_token="...", private_key="private.key") as xyp:
|
|
111
|
+
card = await xyp.citizen.get_citizen_id_card_info(regnum="РД00000000")
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Same options, same services. Create one client and reuse it — it keeps a
|
|
115
|
+
connection pool. Use it as a context manager or call `close()`.
|
|
116
|
+
|
|
117
|
+
## Citizen approval (OTP, fingerprint, digital signature, ДАН)
|
|
118
|
+
|
|
119
|
+
Many services only answer when the citizen has approved the request:
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from xyp import CitizenAuth
|
|
123
|
+
|
|
124
|
+
# 1. ask XYP to text the citizen a code for the services you are going to call
|
|
125
|
+
xyp.meta.register_otp_request(
|
|
126
|
+
regnum=regnum,
|
|
127
|
+
json_ws_list='[{"ws": "WS100101_getCitizenIDCardInfo"}]',
|
|
128
|
+
is_sms=1,
|
|
129
|
+
auth=CitizenAuth(regnum=regnum),
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# 2. call the service with the code they read out to you
|
|
133
|
+
card = xyp.citizen.get_citizen_id_card_info(
|
|
134
|
+
regnum=regnum,
|
|
135
|
+
auth=CitizenAuth.with_otp(regnum=regnum, otp=123456),
|
|
136
|
+
)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Also available: `CitizenAuth.with_sso_otp`, `.with_signature`,
|
|
140
|
+
`.with_fingerprint`, `.with_dan_app`, and `OperatorAuth` with the same
|
|
141
|
+
constructors for services that need the operator too (`operator=`).
|
|
142
|
+
|
|
143
|
+
## Errors
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from xyp import NotFoundError, AccessDeniedError, XypApiError, XypConnectionError
|
|
147
|
+
|
|
148
|
+
try:
|
|
149
|
+
card = xyp.citizen.get_citizen_id_card_info(regnum=regnum)
|
|
150
|
+
except NotFoundError:
|
|
151
|
+
card = None # resultCode 1: provider has no record
|
|
152
|
+
except AccessDeniedError:
|
|
153
|
+
... # your token may not call this service
|
|
154
|
+
except XypApiError as error:
|
|
155
|
+
log(error.result_code, error.message, error.request_id)
|
|
156
|
+
except XypConnectionError:
|
|
157
|
+
... # VPN down, hosts entry missing, TLS, timeout
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
| Exception | `resultCode` |
|
|
161
|
+
| --- | --- |
|
|
162
|
+
| `NotFoundError` | 1 |
|
|
163
|
+
| `InternalError` | 2 |
|
|
164
|
+
| `InvalidRequestError` | 3 (missing input, bad token / timestamp / signature header) |
|
|
165
|
+
| `AuthRequiredError` | 200–202 |
|
|
166
|
+
| `AccessDeniedError` | 203, 501 |
|
|
167
|
+
| `FingerprintError` | 301–304 |
|
|
168
|
+
| `CitizenDataError` | 401–402 |
|
|
169
|
+
| `SignatureError` | 601–605 |
|
|
170
|
+
| `ProviderError` | 801–802 |
|
|
171
|
+
|
|
172
|
+
All of them are `XypApiError`; everything the SDK raises is an `XypError`.
|
|
173
|
+
`request_id` is what XYP support will ask you for.
|
|
174
|
+
|
|
175
|
+
Every error has an `origin`, so you (and your logs) know whose side it is on:
|
|
176
|
+
|
|
177
|
+
| `error.origin` | Meaning | Exceptions |
|
|
178
|
+
| --- | --- | --- |
|
|
179
|
+
| `"config"` | how the client was set up | `XypConfigError` |
|
|
180
|
+
| `"network"` | VPN, hosts entry, TLS, timeout | `XypConnectionError`, `XypTimeoutError` |
|
|
181
|
+
| `"xyp"` | XYP or the data provider answered with an error | `XypApiError` and subclasses, `XypResponseError` |
|
|
182
|
+
| `"sdk"` | a gap in this SDK — please report it | `XypValidationError` |
|
|
183
|
+
|
|
184
|
+
### When XYP's data does not match the model
|
|
185
|
+
|
|
186
|
+
The response models are generated from XYP's public catalog, which is typed by
|
|
187
|
+
hand, so real data can disagree with them. That never costs you a call:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
card = xyp.citizen.get_citizen_id_card_info(regnum=regnum) # succeeds
|
|
191
|
+
card.firstname # everything that fits is typed as usual
|
|
192
|
+
card.birth_date # None: this field did not fit
|
|
193
|
+
card.xyp_mismatches # (Mismatch(path="birthDate", problem="..."),) with the raw .value
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
You also get an `XypModelMismatchWarning` pointing at your line, naming the
|
|
197
|
+
field and saying plainly that the SDK's model is wrong — not XYP, not your
|
|
198
|
+
code. It contains field names only, never values, so citizen data stays out of
|
|
199
|
+
your logs. Silence it with `warnings.simplefilter("ignore", XypModelMismatchWarning)`
|
|
200
|
+
or turn it into an error in your tests. `XypValidationError` is reserved for
|
|
201
|
+
the rare response that cannot be fitted at all; its `.data` still holds the
|
|
202
|
+
parsed response.
|
|
203
|
+
|
|
204
|
+
## TLS
|
|
205
|
+
|
|
206
|
+
XYP's certificate is issued by the Mongolian national CA, which no operating
|
|
207
|
+
system trusts by default — the reason most integrations (including the official
|
|
208
|
+
samples) switch verification off. This SDK bundles the national root and
|
|
209
|
+
issuing CA instead and verifies against exactly those.
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
Xyp(..., verify=True) # default: bundled national CAs
|
|
213
|
+
Xyp(..., verify="/path/to/ca.pem") # your own CA bundle
|
|
214
|
+
Xyp(..., verify=ssl_context) # full control
|
|
215
|
+
Xyp(..., verify=False) # off — read docs/tls.md first
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Going through your own HTTPS proxy? Set `base_url="https://proxy.example"` and
|
|
219
|
+
a `verify` that matches the proxy's certificate. Details and the reasoning:
|
|
220
|
+
[docs/tls.md](https://github.com/baljinnyamday/xyp-sdk/blob/main/docs/tls.md).
|
|
221
|
+
|
|
222
|
+
## Types
|
|
223
|
+
|
|
224
|
+
- Every response field is optional: providers leave fields out freely.
|
|
225
|
+
- Unknown fields are kept (`model.model_extra`) instead of raising.
|
|
226
|
+
- `Date` fields are `datetime` when XYP sends ISO 8601 and the original `str`
|
|
227
|
+
otherwise; formats are not documented, so nothing is rejected.
|
|
228
|
+
- `byte[]` fields (photos, PDFs) arrive as `bytes`.
|
|
229
|
+
|
|
230
|
+
## Development
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
uv sync
|
|
234
|
+
uv run pytest
|
|
235
|
+
uv run pyright
|
|
236
|
+
uv run ruff check .
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
`src/xyp/operations` (one module per service), `src/xyp/services`,
|
|
240
|
+
`src/xyp/models`, `_groups.py` and `_operations.py` are generated — change `generator/` or `spec/` and run `uv run xyp-generate` from
|
|
241
|
+
`generator/` instead of editing them.
|
|
242
|
+
|
|
243
|
+
## License
|
|
244
|
+
|
|
245
|
+
MIT
|
xyp-0.1.0/README.md
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# xyp
|
|
2
|
+
|
|
3
|
+
Typed Python SDK for **XYP (ХУР)**, Mongolia's government data exchange system.
|
|
4
|
+
Every XYP service, sync and async, fully type-hinted.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
pip install xyp # or: uv add xyp
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
```python
|
|
11
|
+
from xyp import Xyp
|
|
12
|
+
|
|
13
|
+
xyp = Xyp(access_token="...", private_key="private.key")
|
|
14
|
+
|
|
15
|
+
card = xyp.citizen.get_citizen_id_card_info(regnum="РД00000000")
|
|
16
|
+
print(card.firstname, card.lastname)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
That is the whole integration. The SDK signs every request, builds the SOAP
|
|
20
|
+
envelope, verifies XYP's certificate and turns the XML into typed objects.
|
|
21
|
+
|
|
22
|
+
> **How it is tested.** The production system is only reachable from the National
|
|
23
|
+
> Data Center VPN, so the SDK is verified differentially instead: for every
|
|
24
|
+
> operation in the WSDLs we hold, the test suite checks that the XML this SDK
|
|
25
|
+
> sends is identical to what [zeep](https://docs.python-zeep.org) — the SOAP
|
|
26
|
+
> library behind the official samples and known-working integrations — builds
|
|
27
|
+
> from the WSDL, that responses are decoded to the same values, and that the
|
|
28
|
+
> request signature is byte-identical to the official `XypSign.py`. Endpoints
|
|
29
|
+
> whose WSDL is not public are covered by the same code paths but not by that
|
|
30
|
+
> comparison. Please open an issue with anything that differs in practice.
|
|
31
|
+
|
|
32
|
+
## Requirements
|
|
33
|
+
|
|
34
|
+
- Python 3.10+
|
|
35
|
+
- An access token and RSA key issued by the National Data Center, and a working
|
|
36
|
+
connection to their VPN with `xyp.gov.mn` in your hosts file
|
|
37
|
+
([connection guide](https://developer.xyp.gov.mn/docs/guide)). The SDK cannot
|
|
38
|
+
replace that step.
|
|
39
|
+
|
|
40
|
+
## Credentials
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
Xyp(access_token="...", private_key="private.key") # file path
|
|
44
|
+
Xyp(access_token="...", private_key=pem_text_or_bytes) # from your secret manager
|
|
45
|
+
Xyp() # XYP_ACCESS_TOKEN + XYP_PRIVATE_KEY (path)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Keep the token and key out of your source code; environment variables or a
|
|
49
|
+
secret manager are the intended way. Neither ever appears in `repr()`, logs or
|
|
50
|
+
exception messages.
|
|
51
|
+
|
|
52
|
+
## Finding a service
|
|
53
|
+
|
|
54
|
+
Services are grouped by XYP endpoint, and named after the original operation in
|
|
55
|
+
snake_case. Your editor autocompletes all of them:
|
|
56
|
+
|
|
57
|
+
| Group | Services | | Group | Services |
|
|
58
|
+
| --- | --- | --- | --- | --- |
|
|
59
|
+
| `xyp.citizen` | 83 | | `xyp.property` | 30 |
|
|
60
|
+
| `xyp.health` | 76 | | `xyp.statistic` | 24 |
|
|
61
|
+
| `xyp.insurance` | 67 | | `xyp.labor_welfare` | 19 |
|
|
62
|
+
| `xyp.government_service` | 54 | | `xyp.legal_entity` | 19 |
|
|
63
|
+
| `xyp.transport` | 48 | | `xyp.education` | 18 |
|
|
64
|
+
| `xyp.payment` | 33 | | `xyp.tax`, `xyp.meta`, `xyp.foreign_service`, `xyp.private_service`, `xyp.pki` | 28 |
|
|
65
|
+
|
|
66
|
+
`WS100101_getCitizenIDCardInfo` becomes `xyp.citizen.get_citizen_id_card_info`.
|
|
67
|
+
Every method's docstring starts with the original name, so searching the
|
|
68
|
+
package for `WS100101` finds it. Inputs are keyword arguments; the result is a
|
|
69
|
+
[Pydantic](https://docs.pydantic.dev) model (`.model_dump()`, `.model_dump_json()`).
|
|
70
|
+
Need the type for an annotation? `from xyp.models.citizen import GetCitizenIdCardInfoResponse`.
|
|
71
|
+
|
|
72
|
+
Prefer the original names? Call any service by name and get the raw data:
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
xyp.call("WS100101_getCitizenIDCardInfo", {"regnum": "РД00000000"}) # -> dict
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
This also works for services XYP adds before the SDK is updated — pass
|
|
79
|
+
`endpoint="citizen-1.5.0"` for those.
|
|
80
|
+
|
|
81
|
+
## Async
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
from xyp import AsyncXyp
|
|
85
|
+
|
|
86
|
+
async with AsyncXyp(access_token="...", private_key="private.key") as xyp:
|
|
87
|
+
card = await xyp.citizen.get_citizen_id_card_info(regnum="РД00000000")
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Same options, same services. Create one client and reuse it — it keeps a
|
|
91
|
+
connection pool. Use it as a context manager or call `close()`.
|
|
92
|
+
|
|
93
|
+
## Citizen approval (OTP, fingerprint, digital signature, ДАН)
|
|
94
|
+
|
|
95
|
+
Many services only answer when the citizen has approved the request:
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from xyp import CitizenAuth
|
|
99
|
+
|
|
100
|
+
# 1. ask XYP to text the citizen a code for the services you are going to call
|
|
101
|
+
xyp.meta.register_otp_request(
|
|
102
|
+
regnum=regnum,
|
|
103
|
+
json_ws_list='[{"ws": "WS100101_getCitizenIDCardInfo"}]',
|
|
104
|
+
is_sms=1,
|
|
105
|
+
auth=CitizenAuth(regnum=regnum),
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
# 2. call the service with the code they read out to you
|
|
109
|
+
card = xyp.citizen.get_citizen_id_card_info(
|
|
110
|
+
regnum=regnum,
|
|
111
|
+
auth=CitizenAuth.with_otp(regnum=regnum, otp=123456),
|
|
112
|
+
)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Also available: `CitizenAuth.with_sso_otp`, `.with_signature`,
|
|
116
|
+
`.with_fingerprint`, `.with_dan_app`, and `OperatorAuth` with the same
|
|
117
|
+
constructors for services that need the operator too (`operator=`).
|
|
118
|
+
|
|
119
|
+
## Errors
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from xyp import NotFoundError, AccessDeniedError, XypApiError, XypConnectionError
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
card = xyp.citizen.get_citizen_id_card_info(regnum=regnum)
|
|
126
|
+
except NotFoundError:
|
|
127
|
+
card = None # resultCode 1: provider has no record
|
|
128
|
+
except AccessDeniedError:
|
|
129
|
+
... # your token may not call this service
|
|
130
|
+
except XypApiError as error:
|
|
131
|
+
log(error.result_code, error.message, error.request_id)
|
|
132
|
+
except XypConnectionError:
|
|
133
|
+
... # VPN down, hosts entry missing, TLS, timeout
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
| Exception | `resultCode` |
|
|
137
|
+
| --- | --- |
|
|
138
|
+
| `NotFoundError` | 1 |
|
|
139
|
+
| `InternalError` | 2 |
|
|
140
|
+
| `InvalidRequestError` | 3 (missing input, bad token / timestamp / signature header) |
|
|
141
|
+
| `AuthRequiredError` | 200–202 |
|
|
142
|
+
| `AccessDeniedError` | 203, 501 |
|
|
143
|
+
| `FingerprintError` | 301–304 |
|
|
144
|
+
| `CitizenDataError` | 401–402 |
|
|
145
|
+
| `SignatureError` | 601–605 |
|
|
146
|
+
| `ProviderError` | 801–802 |
|
|
147
|
+
|
|
148
|
+
All of them are `XypApiError`; everything the SDK raises is an `XypError`.
|
|
149
|
+
`request_id` is what XYP support will ask you for.
|
|
150
|
+
|
|
151
|
+
Every error has an `origin`, so you (and your logs) know whose side it is on:
|
|
152
|
+
|
|
153
|
+
| `error.origin` | Meaning | Exceptions |
|
|
154
|
+
| --- | --- | --- |
|
|
155
|
+
| `"config"` | how the client was set up | `XypConfigError` |
|
|
156
|
+
| `"network"` | VPN, hosts entry, TLS, timeout | `XypConnectionError`, `XypTimeoutError` |
|
|
157
|
+
| `"xyp"` | XYP or the data provider answered with an error | `XypApiError` and subclasses, `XypResponseError` |
|
|
158
|
+
| `"sdk"` | a gap in this SDK — please report it | `XypValidationError` |
|
|
159
|
+
|
|
160
|
+
### When XYP's data does not match the model
|
|
161
|
+
|
|
162
|
+
The response models are generated from XYP's public catalog, which is typed by
|
|
163
|
+
hand, so real data can disagree with them. That never costs you a call:
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
card = xyp.citizen.get_citizen_id_card_info(regnum=regnum) # succeeds
|
|
167
|
+
card.firstname # everything that fits is typed as usual
|
|
168
|
+
card.birth_date # None: this field did not fit
|
|
169
|
+
card.xyp_mismatches # (Mismatch(path="birthDate", problem="..."),) with the raw .value
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
You also get an `XypModelMismatchWarning` pointing at your line, naming the
|
|
173
|
+
field and saying plainly that the SDK's model is wrong — not XYP, not your
|
|
174
|
+
code. It contains field names only, never values, so citizen data stays out of
|
|
175
|
+
your logs. Silence it with `warnings.simplefilter("ignore", XypModelMismatchWarning)`
|
|
176
|
+
or turn it into an error in your tests. `XypValidationError` is reserved for
|
|
177
|
+
the rare response that cannot be fitted at all; its `.data` still holds the
|
|
178
|
+
parsed response.
|
|
179
|
+
|
|
180
|
+
## TLS
|
|
181
|
+
|
|
182
|
+
XYP's certificate is issued by the Mongolian national CA, which no operating
|
|
183
|
+
system trusts by default — the reason most integrations (including the official
|
|
184
|
+
samples) switch verification off. This SDK bundles the national root and
|
|
185
|
+
issuing CA instead and verifies against exactly those.
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
Xyp(..., verify=True) # default: bundled national CAs
|
|
189
|
+
Xyp(..., verify="/path/to/ca.pem") # your own CA bundle
|
|
190
|
+
Xyp(..., verify=ssl_context) # full control
|
|
191
|
+
Xyp(..., verify=False) # off — read docs/tls.md first
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Going through your own HTTPS proxy? Set `base_url="https://proxy.example"` and
|
|
195
|
+
a `verify` that matches the proxy's certificate. Details and the reasoning:
|
|
196
|
+
[docs/tls.md](https://github.com/baljinnyamday/xyp-sdk/blob/main/docs/tls.md).
|
|
197
|
+
|
|
198
|
+
## Types
|
|
199
|
+
|
|
200
|
+
- Every response field is optional: providers leave fields out freely.
|
|
201
|
+
- Unknown fields are kept (`model.model_extra`) instead of raising.
|
|
202
|
+
- `Date` fields are `datetime` when XYP sends ISO 8601 and the original `str`
|
|
203
|
+
otherwise; formats are not documented, so nothing is rejected.
|
|
204
|
+
- `byte[]` fields (photos, PDFs) arrive as `bytes`.
|
|
205
|
+
|
|
206
|
+
## Development
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
uv sync
|
|
210
|
+
uv run pytest
|
|
211
|
+
uv run pyright
|
|
212
|
+
uv run ruff check .
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
`src/xyp/operations` (one module per service), `src/xyp/services`,
|
|
216
|
+
`src/xyp/models`, `_groups.py` and `_operations.py` are generated — change `generator/` or `spec/` and run `uv run xyp-generate` from
|
|
217
|
+
`generator/` instead of editing them.
|
|
218
|
+
|
|
219
|
+
## License
|
|
220
|
+
|
|
221
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""First-contact check against the real XYP. Run it from a machine on the VPN:
|
|
2
|
+
|
|
3
|
+
export XYP_ACCESS_TOKEN=... # never commit these
|
|
4
|
+
export XYP_PRIVATE_KEY=/path/to/private.key
|
|
5
|
+
uv run python examples/smoke.py
|
|
6
|
+
|
|
7
|
+
`listAccess` needs no citizen data, so it is the safest first call. It proves
|
|
8
|
+
four things at once: TLS against the bundled national CAs, the request
|
|
9
|
+
signature, the SOAP envelope, and response parsing.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import sys
|
|
15
|
+
|
|
16
|
+
from xyp import Xyp, XypError
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def main() -> int:
|
|
20
|
+
try:
|
|
21
|
+
with Xyp() as xyp:
|
|
22
|
+
access = xyp.meta.list_access()
|
|
23
|
+
except XypError as error:
|
|
24
|
+
sys.stderr.write(f"FAILED: {type(error).__name__}: {error}\n")
|
|
25
|
+
return 1
|
|
26
|
+
# Deliberately not the whole response: listAccess echoes your access token and
|
|
27
|
+
# certificate, and this output is what people paste into bug reports.
|
|
28
|
+
services = len(access.approved_services or [])
|
|
29
|
+
sys.stdout.write(
|
|
30
|
+
f"OK: organisation={access.org_title!r} registered={access.registered} "
|
|
31
|
+
f"approved_services={services} model_mismatches={len(access.xyp_mismatches)}\n"
|
|
32
|
+
)
|
|
33
|
+
return 0
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == "__main__":
|
|
37
|
+
raise SystemExit(main())
|
xyp-0.1.0/pyproject.toml
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "xyp"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Typed Python SDK for XYP (ХУР), Mongolia's government data exchange system"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = "MIT"
|
|
7
|
+
license-files = ["LICENSE"]
|
|
8
|
+
authors = [{ name = "baljinnyamday" }]
|
|
9
|
+
requires-python = ">=3.10"
|
|
10
|
+
keywords = ["xyp", "khur", "mongolia", "soap", "sdk", "e-mongolia"]
|
|
11
|
+
classifiers = [
|
|
12
|
+
"Development Status :: 5 - Production/Stable",
|
|
13
|
+
"Intended Audience :: Developers",
|
|
14
|
+
"Programming Language :: Python :: 3",
|
|
15
|
+
"Typing :: Typed",
|
|
16
|
+
]
|
|
17
|
+
# Upper bounds on purpose: `pip install --pre` enables pre-releases for every dependency,
|
|
18
|
+
# and httpx 1.0 (in development) is a rewrite with a different API.
|
|
19
|
+
dependencies = [
|
|
20
|
+
"httpx>=0.27,<1",
|
|
21
|
+
"pydantic>=2.6,<3",
|
|
22
|
+
"cryptography>=42",
|
|
23
|
+
"defusedxml>=0.7.1",
|
|
24
|
+
"typing-extensions>=4.6",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.urls]
|
|
28
|
+
Homepage = "https://github.com/baljinnyamday/xyp-sdk"
|
|
29
|
+
Documentation = "https://github.com/baljinnyamday/xyp-sdk/tree/main/packages/python#readme"
|
|
30
|
+
Issues = "https://github.com/baljinnyamday/xyp-sdk/issues"
|
|
31
|
+
Source = "https://github.com/baljinnyamday/xyp-sdk/tree/main/packages/python"
|
|
32
|
+
|
|
33
|
+
[dependency-groups]
|
|
34
|
+
dev = [
|
|
35
|
+
"pytest>=8",
|
|
36
|
+
"pytest-asyncio>=0.24",
|
|
37
|
+
"respx>=0.21",
|
|
38
|
+
"ruff>=0.6",
|
|
39
|
+
"pyright>=1.1.380",
|
|
40
|
+
"types-defusedxml>=0.7.0.20260504",
|
|
41
|
+
"zeep>=4.3.3",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[build-system]
|
|
45
|
+
requires = ["hatchling"]
|
|
46
|
+
build-backend = "hatchling.build"
|
|
47
|
+
|
|
48
|
+
[tool.hatch.build]
|
|
49
|
+
# The repository ignores *.pem so credentials cannot be committed by accident;
|
|
50
|
+
# the bundled CA certificates are the deliberate exception.
|
|
51
|
+
artifacts = ["src/xyp/certs/*.pem"]
|
|
52
|
+
|
|
53
|
+
[tool.hatch.build.targets.wheel]
|
|
54
|
+
packages = ["src/xyp"]
|
|
55
|
+
|
|
56
|
+
[tool.pytest.ini_options]
|
|
57
|
+
asyncio_mode = "auto"
|
|
58
|
+
testpaths = ["tests"]
|
|
59
|
+
filterwarnings = ["error"]
|
|
60
|
+
|
|
61
|
+
[tool.ruff]
|
|
62
|
+
src = ["src"]
|
|
63
|
+
line-length = 100
|
|
64
|
+
target-version = "py310"
|
|
65
|
+
|
|
66
|
+
[tool.ruff.lint.flake8-tidy-imports]
|
|
67
|
+
ban-relative-imports = "all"
|
|
68
|
+
|
|
69
|
+
[tool.ruff.lint]
|
|
70
|
+
select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "TID252", "C4", "PIE", "RET", "S", "PT"]
|
|
71
|
+
# Generated docstrings carry Mongolian text from the portal (Cyrillic is expected).
|
|
72
|
+
ignore = ["RUF001", "RUF002", "RUF003"]
|
|
73
|
+
|
|
74
|
+
[tool.ruff.lint.per-file-ignores]
|
|
75
|
+
# Generated code: docstrings quote the portal verbatim, and some XYP names are very long.
|
|
76
|
+
"src/xyp/operations/**/*.py" = ["E501"]
|
|
77
|
+
"src/xyp/services/*.py" = ["E501"]
|
|
78
|
+
# Tests assert, use fake tokens, and parse the XML they build themselves.
|
|
79
|
+
"tests/**" = ["S101", "S105", "S314", "S603"]
|
|
80
|
+
"scripts/**" = ["S101", "S105"]
|
|
81
|
+
|
|
82
|
+
[tool.pyright]
|
|
83
|
+
typeCheckingMode = "strict"
|
|
84
|
+
include = ["src"]
|