├── .circleci └── config.yml ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── bug_snag_issue.md │ └── story.md └── workflows │ ├── add_to_project.yml │ └── issue_states.yml ├── .gitignore ├── .java-version ├── .nvmrc ├── .windsurfrules ├── ArchitectureDocumentRecord.md ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── avni-rule-server ├── build.gradle ├── package-lock.json ├── readme.md └── src │ └── main │ ├── java │ └── org │ │ └── avni │ │ ├── Main.java │ │ └── ruleServer │ │ ├── RuleService.java │ │ └── domain │ │ ├── Imports.java │ │ ├── RuleInput.java │ │ └── RuleParams.java │ ├── js │ ├── .nvmrc │ ├── main.js │ ├── package-lock.json │ ├── package.json │ ├── ruleInvoker.js │ ├── ruleSample.js │ ├── utils.js │ └── webpack.config.js │ └── resources │ └── application.properties ├── avni-server-api ├── build.gradle ├── log │ └── access_log.2022-09-14.log └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── avni │ │ │ ├── Avni.java │ │ │ ├── messaging │ │ │ ├── api │ │ │ │ ├── ManualMessageController.java │ │ │ │ ├── MessageController.java │ │ │ │ ├── MessageRuleController.java │ │ │ │ └── MessageTemplateController.java │ │ │ ├── contract │ │ │ │ ├── ContactGroupRequest.java │ │ │ │ ├── GroupContactsResponse.java │ │ │ │ ├── ManualMessageContract.java │ │ │ │ ├── MessageRuleContract.java │ │ │ │ ├── MessageRuleWebContract.java │ │ │ │ ├── MessageTemplateContract.java │ │ │ │ ├── SendMessageResponse.java │ │ │ │ ├── StartFlowForContactRequest.java │ │ │ │ ├── UserContract.java │ │ │ │ ├── glific │ │ │ │ │ ├── GetAllMessagesData.java │ │ │ │ │ ├── GlificAuth.java │ │ │ │ │ ├── GlificAuthRequest.java │ │ │ │ │ ├── GlificContactGroupContactCountResponse.java │ │ │ │ │ ├── GlificContactGroupContactsResponse.java │ │ │ │ │ ├── GlificContactGroupCountResponse.java │ │ │ │ │ ├── GlificContactGroupsResponse.java │ │ │ │ │ ├── GlificContactResponse.java │ │ │ │ │ ├── GlificCreateContactGroupResponse.java │ │ │ │ │ ├── GlificError.java │ │ │ │ │ ├── GlificErrorLocation.java │ │ │ │ │ ├── GlificGetContactsResponse.java │ │ │ │ │ ├── GlificGetGroupResponse.java │ │ │ │ │ ├── GlificMessageResponse.java │ │ │ │ │ ├── GlificMessageTemplate.java │ │ │ │ │ ├── GlificMessageTemplateResponse.java │ │ │ │ │ ├── GlificOptinContactResponse.java │ │ │ │ │ ├── GlificOptinContactWithErrorsResponse.java │ │ │ │ │ ├── GlificResponse.java │ │ │ │ │ ├── GlificSearchDataResponse.java │ │ │ │ │ ├── GlificStartFlowForContactResponse.java │ │ │ │ │ ├── GlificUser.java │ │ │ │ │ ├── Message.java │ │ │ │ │ └── Search.java │ │ │ │ └── web │ │ │ │ │ └── MessageRequestResponse.java │ │ │ ├── controller │ │ │ │ ├── ContactController.java │ │ │ │ └── ContactGroupController.java │ │ │ ├── external │ │ │ │ └── GlificRestClient.java │ │ │ ├── repository │ │ │ │ ├── AbstractGlificRepository.java │ │ │ │ ├── GlificContactRepository.java │ │ │ │ ├── GlificMessageRepository.java │ │ │ │ ├── GlificMessageTemplateRepository.java │ │ │ │ ├── ManualMessageRepository.java │ │ │ │ ├── MessageReceiverRepository.java │ │ │ │ ├── MessageRequestQueueRepository.java │ │ │ │ └── MessageRuleRepository.java │ │ │ └── service │ │ │ │ ├── GroupMessagingService.java │ │ │ │ ├── IndividualMessagingService.java │ │ │ │ ├── MessageReceiverService.java │ │ │ │ ├── MessageRequestService.java │ │ │ │ ├── MessageSenderJob.java │ │ │ │ ├── MessageTemplateService.java │ │ │ │ ├── MessagingService.java │ │ │ │ └── PhoneNumberNotAvailableOrIncorrectException.java │ │ │ └── server │ │ │ ├── AvniSpringConfiguration.java │ │ │ ├── CustomClientHttpRequestInterceptor.java │ │ │ ├── CustomRestTemplateCustomizer.java │ │ │ ├── SimpleCacheCustomizer.java │ │ │ ├── StaticResourceConfiguration.java │ │ │ ├── StringToJodaDateTimeConverter.java │ │ │ ├── adapter │ │ │ ├── ObservationsHelper.java │ │ │ └── contract │ │ │ │ ├── ObservationRuleResponse.java │ │ │ │ ├── ProgramRuleInput.java │ │ │ │ └── encounter │ │ │ │ ├── EncounterTypeRuleInput.java │ │ │ │ ├── ProgramEncounterRuleInput.java │ │ │ │ └── ProgramEnrolmentForProgramEncounterRuleInput.java │ │ │ ├── auth │ │ │ └── AuthenticationHelper.java │ │ │ ├── backgroundJob │ │ │ └── StorageManagementJob.java │ │ │ ├── builder │ │ │ ├── BaseBuilder.java │ │ │ ├── BuilderException.java │ │ │ ├── ChecklistDetailBuilder.java │ │ │ ├── ChecklistItemDetailBuilder.java │ │ │ ├── FormBuilder.java │ │ │ ├── FormBuilderException.java │ │ │ ├── FormElementBuilder.java │ │ │ ├── FormElementGroupBuilder.java │ │ │ ├── LocationBuilder.java │ │ │ ├── NonApplicableFormElementBuilder.java │ │ │ ├── OrganisationBuilder.java │ │ │ ├── VideoBuilder.java │ │ │ └── VideoTelemetricBuilder.java │ │ │ ├── common │ │ │ ├── BulkItemSaveException.java │ │ │ ├── EnhancedValidationDTO.java │ │ │ ├── EntityHelper.java │ │ │ ├── Messageable.java │ │ │ └── MessageableAnnotationAspect.java │ │ │ ├── config │ │ │ ├── AvniKeycloakConfig.java │ │ │ ├── AvniServiceType.java │ │ │ ├── CognitoConfig.java │ │ │ ├── IdpType.java │ │ │ ├── InvalidConfigurationException.java │ │ │ └── SelfServiceBatchConfig.java │ │ │ ├── dao │ │ │ ├── AccountAdminRepository.java │ │ │ ├── AccountRepository.java │ │ │ ├── AddressLevelTypeRepository.java │ │ │ ├── AnswerConceptMigrationRepository.java │ │ │ ├── ApprovalStatusRepository.java │ │ │ ├── AvniJobRepository.java │ │ │ ├── AvniJpaRepository.java │ │ │ ├── CatchmentRepository.java │ │ │ ├── ChecklistDetailRepository.java │ │ │ ├── ChecklistItemDetailRepository.java │ │ │ ├── ChecklistItemRepository.java │ │ │ ├── ChecklistRepository.java │ │ │ ├── CommentRepository.java │ │ │ ├── CommentThreadRepository.java │ │ │ ├── ConceptAnswerRepository.java │ │ │ ├── CustomQueryRepository.java │ │ │ ├── DashboardFilterRepository.java │ │ │ ├── DashboardSectionCardMappingRepository.java │ │ │ ├── DashboardSectionRepository.java │ │ │ ├── DbRoleRepository.java │ │ │ ├── DocumentationItemRepository.java │ │ │ ├── DocumentationRepository.java │ │ │ ├── EncounterRepository.java │ │ │ ├── EncounterSearchRepository.java │ │ │ ├── EncounterTypeRepository.java │ │ │ ├── EntityApprovalStatusRepository.java │ │ │ ├── EntityApprovalStatusSearchParams.java │ │ │ ├── ExportJobParametersRepository.java │ │ │ ├── GenderRepository.java │ │ │ ├── GroupDashboardRepository.java │ │ │ ├── GroupPrivilegeRepository.java │ │ │ ├── GroupRepository.java │ │ │ ├── GroupRoleRepository.java │ │ │ ├── GroupSubjectRepository.java │ │ │ ├── IdentifierAssignmentRepository.java │ │ │ ├── IdentifierSourceRepository.java │ │ │ ├── IdentifierUserAssignmentRepository.java │ │ │ ├── ImplReferenceDataRepository.java │ │ │ ├── ImplementationRepository.java │ │ │ ├── IndividualRepository.java │ │ │ ├── IndividualSearchParams.java │ │ │ ├── JobStatus.java │ │ │ ├── JobStatusMapper.java │ │ │ ├── LocationMappingRepository.java │ │ │ ├── LocationMappingSyncRepository.java │ │ │ ├── LocationRepository.java │ │ │ ├── LocationSyncRepository.java │ │ │ ├── Msg91ConfigRepository.java │ │ │ ├── NewsRepository.java │ │ │ ├── OperationalEncounterTypeRepository.java │ │ │ ├── OperationalProgramRepository.java │ │ │ ├── OperationalSubjectTypeRepository.java │ │ │ ├── OrganisationCategoryRepository.java │ │ │ ├── OrganisationConfigRepository.java │ │ │ ├── OrganisationGroupOrganisationRepository.java │ │ │ ├── OrganisationGroupRepository.java │ │ │ ├── OrganisationStatusRepository.java │ │ │ ├── PlatformTranslationRepository.java │ │ │ ├── PrivilegeRepository.java │ │ │ ├── ProgramEncounterRepository.java │ │ │ ├── ProgramRepository.java │ │ │ ├── QueryRepository.java │ │ │ ├── ResetSyncRepository.java │ │ │ ├── RoleSwitchableRepository.java │ │ │ ├── RuleDependencyRepository.java │ │ │ ├── RuleFailureTelemetryRepository.java │ │ │ ├── RuleRepository.java │ │ │ ├── StandardReportCardTypeRepository.java │ │ │ ├── SubjectMigrationRepository.java │ │ │ ├── SubjectSearchRepository.java │ │ │ ├── SyncTelemetryRepository.java │ │ │ ├── TranslationRepository.java │ │ │ ├── UserGroupRepository.java │ │ │ ├── UserRepository.java │ │ │ ├── UserSubjectAssignmentRepository.java │ │ │ ├── UserSubjectRepository.java │ │ │ ├── VideoRepository.java │ │ │ ├── VideoTelemetricRepository.java │ │ │ ├── VirtualCatchmentRepository.java │ │ │ ├── application │ │ │ │ ├── FormElementGroupRepository.java │ │ │ │ ├── FormElementRepository.java │ │ │ │ ├── FormMappingRepository.java │ │ │ │ ├── FormRepository.java │ │ │ │ └── MenuItemRepository.java │ │ │ ├── etl │ │ │ │ └── TableMetaDataRepository.java │ │ │ ├── externalSystem │ │ │ │ └── ExternalSystemConfigRepository.java │ │ │ ├── individualRelationship │ │ │ │ ├── IndividualRelationGenderMappingRepository.java │ │ │ │ ├── IndividualRelationRepository.java │ │ │ │ ├── IndividualRelationshipRepository.java │ │ │ │ ├── IndividualRelationshipTypeRepository.java │ │ │ │ └── RuleFailureLogRepository.java │ │ │ ├── metabase │ │ │ │ ├── CollectionPermissionsRepository.java │ │ │ │ ├── CollectionRepository.java │ │ │ │ ├── GroupPermissionsRepository.java │ │ │ │ ├── MetabaseConnector.java │ │ │ │ ├── MetabaseDashboardRepository.java │ │ │ │ ├── MetabaseDatabaseRepository.java │ │ │ │ ├── MetabaseGroupRepository.java │ │ │ │ ├── MetabaseUserRepository.java │ │ │ │ ├── QuestionRepository.java │ │ │ │ └── db │ │ │ │ │ └── MetabaseDbConnectionFactory.java │ │ │ ├── program │ │ │ │ └── SubjectProgramEligibilityRepository.java │ │ │ ├── search │ │ │ │ ├── BaseSubjectSearchQueryBuilder.java │ │ │ │ ├── EncounterSearchQueryBuilder.java │ │ │ │ ├── SearchBuilder.java │ │ │ │ ├── SqlQuery.java │ │ │ │ ├── SubjectAssignmentSearchQueryBuilder.java │ │ │ │ └── SubjectSearchQueryBuilder.java │ │ │ └── task │ │ │ │ ├── TaskRepository.java │ │ │ │ ├── TaskSearchCriteria.java │ │ │ │ ├── TaskStatusRepository.java │ │ │ │ ├── TaskTypeRepository.java │ │ │ │ └── TaskUnAssignmentRepository.java │ │ │ ├── domain │ │ │ ├── RuleExecutionException.java │ │ │ ├── batch │ │ │ │ └── BatchJobStatus.java │ │ │ └── metabase │ │ │ │ ├── CannedAnalyticsException.java │ │ │ │ ├── CannedAnalyticsStatus.java │ │ │ │ ├── CreateUserRequest.java │ │ │ │ ├── DeactivateMetabaseUserResponse.java │ │ │ │ ├── MetabaseAllUsersResponse.java │ │ │ │ ├── MetabaseResource.java │ │ │ │ ├── MetabaseUserData.java │ │ │ │ ├── MetabaseUserResponse.java │ │ │ │ ├── UpdateUserGroupRequest.java │ │ │ │ ├── UpdateUserGroupResponse.java │ │ │ │ └── UserGroupMemberships.java │ │ │ ├── exporter │ │ │ ├── ExportBatchConfiguration.java │ │ │ ├── ExportCSVFieldExtractor.java │ │ │ ├── ExportItemRow.java │ │ │ ├── ExportJobService.java │ │ │ ├── ExportProcessor.java │ │ │ ├── ItemReaderCleaner.java │ │ │ ├── JobCompletionNotificationListener.java │ │ │ ├── LongitudinalExportJobStepListener.java │ │ │ ├── LongitudinalExportTasklet.java │ │ │ ├── LongitudinalExportTaskletImpl.java │ │ │ └── v2 │ │ │ │ ├── ExportFieldsManager.java │ │ │ │ ├── ExportV2CSVFieldExtractor.java │ │ │ │ ├── ExportV2Processor.java │ │ │ │ ├── ExportV2ValidationHelper.java │ │ │ │ ├── HeaderCreator.java │ │ │ │ ├── HeaderNameAndFunctionMapper.java │ │ │ │ ├── LongitudinalExportDBFieldNameConstants.java │ │ │ │ ├── LongitudinalExportItemRow.java │ │ │ │ ├── LongitudinalExportRequestFieldNameConstants.java │ │ │ │ └── LongitudinalExportV2TaskletImpl.java │ │ │ ├── framework │ │ │ ├── ApplicationContextProvider.java │ │ │ ├── api │ │ │ │ ├── ApiConfiguration.java │ │ │ │ └── ApiResourceInterceptor.java │ │ │ ├── bugsnag │ │ │ │ └── BugSnagConfiguration.java │ │ │ ├── context │ │ │ │ ├── DeploymentSpecificConfiguration.java │ │ │ │ └── SpringProfiles.java │ │ │ ├── hibernate │ │ │ │ ├── CacheEventLogger.java │ │ │ │ └── DummyInterceptor.java │ │ │ ├── jpa │ │ │ │ └── CHSAuditorAware.java │ │ │ ├── json │ │ │ │ └── JsonEncoder.java │ │ │ ├── rest │ │ │ │ ├── RepositoryConfig.java │ │ │ │ └── RestControllerErrorResponse.java │ │ │ ├── security │ │ │ │ ├── ApiSecurity.java │ │ │ │ ├── AuthService.java │ │ │ │ ├── AuthTokenManager.java │ │ │ │ ├── AuthenticationFilter.java │ │ │ │ ├── LimitHostNamesFilter.java │ │ │ │ ├── ProcessForwardedHeadersFilter.java │ │ │ │ └── ResourceProtectionStatus.java │ │ │ ├── sync │ │ │ │ ├── MetadataResourceInterceptor.java │ │ │ │ ├── MutableRequestFilter.java │ │ │ │ ├── MutableRequestWrapper.java │ │ │ │ ├── SyncConfiguration.java │ │ │ │ └── TransactionalResourceInterceptor.java │ │ │ └── tomcat │ │ │ │ └── TomcatContainerCustomizer.java │ │ │ ├── identifier │ │ │ ├── IdentifierGenerator.java │ │ │ ├── NextIdentifierUserAssignment.java │ │ │ ├── PrefixedUserPoolBasedIdentifierGenerator.java │ │ │ ├── UserBasedIdentifierGenerator.java │ │ │ └── UserPoolBasedIdentifierGenerator.java │ │ │ ├── importer │ │ │ └── batch │ │ │ │ ├── AvniSpringBatchJobHelper.java │ │ │ │ ├── JobService.java │ │ │ │ ├── csv │ │ │ │ ├── BatchConfiguration.java │ │ │ │ ├── ErrorFileCreatorListener.java │ │ │ │ ├── ErrorFileWriterListener.java │ │ │ │ ├── LocationImportService.java │ │ │ │ ├── contract │ │ │ │ │ ├── UploadRuleServerRequestContract.java │ │ │ │ │ └── UploadRuleServerResponseContract.java │ │ │ │ ├── creator │ │ │ │ │ ├── AddressLevelCreator.java │ │ │ │ │ ├── BasicEncounterCreator.java │ │ │ │ │ ├── DateCreator.java │ │ │ │ │ ├── DecisionCreator.java │ │ │ │ │ ├── EncounterCreator.java │ │ │ │ │ ├── EncounterTypeCreator.java │ │ │ │ │ ├── LocationCreator.java │ │ │ │ │ ├── ObservationCreator.java │ │ │ │ │ ├── ProgramCreator.java │ │ │ │ │ ├── ProgramEncounterCreator.java │ │ │ │ │ ├── ProgramEnrolmentCreator.java │ │ │ │ │ ├── RuleServerInvoker.java │ │ │ │ │ ├── SubjectCreator.java │ │ │ │ │ ├── SubjectTypeCreator.java │ │ │ │ │ └── VisitCreator.java │ │ │ │ └── writer │ │ │ │ │ ├── BulkLocationCreator.java │ │ │ │ │ ├── BulkLocationEditor.java │ │ │ │ │ ├── BulkLocationModifier.java │ │ │ │ │ ├── CommonWriterError.java │ │ │ │ │ ├── CsvFileItemWriter.java │ │ │ │ │ ├── EncounterWriter.java │ │ │ │ │ ├── EntityApprovalStatusWriter.java │ │ │ │ │ ├── EntityWriter.java │ │ │ │ │ ├── GroupSubjectWriter.java │ │ │ │ │ ├── LocationWriter.java │ │ │ │ │ ├── ProgramEncounterWriter.java │ │ │ │ │ ├── ProgramEnrolmentWriter.java │ │ │ │ │ ├── SubjectWriter.java │ │ │ │ │ ├── SubjectWriterWrapper.java │ │ │ │ │ ├── TxnDataHeaderValidator.java │ │ │ │ │ ├── UserAndCatchmentWriter.java │ │ │ │ │ └── header │ │ │ │ │ ├── AbstractHeaders.java │ │ │ │ │ ├── AddressConfig.java │ │ │ │ │ ├── CodedFieldDescriptor.java │ │ │ │ │ ├── DateFieldDescriptor.java │ │ │ │ │ ├── DefaultFieldDescriptor.java │ │ │ │ │ ├── EncounterHeaderStrategy.java │ │ │ │ │ ├── EncounterHeaderStrategyFactory.java │ │ │ │ │ ├── EncounterHeadersCreator.java │ │ │ │ │ ├── EncounterUploadMode.java │ │ │ │ │ ├── FieldDescriptor.java │ │ │ │ │ ├── GroupMemberHeaders.java │ │ │ │ │ ├── HeaderCreator.java │ │ │ │ │ ├── HeaderField.java │ │ │ │ │ ├── HouseholdMemberHeaders.java │ │ │ │ │ ├── LocationHeaderCreator.java │ │ │ │ │ ├── NumericFieldDescriptor.java │ │ │ │ │ ├── PhoneNumberDescriptor.java │ │ │ │ │ ├── ProgramEnrolmentHeadersCreator.java │ │ │ │ │ ├── ScheduleVisitStrategy.java │ │ │ │ │ ├── SubjectConceptDescriptor.java │ │ │ │ │ ├── SubjectHeadersCreator.java │ │ │ │ │ ├── TextFieldDescriptor.java │ │ │ │ │ ├── UploadVisitDetailsStrategy.java │ │ │ │ │ └── UsersAndCatchmentsHeaders.java │ │ │ │ ├── metabase │ │ │ │ ├── CannedAnalyticsBatchConfiguration.java │ │ │ │ ├── CannedAnalyticsBatchFactory.java │ │ │ │ ├── CannedAnalyticsCreateQuestionsOnlyTasklet.java │ │ │ │ ├── CannedAnalyticsLastCompletionStatus.java │ │ │ │ ├── CannedAnalyticsLockProvider.java │ │ │ │ ├── CannedAnalyticsNotificationListener.java │ │ │ │ ├── CannedAnalyticsSetupTasklet.java │ │ │ │ └── CannedAnalyticsTearDownTasklet.java │ │ │ │ ├── model │ │ │ │ ├── BundleFile.java │ │ │ │ ├── BundleFolder.java │ │ │ │ ├── BundleZip.java │ │ │ │ ├── CustomJobParameter.java │ │ │ │ └── Row.java │ │ │ │ ├── sync │ │ │ │ └── attributes │ │ │ │ │ ├── SyncAttributesBatchConfiguration.java │ │ │ │ │ ├── SyncAttributesJobListener.java │ │ │ │ │ ├── UpdateSyncAttributesTasklet.java │ │ │ │ │ └── bulkmigration │ │ │ │ │ ├── BulkSubjectMigrationBatchConfiguration.java │ │ │ │ │ ├── BulkSubjectMigrationJobListener.java │ │ │ │ │ └── BulkSubjectMigrationTasklet.java │ │ │ │ ├── userSubjectType │ │ │ │ ├── UserSubjectTypeCreateBatchConfiguration.java │ │ │ │ ├── UserSubjectTypeCreateJobListener.java │ │ │ │ └── UserSubjectTypeCreateTasklet.java │ │ │ │ └── zip │ │ │ │ ├── BundleZipFileImporter.java │ │ │ │ ├── ZipErrorFileWriterListener.java │ │ │ │ ├── ZipItemReader.java │ │ │ │ ├── ZipJobBatchConfiguration.java │ │ │ │ └── ZipJobCompletionNotificationListener.java │ │ │ ├── mapper │ │ │ ├── ConceptMapper.java │ │ │ └── dashboard │ │ │ │ ├── DashboardFilterMapper.java │ │ │ │ ├── DashboardMapper.java │ │ │ │ ├── DefaultDashboardConstants.java │ │ │ │ └── ReportCardMapper.java │ │ │ ├── report │ │ │ ├── AggregateReportMapper.java │ │ │ ├── AggregateReportResult.java │ │ │ ├── AvniReportRepository.java │ │ │ ├── CountForDay.java │ │ │ ├── CountForDayMapper.java │ │ │ ├── ReportHelper.java │ │ │ ├── ReportService.java │ │ │ ├── UserActivityMapper.java │ │ │ ├── UserActivityResult.java │ │ │ ├── UserCountMapper.java │ │ │ └── UserDetailsMapper.java │ │ │ ├── reporting │ │ │ ├── ConceptMapSQLGenerator.java │ │ │ ├── ReportingViews.java │ │ │ └── ViewGenService.java │ │ │ ├── service │ │ │ ├── AWSMinioService.java │ │ │ ├── AWSS3Service.java │ │ │ ├── AbstractSampleFileExportService.java │ │ │ ├── AccountAdminService.java │ │ │ ├── AddressLevelCache.java │ │ │ ├── AddressLevelService.java │ │ │ ├── ApprovalStatusService.java │ │ │ ├── ArchivalConfigService.java │ │ │ ├── AvniMetaDataRuleService.java │ │ │ ├── BaseIAMService.java │ │ │ ├── BulkUploadS3Service.java │ │ │ ├── BundleService.java │ │ │ ├── CardService.java │ │ │ ├── CatchmentService.java │ │ │ ├── ChecklistDetailService.java │ │ │ ├── ChecklistItemDetailService.java │ │ │ ├── ChecklistItemService.java │ │ │ ├── ChecklistService.java │ │ │ ├── CognitoAuthServiceImpl.java │ │ │ ├── CognitoIdpService.java │ │ │ ├── CommentService.java │ │ │ ├── CommentThreadService.java │ │ │ ├── ConceptAnswerService.java │ │ │ ├── ConceptService.java │ │ │ ├── CryptoService.java │ │ │ ├── CustomQueryService.java │ │ │ ├── DashboardFilterService.java │ │ │ ├── DashboardSectionCardMappingService.java │ │ │ ├── DashboardSectionService.java │ │ │ ├── DashboardService.java │ │ │ ├── DeviceAwareService.java │ │ │ ├── DocumentationItemService.java │ │ │ ├── DocumentationService.java │ │ │ ├── EncounterImportService.java │ │ │ ├── EncounterService.java │ │ │ ├── EncounterTypeService.java │ │ │ ├── EnhancedValidationService.java │ │ │ ├── EntityApprovalStatusService.java │ │ │ ├── EntityRetrieverService.java │ │ │ ├── EntityTypeRetrieverService.java │ │ │ ├── ExotelService.java │ │ │ ├── ExportS3Service.java │ │ │ ├── ExtensionService.java │ │ │ ├── FormElementGroupService.java │ │ │ ├── FormElementService.java │ │ │ ├── FormMappingParameterObject.java │ │ │ ├── FormMappingService.java │ │ │ ├── FormService.java │ │ │ ├── GenderService.java │ │ │ ├── GroupDashboardService.java │ │ │ ├── GroupRoleService.java │ │ │ ├── GroupSubjectService.java │ │ │ ├── GroupsService.java │ │ │ ├── HouseholdService.java │ │ │ ├── IAMAuthService.java │ │ │ ├── IDPException.java │ │ │ ├── IdentifierAssignmentService.java │ │ │ ├── IdentifierSourceService.java │ │ │ ├── IdpService.java │ │ │ ├── IdpServiceFactory.java │ │ │ ├── IdpServiceImpl.java │ │ │ ├── ImportLocationsConstants.java │ │ │ ├── ImportService.java │ │ │ ├── IndividualRelationGenderMappingService.java │ │ │ ├── IndividualRelationService.java │ │ │ ├── IndividualRelationshipService.java │ │ │ ├── IndividualRelationshipTypeService.java │ │ │ ├── IndividualSearchService.java │ │ │ ├── IndividualService.java │ │ │ ├── KeycloakAuthService.java │ │ │ ├── KeycloakIdpService.java │ │ │ ├── LocationHierarchyService.java │ │ │ ├── LocationMappingService.java │ │ │ ├── LocationService.java │ │ │ ├── MediaObservationService.java │ │ │ ├── MetaDataRepository.java │ │ │ ├── MetadataBundleAndFileHandler.java │ │ │ ├── MetadataDiffChecker.java │ │ │ ├── MetadataDiffService.java │ │ │ ├── Msg91ConfigService.java │ │ │ ├── NewsService.java │ │ │ ├── NonScopeAwareService.java │ │ │ ├── NoopIdpService.java │ │ │ ├── ObjectInfo.java │ │ │ ├── ObservationService.java │ │ │ ├── OrganisationConfigService.java │ │ │ ├── OrganisationService.java │ │ │ ├── PhoneNumberVerificationService.java │ │ │ ├── PlatformTranslationService.java │ │ │ ├── ProgramEncounterService.java │ │ │ ├── ProgramEnrolmentService.java │ │ │ ├── ProgramImportService.java │ │ │ ├── ProgramService.java │ │ │ ├── ResetSyncService.java │ │ │ ├── RuleDependencyService.java │ │ │ ├── RuleService.java │ │ │ ├── S3Service.java │ │ │ ├── SampleFileExport.java │ │ │ ├── ScopeAwareService.java │ │ │ ├── ScopeBasedSyncService.java │ │ │ ├── ScopedEntityApprovalStatusService.java │ │ │ ├── StandardReportCardTypeService.java │ │ │ ├── StorageManagementService.java │ │ │ ├── StorageService.java │ │ │ ├── SubjectImportService.java │ │ │ ├── SubjectMigrationService.java │ │ │ ├── SubjectProgramEligibilityService.java │ │ │ ├── SubjectSyncResponseBuilderService.java │ │ │ ├── SubjectTypeService.java │ │ │ ├── SyncDetailsService.java │ │ │ ├── TaskService.java │ │ │ ├── TaskStatusService.java │ │ │ ├── TaskTypeService.java │ │ │ ├── TaskUnAssigmentService.java │ │ │ ├── TranslationService.java │ │ │ ├── UserCreateStatus.java │ │ │ ├── UserGroupService.java │ │ │ ├── UserService.java │ │ │ ├── UserSubjectAssignmentService.java │ │ │ ├── VideoService.java │ │ │ ├── ViewNameGenerator.java │ │ │ ├── accessControl │ │ │ │ ├── AccessControlService.java │ │ │ │ ├── GroupPrivilegeService.java │ │ │ │ └── PrivilegeService.java │ │ │ ├── application │ │ │ │ └── MenuItemService.java │ │ │ ├── batch │ │ │ │ └── BatchJobService.java │ │ │ ├── exception │ │ │ │ └── GroupNotFoundException.java │ │ │ ├── identifier │ │ │ │ └── IdentifierUserAssignmentService.java │ │ │ ├── media │ │ │ │ └── MediaFolder.java │ │ │ └── metabase │ │ │ │ ├── CannedAnalyticsBatchJobService.java │ │ │ │ ├── CannedAnalyticsStatusService.java │ │ │ │ ├── DatabaseService.java │ │ │ │ ├── IQuestionCreationService.java │ │ │ │ └── MetabaseService.java │ │ │ ├── util │ │ │ ├── A.java │ │ │ ├── AvniFiles.java │ │ │ ├── BadRequestError.java │ │ │ ├── BooleanUtil.java │ │ │ ├── BugsnagReporter.java │ │ │ ├── CircularList.java │ │ │ ├── ExceptionUtil.java │ │ │ ├── FileUtil.java │ │ │ ├── LogUtil.java │ │ │ ├── Mappings.java │ │ │ ├── MinioUri.java │ │ │ ├── O.java │ │ │ ├── PhoneNumberUtil.java │ │ │ ├── ReactAdminUtil.java │ │ │ ├── RegionUtil.java │ │ │ ├── TimeTakenLogger.java │ │ │ ├── UserUtil.java │ │ │ └── WebResponseUtil.java │ │ │ ├── visitor │ │ │ ├── CreateReportingViewVisitor.java │ │ │ └── GetReportingViewSourceVisitor.java │ │ │ └── web │ │ │ ├── AbstractController.java │ │ │ ├── AccountController.java │ │ │ ├── AddressLevelTypeController.java │ │ │ ├── ArchivalConfigController.java │ │ │ ├── AuthDetailsController.java │ │ │ ├── CatchmentController.java │ │ │ ├── ChecklistController.java │ │ │ ├── ChecklistDetailController.java │ │ │ ├── ChecklistItemController.java │ │ │ ├── CommentController.java │ │ │ ├── CommentThreadController.java │ │ │ ├── ConceptController.java │ │ │ ├── ConfigurationController.java │ │ │ ├── CustomQueryController.java │ │ │ ├── DashboardController.java │ │ │ ├── DashboardFilterController.java │ │ │ ├── DashboardSectionCardMappingController.java │ │ │ ├── DashboardSectionController.java │ │ │ ├── DocumentationController.java │ │ │ ├── DummyController.java │ │ │ ├── EncounterController.java │ │ │ ├── EncounterTypeController.java │ │ │ ├── EntityApprovalStatusController.java │ │ │ ├── ErrorInterceptors.java │ │ │ ├── ExotelController.java │ │ │ ├── ExportController.java │ │ │ ├── ExtensionController.java │ │ │ ├── FormController.java │ │ │ ├── FormMappingController.java │ │ │ ├── GenderController.java │ │ │ ├── GroupDashboardController.java │ │ │ ├── GroupPrivilegeController.java │ │ │ ├── GroupRoleController.java │ │ │ ├── GroupSubjectController.java │ │ │ ├── GroupsController.java │ │ │ ├── IdentifierAssignmentController.java │ │ │ ├── IdentifierSourceController.java │ │ │ ├── IdentifierSourceWebController.java │ │ │ ├── IdentifierUserAssignmentController.java │ │ │ ├── IdentifierUserAssignmentWebController.java │ │ │ ├── ImplementationController.java │ │ │ ├── ImportController.java │ │ │ ├── IndividualController.java │ │ │ ├── IndividualRelationController.java │ │ │ ├── IndividualRelationshipController.java │ │ │ ├── IndividualRelationshipTypeController.java │ │ │ ├── LocationController.java │ │ │ ├── LocationHierarchyController.java │ │ │ ├── LocationMappingController.java │ │ │ ├── LogoutController.java │ │ │ ├── MediaController.java │ │ │ ├── MetabaseController.java │ │ │ ├── MetabaseInternalController.java │ │ │ ├── MetadataDiffController.java │ │ │ ├── Msg91ConfigController.java │ │ │ ├── NewsController.java │ │ │ ├── OperationalEncounterTypesController.java │ │ │ ├── OperationalModulesController.java │ │ │ ├── OperationalProgramsController.java │ │ │ ├── OperationalSubjectTypesController.java │ │ │ ├── OrganisationConfigController.java │ │ │ ├── OrganisationConfigSearchController.java │ │ │ ├── OrganisationController.java │ │ │ ├── OrganisationGroupController.java │ │ │ ├── PhoneNumberVerificationController.java │ │ │ ├── PlatformTranslationController.java │ │ │ ├── ProgramController.java │ │ │ ├── ProgramEncounterController.java │ │ │ ├── ProgramEnrolmentController.java │ │ │ ├── ReportCardController.java │ │ │ ├── ReportingController.java │ │ │ ├── ResetSyncController.java │ │ │ ├── RestControllerResourceProcessor.java │ │ │ ├── RuleController.java │ │ │ ├── SampleController.java │ │ │ ├── SearchController.java │ │ │ ├── StandardReportCardTypeController.java │ │ │ ├── SubjectMigrationController.java │ │ │ ├── SubjectProgramEligibilityController.java │ │ │ ├── SubjectTypeController.java │ │ │ ├── SyncController.java │ │ │ ├── SyncSubjectController.java │ │ │ ├── SyncTelemetryController.java │ │ │ ├── TranslationController.java │ │ │ ├── TxDataControllerHelper.java │ │ │ ├── UserController.java │ │ │ ├── UserGroupController.java │ │ │ ├── UserInfoController.java │ │ │ ├── UserInfoWebController.java │ │ │ ├── UserSubjectAssignmentController.java │ │ │ ├── VideoController.java │ │ │ ├── VideoTelemetricController.java │ │ │ ├── ViewGenController.java │ │ │ ├── WebTranslationController.java │ │ │ ├── api │ │ │ ├── ApiErrorUtil.java │ │ │ ├── ApiRequestContext.java │ │ │ ├── ApiRequestContextHolder.java │ │ │ ├── CommonFieldNames.java │ │ │ ├── EncounterSearchRequest.java │ │ │ ├── EntityApprovalStatusApiController.java │ │ │ ├── GeneralEncounterApiController.java │ │ │ ├── GroupSubjectApiController.java │ │ │ ├── LocationApiController.java │ │ │ ├── ProgramEncounterApiController.java │ │ │ ├── ProgramEnrolmentApiController.java │ │ │ ├── ProgramEnrolmentFieldNames.java │ │ │ ├── SubjectApiController.java │ │ │ ├── TaskApiController.java │ │ │ └── UserApiController.java │ │ │ ├── contract │ │ │ ├── ArchivalConfigContract.java │ │ │ ├── BaseBundleContract.java │ │ │ ├── DashboardFilterConfigContract.java │ │ │ ├── EncounterTypeContract.java │ │ │ ├── GroupDashboardBundleContract.java │ │ │ ├── ProgramContract.java │ │ │ ├── ReportCardContract.java │ │ │ ├── TaskFieldNames.java │ │ │ ├── WebPagedResponse.java │ │ │ └── reports │ │ │ │ ├── DashboardBundleContract.java │ │ │ │ ├── DashboardContract.java │ │ │ │ ├── DashboardFilterBundleContract.java │ │ │ │ ├── DashboardFilterConfigBundleContract.java │ │ │ │ ├── DashboardFilterContract.java │ │ │ │ ├── DashboardSectionBundleContract.java │ │ │ │ ├── DashboardSectionBundleReportCard.java │ │ │ │ ├── DashboardSectionCardMappingBundleContract.java │ │ │ │ ├── DashboardSectionContract.java │ │ │ │ └── ObservationBasedFilterContract.java │ │ │ ├── controller │ │ │ └── oauth │ │ │ │ └── JWKSController.java │ │ │ ├── external │ │ │ ├── ExotelClient.java │ │ │ ├── Msg91Client.java │ │ │ ├── RuleServiceClient.java │ │ │ └── request │ │ │ │ └── export │ │ │ │ ├── ExportEntityType.java │ │ │ │ ├── ExportEntityTypeVisitor.java │ │ │ │ ├── ExportFilters.java │ │ │ │ ├── ExportJobRequest.java │ │ │ │ ├── ExportOutput.java │ │ │ │ ├── ExportOutputAndItemRowCombiner.java │ │ │ │ ├── ExportV2JobRequest.java │ │ │ │ └── ReportType.java │ │ │ ├── menu │ │ │ └── MenuItemWebController.java │ │ │ ├── request │ │ │ ├── AbstractEncounterRequest.java │ │ │ ├── AccountRequest.java │ │ │ ├── AddressLevelContract.java │ │ │ ├── AddressLevelContractWeb.java │ │ │ ├── AddressLevelTypeContract.java │ │ │ ├── BulkSubjectMigrationRequest.java │ │ │ ├── CHSRequest.java │ │ │ ├── CatchmentContract.java │ │ │ ├── CatchmentsContract.java │ │ │ ├── ChangePasswordRequest.java │ │ │ ├── ChecklistRequest.java │ │ │ ├── CommentContract.java │ │ │ ├── CommentThreadContract.java │ │ │ ├── ConceptAnswerModelContract.java │ │ │ ├── ConceptContract.java │ │ │ ├── ConceptModelContract.java │ │ │ ├── CustomQueryContract.java │ │ │ ├── CustomQueryRequest.java │ │ │ ├── CustomRegistrationLocationTypeContract.java │ │ │ ├── DashboardFilterRequest.java │ │ │ ├── DashboardFilterResponse.java │ │ │ ├── DashboardSectionCardMappingContract.java │ │ │ ├── DashboardWebRequest.java │ │ │ ├── ETLContract.java │ │ │ ├── EncounterContract.java │ │ │ ├── EncounterMetadataContract.java │ │ │ ├── EncounterRequest.java │ │ │ ├── EnrolmentContract.java │ │ │ ├── EntityApprovalStatusRequest.java │ │ │ ├── EntitySyncStatusContract.java │ │ │ ├── EntityTypeContract.java │ │ │ ├── ExotelRequest.java │ │ │ ├── ExportRequest.java │ │ │ ├── ExtensionRequest.java │ │ │ ├── FormMappingContract.java │ │ │ ├── FormatContract.java │ │ │ ├── GenderContract.java │ │ │ ├── GroupContract.java │ │ │ ├── GroupDashboardContract.java │ │ │ ├── GroupPrivilegeBundleContract.java │ │ │ ├── GroupPrivilegeContract.java │ │ │ ├── GroupPrivilegeContractWeb.java │ │ │ ├── GroupPrivilegeWebRequest.java │ │ │ ├── GroupRoleContract.java │ │ │ ├── GroupSubjectContract.java │ │ │ ├── GroupSubjectContractWeb.java │ │ │ ├── IdentifierAssignmentRequest.java │ │ │ ├── IdentifierSourceContract.java │ │ │ ├── IdentifierUserAssignmentContract.java │ │ │ ├── IndividualContract.java │ │ │ ├── IndividualRelationContract.java │ │ │ ├── IndividualRelationshipRequest.java │ │ │ ├── IndividualRelationshipTypeContract.java │ │ │ ├── IndividualRequest.java │ │ │ ├── IntervalUnit.java │ │ │ ├── LocationContract.java │ │ │ ├── LocationEditContract.java │ │ │ ├── LocationsContract.java │ │ │ ├── Msg91ConfigContract.java │ │ │ ├── Msg91Request.java │ │ │ ├── NewsContract.java │ │ │ ├── ObservationContract.java │ │ │ ├── ObservationModelContract.java │ │ │ ├── ObservationRequest.java │ │ │ ├── OperationalEncounterTypeContract.java │ │ │ ├── OperationalEncounterTypesContract.java │ │ │ ├── OperationalModulesContract.java │ │ │ ├── OperationalProgramContract.java │ │ │ ├── OperationalProgramsContract.java │ │ │ ├── OperationalSubjectTypeContract.java │ │ │ ├── OperationalSubjectTypesContract.java │ │ │ ├── OrganisationConfigRequest.java │ │ │ ├── OrganisationContract.java │ │ │ ├── OrganisationGroupContract.java │ │ │ ├── PeriodRequest.java │ │ │ ├── PhoneNumberVerificationRequest.java │ │ │ ├── PointRequest.java │ │ │ ├── ProgramEncounterContract.java │ │ │ ├── ProgramEncounterRequest.java │ │ │ ├── ProgramEnrolmentRequest.java │ │ │ ├── ProgramRequest.java │ │ │ ├── ReferenceDataContract.java │ │ │ ├── RelationsRequest.java │ │ │ ├── RelationshipContract.java │ │ │ ├── ReportType.java │ │ │ ├── ResetPasswordRequest.java │ │ │ ├── RuleDependencyRequest.java │ │ │ ├── RuleFailureTelemetryRequest.java │ │ │ ├── RuleRequest.java │ │ │ ├── StandardReportCardTypeContract.java │ │ │ ├── SubjectSearchContract.java │ │ │ ├── SubjectTypeContract.java │ │ │ ├── SyncTelemetryRequest.java │ │ │ ├── TaskRequest.java │ │ │ ├── TranslationContract.java │ │ │ ├── TranslationRequest.java │ │ │ ├── UserBulkUploadContract.java │ │ │ ├── UserContract.java │ │ │ ├── UserGroupContract.java │ │ │ ├── UserInfoClientContract.java │ │ │ ├── UserInfoContract.java │ │ │ ├── UserSubjectAssignmentContract.java │ │ │ ├── VideoContract.java │ │ │ ├── VideoTelemetricContract.java │ │ │ ├── ViewConfig.java │ │ │ ├── api │ │ │ │ ├── ApiBaseEncounterRequest.java │ │ │ │ ├── ApiEncounterRequest.java │ │ │ │ ├── ApiProgramEncounterRequest.java │ │ │ │ ├── ApiProgramEnrolmentRequest.java │ │ │ │ ├── ApiSubjectRequest.java │ │ │ │ ├── ApiTaskRequest.java │ │ │ │ ├── DeleteSubjectCriteria.java │ │ │ │ ├── RequestUtils.java │ │ │ │ └── SubjectResponseOptions.java │ │ │ ├── application │ │ │ │ ├── BasicFormDetails.java │ │ │ │ ├── BasicFormMetadata.java │ │ │ │ ├── ChecklistDetailRequest.java │ │ │ │ ├── ChecklistItemDetailRequest.java │ │ │ │ ├── ChecklistItemRequest.java │ │ │ │ ├── ChecklistItemStatusRequest.java │ │ │ │ ├── ConceptUsageContract.java │ │ │ │ ├── FormContract.java │ │ │ │ ├── FormContractWeb.java │ │ │ │ ├── FormElementContract.java │ │ │ │ ├── FormElementGroupContract.java │ │ │ │ ├── FormUsageContract.java │ │ │ │ └── menu │ │ │ │ │ └── MenuItemContract.java │ │ │ ├── auth │ │ │ │ ├── CreateUserRequest.java │ │ │ │ ├── EnableUserRequest.java │ │ │ │ ├── GenerateTokenRequest.java │ │ │ │ └── GenerateTokenResult.java │ │ │ ├── common │ │ │ │ ├── CommonAbstractEncounterRequest.java │ │ │ │ ├── CommonIndividualRequest.java │ │ │ │ └── CommonProgramEnrolmentRequest.java │ │ │ ├── keyvalue │ │ │ │ └── KeyValueIndividualRequest.java │ │ │ ├── program │ │ │ │ └── SubjectProgramEligibilityContract.java │ │ │ ├── reports │ │ │ │ ├── DashboardFilterConfigRequest.java │ │ │ │ ├── DashboardSectionCardMappingRequest.java │ │ │ │ ├── DashboardSectionWebRequest.java │ │ │ │ ├── ObservationBasedFilterRequest.java │ │ │ │ ├── ReportCardBundleRequest.java │ │ │ │ ├── ReportCardRequest.java │ │ │ │ └── ReportCardWebRequest.java │ │ │ ├── rules │ │ │ │ ├── RulesContractWrapper │ │ │ │ │ ├── ChecklistContract.java │ │ │ │ │ ├── ChecklistDetailContract.java │ │ │ │ │ ├── Decision.java │ │ │ │ │ ├── Decisions.java │ │ │ │ │ ├── EncounterContract.java │ │ │ │ │ ├── EntityApprovalStatusWrapper.java │ │ │ │ │ ├── GroupRoleContract.java │ │ │ │ │ ├── GroupSubjectContract.java │ │ │ │ │ ├── IndividualContract.java │ │ │ │ │ ├── LowestAddressLevelContract.java │ │ │ │ │ ├── ProgramEncounterContract.java │ │ │ │ │ ├── ProgramEnrolmentContract.java │ │ │ │ │ ├── RuleServerEntityContract.java │ │ │ │ │ ├── UserContract.java │ │ │ │ │ └── VisitSchedule.java │ │ │ │ ├── constant │ │ │ │ │ ├── EntityEnum.java │ │ │ │ │ ├── RuleEnum.java │ │ │ │ │ └── WorkFlowTypeEnum.java │ │ │ │ ├── constructWrappers │ │ │ │ │ ├── IndividualConstructionService.java │ │ │ │ │ ├── IndividualContractBuilder.java │ │ │ │ │ ├── IndividualContractBuilderServices.java │ │ │ │ │ ├── ObservationConstructionService.java │ │ │ │ │ ├── ProgramEncounterConstructionService.java │ │ │ │ │ ├── ProgramEnrolmentConstructionService.java │ │ │ │ │ ├── RuleServiceContractMapper.java │ │ │ │ │ └── RuleServiceEntityContractBuilder.java │ │ │ │ ├── request │ │ │ │ │ ├── BaseRuleRequest.java │ │ │ │ │ ├── ConceptEntityWrapper.java │ │ │ │ │ ├── EncounterRequestEntity.java │ │ │ │ │ ├── EntityEligibilityRuleRequest.java │ │ │ │ │ ├── IndividualRequestEntity.java │ │ │ │ │ ├── MessageRequestEntity.java │ │ │ │ │ ├── ObservationRequestEntity.java │ │ │ │ │ ├── ProgramEncounterRequestEntity.java │ │ │ │ │ ├── ProgramEnrolmentRequestEntity.java │ │ │ │ │ ├── RequestEntityWrapper.java │ │ │ │ │ └── RuleRequestEntity.java │ │ │ │ ├── response │ │ │ │ │ ├── BaseRuleResponseEntity.java │ │ │ │ │ ├── DecisionResponseEntity.java │ │ │ │ │ ├── EligibilityRuleEntity.java │ │ │ │ │ ├── EligibilityRuleResponseEntity.java │ │ │ │ │ ├── KeyValueResponse.java │ │ │ │ │ ├── MessageRuleResponseEntity.java │ │ │ │ │ ├── RuleError.java │ │ │ │ │ ├── RuleResponseEntity.java │ │ │ │ │ └── ScheduleRuleResponseEntity.java │ │ │ │ └── validateRules │ │ │ │ │ └── RuleValidationService.java │ │ │ ├── syncAttribute │ │ │ │ ├── ConceptSyncAttributeContract.java │ │ │ │ ├── UserSubjectTypeSyncAttributeAssignmentRequest.java │ │ │ │ └── UserSyncAttributeAssignmentRequest.java │ │ │ ├── task │ │ │ │ ├── TaskAssignmentRequest.java │ │ │ │ └── TaskFilterCriteria.java │ │ │ └── webapp │ │ │ │ ├── AnswerExport.java │ │ │ │ ├── CatchmentExport.java │ │ │ │ ├── CatchmentsExport.java │ │ │ │ ├── ConceptExport.java │ │ │ │ ├── CreateUpdateFormRequest.java │ │ │ │ ├── EncounterTypeContractWeb.java │ │ │ │ ├── FormMappingRequest.java │ │ │ │ ├── IdentifierSourceContractWeb.java │ │ │ │ ├── IdentifierUserAssignmentContractWeb.java │ │ │ │ ├── IndividualRelationContract.java │ │ │ │ ├── ProgramContractWeb.java │ │ │ │ ├── SubjectTypeContractWeb.java │ │ │ │ ├── documentation │ │ │ │ ├── DocumentationContract.java │ │ │ │ └── DocumentationItemContract.java │ │ │ │ ├── search │ │ │ │ ├── Concept.java │ │ │ │ ├── CustomSearchFields.java │ │ │ │ ├── DateRange.java │ │ │ │ ├── IntegerRange.java │ │ │ │ ├── LocationSearchRequest.java │ │ │ │ ├── PageDetails.java │ │ │ │ ├── RangeFilter.java │ │ │ │ ├── SearchResultConcepts.java │ │ │ │ ├── SortOrder.java │ │ │ │ └── SubjectSearchRequest.java │ │ │ │ └── task │ │ │ │ ├── TaskStatusContract.java │ │ │ │ ├── TaskTypeContract.java │ │ │ │ └── TaskTypeWebContract.java │ │ │ ├── resourceProcessors │ │ │ ├── ChecklistItemResourceProcessor.java │ │ │ ├── ChecklistResourceProcessor.java │ │ │ ├── EncounterResourceProcessor.java │ │ │ ├── GroupSubjectResourceProcessor.java │ │ │ ├── IndividualRelationshipResourceProcessor.java │ │ │ ├── IndividualResourceProcessor.java │ │ │ ├── ProgramEncounterResourceProcessor.java │ │ │ ├── ProgramEnrolmentResourceProcessor.java │ │ │ └── ResourceProcessor.java │ │ │ ├── response │ │ │ ├── AvniEntityResponse.java │ │ │ ├── CommentThreadResponse.java │ │ │ ├── ConceptNameUuidAndDatatype.java │ │ │ ├── CustomQueryResponse.java │ │ │ ├── EncounterResponse.java │ │ │ ├── EntityApprovalStatusResponse.java │ │ │ ├── ExotelResponse.java │ │ │ ├── GroupSubjectResponse.java │ │ │ ├── ImportSampleCheckResponse.java │ │ │ ├── LocationApiResponse.java │ │ │ ├── MenuItemWebResponse.java │ │ │ ├── Msg91Response.java │ │ │ ├── PhoneNumberVerificationResponse.java │ │ │ ├── ProgramEnrolmentResponse.java │ │ │ ├── ReportingViewResponse.java │ │ │ ├── Response.java │ │ │ ├── ResponsePage.java │ │ │ ├── ServiceResponse.java │ │ │ ├── SubjectRelationshipResponse.java │ │ │ ├── SubjectResponse.java │ │ │ ├── SyncSubjectResponse.java │ │ │ ├── TaskSearchResponse.java │ │ │ ├── UserInfoWebResponse.java │ │ │ ├── UserPrivilegeWebResponse.java │ │ │ ├── api │ │ │ │ ├── ApiTaskResponse.java │ │ │ │ └── DeleteSubjectsResponse.java │ │ │ ├── auth │ │ │ │ └── EnableUserResponse.java │ │ │ ├── reports │ │ │ │ ├── DashboardFilterConfigResponse.java │ │ │ │ ├── DashboardSectionCardMappingWebResponse.java │ │ │ │ ├── DashboardSectionWebResponse.java │ │ │ │ ├── DashboardWebResponse.java │ │ │ │ ├── ObservationBasedFilterBundleContract.java │ │ │ │ ├── ObservationBasedFilterResponse.java │ │ │ │ ├── ReportCardBundleContract.java │ │ │ │ └── ReportCardWebResponse.java │ │ │ └── slice │ │ │ │ └── SlicedResources.java │ │ │ ├── rules │ │ │ ├── RuleFailureTelemetryController.java │ │ │ └── RuleFailureTelemetryWebController.java │ │ │ ├── task │ │ │ ├── TaskController.java │ │ │ ├── TaskStatusWebController.java │ │ │ ├── TaskTypeWebController.java │ │ │ ├── TaskUnAssignmentController.java │ │ │ └── TaskWebController.java │ │ │ ├── util │ │ │ ├── Configuration.java │ │ │ ├── ConfigurationResponse.java │ │ │ ├── ErrorBodyBuilder.java │ │ │ └── ReportingSystem.java │ │ │ └── validation │ │ │ └── ValidationException.java │ └── resources │ │ ├── api │ │ └── external-api.yaml │ │ ├── application-live.properties │ │ ├── application.properties │ │ ├── build_db.sql │ │ ├── bulkuploads │ │ └── sample │ │ │ └── usersAndCatchments.csv │ │ ├── database │ │ ├── createBaseLocalTestData.sql │ │ ├── create_demo_organisation_for_implementation.sql │ │ ├── deleteOrgData.sql │ │ ├── deleteOrgMetadata.sql │ │ ├── deleteOrgTxData.sql │ │ ├── dropAllDbObjects.sql │ │ ├── executor.sql │ │ ├── populateUserReviewMatrix.sql │ │ ├── post_migrate_checklists.sql │ │ ├── pre_migrate_checklists.sql │ │ └── usefulQueries.sql │ │ ├── db │ │ └── migration │ │ │ ├── R__Functions.sql │ │ │ ├── R__UtilityFunctions.sql │ │ │ ├── R__UtilityViews.sql │ │ │ ├── R__Views.sql │ │ │ ├── V0_10__CreateConceptAnswerTable.sql │ │ │ ├── V0_11__DropColumnProfileFromIndividual.sql │ │ │ ├── V0_12__AddDisplayOrderToFormElementGroup.sql │ │ │ ├── V0_13__CreateTableForFormAssociation.sql │ │ │ ├── V0_14__UniqueConstraints.sql │ │ │ ├── V0_15__ChangeDataTypeOfRelatedEntity.sql │ │ │ ├── V0_16__ChangeSortOrderDataTypeAndAddUniqueConstraint.sql │ │ │ ├── V0_17__UniqueConstraintOnConceptName.sql │ │ │ ├── V0_18__CreateGenderConcepts.sql │ │ │ ├── V0_19__CreateGenderConceptWithAnswers.sql │ │ │ ├── V0_1__CreateTables.sql │ │ │ ├── V0_20__UniqueConstraintOnGender.sql │ │ │ ├── V0_21__RemoveFollowupTypeAndUseEncounterType.sql │ │ │ ├── V0_22__AddObservationsTypeEntityId.sql │ │ │ ├── V0_23__RenameProgramEncounterDateTime.sql │ │ │ ├── V0_24__AddRegistrationDateToIndividual.sql │ │ │ ├── V0_25__AddNameToProgramEncounter.sql │ │ │ ├── V0_26__AddMaxDateForProgramEncounter.sql │ │ │ ├── V0_27__HealthMetaDataVersion.sql │ │ │ ├── V0_28__RenameSpellingMistakeInTableName.sql │ │ │ ├── V0_29__CreateChecklistTables.sql │ │ │ ├── V0_2__AdditionalUserColumns.sql │ │ │ ├── V0_30__MakingUniqueConstraintsDeferred.sql │ │ │ ├── V0_31__CreateBaseDate.sql │ │ │ ├── V0_32__RenameObservationColumns.sql │ │ │ ├── V0_33__AddUnitToConcept.sql │ │ │ ├── V0_34__CreateCatchmentAndMappingTable.sql │ │ │ ├── V0_35__DropCatchmentFromIndividual.sql │ │ │ ├── V0_36__AddColumnDisplayToFormElementGroup.sql │ │ │ ├── V0_37__AddColumnColourToProgram.sql │ │ │ ├── V0_38__DropMetaColumnsFromCatchmentAddressMapping.sql │ │ │ ├── V0_39__AddUniqueConstaintWhereItIsMissing.sql │ │ │ ├── V0_3__CreateOpenCHSUser.sql │ │ │ ├── V0_40__AddingAddressLevelAttributes.sql │ │ │ ├── V0_41__Organisations.sql │ │ │ ├── V0_42__Multitenancy.sql │ │ │ ├── V0_43__AddAbnormalToConceptAnswer.sql │ │ │ ├── V0_44__ProgramsSpecificToACustomer.sql │ │ │ ├── V0_45__AddMultitenancy_ProgramsSpecificToACustomer.sql │ │ │ ├── V0_46__ReplaceNameWithFirstAndLastNames.sql │ │ │ ├── V0_47__AddingFormElementType.sql │ │ │ ├── V0_48__SplitScheduledDateIntoMinAndMaxDates.sql │ │ │ ├── V0_49__AddValidFormatRegexAndMessageKeyToFormElement.sql │ │ │ ├── V0_4__SetupGender.sql │ │ │ ├── V0_50__AddingTypeToCatchments.sql │ │ │ ├── V0_51__AddingTypeToAddressLevel.sql │ │ │ ├── V0_52__AddressLevelOnIndividualIsMandatory.sql │ │ │ ├── V0_53__AddUniqueConstraintToOrganisation.sql │ │ │ ├── V0_54__AddCancelToProgramEncounter.sql │ │ │ ├── V0_5__CreateProgramEncounterTables.sql │ │ │ ├── V0_6__ObservationsWithoutPrograms.sql │ │ │ ├── V0_7__FormTables.sql │ │ │ ├── V0_8__RenameDateOfBirthEstimatedToVerified.sql │ │ │ ├── V0_9__RenameColumnUsedInSummary.sql │ │ │ ├── V1_01__AddVoidingToConcepts.sql │ │ │ ├── V1_02__AddVoidedToEncounters.sql │ │ │ ├── V1_03__AddGinIndexForObservations.sql │ │ │ ├── V1_04.5__AddHierarchyToOrganisations.sql │ │ │ ├── V1_04.6__RevisitPoliciesForMultitenancy.sql │ │ │ ├── V1_04__AddVoidedToIndividual.sql │ │ │ ├── V1_05__DisplayOrderToFloat.sql │ │ │ ├── V1_06__DropIsUsedInSummaryColumnInFormElement.sql │ │ │ ├── V1_07__DropIsGeneratedColumnInFormElement.sql │ │ │ ├── V1_08__NonApplicableOrganisationEntityMapping.sql │ │ │ ├── V1_09__MigrateConceptDataType.sql │ │ │ ├── V1_100__AddColumnsToChecklistItemDetail.sql │ │ │ ├── V1_101__EnableRLS_OnAddressLevelType.sql │ │ │ ├── V1_102__AddIndicesToOrganisationId.sql │ │ │ ├── V1_103__AddMissingIndices.sql │ │ │ ├── V1_104__AddColumnsToIdntifierSourceTable.sql │ │ │ ├── V1_105__DropSchedulingConstraintOnProgramEncounter.sql │ │ │ ├── V1_107__DropAndModifyRLSPolicies.sql │ │ │ ├── V1_108__ConvertTimestampTypeColumnsToTimestampWithTimeZoneType.sql │ │ │ ├── V1_109__AddProgramSubjectLabelColumnToOperationalProgram.sql │ │ │ ├── V1_10__AddPolicyToNonApplicableFormElementTable.sql │ │ │ ├── V1_111__AddLevelColumnToAddressLevelType.sql │ │ │ ├── V1_112__AddParentIdColumnToAddressLevelType.sql │ │ │ ├── V1_113__AddSubjectTypeToFormMapping.sql │ │ │ ├── V1_114__AddParentColumnAndAlterLineageInLocation.sql │ │ │ ├── V1_115__AddEntityColumnToRuleTable.sql │ │ │ ├── V1_116__AddNameParentUniqueConstraintToLocation.sql │ │ │ ├── V1_117__AddUsernameSuffixToOrganisationTable.sql │ │ │ ├── V1_118__AddUniqueUUIDConstraintToVideo.sql │ │ │ ├── V1_119__CreateRuleFailureTelemetryTable.sql │ │ │ ├── V1_11__RevisitPoliciesForMultitenancy.sql │ │ │ ├── V1_120__AddSchedulingRelatedColumnsToEncounterTable.sql │ │ │ ├── V1_121__AddDateTimeColumnToRuleFailureTelemetry.sql │ │ │ ├── V1_122__CreateOrganisationConfigTable.sql │ │ │ ├── V1_123__AddAuditToOrganisationConfigTable.sql │ │ │ ├── V1_124__CreateTranslationTable.sql │ │ │ ├── V1_125__CreatePlatformTranslationTable.sql │ │ │ ├── V1_126__AddLanguageToTranslationTable.sql │ │ │ ├── V1_127__AddLanguageToPlatformTranslationTable.sql │ │ │ ├── V1_128__AddOrganisationIdToPlatformTranslationTable.sql │ │ │ ├── V1_129__RemoveAuditFromPlatformTranslationTable.sql │ │ │ ├── V1_12__ProgramOrganisationConfigTable.sql │ │ │ ├── V1_130__CreateTablesForRulesFromUI.sql │ │ │ ├── V1_131__AddColulmsForRulesFromUI.sql │ │ │ ├── V1_132__AddColulmsForRulesFromUI.sql │ │ │ ├── V1_133__UpdateOpenchsImplUserCreateScript.sql │ │ │ ├── V1_134__UpdateUniqueConstraintOnReferenceTables.sql │ │ │ ├── V1_135__Openchs_impl__userCanCreateRoles.sql │ │ │ ├── V1_136__addKeyValuesToConcept.sql │ │ │ ├── V1_137__UpdateUniqueConstraintOnChecklistItemDetailTable.sql │ │ │ ├── V1_138__UpdateEncounterNameType.sql │ │ │ ├── V1_139__UpdateCreateDbUser.sql │ │ │ ├── V1_13__AddSoloFieldToConceptAnswer.sql │ │ │ ├── V1_140__DropChecklistRuleColumnFromProgramAddToForm.sql │ │ │ ├── V1_141__CreateWorkupdationRuleColumnInOrgConfig.sql │ │ │ ├── V1_142.1__CreateEntitiesForOrganisationGroup.sql │ │ │ ├── V1_142.2__CreateNewRLSForAccount.sql │ │ │ ├── V1_143__DropOrganisationNotNullConstraintFromUser.sql │ │ │ ├── V1_144__ChangeUserTableRLS.sql │ │ │ ├── V1_145__UpdateDbUserFunction.sql │ │ │ ├── V1_146__DropFormIdNotNullConstraint.sql │ │ │ ├── V1_147__CreateRolesAndPrivilegeTables.sql │ │ │ ├── V1_148__CreateSubjectGroupsRelatedTables.sql │ │ │ ├── V1_149__AddColumnIsHouseholdInSubjectType.sql │ │ │ ├── V1_14__DisableChildrenFromUpdatingParent.sql │ │ │ ├── V1_150__DropFormNameNotNullConstraint.sql │ │ │ ├── V1_151__AddLegacyId.sql │ │ │ ├── V1_152__AddLegacyIdToProgramEnrolment.sql │ │ │ ├── V1_153__AddLegacyIdToEncounterTables.sql │ │ │ ├── V1_154__UpdateRolesAndPrivilegeTables.sql │ │ │ ├── V1_155__AddRuleColumnToFormElementGroup.sql │ │ │ ├── V1_156__RuleFailureLogTable.sql │ │ │ ├── V1_157__AddActiveFlag.sql │ │ │ ├── V1_158__DropLevelColumnFromAddressLevel.sql │ │ │ ├── V1_159__CreateIndexesOnForeignKeys.sql │ │ │ ├── V1_15__ActualSqlForV1_14.sql │ │ │ ├── V1_160__AddTypeToSubjectType.sql │ │ │ ├── V1_161__AlterIndividualRelationshipIdType.sql │ │ │ ├── V1_162__AddAuditToPlatformTranslations.sql │ │ │ ├── V1_163__CreateSubjectSummaryRuleColumnInSubjectType.sql │ │ │ ├── V1_164__RemoveRegisterSubjectPrivilegeWhereUserSettingIsHiderRegister.sql │ │ │ ├── V1_165__CreateDashboardCardTables.sql │ │ │ ├── V1_166__RenameCardToReportCard.sql │ │ │ ├── V1_167__AddDeviceInfoColumnToSyncTelemetry.sql │ │ │ ├── V1_168__CreateMsg91ConfigTable.sql │ │ │ ├── V1_169__AddSchemaNameToOrganisation.sql │ │ │ ├── V1_16__DeletingOrgIDFromCatchmentAddressMapping.sql │ │ │ ├── V1_170__AddTablesForApprovalWorkflow.sql │ │ │ ├── V1_171__DecisionConcept.sql │ │ │ ├── V1_172__AddIconColumnToReportCardTable.sql │ │ │ ├── V1_173_1__AddDashboardSection.sql │ │ │ ├── V1_173__AddStatusDateTimeColumnToEntityApprovalStatus.sql │ │ │ ├── V1_174__AddMoreStandardReportCardTypes.sql │ │ │ ├── V1_175__VoidRejectPrivileges.sql │ │ │ ├── V1_176__CreateNewsTables.sql │ │ │ ├── V1_177__AddGPSCordinatesAndLocationPropertiesToAddressLevel.sql │ │ │ ├── V1_178__CreateCommentTable.sql │ │ │ ├── V1_179__AllowRegistrationWithoutLocation.sql │ │ │ ├── V1_17__MoveAuditToNewTable.sql │ │ │ ├── V1_180__AddUniqueNameColumnToSubjectType.sql │ │ │ ├── V1_181__AddNameRegExColumnsToSubjectType.sql │ │ │ ├── V1_182__AddCommentStandardReportCardType.sql │ │ │ ├── V1_183__CreateCommentThreadTable.sql │ │ │ ├── V1_184__AddEnableApprovalToFormMapping.sql │ │ │ ├── V1_185__ReplaceRLSForOrganisationConfig.sql │ │ │ ├── V1_186__RemovePrintSettingsFromOrgConfig.sql │ │ │ ├── V1_187__ReplaceRLSForGroupDashboard.sql │ │ │ ├── V1_188__AddIconColumnToSubjectType.sql │ │ │ ├── V1_189__AddSyncSourceToSyncTelemetry.sql │ │ │ ├── V1_18__DisableRowLevelSecurityForCatchmentAddressMapping.sql │ │ │ ├── V1_190__AddUniqueConstraintForUuidAndOrganisationid.sql │ │ │ ├── V1_191__UpdateLastModifiedMillisecondToThreeDigits.sql │ │ │ ├── V1_192__CreateSubjectMigrationTable.sql │ │ │ ├── V1_193__Make_LastUpdatedDateTimeTo3DigitPrecision.sql │ │ │ ├── V1_194__CreateAuditMigrateProcedure.sql │ │ │ ├── V1_195__MoveAuditColumnsToTables.sql │ │ │ ├── V1_196__UpdateAuditValuesInAllTables.sql │ │ │ ├── V1_197__SolidifyAuditColumnsInTables.sql │ │ │ ├── V1_198__MoveAuditColumnsToSubjectMigrationTable.sql │ │ │ ├── V1_199__CreateYearReviewTable.sql │ │ │ ├── V1_19__RemoveStrictPolicieForFormElement.sql │ │ │ ├── V1_200__SetErrorMessageFieldToText.sql │ │ │ ├── V1_201__AddDeclarativeRuleToFormElement.sql │ │ │ ├── V1_202__AddIndicesOnSyncTelemetry.sql │ │ │ ├── V1_203__AddDeclarativeRuleToFormElementGroup.sql │ │ │ ├── V1_204__AddDeclarativeRuleForEligibility.sql │ │ │ ├── V1_205__AddDeclarativeRuleInForm.sql │ │ │ ├── V1_206__AddGroupInFormElement.sql │ │ │ ├── V1_208__NewColumnsForMultipleSyncStrategies.sql │ │ │ ├── V1_209__DeleteFacilityTable.sql │ │ │ ├── V1_20__AddVoidedToFormElementAndFormElementGroup.sql │ │ │ ├── V1_210__DropNullConstraintOnAddressIds.sql │ │ │ ├── V1_211__DropDefaultOnSyncAttributeUsablity.sql │ │ │ ├── V1_212__AddSchemaNameToOrganisationGroup.sql │ │ │ ├── V1_213__AddAnalyticsDBFeatureToggle.sql │ │ │ ├── V1_214__AddAnalyticsRelatedTabled.sql │ │ │ ├── V1_215__AddIndexToEntityApprovalStatus.sql │ │ │ ├── V1_216__CreateAnswerConceptMigrationTable.sql │ │ │ ├── V1_217__AddSchemaNameToTableMetadata.sql │ │ │ ├── V1_218__ChangeIdColumnsToUuids.sql │ │ │ ├── V1_219__AddNotNullConstraintToAddressIdIndividualId.sql │ │ │ ├── V1_21__RemoveConceptIdFromProgram.sql │ │ │ ├── V1_220__AddIndexMetadataTable.sql │ │ │ ├── V1_221__AddParentConceptUuidToColumnMetadata.sql │ │ │ ├── V1_222__CreateUserSubjectAssignmentTable.sql │ │ │ ├── V1_223__AddNameHelpTextToSubjectType.sql │ │ │ ├── V1_224__AddLegacyIdToAddressLevel.sql │ │ │ ├── V1_226__AddProfilePictureInfoToTables.sql │ │ │ ├── V1_227.4__AddSchemaColumnToEntitySyncStatus.sql │ │ │ ├── V1_227.5__AddLegacyIdIndexes.sql │ │ │ ├── V1_227__AddSchemaColumnToEntitySyncStatus.sql │ │ │ ├── V1_228__CreateResetSyncTable.sql │ │ │ ├── V1_229__CreateDocumentationTables.sql │ │ │ ├── V1_22__AddForeignKeyConstraintsToAuditedTables.sql │ │ │ ├── V1_230__MergeDocumentationAndDocumentationNodeTables.sql │ │ │ ├── V1_231__AddTimedQuestionRelatedColumns.sql │ │ │ ├── V1_232__MoveIsTimedFromFormToFormElementGroup.sql │ │ │ ├── V1_233__AddColourColumnsToFormElementGroup.sql │ │ │ ├── V1_234__AddMiddleNameRelatedColumns.sql │ │ │ ├── V1_235__ChangeSubjectUserAssignmentApproach.sql │ │ │ ├── V1_236__TaskTables.sql │ │ │ ├── V1_237__AddTaskTypeToTask.sql │ │ │ ├── V1_238__AddRLSToTaskAndAddStandardReportCard.sql │ │ │ ├── V1_239__DropTaskMigrationAndCreateTaskUnAssignmet.sql │ │ │ ├── V1_23__AddOrganisationIdToFormElementDisplayOrderUniqueConstraint.sql │ │ │ ├── V1_240__DropNotNullForSubjectInTask.sql │ │ │ ├── V1_241__SubjectTypeOptionalInFormMapping.sql │ │ │ ├── V1_242__AddNotNullToTaskScheduleOn.sql │ │ │ ├── V1_243__ChangeSyncSttingsForImplementation.sql │ │ │ ├── V1_244__AddStandardCardsForTaskTypes.sql │ │ │ ├── V1_245__DropNotNullForAssignedToInTask.sql │ │ │ ├── V1_246__ProgramEligibilty.sql │ │ │ ├── V1_247__ProgramEligibiltyColumnNameChanges.sql │ │ │ ├── V1_248__ChangeRLSAndAddObservationsInSubjectProgramEligibility.sql │ │ │ ├── V1_249__MenuItem.sql │ │ │ ├── V1_24__AddVoidedToEncounterTypesAndFormMapping.sql │ │ │ ├── V1_250__AlterMenuItem.sql │ │ │ ├── V1_251__AlterMenuItemLinkToLinkFunction.sql │ │ │ ├── V1_252__ExternalSystemConfig.sql │ │ │ ├── V1_253__CreateUserSubjectAssignmentTable.sql │ │ │ ├── V1_254__AddImmutableColumnInEncounter.sql │ │ │ ├── V1_255__AddCustomQueryTable.sql │ │ │ ├── V1_256__AddExportJobParameters.sql │ │ │ ├── V1_257__AddMessageRule.sql │ │ │ ├── V1_258__AddMessageReceiver.sql │ │ │ ├── V1_259__AddMessageRequestQueue.sql │ │ │ ├── V1_25__AddRelationAndRelative.sql │ │ │ ├── V1_260__AlterMessageReceiverAndMessageRequestQueueDropNotNullOnExternalIdAndDeliveredTime.sql │ │ │ ├── V1_261__AddVersionColumnToMessageReceiverAndRequestQueue.sql │ │ │ ├── V1_262__AlterMessageRuleReceiverEntityIdToInt.sql │ │ │ ├── V1_263.1__AddressIdNullOnOtherTxnTables.sql │ │ │ ├── V1_263__RenameMessageRequestQueueTimeColumns.sql │ │ │ ├── V1_264__OnlyOneOrgConfigPerOrganisation.sql │ │ │ ├── V1_265__AlterMessageReceiverAndMessageRequestQueue.sql │ │ │ ├── V1_266__AddUniqueContraintToMessageReceiver.sql │ │ │ ├── V1_267__AddReceiverTypeToMessageRule.sql │ │ │ ├── V1_268__CreateManualBroadcastMessageTable.sql │ │ │ ├── V1_269__AlterTablesToAccommodateManualBroadcastMessageId.sql │ │ │ ├── V1_26__AddReverseRelation.sql │ │ │ ├── V1_270__AllowActiveProgramEnrolments.sql │ │ │ ├── V1_271__AddNextTriggerDetailsToManualBroadcastMessage.sql │ │ │ ├── V1_272__AddNewRolesAndPrivileges.sql │ │ │ ├── V1_273__ReplaceUniqueConstraintsOnDisplayOrder.sql │ │ │ ├── V1_274__AddEntityTypeToApprovalStatus.sql │ │ │ ├── V1_275__RemoveApprovalStatusFromOrgSettings.sql │ │ │ ├── V1_276__AddManualUpdateHistoryColumn.sql │ │ │ ├── V1_277__RemoveUserReviewMatrix.sql │ │ │ ├── V1_278__RenameManualBroadcastMessageToManualMessage.sql │ │ │ ├── V1_279__AddUniqueUUIDConstraintToGroupSubject.sql │ │ │ ├── V1_27__AddRelationshipTables.sql │ │ │ ├── V1_280__AddingDashboardFilter.sql │ │ │ ├── V1_281__AddNameToDashboardFilter.sql │ │ │ ├── V1_282__AddUniqueConstraintToTransactionalDataTables.sql │ │ │ ├── V1_283__AddUniqueConstraintToReferenceDataTables.sql │ │ │ ├── V1_284__FixDashboardFilterDefinition.sql │ │ │ ├── V1_285__AddDueChecklistInDefaultDashboard.sql │ │ │ ├── V1_286__AddLastNameOptionalToSubjectType.sql │ │ │ ├── V1_287__AddDefaultOrganizationConfigIfTableIsEmpty.sql │ │ │ ├── V1_288__ETLAddScheduleJobRunTable.sql │ │ │ ├── V1_289__QuartzTables.sql │ │ │ ├── V1_28__UpdateLastModifiedDateTimeForNumericConcepts.sql │ │ │ ├── V1_290__UUIDToOrgGroup.sql │ │ │ ├── V1_291__DropHasAnalyticsDbInOrgGroup.sql │ │ │ ├── V1_292__AddSuccessColumnToScheduledJobRun.sql │ │ │ ├── V1_293__AddPrivilegeTypeEnum.sql │ │ │ ├── V1_294__PrivilegeModifications.sql │ │ │ ├── V1_295__TableMetadataModificationsForGroupSubject.sql │ │ │ ├── V1_296__PrivilegeNonTransactionEntityType.sql │ │ │ ├── V1_297__AddQuestionGroupUUIDToTableMetadata.sql │ │ │ ├── V1_298__AddLanguageAndPhoneVerificationPrivilege.sql │ │ │ ├── V1_299__AddMorePrivileges.sql │ │ │ ├── V1_29__RemoveRLSFromUsers.sql │ │ │ ├── V1_300__CreateAdminGroupAndAddAllExistingOrgAdminsToIt.sql │ │ │ ├── V1_301__InsertModifyPrivileges.sql │ │ │ ├── V1_302__MoveAuditColumnsToSyncTelemetryTable.sql │ │ │ ├── V1_303__AddAssignSubjectPrivilege.sql │ │ │ ├── V1_304__AddMessagingPrivilege.sql │ │ │ ├── V1_305__EntityTypeOfNewsToBeMessaging.sql │ │ │ ├── V1_306__VoidUserGroupsForVoidedGroups.sql │ │ │ ├── V1_307_1__VoidAllDuplicateGroupPrivileges.sql │ │ │ ├── V1_307__GrantOnlyTransactionalDataPrivilegesForNonAdminUserGroups.sql │ │ │ ├── V1_308__UpdateRelationFormRelatedPrivileges.sql │ │ │ ├── V1_309__UniqueConstraintOnSubjectAndUserForAssignment.sql │ │ │ ├── V1_30__RevertPolicyRelaxingInFormElement_Users_Catchment.sql │ │ │ ├── V1_310__LastmodifieddatetimeIndexOnSyncTele.sql │ │ │ ├── V1_311__isVoidedOnOrgGroup.sql │ │ │ ├── V1_312__UseMinioSettingIsBoolean.sql │ │ │ ├── V1_313__IndicesOnSubjectMigration.sql │ │ │ ├── V1_314__DeleteDuplicateSubjectMigration.sql │ │ │ ├── V1_315__InserPrivilegeForDEA.sql │ │ │ ├── V1_316__FormMappingDuplicationCheckChanges1.sql │ │ │ ├── V1_317__FormMappingDuplicationCheckChanges2.sql │ │ │ ├── V1_318__EnsureNoOrganisationIsWithoutOrganisationConfig.sql │ │ │ ├── V1_319__AddColumnsIsClosedAndClosedDateTimeToRuleFailureLog.sql │ │ │ ├── V1_31__AddRuleRelatedTables.sql │ │ │ ├── V1_320__AddColumnsToRuleFailureTelemetry.sql │ │ │ ├── V1_321__FixUsersUUIDIndex.sql │ │ │ ├── V1_322__UpdateModifiedTimeForUserSubAssgnsAndGroupSubs.sql │ │ │ ├── V1_323__SchemaIsRequiredInFunctionWhenRetoringDump.sql │ │ │ ├── V1_324__DropUUIDFromRuleFailureTelemetry.sql │ │ │ ├── V1_325__UpdateOrgAndUserConfigPrivilegeDescriptions.sql │ │ │ ├── V1_326__EntityIdIndividualIdCheckForEAS.sql │ │ │ ├── V1_327__FilledBy.sql │ │ │ ├── V1_328__UserNameIsMandatory.sql │ │ │ ├── V1_329__MultiTxEntityTypeUpdate.sql │ │ │ ├── V1_330__AddColumnsNestedAndInitCountToReportCard.sql │ │ │ ├── V1_331__AddEditFormRule.sql │ │ │ ├── V1_332__DropProgramOutcome.sql │ │ │ ├── V1_333__DropProgramOrganisationConfig.sql │ │ │ ├── V1_334__DropChecklistTempTables.sql │ │ │ ├── V1_335__AddSettingsColumnToSubjectType.sql │ │ │ ├── V1_336__SecondaryDashboard.sql │ │ │ ├── V1_337__IdentifierAssignmentUsed.sql │ │ │ ├── V1_338__OrganisationCategory.sql │ │ │ ├── V1_339_1__GroupPrivilegeConstraint.sql │ │ │ ├── V1_339_2__OrganisationStatus.sql │ │ │ ├── V1_339_3__OrgCategoryTable.sql │ │ │ ├── V1_339_4__OrgStatusTable.sql │ │ │ ├── V1_339_5__AddVersions.sql │ │ │ ├── V1_339_6__GrantPermissionOnNewOrgTables.sql │ │ │ ├── V1_339_7__AddIgnoreSyncSettingsInDEAToUser.sql │ │ │ ├── V1_339__UserSubject.sql │ │ │ ├── V1_340__StandardReportCardInput.sql │ │ │ ├── V1_341__RegionForPhoneNumber.sql │ │ │ ├── V1_342_1__SetDefaultsForStandardReportCardInput.sql │ │ │ ├── V1_342_2__AddTypeToStandardReportCardType.sql │ │ │ ├── V1_342__UpdateStandardCardTypeNames.sql │ │ │ ├── V1_343_1__SetDefaultsForMissedStandardReportCardInput.sql │ │ │ ├── V1_343__User1ShouldHaveNoOrganisationId.sql │ │ │ ├── V1_344__OverwriteFEGNameWithDisplayName.sql │ │ │ ├── V1_345_1__VoidedReportCardNameChange.sql │ │ │ ├── V1_345__ReportCardNameIsUnique.sql │ │ │ ├── V1_346__RenameVoidedAddressLevelTypes.sql │ │ │ ├── V1_347_1__SpringBatchSchemaUpgradeTo5.sql │ │ │ ├── V1_347_2__ModifyTypSpringBchUpdTo5.sql │ │ │ ├── V1_347__IdentifierAssignmentDeviceId.sql │ │ │ ├── V1_348_1__AddUserLastActivatedDateTime.sql │ │ │ ├── V1_348__AllowVoidingOfETLColumns.sql │ │ │ ├── V1_349__AddShowGrowthChartToProgram.sql │ │ │ ├── V1_350__SetDefaultShowGrowthChartToTrueForChildProgram.sql │ │ │ ├── V1_351__DefineIndexOnBatchJobParamsTable.sql │ │ │ ├── V1_352__AddIndexesInScheduledJobRun.sql │ │ │ ├── V1_353_1__GrantAccessForPostEtlSyncStatus.sql │ │ │ ├── V1_353_2__AddAppInfoToSyncTelemetry.sql │ │ │ ├── V1_353__CreatePostEtlSyncStatus.sql │ │ │ ├── V1_354__AddMediaFieldsToConcept.sql │ │ │ ├── V1_355__CreateArchivalConfigTable.sql │ │ │ ├── V1_356__AlterArchivalConfigTable.sql │ │ │ ├── V1_357__AddSyncDisabledColumnToTxEntities.sql │ │ │ ├── V1_358__AddSyncDisabledColumnToUserSubjectAssignment.sql │ │ │ ├── V1_359__AddSyncDisabledColumnToSubjectProgramEligibility.sql │ │ │ ├── V1_360__AddSyncDisabledDateTimeColumnToTxEntities.sql │ │ │ ├── V1_361__AddSyncDisabledConstraintOnEncounter.sql │ │ │ ├── V1_362__AddSyncDisabledConstraintOnMultipleTables.sql │ │ │ ├── V1_363__AddMemberAdditionRuleToSubjectType.sql │ │ │ ├── V1_40__RenamingOpenCHSUserToAdmin.sql │ │ │ ├── V1_41__AddAuditColumnsToUser.sql │ │ │ ├── V1_42__DropColumnVersionFromUsers.sql │ │ │ ├── V1_43__DropColumnAuditIdFromUsers.sql │ │ │ ├── V1_44__AddingOrganisationLevelUniqueConstraintToRuleNames.sql │ │ │ ├── V1_45__DefaultingExecutionOrderToMax.sql │ │ │ ├── V1_46__DroppingNotNullConstraintOnRules.sql │ │ │ ├── V1_47__AddNameToOperationProgramsAndEncounterTypes.sql │ │ │ ├── V1_48__AddingVoidingCapabilityToRules.sql │ │ │ ├── V1_49__AddingVoidingCapabilityToRemainingEntities.sql │ │ │ ├── V1_50__AddVoidingToProgramEnrolment.sql │ │ │ ├── V1_51__AddVoidingToChecklistItem.sql │ │ │ ├── V1_52__AnswerOrderInConceptAnswerIsDouble.sql │ │ │ ├── V1_53__AddMultiTenancyToRuleTables.sql │ │ │ ├── V1_54__EnableRLSOnNewTables.sql │ │ │ ├── V1_55__ModifyingChecklistItemSchema.sql │ │ │ ├── V1_56__ModifyingChecklistItemSchema.sql │ │ │ ├── V1_57__AddingChecklistReferenceTables.sql │ │ │ ├── V1_58__AllowVoidingOfNonApplicableFormElements.sql │ │ │ ├── V1_59.1__UpdateConceptUniqueKeyConstraintToIncludeOrg.sql │ │ │ ├── V1_59__AddingMultiTenancyToChecklistTables.sql │ │ │ ├── V1_60__CreateLocationToLocationParentMapping.sql │ │ │ ├── V1_61__CreateFacility.sql │ │ │ ├── V1_62__UserFacilityIndividualMapping.sql │ │ │ ├── V1_63__RemoveInvalidFormElementTypes.sql │ │ │ ├── V1_64.5__CreateNecessaryViewsForAddressLevel.sql │ │ │ ├── V1_64__MigrateLevelToADouble.sql │ │ │ ├── V1_65__CreateAddressLevelType.sql │ │ │ ├── V1_66__AssociateRLSPoliciesToAddressLevelType.sql │ │ │ ├── V1_67__AddUserColumns.sql │ │ │ ├── V1_68__MakeUserColumnsNotNullable.sql │ │ │ ├── V1_69__UserFacilityMappingNotNullColumns.sql │ │ │ ├── V1_70__ProgramOrganisationConfigConcept.sql │ │ │ ├── V1_71__AddOperatingIndividualScopeToUsers.sql │ │ │ ├── V1_72__CatchmentIsMandatoryConditionally.sql │ │ │ ├── V1_73_1__ChangeTypeTimestampToTimestampTZForAuditCreatedDateTimeAndLastModifiedDateTime.sql │ │ │ ├── V1_73__SetAdminUserRoles.sql │ │ │ ├── V1_74__AddingChecklistItemInterdependency.sql │ │ │ ├── V1_75__UpdateAuditWhenLastModifiedDateTimeIsInFuture.sql │ │ │ ├── V1_76__CreateProgramRule.sql │ │ │ ├── V1_77__CreateVideoTable.sql │ │ │ ├── V1_78__CreateVideoTelemetricTable.sql │ │ │ ├── V1_79__AddUniqueConstraintOn_AddressLevel_title_and_level.sql │ │ │ ├── V1_80__AddScheduleOnExpiryOfDependencyToChecklistItemDetail.sql │ │ │ ├── V1_81__AddMediaDirectoryToOrganisation.sql │ │ │ ├── V1_82__AddMinDaysFromStartDateToChecklistItemDetail.sql │ │ │ ├── V1_83__AddRegistrationLocationToIndividual.sql │ │ │ ├── V1_84__AddLocationFieldsToProgramEnrolment.sql │ │ │ ├── V1_85__AddLocationFieldsToProgramEncounter.sql │ │ │ ├── V1_86__AddLocationFieldsToEncounter.sql │ │ │ ├── V1_87__AddSubjectTypes.sql │ │ │ ├── V1_88__IndividualToPointToSubjectType.sql │ │ │ ├── V1_89__UpdateUniqueConstraintAs_Title_Level_OrgId_On_AddressLevel.sql │ │ │ ├── V1_90__EnableRowLevelSecurityOnProgramOrganisationConfig.sql │ │ │ ├── V1_91__CreateUserSettingsTable.sql │ │ │ ├── V1_92__AddSettingsColumnToUsersTable.sql │ │ │ ├── V1_93_1__AddOrganisationIdToGenderTable.sql │ │ │ ├── V1_93_2__EnableRLS_OnAllTables.sql │ │ │ ├── V1_93_3__Create_openchs_impl.sql │ │ │ ├── V1_93_4__SetPolicyForUsersTable.sql │ │ │ ├── V1_93_5__AddIndicesToOrganisationId.sql │ │ │ ├── V1_93__DropUserSettingsTable.sql │ │ │ ├── V1_94__FunctionToCreateOrgDBUser.sql │ │ │ ├── V1_95__AddEmailAndPhoneToUser.sql │ │ │ ├── V1_96__CreateSyncTelemetryTable.sql │ │ │ ├── V1_97__AddColumnsToSyncTelemetryTable.sql │ │ │ ├── V1_98__RenameUsernameAndAddNameInUserTable.sql │ │ │ └── V1_99__CreateIdentifierTables.sql │ │ ├── ehcache.xml │ │ ├── external │ │ └── glific │ │ │ ├── addContactGroup.json │ │ │ ├── deleteContactGroup.json │ │ │ ├── getAllMessages.json │ │ │ ├── getContact.json │ │ │ ├── getContactGroup.json │ │ │ ├── getContactGroupContactCount.json │ │ │ ├── getContactGroupContacts.json │ │ │ ├── getContactGroupCount.json │ │ │ ├── getContactGroups.json │ │ │ ├── messageTemplateRequest.json │ │ │ ├── optinContact.json │ │ │ ├── removeContactsInGroup.json │ │ │ ├── searchConversationMessages.json │ │ │ ├── sendHsmMessage.json │ │ │ ├── sendHsmMessageToGroup.json │ │ │ ├── startFlowForContact.json │ │ │ ├── updateContactGroup.json │ │ │ └── updateContactsInGroup.json │ │ ├── favicon.ico │ │ ├── js │ │ └── camelCase.js │ │ ├── logback-spring.xml │ │ ├── patches │ │ └── v2.9_1__SetEarliestDateTimeToNullWhereMaxVisitDateTimeIsNull.sql │ │ ├── pivot │ │ ├── conceptMap.sql │ │ ├── generalEncounter.sql │ │ ├── generalEncounterCancel.sql │ │ ├── programEncounter.sql │ │ ├── programEncounterCancel.sql │ │ ├── programEnrolment.sql │ │ ├── programEnrolmentExit.sql │ │ └── registration.sql │ │ ├── public │ │ └── .gitkeep │ │ ├── rules │ │ └── .gitkeep │ │ └── usefulCommands.md │ └── test │ ├── java │ └── org │ │ └── avni │ │ ├── exporter │ │ └── v2 │ │ │ ├── ExportV2ValidationHelperTest.java │ │ │ └── HeaderCreatorTest.java │ │ ├── messaging │ │ ├── api │ │ │ ├── MessageRuleControllerTest.java │ │ │ └── MessageTemplateControllerTest.java │ │ ├── contract │ │ │ └── MessageRuleServerEntityContractTest.java │ │ ├── repository │ │ │ ├── GlificContactRepositoryET.java │ │ │ ├── GlificContactRepositoryTest.java │ │ │ ├── GlificMessageRepositoryTest.java │ │ │ ├── GlificRestClientTest.java │ │ │ └── MessageRequestQueueRepositoryTest.java │ │ └── service │ │ │ ├── MessageReceiverServiceTest.java │ │ │ ├── MessageRequestServiceTest.java │ │ │ └── MessagingServiceTest.java │ │ └── server │ │ ├── application │ │ ├── FormTypeTest.java │ │ ├── KeyValuesTest.java │ │ ├── TestFormElementBuilder.java │ │ └── TestFormElementGroupBuilder.java │ │ ├── backgroundJob │ │ └── StorageManagementJobIntegrationTest.java │ │ ├── builder │ │ ├── BuilderExceptionTest.java │ │ └── FormElementGroupBuilderTest.java │ │ ├── common │ │ ├── AbstractControllerIntegrationTest.java │ │ ├── DataJpaTest.java │ │ └── builder │ │ │ ├── TestFormContractBuilder.java │ │ │ ├── TestFormElementContractBuilder.java │ │ │ └── TestFormElementGroupContractBuilder.java │ │ ├── dao │ │ ├── EntityApprovalStatusRepositoryIntegrationTest.java │ │ ├── GeneralRepository.java │ │ ├── LocationRepositoryIntegrationTest.java │ │ ├── OrganisationRepositoryIntegrationTest.java │ │ ├── ProgramEncounterRepositoryTest.java │ │ ├── ProgramEnrolmentRepositoryIntegrationTest.java │ │ ├── QueryRepositoryTest.java │ │ ├── SubjectMigrationIntegrationTest.java │ │ ├── UserRepositoryTest.java │ │ ├── accessControl │ │ │ └── PrivilegeRepositoryTest.java │ │ ├── application │ │ │ ├── FormElementRepositoryTest.java │ │ │ └── FormMappingRepositoryTest.java │ │ ├── search │ │ │ ├── EncounterSearchQueryBuilderTest.java │ │ │ └── SubjectSearchQueryBuilderTest.java │ │ └── sync │ │ │ └── SyncEntityNameTest.java │ │ ├── domain │ │ ├── AddressLevelTest.java │ │ ├── CHSBaseEntityTest.java │ │ ├── CHSEntityTest.java │ │ ├── ConceptTest.java │ │ ├── EncounterTypeBuilder.java │ │ ├── ExportJobParametersBuilder.java │ │ ├── IdentifierUserAssignmentTest.java │ │ ├── OrganisationAwareEntityTest.java │ │ ├── TestEntityFactory.java │ │ ├── TestSubjectMigrationBuilder.java │ │ ├── UserTest.java │ │ ├── factory │ │ │ ├── AddressLevelBuilder.java │ │ │ ├── AddressLevelTypeBuilder.java │ │ │ ├── TestAccountBuilder.java │ │ │ ├── TestCatchmentBuilder.java │ │ │ ├── TestOrganisationBuilder.java │ │ │ ├── TestOrganisationConfigBuilder.java │ │ │ ├── TestUserSyncSettingsBuilder.java │ │ │ ├── UserBuilder.java │ │ │ ├── UserContextBuilder.java │ │ │ ├── access │ │ │ │ ├── TestGroupBuilder.java │ │ │ │ ├── TestGroupPrivilegeBuilder.java │ │ │ │ └── TestUserGroupBuilder.java │ │ │ ├── metadata │ │ │ │ ├── ConceptAnswerBuilder.java │ │ │ │ ├── ConceptBuilder.java │ │ │ │ ├── FormMappingBuilder.java │ │ │ │ ├── ProgramBuilder.java │ │ │ │ └── TestFormBuilder.java │ │ │ ├── task │ │ │ │ └── TaskTypeBuilder.java │ │ │ ├── txData │ │ │ │ └── ObservationCollectionBuilder.java │ │ │ └── txn │ │ │ │ ├── ProgramEnrolmentBuilder.java │ │ │ │ ├── SubjectBuilder.java │ │ │ │ ├── TestGroupRoleBuilder.java │ │ │ │ ├── TestGroupSubjectBuilder.java │ │ │ │ └── TestUserSubjectAssignmentBuilder.java │ │ ├── framework │ │ │ └── PhoneNumberTest.java │ │ ├── metadata │ │ │ ├── SubjectTypeBuilder.java │ │ │ └── SubjectTypesTest.java │ │ └── txn │ │ │ └── EntityApprovalStatusBuilder.java │ │ ├── exporter │ │ └── v2 │ │ │ ├── ExportFieldsManagerTest.java │ │ │ ├── ExportV2CSVFieldExtractorTest.java │ │ │ └── LongitudinalExportItemRowBuilder.java │ │ ├── framework │ │ ├── ehcache │ │ │ └── CacheStrategyTest.java │ │ ├── hibernate │ │ │ └── ArrayUserTypeTest.java │ │ ├── jpa │ │ │ └── AvniRestRepositoryTest.java │ │ ├── json │ │ │ └── JsonEncoderTest.java │ │ ├── postgres │ │ │ └── JsonbUserTypeTest.java │ │ └── security │ │ │ ├── AuthTokenManagerTest.java │ │ │ ├── LimitHostNamesFilterTest.java │ │ │ └── ResourceProtectionStatusTest.java │ │ ├── identifier │ │ ├── PrefixedUserPoolBasedIdentifierGeneratorIntegrationTest.java │ │ ├── UserBasedIdentifierGeneratorTest.java │ │ └── UserPoolBasedIdentifierGeneratorTest.java │ │ ├── importer │ │ └── batch │ │ │ ├── csv │ │ │ ├── creator │ │ │ │ └── AddressLevelCreatorTest.java │ │ │ └── writer │ │ │ │ ├── BaseCSVImportTest.java │ │ │ │ ├── BulkLocationCreatorIntegrationTest.java │ │ │ │ ├── BulkLocationEditorIntegrationTest.java │ │ │ │ ├── EncounterCreatorIntegrationTest.java │ │ │ │ ├── ProgramEncounterCreatorIntegrationTest.java │ │ │ │ ├── ProgramEnrolmentWriterIntegrationTest.java │ │ │ │ ├── SubjectWriterIntegrationTest.java │ │ │ │ ├── UserAndCatchmentWriterIntegrationTest.java │ │ │ │ └── header │ │ │ │ ├── EncounterHeadersCreatorIntegrationTest.java │ │ │ │ ├── HeaderFieldTest.java │ │ │ │ ├── ProgramEncounterHeadersCreatorIntegrationTest.java │ │ │ │ ├── ProgramEnrolmentHeadersCreatorIntegrationTest.java │ │ │ │ ├── SubjectHeadersCreatorIntegrationTest.java │ │ │ │ └── SubjectHeadersCreatorUnitTest.java │ │ │ └── model │ │ │ ├── BundleZipTest.java │ │ │ └── RowTest.java │ │ ├── service │ │ ├── AddressLevelCacheIntegrationTest.java │ │ ├── AddressLevelServiceIntegrationTest.java │ │ ├── AddressLevelServiceTest.java │ │ ├── ArchivalConfigServiceIntegrationTest.java │ │ ├── AuthServiceTest.java │ │ ├── CatchmentAddressProjectionTestImplementation.java │ │ ├── ConceptServiceIntegrationTest.java │ │ ├── EnhancedValidationServiceQuestionGroupsTest.java │ │ ├── EnhancedValidationServiceTest.java │ │ ├── GroupSubjectServiceIntegrationTest.java │ │ ├── IdpServiceImplTest.java │ │ ├── IndividualRelationshipTypeServiceTest.java │ │ ├── IndividualServiceIntegration2Test.java │ │ ├── IndividualServiceIntegrationTest.java │ │ ├── IndividualServiceTest.java │ │ ├── KeycloakIdpServiceTest.java │ │ ├── LocationServiceTest.java │ │ ├── MediaObservationServiceTest.java │ │ ├── MetadataDiffCheckerTest.java │ │ ├── MetadataDiffServiceTest.java │ │ ├── ObservationServiceTest.java │ │ ├── OrganisationConfigServiceTest.java │ │ ├── ProgramServiceTest.java │ │ ├── TaskServiceTest.java │ │ ├── TranslationServiceTest.java │ │ ├── UserServiceAssociateGroupsTest.java │ │ ├── UserServiceTest.java │ │ ├── UserSubjectAssignmentServiceIntegrationTest.java │ │ ├── UserSubjectAssignmentServiceTest.java │ │ ├── accessControl │ │ │ ├── AccessControlServiceIntegrationTest.java │ │ │ ├── AccessControlServiceStub.java │ │ │ └── AccessControlServiceTest.java │ │ ├── builder │ │ │ ├── TestCatchmentService.java │ │ │ ├── TestConceptService.java │ │ │ ├── TestDataSetupService.java │ │ │ ├── TestEncounterTypeService.java │ │ │ ├── TestFormService.java │ │ │ ├── TestGroupService.java │ │ │ ├── TestGroupSubjectService.java │ │ │ ├── TestLocationService.java │ │ │ ├── TestOrganisationService.java │ │ │ ├── TestOrganisationSetupService.java │ │ │ ├── TestProgramEnrolmentService.java │ │ │ ├── TestProgramService.java │ │ │ ├── TestSubjectService.java │ │ │ ├── TestSubjectTypeService.java │ │ │ └── identifier │ │ │ │ ├── IdentifierSourceBuilder.java │ │ │ │ └── IdentifierUserAssignmentBuilder.java │ │ ├── identifier │ │ │ └── IdentifierUserAssignmentRepositoryTest.java │ │ └── sync │ │ │ ├── ImportServiceTest.java │ │ │ ├── ResetSyncServiceIntegrationTest.java │ │ │ └── TestSyncService.java │ │ ├── util │ │ ├── AvniFilesTest.java │ │ ├── BooleanUtilTest.java │ │ ├── CircularListTest.java │ │ ├── CollectionUtilTest.java │ │ ├── DateTimeUtilTest.java │ │ ├── ExceptionUtilTest.java │ │ ├── KeycloakConnectivityTest.java │ │ ├── OTest.java │ │ ├── PhoneNumberUtilTest.java │ │ ├── S3FileTest.java │ │ └── ValidationUtilTest.java │ │ └── web │ │ ├── AddressLevelTypeControllerUnitTest.java │ │ ├── CatchmentControllerIntegrationTest.java │ │ ├── CatchmentControllerUnitTest.java │ │ ├── ConceptControllerIntegrationTest.java │ │ ├── ConceptControllerTest.java │ │ ├── ConceptDirtyCheckingIntegrationTest.java │ │ ├── EncounterControllerIntegrationTest.java │ │ ├── EncounterTypesIntegrationTest.java │ │ ├── FormControllerIntegrationTest.java │ │ ├── FormMappingsIntegrationTest.java │ │ ├── IndividualControllerIntegrationTest.java │ │ ├── MetadataDiffControllerIntegrationTest.java │ │ ├── PeriodRequestTest.java │ │ ├── ProgramEncounterControllerIntegrationTest.java │ │ ├── ProgramEnrolmentControllerIntegrationTest.java │ │ ├── SampleControllerIntegrationTest.java │ │ ├── TestWebContextService.java │ │ ├── TransactionDataSyncTest.java │ │ ├── UserSubjectSyncTest.java │ │ ├── api │ │ └── SubjectApiControllerIntegrationTest.java │ │ ├── request │ │ ├── ExportEntityTypeBuilder.java │ │ ├── ExportFiltersBuilder.java │ │ ├── ExportOutputBuilder.java │ │ ├── GroupPrivilegeContractTest.java │ │ ├── IndividualRelationshipTypeContractTest.java │ │ ├── IndividualRequestTest.java │ │ ├── api │ │ │ └── RequestUtilsTest.java │ │ ├── application │ │ │ ├── FormElementContractValidationTest.java │ │ │ └── menu │ │ │ │ └── MenuItemContractTest.java │ │ └── webapp │ │ │ └── task │ │ │ └── TaskTypeWebContractTest.java │ │ └── response │ │ └── ResponseUnitTest.java │ └── resources │ ├── Import MetaData.xlsx │ ├── Test Import.xlsx │ ├── TransactionData.xlsx │ ├── application.properties │ ├── ehcache.xml │ ├── exportErrorRequest.json │ ├── exportRequest.json │ ├── js │ └── test.js │ ├── logback-spring.xml │ ├── messaging-test-data.sql │ ├── metadataDiff │ ├── aForm.json │ ├── identifierSource.json │ ├── programs.json │ └── reportDashboard.json │ ├── ref │ ├── catchments │ │ ├── catchments.json │ │ └── updatedCatchments.json │ ├── concepts.json │ ├── concepts │ │ ├── addAnswers.json │ │ ├── codedConcept.json │ │ ├── codedConceptsWithMultipleNesting.json │ │ ├── codedConceptsWithOneLevelNesting.json │ │ ├── conceptAnswerAdditionViaSeparateFile.json │ │ ├── conceptUsedAsCodedButAlsoAsAnswer.json │ │ ├── concepts.json │ │ ├── conceptsAnswersAddedBySpecifyingNewOnesOnly.json │ │ ├── conceptsWithModifications.json │ │ ├── removeAnswers.json │ │ ├── voidableConcept.json │ │ └── voidedConcept.json │ ├── demo │ │ ├── originalForm.json │ │ ├── originalFormChanges.json │ │ └── originalNewFormElementGroup.json │ ├── encounterTypes │ │ ├── encounterTypes.json │ │ ├── encounterTypesWithRequiredEncoding.json │ │ ├── voidableEncounterType.json │ │ └── voidedEncounterType.json │ ├── encounters │ │ ├── invalidMultiSelectAnswers.json │ │ ├── invalidSingleSelectAnswer.json │ │ ├── newEncounter.json │ │ ├── scheduled.json │ │ ├── voidedConceptAnswer.json │ │ └── voidedEncounter.json │ ├── enrolment │ │ ├── NonEmptyObsProgEnrolment.json │ │ └── newProgEnrol.json │ ├── formMappings │ │ ├── formMappings.json │ │ ├── voidableFormMapping.json │ │ └── voidedFormMapping.json │ ├── forms │ │ ├── formElementWithConceptDefinedAlong.json │ │ ├── formWithANonApplicableElement.json │ │ ├── formWithChangedAnswerOrder.json │ │ ├── formWithDeletedAnswer.json │ │ ├── formWithDeletedFormElement.json │ │ ├── formWithDeletedFormElementGroup.json │ │ ├── formWithKeyValues.json │ │ ├── formWithRenamedAnswer.json │ │ └── originalForm.json │ ├── glific │ │ ├── badMessageTemplateRequest.json │ │ └── messageTemplateRequest.json │ ├── individual │ │ ├── NonEmptyObsIndividual.json │ │ ├── newIndividual.json │ │ └── voidedIndividual.json │ ├── operationalModules.json │ ├── program.json │ ├── programEncounters │ │ └── newProgramEncounter.json │ └── registrationForm.json │ ├── sample-files │ ├── angled.xml │ ├── compressed.zip │ ├── csv.csv │ ├── csv.txt │ ├── document.pdf │ ├── javascript.js │ ├── json.json │ ├── phpfile.php │ ├── spreadsheet.numbers │ ├── spreadsheet.xlsx │ ├── text.csv │ ├── text.txt │ └── text.txt.csv │ ├── tear-down.sql │ ├── test-data-openchs-organisation.sql │ └── test-data.sql ├── avni-server-data ├── build.gradle └── src │ ├── main │ └── java │ │ └── org │ │ └── avni │ │ ├── messaging │ │ └── domain │ │ │ ├── Constants.java │ │ │ ├── EntityType.java │ │ │ ├── GlificSystemConfig.java │ │ │ ├── ManualMessage.java │ │ │ ├── MessageDeliveryStatus.java │ │ │ ├── MessageReceiver.java │ │ │ ├── MessageRequest.java │ │ │ ├── MessageRule.java │ │ │ ├── NextTriggerDetails.java │ │ │ ├── ReceiverType.java │ │ │ └── exception │ │ │ ├── GlificConnectException.java │ │ │ ├── GlificContactNotFoundError.java │ │ │ ├── GlificException.java │ │ │ ├── GlificGroupMessageFailureException.java │ │ │ └── GlificNotConfiguredException.java │ │ └── server │ │ ├── application │ │ ├── DecisionConcept.java │ │ ├── Form.java │ │ ├── FormElement.java │ │ ├── FormElementGroup.java │ │ ├── FormElementType.java │ │ ├── FormMapping.java │ │ ├── FormType.java │ │ ├── Format.java │ │ ├── KeyType.java │ │ ├── KeyValue.java │ │ ├── KeyValues.java │ │ ├── NonApplicableFormElement.java │ │ ├── OrganisationConfigSettingKey.java │ │ ├── Platform.java │ │ ├── RuleEntity.java │ │ ├── RuleType.java │ │ ├── Subject.java │ │ ├── SubjectTypeSettingKey.java │ │ ├── ValueType.java │ │ ├── menu │ │ │ ├── MenuItem.java │ │ │ ├── MenuItemGroup.java │ │ │ └── MenuItemType.java │ │ └── projections │ │ │ ├── BaseProjection.java │ │ │ ├── CatchmentAddressProjection.java │ │ │ ├── DocumentationProjection.java │ │ │ ├── LocationProjection.java │ │ │ ├── ReportingViewProjection.java │ │ │ └── WebSearchResultProjection.java │ │ ├── common │ │ ├── ValidationResult.java │ │ └── dbSchema │ │ │ ├── ColumnNames.java │ │ │ └── TableNames.java │ │ ├── dao │ │ ├── ArchivalConfigRepository.java │ │ ├── AvniCrudRepository.java │ │ ├── CHSRepository.java │ │ ├── CardRepository.java │ │ ├── ConceptRepository.java │ │ ├── CustomCHSJpaRepository.java │ │ ├── CustomJpaRepositoryImpl.java │ │ ├── DashboardRepository.java │ │ ├── EndOfLife1EndpointRepository.java │ │ ├── FindByLastModifiedDateTime.java │ │ ├── OperatingIndividualScopeAwareRepository.java │ │ ├── OrganisationRepository.java │ │ ├── ProgramEnrolmentRepository.java │ │ ├── ReferenceDataRepository.java │ │ ├── RepositoryProvider.java │ │ ├── SubjectTreeItemRepository.java │ │ ├── SubjectTypeRepository.java │ │ ├── SyncParameters.java │ │ ├── SyncableRepository.java │ │ ├── TransactionalDataRepository.java │ │ ├── exception │ │ │ └── ConstraintViolationExceptionAcrossOrganisations.java │ │ ├── ruleServer │ │ │ └── RuleObservationRepository.java │ │ └── sync │ │ │ └── TransactionDataCriteriaBuilderUtil.java │ │ ├── domain │ │ ├── AbstractEncounter.java │ │ ├── Account.java │ │ ├── AccountAdmin.java │ │ ├── AddressLevel.java │ │ ├── AddressLevelType.java │ │ ├── AddressLevelTypes.java │ │ ├── AnswerConceptMigration.java │ │ ├── ApprovalStatus.java │ │ ├── ArchivalConfig.java │ │ ├── Auditable.java │ │ ├── CHSBaseEntity.java │ │ ├── CHSEntity.java │ │ ├── Catchment.java │ │ ├── Checklist.java │ │ ├── ChecklistDetail.java │ │ ├── ChecklistItem.java │ │ ├── ChecklistItemDetail.java │ │ ├── ChecklistItemStatus.java │ │ ├── Comment.java │ │ ├── CommentThread.java │ │ ├── Concept.java │ │ ├── ConceptAnswer.java │ │ ├── ConceptDataType.java │ │ ├── CustomQuery.java │ │ ├── Dashboard.java │ │ ├── DashboardSection.java │ │ ├── DashboardSectionCardMapping.java │ │ ├── DeclarativeRule.java │ │ ├── Documentation.java │ │ ├── DocumentationItem.java │ │ ├── ETLEntity.java │ │ ├── Encounter.java │ │ ├── EncounterType.java │ │ ├── EntityApprovalStatus.java │ │ ├── ExportJobParameters.java │ │ ├── Gender.java │ │ ├── Group.java │ │ ├── GroupDashboard.java │ │ ├── GroupRole.java │ │ ├── GroupSubject.java │ │ ├── IdentifierAssignment.java │ │ ├── IdentifierSource.java │ │ ├── IdentifierUserAssignment.java │ │ ├── Individual.java │ │ ├── JoinTableConfig.java │ │ ├── JsonObject.java │ │ ├── Locale.java │ │ ├── MessageableEntity.java │ │ ├── Msg91Config.java │ │ ├── NamedEntity.java │ │ ├── News.java │ │ ├── ObservationCollection.java │ │ ├── OperatingIndividualScope.java │ │ ├── OperationalEncounterType.java │ │ ├── OperationalProgram.java │ │ ├── OperationalSubjectType.java │ │ ├── Organisation.java │ │ ├── OrganisationAwareEntity.java │ │ ├── OrganisationConfig.java │ │ ├── OrganisationGroup.java │ │ ├── OrganisationGroupOrganisation.java │ │ ├── ParentLocationMapping.java │ │ ├── PlatformTranslation.java │ │ ├── PrivilegeEntityType.java │ │ ├── Program.java │ │ ├── ProgramEncounter.java │ │ ├── ProgramEnrolment.java │ │ ├── ReportCard.java │ │ ├── ResetSync.java │ │ ├── Rule.java │ │ ├── RuleData.java │ │ ├── RuleDependency.java │ │ ├── RuleEntityType.java │ │ ├── RuleFailureLog.java │ │ ├── RuleFailureTelemetry.java │ │ ├── RuledEntity.java │ │ ├── RuledEntityType.java │ │ ├── S3ExtensionFile.java │ │ ├── StandardReportCardType.java │ │ ├── StandardReportCardTypeType.java │ │ ├── Status.java │ │ ├── SubjectMigration.java │ │ ├── SubjectType.java │ │ ├── SubjectTypeSetting.java │ │ ├── SyncAttributeEntity.java │ │ ├── SyncTelemetry.java │ │ ├── SyncableItem.java │ │ ├── Translation.java │ │ ├── User.java │ │ ├── UserContext.java │ │ ├── UserGroup.java │ │ ├── UserSettings.java │ │ ├── UserSubject.java │ │ ├── UserSubjectAssignment.java │ │ ├── ValidationException.java │ │ ├── ValueUnit.java │ │ ├── Video.java │ │ ├── VideoTelemetric.java │ │ ├── VirtualCatchment.java │ │ ├── accessControl │ │ │ ├── AvniAccessException.java │ │ │ ├── AvniNoUserSessionException.java │ │ │ ├── GroupPrivilege.java │ │ │ ├── GroupPrivileges.java │ │ │ ├── Privilege.java │ │ │ ├── PrivilegeType.java │ │ │ ├── SubjectPartitionCheckStatus.java │ │ │ └── SubjectPartitionData.java │ │ ├── app │ │ │ └── dashboard │ │ │ │ └── DashboardFilter.java │ │ ├── auth │ │ │ └── KeycloakResponse.java │ │ ├── enums │ │ │ └── ruleFailure │ │ │ │ ├── AppType.java │ │ │ │ ├── EntityType.java │ │ │ │ └── SourceType.java │ │ ├── extenalSystem │ │ │ ├── ExternalSystemConfig.java │ │ │ └── SystemName.java │ │ ├── framework │ │ │ ├── BaseJsonObject.java │ │ │ └── IdHolder.java │ │ ├── identifier │ │ │ ├── IdentifierGeneratorType.java │ │ │ └── IdentifierOverlappingException.java │ │ ├── individualRelationship │ │ │ ├── IndividualRelation.java │ │ │ ├── IndividualRelationGenderMapping.java │ │ │ ├── IndividualRelationship.java │ │ │ └── IndividualRelationshipType.java │ │ ├── jsRuleSupport │ │ │ ├── JsModelConcept.java │ │ │ └── JsModelObservation.java │ │ ├── metabase │ │ │ ├── AggregationType.java │ │ │ ├── AvniDatabase.java │ │ │ ├── CardType.java │ │ │ ├── CollectionInfoResponse.java │ │ │ ├── CollectionItem.java │ │ │ ├── CollectionPermissionsGraphResponse.java │ │ │ ├── CollectionResponse.java │ │ │ ├── ConditionType.java │ │ │ ├── CreateCollectionRequest.java │ │ │ ├── CreateDashboardRequest.java │ │ │ ├── Dashboard.java │ │ │ ├── DashboardName.java │ │ │ ├── DashboardResponse.java │ │ │ ├── DashboardUpdateRequest.java │ │ │ ├── Dashcard.java │ │ │ ├── Database.java │ │ │ ├── DatabaseDetails.java │ │ │ ├── DatabaseSyncStatus.java │ │ │ ├── DatasetColumn.java │ │ │ ├── DatasetRequestBody.java │ │ │ ├── DatasetResponse.java │ │ │ ├── FieldAttribute.java │ │ │ ├── FieldDetails.java │ │ │ ├── FieldName.java │ │ │ ├── FieldTarget.java │ │ │ ├── FieldType.java │ │ │ ├── FilterCondition.java │ │ │ ├── Group.java │ │ │ ├── GroupPermissionResponse.java │ │ │ ├── GroupPermissionsBody.java │ │ │ ├── GroupPermissionsGraphResponse.java │ │ │ ├── MetabaseDatabaseInfo.java │ │ │ ├── MetabaseQuery.java │ │ │ ├── MetabaseQueryBuilder.java │ │ │ ├── MetabaseRequestBody.java │ │ │ ├── MetabaseRequestFactory.java │ │ │ ├── MetabaseTargetType.java │ │ │ ├── ParameterMapping.java │ │ │ ├── Parameters.java │ │ │ ├── QueryAttribute.java │ │ │ ├── QueryType.java │ │ │ ├── QuestionConfig.java │ │ │ ├── QuestionName.java │ │ │ ├── SyncStatus.java │ │ │ ├── TableDetails.java │ │ │ ├── TableFieldsResponse.java │ │ │ ├── TableName.java │ │ │ ├── TableType.java │ │ │ ├── Tabs.java │ │ │ ├── Target.java │ │ │ ├── VisualizationAttributes.java │ │ │ └── VisualizationType.java │ │ ├── metadata │ │ │ ├── ChangeType.java │ │ │ ├── FieldChangeReport.java │ │ │ ├── FileEntryChangeReport.java │ │ │ ├── MetaData.java │ │ │ ├── MetaDataVisitor.java │ │ │ ├── MetadataChangeReport.java │ │ │ ├── ObjectChangeReport.java │ │ │ ├── ObjectCollectionChangeReport.java │ │ │ ├── PrimitiveValueChange.java │ │ │ └── SubjectTypes.java │ │ ├── observation │ │ │ └── PhoneNumberObservationValue.java │ │ ├── organisation │ │ │ ├── OrganisationCategory.java │ │ │ └── OrganisationStatus.java │ │ ├── program │ │ │ └── SubjectProgramEligibility.java │ │ ├── reporting │ │ │ ├── Names.java │ │ │ └── ViewGenConcept.java │ │ ├── sync │ │ │ ├── SubjectLinkedSyncEntity.java │ │ │ ├── SyncDisabledEntityHelper.java │ │ │ └── SyncEntityName.java │ │ ├── syncAttribute │ │ │ └── UserSyncSettings.java │ │ ├── task │ │ │ ├── Task.java │ │ │ ├── TaskStatus.java │ │ │ ├── TaskType.java │ │ │ ├── TaskTypeName.java │ │ │ └── TaskUnAssignment.java │ │ └── util │ │ │ └── EntityUtil.java │ │ ├── framework │ │ ├── hibernate │ │ │ ├── AbstractJsonbUserType.java │ │ │ ├── AbstractUserType.java │ │ │ ├── ArrayUserType.java │ │ │ ├── ChecklistItemUserType.java │ │ │ ├── DeclarativeRuleUserType.java │ │ │ ├── JSONObjectUserType.java │ │ │ ├── JodaDateTimeConverter.java │ │ │ ├── JodaLocalDateConverter.java │ │ │ ├── KeyValuePairsHibernateObject.java │ │ │ ├── KeyValuesUserType.java │ │ │ ├── NextTriggerDetailsUserType.java │ │ │ ├── ObservationCollectionUserType.java │ │ │ ├── RuleDataUserType.java │ │ │ ├── RuledEntityUserType.java │ │ │ └── UpdateOrganisationHibernateInterceptor.java │ │ ├── security │ │ │ └── UserContextHolder.java │ │ └── tomcat │ │ │ └── SetOrganisationJdbcInterceptor.java │ │ ├── geo │ │ ├── Point.java │ │ └── PointType.java │ │ ├── ltree │ │ └── LTreeType.java │ │ ├── projection │ │ ├── CodedConceptProjection.java │ │ ├── ConceptAnswerWebProjection.java │ │ ├── ConceptLeafWebProjection.java │ │ ├── ConceptProjection.java │ │ ├── ConceptWebProjection.java │ │ ├── FormElementGroupWebProjection.java │ │ ├── FormElementWebProjection.java │ │ ├── FormWebProjection.java │ │ ├── IdentifierAssignmentProjection.java │ │ ├── IdentifierSourceProjection.java │ │ ├── IndividualWebProjection.java │ │ ├── ProgramEnrolmentProjection.java │ │ ├── SearchSubjectEnrolledProgram.java │ │ └── UserWebProjection.java │ │ └── util │ │ ├── CollectionUtil.java │ │ ├── DateTimeUtil.java │ │ ├── JsonObjectUtil.java │ │ ├── MapUtil.java │ │ ├── ObjectMapperSingleton.java │ │ ├── S.java │ │ ├── S3File.java │ │ ├── S3FileType.java │ │ ├── SyncTimer.java │ │ └── ValidationUtil.java │ └── test │ └── java │ └── org │ └── avni │ └── server │ └── util │ ├── STest.java │ └── SyncTimerTest.java ├── build.gradle ├── dev-commands.txt ├── docker ├── .dockerignore ├── .env.example ├── Dockerfile ├── docker-compose.db.yml └── docker-compose.yml ├── dummy ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── infra └── rpm │ ├── config │ └── openchs.conf │ ├── keys │ ├── openchs.asc.enc │ └── openchs.pub │ ├── scripts │ ├── postInstall.sh │ ├── postUninstall.sh │ ├── preInstall.sh │ └── preUninstall.sh │ └── service │ ├── openchs │ ├── openchs.log │ ├── openchs.pid │ └── start.sh ├── java-module.sh ├── makefiles ├── api-test-data.mk ├── externalDB.mk ├── gradle.mk ├── lfe.mk ├── metabase.sh ├── pgDumpParams.txt ├── prerelease.mk ├── prod.mk ├── rule-server.mk ├── staging.mk └── util.mk ├── message_rule.patch ├── mypatch.patch ├── perf └── gatling │ ├── Gatling-perf.md │ └── user-files │ ├── resources │ ├── search.csv │ └── syncTelemetryRequest.json │ └── simulations │ ├── avni │ ├── avni-fetch-subject-type-load-test.scala │ ├── avni-get-idp-details-load-test.scala │ ├── avni-sync-details-load-test.scala │ ├── avni-sync-details-multi-user-test.scala │ └── avni-sync-telemetry-load-test.scala │ └── computerdatabase │ └── ComputerDatabaseSimulation.java ├── postman ├── local_test_data_setup.json └── localhost.postman_environment.json └── settings.gradle /.github/ISSUE_TEMPLATE/bug_snag_issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bugsnag Error 3 | about: Report an error reported on BugSnag 4 | title: 'BugSnag Error' 5 | labels: 'bugsnag' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **BugSnag Error** 11 | 12 | 13 | **Management of BugSnag error and BugSnag** 14 | https://avni.readme.io/docs/how-to-use-bugsnag 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/story.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Story 3 | about: Template for avni-server stories 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Motivation 11 | 12 | ### Acceptance Criteria 13 | 14 | ### Request 15 | 16 | ### Happy path Response 17 | 18 | ### Exception path Response 19 | 20 | ### Tech Approach 21 | 22 | ### Visual Design 23 | -------------------------------------------------------------------------------- /.java-version: -------------------------------------------------------------------------------- 1 | 21.0 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amazoncorretto:21 2 | COPY avni-server-api/build/libs/avni-server-0.0.1-SNAPSHOT.jar /opt/openchs/avni-server.jar 3 | CMD java $OPENCHS_SERVER_OPTS $DEBUG_OPTS -jar /opt/openchs/avni-server.jar -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # avni-server 2 | 3 | 4 | ### Developer machine setup 5 | See instructions available at https://avni.readme.io/docs/developer-environment-setup-ubuntu#server-side-components 6 | 7 | 8 | ## Build Status 9 | 10 | [![CircleCI](https://dl.circleci.com/status-badge/img/gh/avniproject/avni-server/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/avniproject/avni-server/tree/master) 11 | -------------------------------------------------------------------------------- /avni-rule-server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "avni-rule-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "avni-rule-server", 9 | "version": "1.0.0", 10 | "devDependencies": {} 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-rule-server/src/main/java/org/avni/ruleServer/domain/Imports.java: -------------------------------------------------------------------------------- 1 | package org.avni.ruleServer.domain; 2 | 3 | public class Imports { 4 | private Object rulesConfig; 5 | 6 | public Object getRulesConfig() { 7 | return rulesConfig; 8 | } 9 | 10 | public void setRulesConfig(Object rulesConfig) { 11 | this.rulesConfig = rulesConfig; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-rule-server/src/main/js/.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /avni-rule-server/src/main/js/main.js: -------------------------------------------------------------------------------- 1 | export function mainFunction() { 2 | return { 3 | hello: function (foo, springDependencyObject) { 4 | console.log('Hello from JavaScript!', foo); 5 | const allNames = springDependencyObject.getAllNames(); 6 | console.log(allNames); 7 | } 8 | } 9 | } 10 | 11 | mainFunction(); 12 | -------------------------------------------------------------------------------- /avni-rule-server/src/main/js/ruleInvoker.js: -------------------------------------------------------------------------------- 1 | import * as rulesConfig from "rules-config"; 2 | 3 | export function callRule(ruleCode, entity) { 4 | console.log("performing eval", rulesConfig); 5 | const ruleFunction = eval(ruleCode); 6 | console.log("eval completed"); 7 | const imports = {rulesConfig}; 8 | return ruleFunction({params: {entity: entity, decisions: {enrolmentDecisions: []}}, imports: imports}); 9 | } 10 | -------------------------------------------------------------------------------- /avni-rule-server/src/main/js/utils.js: -------------------------------------------------------------------------------- 1 | export function greet(name) { 2 | return `Hello, ${name} from JavaScript!`; 3 | } 4 | -------------------------------------------------------------------------------- /avni-server-api/log/access_log.2022-09-14.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/log/access_log.2022-09-14.log -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/messaging/contract/glific/GlificAuthRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.contract.glific; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | public class GlificAuthRequest { 7 | private final GlificUser user; 8 | 9 | public GlificAuthRequest(GlificUser user) { 10 | this.user = user; 11 | } 12 | 13 | public GlificUser getUser() { 14 | return user; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/messaging/contract/glific/GlificMessageResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.contract.glific; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | public class GlificMessageResponse { 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/messaging/contract/glific/GlificStartFlowForContactResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.contract.glific; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | public class GlificStartFlowForContactResponse { 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/messaging/repository/ManualMessageRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.repository; 2 | 3 | import org.avni.messaging.domain.ManualMessage; 4 | import org.avni.server.dao.CHSRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface ManualMessageRepository extends CHSRepository { 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/messaging/service/PhoneNumberNotAvailableOrIncorrectException.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.service; 2 | 3 | public class PhoneNumberNotAvailableOrIncorrectException extends Exception { 4 | public PhoneNumberNotAvailableOrIncorrectException() { 5 | } 6 | 7 | public PhoneNumberNotAvailableOrIncorrectException(String message) { 8 | super(message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/adapter/contract/ObservationRuleResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.adapter.contract; 2 | 3 | public class ObservationRuleResponse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/adapter/contract/ProgramRuleInput.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.adapter.contract; 2 | 3 | public class ProgramRuleInput { 4 | private String name; 5 | 6 | public ProgramRuleInput() { 7 | } 8 | 9 | public ProgramRuleInput(String name) { 10 | this.name = name; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/adapter/contract/encounter/EncounterTypeRuleInput.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.adapter.contract.encounter; 2 | 3 | import org.avni.server.domain.EncounterType; 4 | 5 | public class EncounterTypeRuleInput { 6 | private EncounterType encounterType; 7 | 8 | public EncounterTypeRuleInput(EncounterType encounterType) { 9 | this.encounterType = encounterType; 10 | } 11 | 12 | public String getName() { 13 | return encounterType.getName(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/builder/FormBuilderException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.builder; 2 | 3 | public class FormBuilderException extends Exception { 4 | public FormBuilderException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/builder/OrganisationBuilder.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.builder; 2 | 3 | import org.avni.server.domain.Organisation; 4 | 5 | public class OrganisationBuilder { 6 | private final Organisation organisation = new Organisation(); 7 | 8 | public OrganisationBuilder withMediaPath(String mediaPath) { 9 | organisation.setMediaDirectory(mediaPath); 10 | return this; 11 | } 12 | 13 | public Organisation build() { 14 | return organisation; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/common/BulkItemSaveException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.common; 2 | 3 | public class BulkItemSaveException extends RuntimeException { 4 | public BulkItemSaveException(Object contract, Exception exception) { 5 | super(String.format("%s. %s.", exception.getMessage(), contract.toString()), exception); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/common/Messageable.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.common; 2 | 3 | import org.avni.messaging.domain.EntityType; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface Messageable { 13 | EntityType value() default EntityType.Subject; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/config/AvniServiceType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.config; 2 | 3 | public enum AvniServiceType { 4 | ETL 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/config/IdpType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.config; 2 | 3 | public enum IdpType { 4 | none, 5 | keycloak, 6 | cognito, 7 | both; 8 | } 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/config/InvalidConfigurationException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.config; 2 | 3 | public class InvalidConfigurationException extends Exception { 4 | public InvalidConfigurationException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/dao/CustomQueryRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao; 2 | 3 | import org.avni.server.domain.CustomQuery; 4 | import org.springframework.stereotype.Repository; 5 | 6 | import java.util.List; 7 | 8 | @Repository 9 | public interface CustomQueryRepository extends CHSRepository { 10 | CustomQuery findAllByName(String name); 11 | List findByOrganisationId(Long id); 12 | } 13 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/dao/ExportJobParametersRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao; 2 | 3 | import org.avni.server.domain.ExportJobParameters; 4 | import org.springframework.stereotype.Repository; 5 | 6 | @Repository 7 | public interface ExportJobParametersRepository extends CHSRepository { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/dao/ImplReferenceDataRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao; 2 | 3 | import org.avni.server.domain.CHSEntity; 4 | import org.springframework.data.repository.NoRepositoryBean; 5 | import org.springframework.security.access.prepost.PreAuthorize; 6 | 7 | @NoRepositoryBean 8 | public interface ImplReferenceDataRepository extends ReferenceDataRepository { 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/dao/UserSubjectRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao; 2 | 3 | import org.avni.server.domain.User; 4 | import org.avni.server.domain.UserSubject; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface UserSubjectRepository extends AvniJpaRepository { 9 | UserSubject findByUser(User user); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/dao/individualRelationship/RuleFailureLogRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao.individualRelationship; 2 | 3 | import org.avni.server.dao.AvniCrudRepository; 4 | import org.avni.server.domain.RuleFailureLog; 5 | 6 | public interface RuleFailureLogRepository extends AvniCrudRepository { 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/dao/search/SearchBuilder.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao.search; 2 | 3 | import org.avni.server.domain.SubjectType; 4 | import org.avni.server.web.request.webapp.search.SubjectSearchRequest; 5 | 6 | public interface SearchBuilder { 7 | SqlQuery getSQLResultQuery(SubjectSearchRequest searchRequest, SubjectType subjectType); 8 | 9 | SqlQuery getSQLCountQuery(SubjectSearchRequest searchRequest, SubjectType subjectType); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/domain/RuleExecutionException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | import org.avni.server.web.request.rules.response.RuleError; 4 | 5 | public class RuleExecutionException extends Exception { 6 | private final RuleError ruleError; 7 | 8 | public RuleExecutionException(RuleError ruleError) { 9 | this.ruleError = ruleError; 10 | } 11 | 12 | public RuleError getRuleError() { 13 | return ruleError; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/domain/batch/BatchJobStatus.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.batch; 2 | 3 | import java.util.Date; 4 | 5 | public record BatchJobStatus(String status, Date createDateTime, Date endDateTime, String exitMessage, String exitCode) { 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/domain/metabase/CannedAnalyticsException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public class CannedAnalyticsException extends Exception { 4 | public CannedAnalyticsException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/domain/metabase/DeactivateMetabaseUserResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class DeactivateMetabaseUserResponse { 6 | 7 | @JsonProperty("success") 8 | private boolean success; 9 | 10 | public boolean isSuccess() { 11 | return success; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/domain/metabase/MetabaseResource.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum MetabaseResource { 4 | UserGroup, Collection, Database 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/exporter/ItemReaderCleaner.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.exporter; 2 | 3 | public interface ItemReaderCleaner { 4 | void clean(); 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/exporter/LongitudinalExportTasklet.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.exporter; 2 | 3 | import org.springframework.batch.core.step.tasklet.Tasklet; 4 | 5 | public interface LongitudinalExportTasklet extends Tasklet, ItemReaderCleaner { 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/framework/rest/RestControllerErrorResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.rest; 2 | 3 | public class RestControllerErrorResponse { 4 | private final String errorMessage; 5 | 6 | public RestControllerErrorResponse(String errorMessage) { 7 | this.errorMessage = errorMessage; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/identifier/IdentifierGenerator.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.identifier; 2 | 3 | import org.avni.server.domain.IdentifierAssignment; 4 | import org.avni.server.domain.IdentifierSource; 5 | import org.avni.server.domain.User; 6 | 7 | public interface IdentifierGenerator { 8 | void generateIdentifiers(IdentifierSource identifierSource, User user, String deviceId); 9 | IdentifierAssignment generateSingleIdentifier(IdentifierSource identifierSource, User user); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/csv/LocationImportService.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.csv; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | @Component 6 | public class LocationImportService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/header/DateFieldDescriptor.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.csv.writer.header; 2 | 3 | import org.avni.server.domain.Concept; 4 | import org.springframework.stereotype.Component; 5 | 6 | public class DateFieldDescriptor extends FieldDescriptor { 7 | @Override 8 | public String getFormat(Concept concept) { 9 | return "Format: DD-MM-YYYY"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/header/DefaultFieldDescriptor.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.csv.writer.header; 2 | 3 | public class DefaultFieldDescriptor extends FieldDescriptor { 4 | } 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/header/EncounterHeaderStrategy.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.csv.writer.header; 2 | 3 | import org.avni.server.application.FormMapping; 4 | 5 | import java.util.List; 6 | 7 | public interface EncounterHeaderStrategy { 8 | List generateHeaders(FormMapping formMapping); 9 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/header/PhoneNumberDescriptor.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.csv.writer.header; 2 | 3 | import org.avni.server.domain.Concept; 4 | 5 | public class PhoneNumberDescriptor extends FieldDescriptor { 6 | @Override 7 | public String getAllowedValues(Concept concept) { 8 | return "Enter mobile number"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/csv/writer/header/TextFieldDescriptor.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.csv.writer.header; 2 | 3 | import org.avni.server.domain.Concept; 4 | 5 | public class TextFieldDescriptor extends FieldDescriptor { 6 | @Override 7 | public String getFormat(Concept concept) { 8 | return "Any Text"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/importer/batch/metabase/CannedAnalyticsLastCompletionStatus.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.importer.batch.metabase; 2 | 3 | // Based on the last completion of the batch job. This doesn't capture the current status of any running batch job. 4 | public enum CannedAnalyticsLastCompletionStatus { 5 | NotEnabled, NotSetup, Setup, EtlNotRun 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/service/DeviceAwareService.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service; 2 | 3 | import org.joda.time.DateTime; 4 | 5 | public interface DeviceAwareService { 6 | String WEB_DEVICE_ID = "web"; 7 | 8 | boolean isSyncRequiredForDevice(DateTime lastModifiedDateTime, String deviceId); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/service/IAMAuthService.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service; 2 | 3 | import com.auth0.jwk.SigningKeyNotFoundException; 4 | import org.avni.server.domain.User; 5 | 6 | public interface IAMAuthService { 7 | User getUserFromToken(String token) throws SigningKeyNotFoundException; 8 | 9 | String generateTokenForUser(String username, String password); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/service/IDPException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service; 2 | 3 | public class IDPException extends Exception{ 4 | public IDPException(String reason) { 5 | super(reason); 6 | } 7 | 8 | public IDPException(String reason, Exception cause) { 9 | super(reason, cause); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/service/NonScopeAwareService.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service; 2 | 3 | import org.joda.time.DateTime; 4 | 5 | public interface NonScopeAwareService { 6 | 7 | boolean isNonScopeEntityChanged(DateTime lastModifiedDateTime); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/service/SampleFileExport.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service; 2 | 3 | import org.avni.server.application.FormMapping; 4 | import org.avni.server.config.InvalidConfigurationException; 5 | 6 | public interface SampleFileExport { 7 | String generateSampleFile(String[] uploadSpec, Object mode) throws InvalidConfigurationException; 8 | FormMapping getFormMapping(String[] uploadSpec); 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/service/exception/GroupNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service.exception; 2 | 3 | import jakarta.persistence.EntityNotFoundException; 4 | 5 | public class GroupNotFoundException extends EntityNotFoundException { 6 | 7 | public GroupNotFoundException() { 8 | super(); 9 | } 10 | 11 | public GroupNotFoundException(String message) { 12 | super(message); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/util/BadRequestError.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.util; 2 | 3 | /* 4 | Throw this exception when you want to rollback the transaction and return bad request error back to client. 5 | Returning HTTP 400 Bad Request on throw of this exception is handled by org.avni.web.ErrorInterceptors. 6 | */ 7 | public class BadRequestError extends RuntimeException { 8 | public BadRequestError(String format, Object... args) { 9 | super(String.format(format, args)); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/util/BooleanUtil.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.util; 2 | 3 | public class BooleanUtil { 4 | public static boolean getBoolean(Boolean b, boolean nullDefaultsTo) { 5 | if (b == null) { 6 | return nullDefaultsTo; 7 | } 8 | return b; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/util/ExceptionUtil.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.util; 2 | 3 | import java.io.PrintWriter; 4 | import java.io.StringWriter; 5 | 6 | public class ExceptionUtil { 7 | public static String getFullStackTrace(Throwable e) { 8 | StringWriter sw = new StringWriter(); 9 | PrintWriter pw = new PrintWriter(sw); 10 | e.printStackTrace(pw); 11 | return sw.toString(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/SampleController.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web; 2 | 3 | import org.springframework.web.bind.annotation.RequestMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | @RestController 7 | public class SampleController { 8 | @RequestMapping("/ping") 9 | String ping() { 10 | return "pong"; 11 | } 12 | 13 | @RequestMapping("/hello") 14 | String hello() { 15 | return "world"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/api/ApiErrorUtil.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.api; 2 | 3 | import org.avni.server.domain.Individual; 4 | 5 | public class ApiErrorUtil { 6 | public static void throwIfSubjectNotFound(Individual individual, String uuid, String legacyId) { 7 | if (individual == null) { 8 | throw new IllegalArgumentException(String.format("Individual not found with UUID '%s' or External ID '%s'", 9 | uuid, legacyId)); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/api/CommonFieldNames.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.api; 2 | 3 | public class CommonFieldNames { 4 | public static final String ID = "ID"; 5 | public static final String VOIDED = "Voided"; 6 | public static final String EXTERNAL_ID = "External ID"; 7 | public static final String SUBJECT_EXTERNAL_ID = "Subject external ID"; 8 | public static final String SUBJECT_ID = "Subject ID"; 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/external/request/export/ReportType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.external.request.export; 2 | 3 | public enum ReportType { 4 | Registration, Enrolment, Encounter, GroupSubject 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/CatchmentsContract.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | import java.util.List; 4 | 5 | public class CatchmentsContract { 6 | 7 | private List catchments; 8 | 9 | public List getCatchments() { 10 | return catchments; 11 | } 12 | 13 | public void setCatchments(List catchments) { 14 | this.catchments = catchments; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/ChangePasswordRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public class ChangePasswordRequest { 4 | private String newPassword; 5 | 6 | public String getNewPassword() { 7 | return newPassword; 8 | } 9 | 10 | public void setNewPassword(String newPassword) { 11 | this.newPassword = newPassword; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/DashboardSectionCardMappingContract.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public abstract class DashboardSectionCardMappingContract extends CHSRequest { 4 | private Double displayOrder; 5 | 6 | public Double getDisplayOrder() { 7 | return displayOrder; 8 | } 9 | 10 | public void setDisplayOrder(Double displayOrder) { 11 | this.displayOrder = displayOrder; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/ExportRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public class ExportRequest { 4 | private String fileName; 5 | 6 | public String getFileName() { 7 | return fileName; 8 | } 9 | 10 | public void setFileName(String fileName) { 11 | this.fileName = fileName; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/IntervalUnit.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public enum IntervalUnit { 4 | YEARS, MONTHS 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/PointRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public class PointRequest { 4 | private double x; 5 | private double y; 6 | 7 | public double getX() { 8 | return x; 9 | } 10 | 11 | public void setX(double x) { 12 | this.x = x; 13 | } 14 | 15 | public double getY() { 16 | return y; 17 | } 18 | 19 | public void setY(double y) { 20 | this.y = y; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/RelationsRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public class RelationsRequest extends ReferenceDataContract { 4 | 5 | private String gender; 6 | 7 | public String getGender() { 8 | return gender; 9 | } 10 | 11 | public void setGender(String gender) { 12 | this.gender = gender; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/ReportType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request; 2 | 3 | public enum ReportType { 4 | Registration, Enrolment, Encounter, GroupSubject 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/api/DeleteSubjectCriteria.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.api; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class DeleteSubjectCriteria { 7 | private List addressIds = new ArrayList<>(); 8 | 9 | public List getAddressIds() { 10 | return addressIds; 11 | } 12 | 13 | public void setAddressIds(List addressIds) { 14 | this.addressIds = addressIds; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/auth/EnableUserRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.auth; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class EnableUserRequest { 6 | @JsonProperty("Username") 7 | private String username; 8 | 9 | public String getUsername() { 10 | return username; 11 | } 12 | 13 | public void setUsername(String username) { 14 | this.username = username; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/auth/GenerateTokenResult.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.auth; 2 | 3 | public class GenerateTokenResult { 4 | String authToken; 5 | 6 | public GenerateTokenResult(String token) { 7 | this.authToken = token; 8 | } 9 | 10 | public String getAuthToken() { 11 | return authToken; 12 | } 13 | 14 | public void setAuthToken(String authToken) { 15 | this.authToken = authToken; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/reports/ReportCardWebRequest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.reports; 2 | 3 | public class ReportCardWebRequest extends ReportCardRequest { 4 | private Long standardReportCardTypeId; 5 | 6 | public Long getStandardReportCardTypeId() { 7 | return standardReportCardTypeId; 8 | } 9 | 10 | public void setStandardReportCardTypeId(Long standardReportCardTypeId) { 11 | this.standardReportCardTypeId = standardReportCardTypeId; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/rules/RulesContractWrapper/RuleServerEntityContract.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.rules.RulesContractWrapper; 2 | 3 | public interface RuleServerEntityContract { 4 | } 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/rules/constructWrappers/RuleServiceContractMapper.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.rules.constructWrappers; 2 | 3 | import org.avni.server.domain.CHSEntity; 4 | import org.avni.server.web.request.rules.RulesContractWrapper.RuleServerEntityContract; 5 | 6 | public interface RuleServiceContractMapper

{ 7 | Q map(P chsEntity); 8 | boolean canMap(CHSEntity chsEntity); 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/rules/response/MessageRuleResponseEntity.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.rules.response; 2 | 3 | public class MessageRuleResponseEntity extends BaseRuleResponseEntity{ 4 | private String[] parameters; 5 | 6 | public String[] getParameters() { 7 | return parameters; 8 | } 9 | 10 | public void setParameters(String[] parameters) { 11 | this.parameters = parameters; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/webapp/CatchmentsExport.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.webapp; 2 | 3 | import java.util.List; 4 | 5 | public class CatchmentsExport { 6 | 7 | private List catchments; 8 | 9 | public List getCatchments() { 10 | return catchments; 11 | } 12 | 13 | public void setCatchments(List catchments) { 14 | this.catchments = catchments; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/webapp/search/DateRange.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.webapp.search; 2 | 3 | public class DateRange extends RangeFilter{ 4 | public DateRange() { 5 | } 6 | public DateRange(String minValue, String maxValue) { 7 | super(minValue, maxValue); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/webapp/search/IntegerRange.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.webapp.search; 2 | 3 | public class IntegerRange extends RangeFilter{ 4 | public IntegerRange() { 5 | } 6 | 7 | public IntegerRange(Integer minValue, Integer maxValue) { 8 | super(minValue, maxValue); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/request/webapp/search/SortOrder.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.request.webapp.search; 2 | 3 | public enum SortOrder { 4 | asc, 5 | desc; 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/java/org/avni/server/web/response/ImportSampleCheckResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.web.response; 2 | 3 | public record ImportSampleCheckResponse(boolean success, String message) { 4 | } 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/application-live.properties: -------------------------------------------------------------------------------- 1 | logging.path=/var/log/openchs/ 2 | logging.file=${logging.path}openchs.log 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/database/pre_migrate_checklists.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE checklist_temp AS 2 | SELECT * 3 | FROM checklist; 4 | CREATE TABLE checklist_item_temp AS 5 | SELECT * 6 | FROM checklist_item; 7 | 8 | DELETE FROM checklist_item; 9 | DELETE FROM checklist; 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_11__DropColumnProfileFromIndividual.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual DROP COLUMN profile; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_12__AddDisplayOrderToFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element_group ADD COLUMN display_order SMALLINT NOT NULL DEFAULT -1; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_14__UniqueConstraints.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element ADD UNIQUE (form_element_group_id, display_order); 2 | ALTER TABLE form_element_group ADD UNIQUE (form_id, display_order); 3 | 4 | ALTER TABLE form_mapping ADD UNIQUE (uuid); 5 | ALTER TABLE form ADD UNIQUE (uuid); 6 | ALTER TABLE form_element_group ADD UNIQUE (uuid); 7 | ALTER TABLE form_element ADD UNIQUE (uuid); 8 | ALTER TABLE concept ADD UNIQUE (uuid); 9 | ALTER TABLE concept_answer ADD UNIQUE (uuid); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_15__ChangeDataTypeOfRelatedEntity.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_mapping DROP COLUMN related_entity; 2 | ALTER TABLE form_mapping ADD COLUMN entity_id BIGINT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_16__ChangeSortOrderDataTypeAndAddUniqueConstraint.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept_answer DROP COLUMN sort_weight; 2 | ALTER TABLE concept_answer ADD COLUMN answer_order SMALLINT NOT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_17__UniqueConstraintOnConceptName.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept ADD UNIQUE (name); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_20__UniqueConstraintOnGender.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE gender ADD UNIQUE (uuid); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_21__RemoveFollowupTypeAndUseEncounterType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter DROP COLUMN followup_type_id; 2 | DROP TABLE followup_type; 3 | ALTER TABLE program_encounter ADD COLUMN encounter_type_id INT NOT NULL DEFAULT 1; 4 | ALTER TABLE ONLY program_encounter 5 | ADD CONSTRAINT program_encounter_encounter_type FOREIGN KEY (encounter_type_id) REFERENCES encounter_type (id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_22__AddObservationsTypeEntityId.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_mapping ADD COLUMN observations_type_entity_id INT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_23__RenameProgramEncounterDateTime.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter RENAME COLUMN actual_date_time TO encounter_date_time; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_24__AddRegistrationDateToIndividual.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual ADD COLUMN registration_date DATE NOT NULL DEFAULT '2017-01-01'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_25__AddNameToProgramEncounter.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter ADD COLUMN name VARCHAR(50) NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_26__AddMaxDateForProgramEncounter.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter ADD COLUMN max_date_time TIMESTAMP NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_27__HealthMetaDataVersion.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE health_metatadata_version ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(50) UNIQUE NOT NULL 4 | ); 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_28__RenameSpellingMistakeInTableName.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE health_metatadata_version RENAME TO health_metadata_version; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_2__AdditionalUserColumns.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ADD COLUMN name VARCHAR(255); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_31__CreateBaseDate.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist ADD COLUMN base_date TIMESTAMP NOT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_32__RenameObservationColumns.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual RENAME COLUMN custom_profile TO observations; 2 | ALTER TABLE program_enrolment RENAME COLUMN enrolment_profile TO observations; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_33__AddUnitToConcept.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept ADD COLUMN unit VARCHAR (50) NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_35__DropCatchmentFromIndividual.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual DROP COLUMN catchment_id; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_36__AddColumnDisplayToFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element_group ADD COLUMN display VARCHAR(100) NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_37__AddColumnColourToProgram.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program ADD COLUMN colour VARCHAR(20) NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_38__DropMetaColumnsFromCatchmentAddressMapping.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE catchment_address_mapping 2 | DROP COLUMN version, 3 | DROP COLUMN created_by_id, 4 | DROP COLUMN last_modified_by_id, 5 | DROP COLUMN created_date_time, 6 | DROP COLUMN last_modified_date_time; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_40__AddingAddressLevelAttributes.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE address_level 2 | ADD COLUMN attributes JSONB NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_43__AddAbnormalToConceptAnswer.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept_answer ADD COLUMN abnormal boolean NOT NULL DEFAULT false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_46__ReplaceNameWithFirstAndLastNames.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual 2 | ADD COLUMN first_name VARCHAR(256); 3 | 4 | ALTER TABLE individual 5 | ADD COLUMN last_name VARCHAR(256); 6 | 7 | ALTER TABLE individual 8 | DROP COLUMN name; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_47__AddingFormElementType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element ADD COLUMN type VARCHAR(1024) DEFAULT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_48__SplitScheduledDateIntoMinAndMaxDates.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter RENAME COLUMN scheduled_date_time TO earliest_visit_date_time; 2 | ALTER TABLE program_encounter RENAME COLUMN max_date_time TO max_visit_date_time; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_49__AddValidFormatRegexAndMessageKeyToFormElement.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element 2 | ADD COLUMN valid_format_regex character varying(255), 3 | ADD COLUMN valid_format_description_key character varying(255), 4 | ADD CONSTRAINT valid_format_check CHECK 5 | ((valid_format_regex IS NULL and valid_format_description_key IS NULL) 6 | OR (valid_format_regex IS NOT NULL and valid_format_description_key IS NOT NULL)); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_50__AddingTypeToCatchments.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE catchment ADD COLUMN type VARCHAR(1024) NOT NULL DEFAULT 'Villages'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_51__AddingTypeToAddressLevel.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE address_level DROP COLUMN attributes; 2 | ALTER TABLE address_level ADD COLUMN type VARCHAR(1024); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_52__AddressLevelOnIndividualIsMandatory.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual ALTER COLUMN address_id SET NOT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_53__AddUniqueConstraintToOrganisation.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE organisation ADD UNIQUE (uuid); 2 | ALTER TABLE organisation ADD UNIQUE (name); 3 | ALTER TABLE organisation ADD UNIQUE (db_user); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_54__AddCancelToProgramEncounter.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter ADD COLUMN cancel_date_time TIMESTAMP, 2 | ADD COLUMN cancel_observations JSONB; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_8__RenameDateOfBirthEstimatedToVerified.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE Individual 2 | RENAME COLUMN date_of_birth_estimated TO date_of_birth_verified; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V0_9__RenameColumnUsedInSummary.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element 2 | RENAME COLUMN used_in_summary TO is_used_in_summary; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_01__AddVoidingToConcepts.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept 2 | ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; 3 | 4 | ALTER TABLE concept_answer 5 | ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_02__AddVoidedToEncounters.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE encounter 2 | ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_03__AddGinIndexForObservations.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX IF NOT EXISTS idx_individual_obs 2 | ON individual USING GIN (observations jsonb_path_ops); 3 | 4 | CREATE INDEX IF NOT EXISTS idx_program_enrolment_obs 5 | ON program_enrolment USING GIN (observations jsonb_path_ops); 6 | 7 | CREATE INDEX IF NOT EXISTS idx_program_encounter_obs 8 | ON program_encounter USING GIN (observations jsonb_path_ops); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_04.5__AddHierarchyToOrganisations.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE organisation 2 | ADD COLUMN parent_organisation_id INTEGER REFERENCES organisation (id); 3 | 4 | UPDATE organisation 5 | SET parent_organisation_id = (SELECT id 6 | FROM organisation 7 | WHERE name = 'OpenCHS') 8 | WHERE name <> 'OpenCHS'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_04__AddVoidedToIndividual.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual 2 | ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_05__DisplayOrderToFloat.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element 2 | ALTER COLUMN display_order TYPE DOUBLE PRECISION; 3 | 4 | ALTER TABLE form_element_group 5 | ALTER COLUMN display_order TYPE DOUBLE PRECISION; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_06__DropIsUsedInSummaryColumnInFormElement.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element 2 | DROP COLUMN is_used_in_summary; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_07__DropIsGeneratedColumnInFormElement.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element 2 | DROP COLUMN is_generated; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_08__NonApplicableOrganisationEntityMapping.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE non_applicable_form_element ( 2 | id SERIAL PRIMARY KEY, 3 | organisation_id BIGINT REFERENCES organisation (id), 4 | form_element_id BIGINT REFERENCES form_element (id) 5 | ); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_09__MigrateConceptDataType.sql: -------------------------------------------------------------------------------- 1 | UPDATE concept 2 | SET data_type = 'NA' 3 | WHERE data_type = 'N/A'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_100__AddColumnsToChecklistItemDetail.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item_detail 2 | ADD COLUMN min_days_from_dependent INTEGER, 3 | ADD COLUMN expires_after INTEGER; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_101__EnableRLS_OnAddressLevelType.sql: -------------------------------------------------------------------------------- 1 | select enable_rls_on_ref_table('address_level_type'); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_104__AddColumnsToIdntifierSourceTable.sql: -------------------------------------------------------------------------------- 1 | alter table identifier_source 2 | add column min_length integer not null default 0, 3 | add column max_length integer not null default 0; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_105__DropSchedulingConstraintOnProgramEncounter.sql: -------------------------------------------------------------------------------- 1 | alter table program_encounter 2 | drop constraint if exists program_encounter_ensure_scheduling_is_complete; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_109__AddProgramSubjectLabelColumnToOperationalProgram.sql: -------------------------------------------------------------------------------- 1 | alter table operational_program 2 | add column program_subject_label text; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_111__AddLevelColumnToAddressLevelType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE address_level_type 2 | ADD COLUMN level double precision default 0; 3 | 4 | update address_level_type 5 | set level = (select distinct level from address_level where type_id = address_level_type.id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_112__AddParentIdColumnToAddressLevelType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE address_level_type 2 | ADD COLUMN parent_id INTEGER REFERENCES address_level_type (id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_116__AddNameParentUniqueConstraintToLocation.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE address_level 2 | ADD CONSTRAINT unique_name_per_level UNIQUE(title, type_id, parent_id, organisation_id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_117__AddUsernameSuffixToOrganisationTable.sql: -------------------------------------------------------------------------------- 1 | 2 | alter table organisation 3 | add column username_suffix text ; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_118__AddUniqueUUIDConstraintToVideo.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE video 2 | ADD UNIQUE (uuid); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_120__AddSchedulingRelatedColumnsToEncounterTable.sql: -------------------------------------------------------------------------------- 1 | alter table encounter 2 | add column earliest_visit_date_time timestamptz, 3 | add column max_visit_date_time timestamptz, 4 | add column cancel_date_time timestamptz, 5 | add COLUMN cancel_observations jsonb, 6 | add column cancel_location point, 7 | add column name text; 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_122__CreateOrganisationConfigTable.sql: -------------------------------------------------------------------------------- 1 | create table organisation_config 2 | ( 3 | id serial primary key, 4 | uuid varchar(255) not null, 5 | organisation_id bigint not null, 6 | settings jsonb 7 | ); 8 | 9 | alter table only organisation_config 10 | add constraint organisation_config_organisation foreign key (organisation_id) references organisation (id); 11 | 12 | select enable_rls_on_tx_table('organisation_config') 13 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_123__AddAuditToOrganisationConfigTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE organisation_config ADD COLUMN audit_id bigint; 2 | ALTER TABLE organisation_config ADD COLUMN version integer default 1; 3 | ALTER TABLE organisation_config ADD COLUMN is_voided boolean DEFAULT false; 4 | 5 | ALTER TABLE ONLY organisation_config 6 | ADD CONSTRAINT organisation_config_master_audit FOREIGN KEY (audit_id) REFERENCES audit (id); 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_126__AddLanguageToTranslationTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE translation ADD COLUMN language varchar(255); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_127__AddLanguageToPlatformTranslationTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE platform_translation ADD COLUMN language varchar(255); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_128__AddOrganisationIdToPlatformTranslationTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE platform_translation ADD COLUMN organisation_id INTEGER NOT NULL DEFAULT 1 ; 2 | 3 | alter table only platform_translation 4 | add constraint platform_translation_organisation foreign key (organisation_id) references organisation (id); 5 | 6 | select enable_rls_on_ref_table('platform_translation'); 7 | select enable_rls_on_ref_table('translation'); 8 | select enable_rls_on_ref_table('organisation_config'); 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_130__CreateTablesForRulesFromUI.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element ADD COLUMN rule text; 2 | -- ALTER TABLE form ADD COLUMN visit_schedule_rule text; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_131__AddColulmsForRulesFromUI.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form ADD COLUMN decision_rule text; 2 | ALTER TABLE form ADD COLUMN validation_rule text; 3 | ALTER TABLE form ADD COLUMN visit_schedule_rule text; 4 | 5 | ALTER TABLE program ADD COLUMN enrolment_summary_rule text; 6 | ALTER TABLE program ADD COLUMN checklists_rule text; 7 | ALTER TABLE program ADD COLUMN enrolment_eligibility_check_rule text; 8 | 9 | ALTER TABLE encounter ADD COLUMN encounter_eligibility_check_rule text; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_132__AddColulmsForRulesFromUI.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE encounter DROP COLUMN encounter_eligibility_check_rule; 2 | ALTER TABLE encounter_type ADD COLUMN encounter_eligibility_check_rule text; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_133__UpdateOpenchsImplUserCreateScript.sql: -------------------------------------------------------------------------------- 1 | DO $$ 2 | BEGIN 3 | IF NOT EXISTS(SELECT 1 FROM pg_roles WHERE rolname = 'openchs_impl') 4 | THEN 5 | DROP ROLE IF EXISTS openchs_impl; 6 | CREATE ROLE openchs_impl 7 | NOINHERIT 8 | NOLOGIN 9 | NOBYPASSRLS; 10 | GRANT openchs_impl TO openchs; 11 | END IF; 12 | UPDATE organisation SET db_user = 'openchs_impl' where name = 'OpenCHS'; 13 | END$$; 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_135__Openchs_impl__userCanCreateRoles.sql: -------------------------------------------------------------------------------- 1 | alter role openchs_impl createrole; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_136__addKeyValuesToConcept.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept ADD COLUMN key_values jsonb -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_137__UpdateUniqueConstraintOnChecklistItemDetailTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item_detail DROP CONSTRAINT IF EXISTS checklist_item_detail_uuid_key; 2 | ALTER TABLE checklist_item_detail ADD CONSTRAINT checklist_item_detail_uuid_org_id_key UNIQUE (uuid, organisation_id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_13__AddSoloFieldToConceptAnswer.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept_answer ADD COLUMN uniq boolean NOT NULL DEFAULT false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_140__DropChecklistRuleColumnFromProgramAddToForm.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program DROP COLUMN checklists_rule; 2 | ALTER TABLE form ADD COLUMN checklists_rule text; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_141__CreateWorkupdationRuleColumnInOrgConfig.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE organisation_config ADD COLUMN worklist_updation_rule text ; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_143__DropOrganisationNotNullConstraintFromUser.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ALTER COLUMN organisation_id DROP NOT NULL; 2 | ALTER TABLE users ALTER COLUMN organisation_id DROP DEFAULT; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_146__DropFormIdNotNullConstraint.sql: -------------------------------------------------------------------------------- 1 | alter table form_mapping alter column form_id drop not null; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_149__AddColumnIsHouseholdInSubjectType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE subject_type ADD COLUMN is_household BOOLEAN NOT NULL DEFAULT FALSE; 2 | 3 | ALTER TABLE group_role DROP CONSTRAINT group_role_org_id; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_150__DropFormNameNotNullConstraint.sql: -------------------------------------------------------------------------------- 1 | alter table form alter column name drop not null; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_151__AddLegacyId.sql: -------------------------------------------------------------------------------- 1 | alter table individual 2 | add column legacy_id varchar null; 3 | 4 | alter table individual 5 | add constraint individual_legacy_id_organisation_id_uniq_idx unique (legacy_id, organisation_id); 6 | 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_152__AddLegacyIdToProgramEnrolment.sql: -------------------------------------------------------------------------------- 1 | alter table program_enrolment 2 | add column legacy_id varchar null; 3 | 4 | alter table program_enrolment 5 | add constraint program_enrolment_legacy_id_organisation_id_uniq_idx unique (legacy_id, organisation_id); 6 | 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_153__AddLegacyIdToEncounterTables.sql: -------------------------------------------------------------------------------- 1 | alter table program_encounter 2 | add column legacy_id varchar null; 3 | 4 | alter table program_encounter 5 | add constraint program_encounter_legacy_id_organisation_id_uniq_idx unique (legacy_id, organisation_id); 6 | 7 | alter table encounter 8 | add column legacy_id varchar null; 9 | 10 | alter table encounter 11 | add constraint encounter_legacy_id_organisation_id_uniq_idx unique (legacy_id, organisation_id); 12 | 13 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_154__UpdateRolesAndPrivilegeTables.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE groups 2 | ADD COLUMN has_all_privileges BOOLEAN NOT NULL DEFAULT FALSE; 3 | 4 | UPDATE groups 5 | SET has_all_privileges = true 6 | WHERE name = 'Everyone'; 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_155__AddRuleColumnToFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element_group ADD COLUMN rule text; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_157__AddActiveFlag.sql: -------------------------------------------------------------------------------- 1 | alter table encounter_type 2 | add column active boolean not null default true; 3 | 4 | alter table program 5 | add column active boolean not null default true; 6 | 7 | alter table subject_type 8 | add column active boolean not null default true; 9 | 10 | alter table concept 11 | add column active boolean not null default true; 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_158__DropLevelColumnFromAddressLevel.sql: -------------------------------------------------------------------------------- 1 | alter table address_level 2 | drop column level; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_160__AddTypeToSubjectType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE subject_type ADD COLUMN type varchar(255); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_161__AlterIndividualRelationshipIdType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual_relationship alter column id type integer; 2 | select setval('individual_relationship_id_seq', (select max(id) from individual_relationship)); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_163__CreateSubjectSummaryRuleColumnInSubjectType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE subject_type ADD COLUMN subject_summary_rule text ; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_166__RenameCardToReportCard.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE card RENAME TO report_card; 2 | ALTER TABLE card_id_seq RENAME TO report_card_id_seq; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_167__AddDeviceInfoColumnToSyncTelemetry.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE sync_telemetry add column device_info jsonb; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_169__AddSchemaNameToOrganisation.sql: -------------------------------------------------------------------------------- 1 | alter table organisation add column schema_name varchar(255) null; 2 | update organisation set schema_name = db_user; 3 | alter table organisation alter column schema_name set not null; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_16__DeletingOrgIDFromCatchmentAddressMapping.sql: -------------------------------------------------------------------------------- 1 | DROP POLICY catchment_address_mapping_orgs ON catchment_address_mapping; 2 | ALTER TABLE catchment_address_mapping DROP COLUMN organisation_id; 3 | ALTER TABLE catchment_address_mapping DISABLE ROW LEVEL SECURITY; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_171__DecisionConcept.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE decision_concept ( 2 | id SERIAL PRIMARY KEY, 3 | concept_id BIGINT NOT NULL, 4 | form_id BIGINT NOT NULL 5 | ); 6 | 7 | ALTER TABLE ONLY decision_concept 8 | ADD CONSTRAINT decision_concept_form FOREIGN KEY (form_id) REFERENCES form (id); 9 | ALTER TABLE ONLY decision_concept 10 | ADD CONSTRAINT decision_concept_concept FOREIGN KEY (concept_id) REFERENCES concept (id); 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_172__AddIconColumnToReportCardTable.sql: -------------------------------------------------------------------------------- 1 | alter table report_card add column icon_file_s3_key text; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_173__AddStatusDateTimeColumnToEntityApprovalStatus.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE entity_approval_status 2 | ADD COLUMN status_date_time timestamptz; 3 | 4 | UPDATE entity_approval_status eas 5 | SET status_date_time = (SELECT last_modified_date_time FROM audit a WHERE a.id = eas.audit_id) 6 | WHERE eas.status_date_time ISNULL; 7 | 8 | ALTER TABLE entity_approval_status 9 | ALTER COLUMN status_date_time SET NOT NULL; 10 | 11 | 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_175__VoidRejectPrivileges.sql: -------------------------------------------------------------------------------- 1 | update privilege 2 | set is_voided = true, 3 | last_modified_date_time = current_timestamp 4 | where name in ('Reject Subject', 5 | 'Reject Enrolment', 6 | 'Reject Encounter', 7 | 'Reject ChecklistItem'); 8 | 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_177__AddGPSCordinatesAndLocationPropertiesToAddressLevel.sql: -------------------------------------------------------------------------------- 1 | alter table address_level 2 | add column gps_coordinates point, 3 | add column location_properties jsonb; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_179__AllowRegistrationWithoutLocation.sql: -------------------------------------------------------------------------------- 1 | alter table individual 2 | alter column address_id drop not null; 3 | 4 | alter table subject_type 5 | add column allow_empty_location boolean not null default false; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_180__AddUniqueNameColumnToSubjectType.sql: -------------------------------------------------------------------------------- 1 | alter table subject_type 2 | add column unique_name boolean not null default false; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_181__AddNameRegExColumnsToSubjectType.sql: -------------------------------------------------------------------------------- 1 | alter table subject_type 2 | add column valid_first_name_regex text, 3 | add column valid_first_name_description_key text, 4 | add column valid_last_name_regex text, 5 | add column valid_last_name_description_key text; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_182__AddCommentStandardReportCardType.sql: -------------------------------------------------------------------------------- 1 | insert into standard_report_card_type (uuid, name, description, created_date_time, last_modified_date_time) 2 | values ('a65c064b-db32-408b-aceb-d15acfebca1e', 'Comments', 'Comments', current_timestamp, current_timestamp); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_185__ReplaceRLSForOrganisationConfig.sql: -------------------------------------------------------------------------------- 1 | DROP POLICY IF EXISTS organisation_config_orgs ON organisation_config; 2 | 3 | select enable_rls_on_ref_table('organisation_config'); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_186__RemovePrintSettingsFromOrgConfig.sql: -------------------------------------------------------------------------------- 1 | with audits as ( 2 | update organisation_config set settings = settings - 'prints' 3 | where settings ->> 'prints' notnull 4 | returning audit_id 5 | ) 6 | update audit 7 | set last_modified_date_time = current_timestamp 8 | where id in ( 9 | select audit_id 10 | from audits 11 | ) 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_187__ReplaceRLSForGroupDashboard.sql: -------------------------------------------------------------------------------- 1 | DROP POLICY IF EXISTS group_dashboard_orgs ON group_dashboard; 2 | select enable_rls_on_tx_table('group_dashboard'); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_188__AddIconColumnToSubjectType.sql: -------------------------------------------------------------------------------- 1 | alter table subject_type add column icon_file_s3_key text; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_189__AddSyncSourceToSyncTelemetry.sql: -------------------------------------------------------------------------------- 1 | alter table sync_telemetry add column sync_source text; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_18__DisableRowLevelSecurityForCatchmentAddressMapping.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE catchment_address_mapping DISABLE ROW LEVEL SECURITY; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_190__AddUniqueConstraintForUuidAndOrganisationid.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE group_role 2 | ADD CONSTRAINT group_role_uuid_org_id_key UNIQUE (uuid, organisation_id); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_191__UpdateLastModifiedMillisecondToThreeDigits.sql: -------------------------------------------------------------------------------- 1 | update privilege 2 | set last_modified_date_time = current_timestamp(3) + id * interval '1 millisecond'; 3 | 4 | update standard_report_card_type 5 | set last_modified_date_time = current_timestamp(3) + id * interval '1 millisecond'; 6 | 7 | update approval_status 8 | set last_modified_date_time = current_timestamp(3) + id * interval '1 millisecond'; 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_198__MoveAuditColumnsToSubjectMigrationTable.sql: -------------------------------------------------------------------------------- 1 | select create_audit_columns('subject_migration'); 2 | call update_audit_columns_from_audit_table('subject_migration'); 3 | commit; 4 | select solidify_audit_columns('subject_migration'); 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_199__CreateYearReviewTable.sql: -------------------------------------------------------------------------------- 1 | create table user_review_matrix 2 | ( 3 | id serial primary key, 4 | user_id integer references users (id), 5 | organisation_id integer references organisation (id), 6 | review_year integer not null default 2021, 7 | matrix jsonb not null 8 | ); 9 | 10 | alter table user_review_matrix add unique (user_id, organisation_id, review_year); 11 | 12 | select enable_rls_on_tx_table('user_review_matrix'); 13 | 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_200__SetErrorMessageFieldToText.sql: -------------------------------------------------------------------------------- 1 | alter table rule_failure_telemetry alter column error_message set data type text; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_201__AddDeclarativeRuleToFormElement.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element ADD COLUMN declarative_rule jsonb; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_202__AddIndicesOnSyncTelemetry.sql: -------------------------------------------------------------------------------- 1 | create index sync_telemetry_sync_start_time_idx on sync_telemetry (sync_start_time); 2 | create index sync_telemetry_user_id_idx on sync_telemetry (user_id); 3 | 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_203__AddDeclarativeRuleToFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element_group ADD COLUMN declarative_rule jsonb; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_204__AddDeclarativeRuleForEligibility.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program ADD COLUMN enrolment_eligibility_check_declarative_rule jsonb; 2 | ALTER TABLE encounter_type ADD COLUMN encounter_eligibility_check_declarative_rule jsonb; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_205__AddDeclarativeRuleInForm.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form ADD COLUMN validation_declarative_rule jsonb; 2 | ALTER TABLE form ADD COLUMN decision_declarative_rule jsonb; 3 | ALTER TABLE form ADD COLUMN visit_schedule_declarative_rule jsonb; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_206__AddGroupInFormElement.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element add column group_id integer references form_element (id); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_20__AddVoidedToFormElementAndFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form_element_group ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; 2 | ALTER TABLE form_element ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_211__DropDefaultOnSyncAttributeUsablity.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE subject_type 2 | ALTER COLUMN sync_registration_concept_1_usable DROP DEFAULT, 3 | ALTER COLUMN sync_registration_concept_2_usable DROP DEFAULT; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_212__AddSchemaNameToOrganisationGroup.sql: -------------------------------------------------------------------------------- 1 | alter table organisation_group 2 | add column schema_name text; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_213__AddAnalyticsDBFeatureToggle.sql: -------------------------------------------------------------------------------- 1 | alter table organisation 2 | add column has_analytics_db boolean not null default false; 3 | 4 | -- This is required because organisation groups will now require their own schema 5 | alter table organisation_group 6 | add column has_analytics_db boolean not null default false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_215__AddIndexToEntityApprovalStatus.sql: -------------------------------------------------------------------------------- 1 | create index entity_approval_status_entity_id_index on entity_approval_status(entity_id); 2 | create index entity_approval_status_approval_status_id_index on entity_approval_status(approval_status_id); 3 | create index entity_approval_status_entity_type_index on entity_approval_status(entity_type); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_217__AddSchemaNameToTableMetadata.sql: -------------------------------------------------------------------------------- 1 | drop policy table_metadata_rls_policy on table_metadata; 2 | 3 | alter table table_metadata drop column db_user; 4 | alter table table_metadata add column schema_name text; 5 | 6 | ALTER TABLE table_metadata 7 | DISABLE ROW LEVEL SECURITY; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_219__AddNotNullConstraintToAddressIdIndividualId.sql: -------------------------------------------------------------------------------- 1 | alter table encounter alter column address_id set not null; 2 | alter table program_enrolment alter column address_id set not null; 3 | alter table program_encounter alter column individual_id set not null; 4 | alter table program_encounter alter column address_id set not null; 5 | alter table group_subject alter column group_subject_address_id set not null; 6 | alter table group_subject alter column member_subject_address_id set not null; 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_21__RemoveConceptIdFromProgram.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program DROP COLUMN concept_id; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_220__AddIndexMetadataTable.sql: -------------------------------------------------------------------------------- 1 | create table index_metadata 2 | ( 3 | id serial primary key, 4 | table_metadata_id integer references table_metadata (id), 5 | column_id integer references column_metadata (id), 6 | name text 7 | ); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_221__AddParentConceptUuidToColumnMetadata.sql: -------------------------------------------------------------------------------- 1 | alter table column_metadata add column parent_concept_uuid CHARACTER VARYING(255); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_223__AddNameHelpTextToSubjectType.sql: -------------------------------------------------------------------------------- 1 | alter table subject_type 2 | add column name_help_text text; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_224__AddLegacyIdToAddressLevel.sql: -------------------------------------------------------------------------------- 1 | alter table address_level 2 | add column legacy_id varchar null; 3 | 4 | alter table address_level 5 | add constraint address_level_legacy_id_organisation_id_uniq_idx unique (legacy_id, organisation_id); 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_226__AddProfilePictureInfoToTables.sql: -------------------------------------------------------------------------------- 1 | alter table individual 2 | add column profile_picture text; 3 | alter table subject_type 4 | add column allow_profile_picture boolean not null default false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_227.5__AddLegacyIdIndexes.sql: -------------------------------------------------------------------------------- 1 | create index encounter_legacy_id_index 2 | on encounter (legacy_id); 3 | create index individual_legacy_id_index 4 | on individual (legacy_id); 5 | create index program_encounter_legacy_id_index 6 | on program_encounter (legacy_id); 7 | create index program_enrolment_legacy_id_index 8 | on program_enrolment (legacy_id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_227__AddSchemaColumnToEntitySyncStatus.sql: -------------------------------------------------------------------------------- 1 | alter table entity_sync_status 2 | add column schema_name text; 3 | 4 | update entity_sync_status 5 | set schema_name = db_user; 6 | 7 | alter table entity_sync_status 8 | alter column schema_name set not null; 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_230__MergeDocumentationAndDocumentationNodeTables.sql: -------------------------------------------------------------------------------- 1 | alter table documentation 2 | add column parent_id integer references documentation (id); 3 | 4 | alter table documentation 5 | drop column documentation_node_id; 6 | 7 | drop table documentation_node; 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_231__AddTimedQuestionRelatedColumns.sql: -------------------------------------------------------------------------------- 1 | alter table form 2 | add column is_timed boolean default false; 3 | 4 | alter table form_element_group 5 | add column start_time integer; 6 | 7 | alter table form_element_group 8 | add column stay_time integer; 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_232__MoveIsTimedFromFormToFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | alter table form 2 | drop column is_timed; 3 | 4 | alter table form_element_group 5 | add column is_timed boolean default false; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_233__AddColourColumnsToFormElementGroup.sql: -------------------------------------------------------------------------------- 1 | alter table form_element_group 2 | add column text_colour varchar(20), 3 | add column background_colour varchar(20); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_234__AddMiddleNameRelatedColumns.sql: -------------------------------------------------------------------------------- 1 | alter table individual add column middle_name varchar(255) null; 2 | 3 | alter table subject_type 4 | add column valid_middle_name_regex text, 5 | add column valid_middle_name_description_key text; 6 | 7 | alter table subject_type 8 | add column allow_middle_name boolean default false; 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_235__ChangeSubjectUserAssignmentApproach.sql: -------------------------------------------------------------------------------- 1 | alter table individual add column assigned_user_id int null references users(id); 2 | 3 | drop table user_subject_assignment; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_237__AddTaskTypeToTask.sql: -------------------------------------------------------------------------------- 1 | alter table task add column task_type_id int references task_type(id); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_238__AddRLSToTaskAndAddStandardReportCard.sql: -------------------------------------------------------------------------------- 1 | select enable_rls_on_ref_table('task_type'); 2 | select enable_rls_on_ref_table('task_status'); 3 | select enable_rls_on_tx_table('task'); 4 | 5 | insert into standard_report_card_type (uuid, name, description, created_date_time, last_modified_date_time) 6 | values ('6be95028-1e1f-4d29-93a7-d4e562e0615a', 7 | 'Tasks', 8 | 'Tasks', 9 | now(), 10 | now()); 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_240__DropNotNullForSubjectInTask.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE task ALTER COLUMN subject_id DROP NOT NULL; 2 | 3 | ALTER TABLE task_type DROP COLUMN metadata_search_fields; 4 | ALTER TABLE task_type ADD COLUMN metadata_search_fields text[]; 5 | 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_241__SubjectTypeOptionalInFormMapping.sql: -------------------------------------------------------------------------------- 1 | alter table form_mapping alter column subject_type_id drop not null; 2 | alter table form_mapping add column task_type_id int references task_type(id); 3 | 4 | alter table form_mapping add constraint subject_type_check 5 | check ((subject_type_id is not null or task_type_id is not null)); 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_242__AddNotNullToTaskScheduleOn.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE task 2 | ALTER COLUMN scheduled_on SET NOT NULL; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_245__DropNotNullForAssignedToInTask.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE task ALTER COLUMN assigned_user_id DROP NOT NULL; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_247__ProgramEligibiltyColumnNameChanges.sql: -------------------------------------------------------------------------------- 1 | alter table program rename column program_eligibility_check_rule to manual_enrolment_eligibility_check_rule; 2 | alter table program rename column program_eligibility_check_declarative_rule to manual_enrolment_eligibility_check_declarative_rule; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_248__ChangeRLSAndAddObservationsInSubjectProgramEligibility.sql: -------------------------------------------------------------------------------- 1 | alter table subject_program_eligibility add column observations jsonb; 2 | drop policy subject_program_eligibility_orgs on subject_program_eligibility; 3 | select enable_rls_on_tx_table('subject_program_eligibility'); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_24__AddVoidedToEncounterTypesAndFormMapping.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE encounter_type ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; 2 | ALTER TABLE form_mapping ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_250__AlterMenuItem.sql: -------------------------------------------------------------------------------- 1 | alter table menu_item 2 | rename column menuItemGroup to menu_group; 3 | alter table menu_item 4 | rename column displayKey to display_key; 5 | alter table menu_item 6 | rename column menuItemType to type; 7 | alter table menu_item 8 | add column icon character varying(255) null; 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_251__AlterMenuItemLinkToLinkFunction.sql: -------------------------------------------------------------------------------- 1 | alter table menu_item drop column link; 2 | alter table menu_item add column link_function character varying(10000) null; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_254__AddImmutableColumnInEncounter.sql: -------------------------------------------------------------------------------- 1 | alter table encounter_type add column is_immutable boolean default false; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_260__AlterMessageReceiverAndMessageRequestQueueDropNotNullOnExternalIdAndDeliveredTime.sql: -------------------------------------------------------------------------------- 1 | alter table message_receiver alter column external_id drop not null; 2 | alter table message_request_queue alter column delivered_time drop not null; 3 | 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_261__AddVersionColumnToMessageReceiverAndRequestQueue.sql: -------------------------------------------------------------------------------- 1 | alter table message_receiver add version integer not null; 2 | alter table message_request_queue add version integer not null; 3 | 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_262__AlterMessageRuleReceiverEntityIdToInt.sql: -------------------------------------------------------------------------------- 1 | alter table message_rule drop column entity_type_id; 2 | alter table message_rule add column entity_type_id integer not null; 3 | alter table message_receiver drop column entity_id; 4 | alter table message_receiver add column entity_id integer not null; 5 | 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_263.1__AddressIdNullOnOtherTxnTables.sql: -------------------------------------------------------------------------------- 1 | alter table program_enrolment alter column address_id drop not null; 2 | alter table program_encounter alter column address_id drop not null; 3 | alter table encounter alter column address_id drop not null; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_263__RenameMessageRequestQueueTimeColumns.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE message_request_queue RENAME COLUMN scheduled_time TO scheduled_date_time; 2 | ALTER TABLE message_request_queue RENAME COLUMN delivered_time TO delivered_date_time; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_264__OnlyOneOrgConfigPerOrganisation.sql: -------------------------------------------------------------------------------- 1 | alter table organisation_config add unique (organisation_id, is_voided); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_265__AlterMessageReceiverAndMessageRequestQueue.sql: -------------------------------------------------------------------------------- 1 | alter table message_request_queue add entity_id integer not null; 2 | ALTER TABLE message_receiver RENAME COLUMN entity_id TO receiver_id; 3 | ALTER TABLE message_receiver RENAME COLUMN entity_type TO receiver_type; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_266__AddUniqueContraintToMessageReceiver.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE message_receiver ADD UNIQUE (receiver_id, receiver_type, organisation_id); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_267__AddReceiverTypeToMessageRule.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE message_rule ADD column receiver_type text not null DEFAULT 'Subject'; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_269__AlterTablesToAccommodateManualBroadcastMessageId.sql: -------------------------------------------------------------------------------- 1 | alter table message_request_queue add column manual_broadcast_message_id bigint references manual_broadcast_message (id); 2 | 3 | alter table message_request_queue alter column entity_id drop not null; 4 | alter table message_request_queue alter column message_rule_id drop not null; 5 | alter table message_receiver alter column receiver_id drop not null; 6 | 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_270__AllowActiveProgramEnrolments.sql: -------------------------------------------------------------------------------- 1 | alter table program add column allow_multiple_enrolments bool not null default false; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_271__AddNextTriggerDetailsToManualBroadcastMessage.sql: -------------------------------------------------------------------------------- 1 | alter table manual_broadcast_message add column next_trigger_details json; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_275__RemoveApprovalStatusFromOrgSettings.sql: -------------------------------------------------------------------------------- 1 | update organisation_config set settings = settings - 'enableApprovalWorkflow' 2 | where settings->>'enableApprovalWorkflow' is not null; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_277__RemoveUserReviewMatrix.sql: -------------------------------------------------------------------------------- 1 | drop table user_review_matrix; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_278__RenameManualBroadcastMessageToManualMessage.sql: -------------------------------------------------------------------------------- 1 | alter table manual_broadcast_message rename to manual_message; 2 | alter table manual_broadcast_message_id_seq rename to manual_message_id_seq; 3 | alter table message_request_queue rename column manual_broadcast_message_id to manual_message_id; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_281__AddNameToDashboardFilter.sql: -------------------------------------------------------------------------------- 1 | ALTER table dashboard_filter 2 | ADD COLUMN name VARCHAR(255) NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_284__FixDashboardFilterDefinition.sql: -------------------------------------------------------------------------------- 1 | -- mid release delete, doesn't effect production 2 | delete from dashboard_filter where 1 = 1; 3 | 4 | alter table dashboard_filter rename column filter to filter_config; 5 | alter table dashboard_filter alter column name set not null; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_285__AddDueChecklistInDefaultDashboard.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO standard_report_card_type ( uuid, name, description, is_voided, created_date_time, 2 | last_modified_date_time) 3 | VALUES ( uuid_generate_v4(), 'Due checklist', 'Due checklist', false, 4 | now(), now()); 5 | 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_286__AddLastNameOptionalToSubjectType.sql: -------------------------------------------------------------------------------- 1 | alter table subject_type 2 | add column last_name_optional boolean default false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_288__ETLAddScheduleJobRunTable.sql: -------------------------------------------------------------------------------- 1 | create table scheduled_job_run 2 | ( 3 | id SERIAL PRIMARY KEY, 4 | job_name varchar(255) not null, 5 | started_at timestamp(3) with time zone not null, 6 | ended_at timestamp(3) with time zone null, 7 | error_message text null 8 | ); 9 | 10 | -- if exists for dev machine reasons 11 | alter table organisation drop column if exists has_analytics_db; 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_28__UpdateLastModifiedDateTimeForNumericConcepts.sql: -------------------------------------------------------------------------------- 1 | UPDATE audit set last_modified_date_time = current_timestamp 2 | FROM concept 3 | WHERE concept.audit_id = audit.id and concept.data_type = 'Numeric'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_290__UUIDToOrgGroup.sql: -------------------------------------------------------------------------------- 1 | alter table organisation_group add column uuid CHARACTER VARYING(255) not null default uuid_generate_v4(); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_291__DropHasAnalyticsDbInOrgGroup.sql: -------------------------------------------------------------------------------- 1 | alter table organisation_group drop column has_analytics_db; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_292__AddSuccessColumnToScheduledJobRun.sql: -------------------------------------------------------------------------------- 1 | alter table scheduled_job_run add column success bool; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_293__AddPrivilegeTypeEnum.sql: -------------------------------------------------------------------------------- 1 | alter table privilege add column type varchar(100) null; 2 | update privilege set type = replace(initcap(name), ' ', '') where 1 = 1; 3 | alter table privilege alter column type set not null; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_294__PrivilegeModifications.sql: -------------------------------------------------------------------------------- 1 | insert into privilege(uuid, name, description, type, entity_type, created_date_time, last_modified_date_time) 2 | values (uuid_generate_v4(), 'Void visit', 'Void visit', 'VoidVisit', 'Encounter', current_timestamp, current_timestamp); 3 | update privilege set name = 'Edit relation', type = 'EditRelation' where type = 'EditRelationship'; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_295__TableMetadataModificationsForGroupSubject.sql: -------------------------------------------------------------------------------- 1 | alter table table_metadata 2 | add column group_subject_type_uuid varchar(255), 3 | add column member_subject_type_uuid varchar(255); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_297__AddQuestionGroupUUIDToTableMetadata.sql: -------------------------------------------------------------------------------- 1 | alter table table_metadata add column repeatable_question_group_concept_uuid varchar(255) null; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_299__AddMorePrivileges.sql: -------------------------------------------------------------------------------- 1 | insert into privilege (uuid, name, description, entity_type, type, created_date_time, last_modified_date_time) 2 | VALUES (uuid_generate_v4(), 'Edit video', '', 'NonTransaction', 'EditVideo', current_timestamp, current_timestamp); 3 | insert into privilege (uuid, name, description, entity_type, type, created_date_time, last_modified_date_time) 4 | VALUES (uuid_generate_v4(), 'Report', '', 'Report', 'Report', current_timestamp, current_timestamp); 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_29__RemoveRLSFromUsers.sql: -------------------------------------------------------------------------------- 1 | DROP POLICY IF EXISTS users_user ON users; 2 | ALTER TABLE users DISABLE ROW LEVEL SECURITY; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_301__InsertModifyPrivileges.sql: -------------------------------------------------------------------------------- 1 | -- Rename reports to Analytics 2 | UPDATE privilege SET name = 'Analytics', description = 'Reports and Media', entity_type = 'Report', type='Analytics' WHERE name = 'Report'; 3 | 4 | -- Insert EditNews privilege 5 | INSERT INTO privilege(uuid, name, entity_type , type, description, last_modified_date_time, created_date_time, is_voided) 6 | VALUES (uuid_generate_v4(), 'Edit News', 'NonTransaction', 'EditNews', 'Edit and publish news broadcasts', now(), now(), false); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_303__AddAssignSubjectPrivilege.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO privilege(uuid, name, entity_type , type, description, last_modified_date_time, created_date_time, is_voided) 2 | VALUES (uuid_generate_v4(), 'Assign Subject', 'Subject', 'AssignSubject', 'Assign Subject to User', now(), now(), false); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_304__AddMessagingPrivilege.sql: -------------------------------------------------------------------------------- 1 | update privilege set entity_type = 'Analytics' where type = 'Analytics'; 2 | INSERT INTO privilege(uuid, name, entity_type , type, description, last_modified_date_time, created_date_time, is_voided) 3 | VALUES (uuid_generate_v4(), 'Messaging', 'Messaging', 'Messaging', 'Ability to send messages', now(), now(), false); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_305__EntityTypeOfNewsToBeMessaging.sql: -------------------------------------------------------------------------------- 1 | update privilege set entity_type = 'Messaging' where type = 'EditNews'; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_306__VoidUserGroupsForVoidedGroups.sql: -------------------------------------------------------------------------------- 1 | update user_group ug set is_voided = true from groups g 2 | where ug.group_id = g.id and g.is_voided = true and ug.is_voided = false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_309__UniqueConstraintOnSubjectAndUserForAssignment.sql: -------------------------------------------------------------------------------- 1 | alter table user_subject_assignment add unique(subject_id, user_id, organisation_id); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_310__LastmodifieddatetimeIndexOnSyncTele.sql: -------------------------------------------------------------------------------- 1 | create index if not exists sync_telemetry_last_modified_time_idx ON sync_telemetry(last_modified_date_time); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_311__isVoidedOnOrgGroup.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE organisation_group 2 | ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_312__UseMinioSettingIsBoolean.sql: -------------------------------------------------------------------------------- 1 | UPDATE organisation_config 2 | SET settings = jsonb_set(settings, '{useMinioForStorage}', 'true', false) 3 | WHERE settings ->> 'useMinioForStorage' = 'true'; 4 | UPDATE organisation_config 5 | SET settings = jsonb_set(settings, '{useMinioForStorage}', 'false', false) 6 | WHERE settings ->> 'useMinioForStorage' = 'false'; 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_313__IndicesOnSubjectMigration.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX IF NOT EXISTS subject_migration_sync_fields_1_idx ON 2 | subject_migration(last_modified_date_time, subject_type_id, old_sync_concept_1_value, new_sync_concept_1_value, old_address_level_id, new_address_level_id, organisation_id); 3 | 4 | CREATE INDEX IF NOT EXISTS subject_migration_sync_fields_2_idx ON 5 | subject_migration(last_modified_date_time, subject_type_id, old_address_level_id, new_address_level_id, organisation_id); 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_316__FormMappingDuplicationCheckChanges1.sql: -------------------------------------------------------------------------------- 1 | alter table form_mapping 2 | add column if not exists impl_version int not null default 1; 3 | update form_mapping 4 | set impl_version = 0 5 | where is_voided = true; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_319__AddColumnsIsClosedAndClosedDateTimeToRuleFailureLog.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.rule_failure_log 2 | ADD COLUMN IF NOT EXISTS is_closed boolean, 3 | ADD COLUMN IF NOT EXISTS closed_date_time timestamp 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_321__FixUsersUUIDIndex.sql: -------------------------------------------------------------------------------- 1 | alter table users drop constraint if exists users_uuid_org_id_key; 2 | alter table users add unique (uuid); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_322__UpdateModifiedTimeForUserSubAssgnsAndGroupSubs.sql: -------------------------------------------------------------------------------- 1 | update user_subject_assignment 2 | set last_modified_date_time = current_timestamp(3) + id * interval '1 millisecond'; 3 | 4 | update group_subject 5 | set last_modified_date_time = current_timestamp(3) + id * interval '1 millisecond'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_324__DropUUIDFromRuleFailureTelemetry.sql: -------------------------------------------------------------------------------- 1 | alter table rule_failure_telemetry drop column uuid; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_326__EntityIdIndividualIdCheckForEAS.sql: -------------------------------------------------------------------------------- 1 | alter table entity_approval_status 2 | add check ( (entity_type <> 'Subject') or (entity_id = individual_id) ); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_327__FilledBy.sql: -------------------------------------------------------------------------------- 1 | alter table encounter add column filled_by_id int null references users(id); 2 | alter table program_encounter add column filled_by_id int null references users(id); 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_328__UserNameIsMandatory.sql: -------------------------------------------------------------------------------- 1 | update users set name = username where name is null; 2 | alter table users alter column name set not null; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_329__MultiTxEntityTypeUpdate.sql: -------------------------------------------------------------------------------- 1 | insert into privilege(uuid, name, description, type, entity_type, created_date_time, last_modified_date_time) 2 | values (uuid_generate_v4(), 'Bulk transaction data update', 'Bulk transaction data update of different types', 'MultiTxEntityTypeUpdate', 'BulkAccess', current_timestamp, current_timestamp); 3 | update privilege set entity_type = 'BulkAccess', last_modified_date_time = current_timestamp where entity_type = 'Analytics'; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_330__AddColumnsNestedAndInitCountToReportCard.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.report_card 2 | ADD COLUMN IF NOT EXISTS nested BOOLEAN DEFAULT FALSE, 3 | ADD COLUMN IF NOT EXISTS count_of_cards SMALLINT NOT NULL DEFAULT 1; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_331__AddEditFormRule.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE form ADD COLUMN edit_form_rule text; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_332__DropProgramOutcome.sql: -------------------------------------------------------------------------------- 1 | -- cannot drop column or program_outcome table because it is used in reporting views 2 | alter table program_enrolment drop CONSTRAINT program_enrolment_program_outcome; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_333__DropProgramOrganisationConfig.sql: -------------------------------------------------------------------------------- 1 | drop table if exists program_organisation_config_at_risk_concept; 2 | drop table if exists program_organisation_config; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_334__DropChecklistTempTables.sql: -------------------------------------------------------------------------------- 1 | drop table if exists checklist_item_temp; 2 | drop table if exists checklist_temp; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_335__AddSettingsColumnToSubjectType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE subject_type 2 | ADD COLUMN settings JSONB; 3 | 4 | UPDATE subject_type 5 | SET settings = ('{ 6 | "displayRegistrationDetails": true, 7 | "displayPlannedEncounters": true 8 | }')::jsonb, last_modified_date_time = now(); 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_336__SecondaryDashboard.sql: -------------------------------------------------------------------------------- 1 | alter table group_dashboard add column is_secondary_dashboard bool not null default false; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_337__IdentifierAssignmentUsed.sql: -------------------------------------------------------------------------------- 1 | alter table identifier_assignment add column used bool not null default false; 2 | update identifier_assignment set used = true, last_modified_date_time = current_timestamp + random() * 5000 * (interval '1 millisecond') where individual_id is not null; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_338__OrganisationCategory.sql: -------------------------------------------------------------------------------- 1 | alter table organisation add column category varchar(255) not null default 'Production'; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_339_2__OrganisationStatus.sql: -------------------------------------------------------------------------------- 1 | alter table organisation add column status varchar(255) not null default 'Live'; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_339_5__AddVersions.sql: -------------------------------------------------------------------------------- 1 | alter table organisation_category add column if not exists version int not null default 1; 2 | alter table organisation_status add column if not exists version int not null default 1; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_339_7__AddIgnoreSyncSettingsInDEAToUser.sql: -------------------------------------------------------------------------------- 1 | alter table users add column ignore_sync_settings_in_DEA boolean not null default false; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_340__StandardReportCardInput.sql: -------------------------------------------------------------------------------- 1 | alter table report_card add column standard_report_card_input jsonb not null default '{}'::jsonb; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_341__RegionForPhoneNumber.sql: -------------------------------------------------------------------------------- 1 | alter table account add column region varchar(255) not null default 'IN'; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_343__User1ShouldHaveNoOrganisationId.sql: -------------------------------------------------------------------------------- 1 | -- In earlier migration we have set parent_organisation as 1 but fix in production 2 | update users set organisation_id = null where id = 1 and username = 'admin'; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_344__OverwriteFEGNameWithDisplayName.sql: -------------------------------------------------------------------------------- 1 | update form_element_group set name = display, last_modified_date_time = current_timestamp + random() * 5000 * (interval '1 millisecond') where display is not null and display <> '' and name <> display; 2 | ALTER TABLE form_element_group DROP COLUMN display; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_345_1__VoidedReportCardNameChange.sql: -------------------------------------------------------------------------------- 1 | update report_card 2 | set name = concat(name, ' (voided~', id, ')') 3 | where is_voided 4 | and name not ilike '%voided%'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_345__ReportCardNameIsUnique.sql: -------------------------------------------------------------------------------- 1 | alter table report_card add constraint report_card_name_unique unique (name, organisation_id); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_346__RenameVoidedAddressLevelTypes.sql: -------------------------------------------------------------------------------- 1 | update address_level_type set name = name || ' (voided~' || id || ')', 2 | last_modified_date_time = current_timestamp + (random() * 5000 * (interval '1 millisecond')) 3 | where is_voided = true and name not ilike '%voided%'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_347__IdentifierAssignmentDeviceId.sql: -------------------------------------------------------------------------------- 1 | alter table identifier_assignment add column device_id varchar; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_348_1__AddUserLastActivatedDateTime.sql: -------------------------------------------------------------------------------- 1 | alter table users 2 | add column last_activated_date_time timestamp(3) with time zone default null; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_348__AllowVoidingOfETLColumns.sql: -------------------------------------------------------------------------------- 1 | alter table column_metadata add column concept_voided boolean default false; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_349__AddShowGrowthChartToProgram.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program 2 | ADD COLUMN show_growth_chart BOOLEAN DEFAULT FALSE NOT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_350__SetDefaultShowGrowthChartToTrueForChildProgram.sql: -------------------------------------------------------------------------------- 1 | UPDATE program 2 | SET show_growth_chart= TRUE 3 | WHERE name ILIKE 'child'; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_351__DefineIndexOnBatchJobParamsTable.sql: -------------------------------------------------------------------------------- 1 | DO 2 | $$ 3 | BEGIN 4 | IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'batch_job_execution_params') THEN 5 | create index idx_batch_job_execution_params_parameter_name on batch_job_execution_params (parameter_name); 6 | create index idx_batch_job_execution_params_parameter_value on batch_job_execution_params (parameter_value); 7 | END IF; 8 | END 9 | $$; 10 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_352__AddIndexesInScheduledJobRun.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX IF NOT EXISTS idx_scheduled_job_run_job_name ON scheduled_job_run(job_name); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_353_1__GrantAccessForPostEtlSyncStatus.sql: -------------------------------------------------------------------------------- 1 | SELECT grant_all_on_table(a.rolname, 'post_etl_sync_status') 2 | FROM pg_roles a 3 | WHERE pg_has_role('openchs', a.oid, 'member'); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_353_2__AddAppInfoToSyncTelemetry.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE sync_telemetry ADD COLUMN app_info jsonb NULL; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_354__AddMediaFieldsToConcept.sql: -------------------------------------------------------------------------------- 1 | -- Migration to add mediaUrl and mediaType columns to concept table 2 | ALTER TABLE concept ADD COLUMN media_url VARCHAR(255); 3 | ALTER TABLE concept ADD COLUMN media_type VARCHAR(255); 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_356__AlterArchivalConfigTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE archival_config ALTER COLUMN realm_query DROP NOT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_358__AddSyncDisabledColumnToUserSubjectAssignment.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE user_subject_assignment ADD COLUMN sync_disabled boolean DEFAULT FALSE; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_359__AddSyncDisabledColumnToSubjectProgramEligibility.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE subject_program_eligibility ADD COLUMN sync_disabled boolean DEFAULT FALSE; 2 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_361__AddSyncDisabledConstraintOnEncounter.sql: -------------------------------------------------------------------------------- 1 | create function encounter_sync_disabled_same_as_individual(syncDisabled bool, encounterId bigint) 2 | returns boolean 3 | language plpgsql 4 | as 5 | $$ 6 | declare 7 | begin 8 | raise 'Not Implemented.'; 9 | end 10 | $$; 11 | 12 | alter table encounter 13 | add constraint constraint_encounter_sync_disabled_same_as_individual 14 | check (encounter_sync_disabled_same_as_individual(sync_disabled, id)) NOT VALID; 15 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_363__AddMemberAdditionRuleToSubjectType.sql: -------------------------------------------------------------------------------- 1 | alter table subject_type add column member_addition_eligibility_check_rule text null; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_40__RenamingOpenCHSUserToAdmin.sql: -------------------------------------------------------------------------------- 1 | update users set name = 'admin' where name = 'openchs' and organisation_id = 1; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_41__AddAuditColumnsToUser.sql: -------------------------------------------------------------------------------- 1 | alter table users 2 | add column created_by_id BIGINT NOT NULL default 1; 3 | alter table users 4 | add column last_modified_by_id BIGINT NOT NULL default 1; 5 | alter table users 6 | add column created_date_time TIMESTAMP NOT NULL default current_timestamp; 7 | alter table users 8 | add column last_modified_date_time TIMESTAMP NOT NULL default current_timestamp; 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_42__DropColumnVersionFromUsers.sql: -------------------------------------------------------------------------------- 1 | alter table users drop column version; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_43__DropColumnAuditIdFromUsers.sql: -------------------------------------------------------------------------------- 1 | alter table users drop column audit_id; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_44__AddingOrganisationLevelUniqueConstraintToRuleNames.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rule 2 | ADD CONSTRAINT unique_rule_name UNIQUE (organisation_id, name); 3 | ALTER TABLE rule 4 | ADD CONSTRAINT unique_fn_rule_name UNIQUE (organisation_id, fn_name); 5 | ALTER TABLE rule 6 | ADD COLUMN execution_order DOUBLE PRECISION NOT NULL DEFAULT 0.0; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_45__DefaultingExecutionOrderToMax.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rule 2 | DROP COLUMN execution_order; 3 | ALTER TABLE rule 4 | ADD COLUMN execution_order DOUBLE PRECISION NOT NULL DEFAULT 10000.0; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_46__DroppingNotNullConstraintOnRules.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rule 2 | ALTER COLUMN rule_dependency_id DROP NOT NULL; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_47__AddNameToOperationProgramsAndEncounterTypes.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE operational_program 2 | ADD COLUMN name CHARACTER VARYING(255); 3 | ALTER TABLE operational_encounter_type 4 | ADD COLUMN name CHARACTER VARYING(255); 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_48__AddingVoidingCapabilityToRules.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rule 2 | ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_50__AddVoidingToProgramEnrolment.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_enrolment ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_51__AddVoidingToChecklistItem.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item ADD COLUMN is_voided BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_52__AnswerOrderInConceptAnswerIsDouble.sql: -------------------------------------------------------------------------------- 1 | alter table concept_answer alter column answer_order type double precision; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_54__EnableRLSOnNewTables.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE rule_dependency ENABLE ROW LEVEL SECURITY; 2 | ALTER TABLE rule ENABLE ROW LEVEL SECURITY; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_55__ModifyingChecklistItemSchema.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item 2 | DROP COLUMN max_date CASCADE; 3 | ALTER TABLE checklist_item 4 | DROP COLUMN due_date CASCADE; 5 | 6 | ALTER TABLE checklist_item 7 | ADD COLUMN status JSONB NOT NULL DEFAULT '{}' :: JSONB; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_56__ModifyingChecklistItemSchema.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item 2 | ADD COLUMN form_id BIGINT REFERENCES form (id); 3 | 4 | ALTER TABLE checklist_item 5 | ADD COLUMN observations JSONB; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_59.1__UpdateConceptUniqueKeyConstraintToIncludeOrg.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE concept 2 | DROP CONSTRAINT concept_name_key, 3 | ADD CONSTRAINT concept_name_orgid UNIQUE(name,organisation_id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_63__RemoveInvalidFormElementTypes.sql: -------------------------------------------------------------------------------- 1 | update audit 2 | set last_modified_date_time = current_timestamp 3 | where id in (select audit.id 4 | from audit 5 | inner join form_element on audit.id = form_element.audit_id 6 | where form_element.type in ('Numeric', 'Date', 'Text')); 7 | update form_element 8 | set type = null where type in ('Numeric', 'Date', 'Text'); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_64__MigrateLevelToADouble.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE address_level 2 | ALTER COLUMN level TYPE DOUBLE PRECISION; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_67__AddUserColumns.sql: -------------------------------------------------------------------------------- 1 | alter table users 2 | add column catchment_id int null, 3 | add column is_admin boolean not null default false, 4 | add column is_org_admin boolean null default false; 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_68__MakeUserColumnsNotNullable.sql: -------------------------------------------------------------------------------- 1 | alter table users 2 | alter column is_org_admin set not null, 3 | alter column organisation_id set not null; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_69__UserFacilityMappingNotNullColumns.sql: -------------------------------------------------------------------------------- 1 | alter table user_facility_mapping 2 | alter column uuid set not null, 3 | alter column version set not null; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_70__ProgramOrganisationConfigConcept.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE program_organisation_config_at_risk_concept ( 2 | id SERIAL PRIMARY KEY NOT NULL, 3 | program_organisation_config_id INT REFERENCES program_organisation_config (id) not null, 4 | concept_id INT REFERENCES concept (id) not null 5 | ); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_71__AddOperatingIndividualScopeToUsers.sql: -------------------------------------------------------------------------------- 1 | alter table users add column operating_individual_scope varchar(255); 2 | 3 | update users set operating_individual_scope = 'ByCatchment' where operating_individual_scope is null; 4 | 5 | alter table users alter column operating_individual_scope set not null; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_72__CatchmentIsMandatoryConditionally.sql: -------------------------------------------------------------------------------- 1 | update users set catchment_id = null, operating_individual_scope = 'None' where id = 1 and name = 'admin'; 2 | update users set catchment_id=1 where id!=1 and name != 'admin'; 3 | alter table users alter column catchment_id drop not null; 4 | alter table users add check (operating_individual_scope != 'ByCatchment' OR catchment_id IS NOT NULL); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_73_1__ChangeTypeTimestampToTimestampTZForAuditCreatedDateTimeAndLastModifiedDateTime.sql: -------------------------------------------------------------------------------- 1 | BEGIN; 2 | SET LOCAL timezone='UTC'; 3 | ALTER TABLE audit ALTER created_date_time TYPE timestamptz; 4 | ALTER TABLE audit ALTER last_modified_date_time TYPE timestamptz; 5 | ALTER TABLE users ALTER created_date_time TYPE timestamptz; 6 | ALTER TABLE users ALTER last_modified_date_time TYPE timestamptz; 7 | COMMIT; 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_73__SetAdminUserRoles.sql: -------------------------------------------------------------------------------- 1 | update users set is_admin = true where id = 1 and name = 'admin'; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_74__AddingChecklistItemInterdependency.sql: -------------------------------------------------------------------------------- 1 | alter table checklist_item_detail add column dependent_on int references checklist_item_detail (id); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_75__UpdateAuditWhenLastModifiedDateTimeIsInFuture.sql: -------------------------------------------------------------------------------- 1 | UPDATE audit SET last_modified_date_time = current_timestamp 2 | WHERE last_modified_date_time > current_timestamp; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_79__AddUniqueConstraintOn_AddressLevel_title_and_level.sql: -------------------------------------------------------------------------------- 1 | alter table address_level add constraint address_level_unique_titel_level unique (title, level); -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_80__AddScheduleOnExpiryOfDependencyToChecklistItemDetail.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item_detail 2 | ADD COLUMN schedule_on_expiry_of_dependency BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_81__AddMediaDirectoryToOrganisation.sql: -------------------------------------------------------------------------------- 1 | alter table organisation add column media_directory text; 2 | alter table organisation add UNIQUE (media_directory); 3 | 4 | update organisation set media_directory = db_user; 5 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_82__AddMinDaysFromStartDateToChecklistItemDetail.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE checklist_item_detail 2 | ADD COLUMN min_days_from_start_date SMALLINT; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_83__AddRegistrationLocationToIndividual.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual 2 | ADD COLUMN registration_location POINT; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_84__AddLocationFieldsToProgramEnrolment.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_enrolment 2 | ADD COLUMN enrolment_location POINT; 3 | 4 | ALTER TABLE program_enrolment 5 | ADD COLUMN exit_location POINT; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_85__AddLocationFieldsToProgramEncounter.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE program_encounter 2 | ADD COLUMN encounter_location POINT; 3 | 4 | ALTER TABLE program_encounter 5 | ADD COLUMN cancel_location POINT; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_86__AddLocationFieldsToEncounter.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE encounter 2 | ADD COLUMN encounter_location POINT; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_88__IndividualToPointToSubjectType.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE individual ADD COLUMN subject_type_id INTEGER REFERENCES subject_type(id); 2 | update individual set subject_type_id = (select id from subject_type where uuid = '9f2af1f9-e150-4f8e-aad3-40bb7eb05aa3'); 3 | ALTER TABLE individual ALTER COLUMN subject_type_id SET NOT NULL; 4 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_89__UpdateUniqueConstraintAs_Title_Level_OrgId_On_AddressLevel.sql: -------------------------------------------------------------------------------- 1 | 2 | alter table address_level drop constraint address_level_unique_titel_level; 3 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_90__EnableRowLevelSecurityOnProgramOrganisationConfig.sql: -------------------------------------------------------------------------------- 1 | alter table program_organisation_config 2 | enable row level security; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_92__AddSettingsColumnToUsersTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users 2 | ADD COLUMN settings JSONB; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_93_1__AddOrganisationIdToGenderTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE gender 2 | ADD COLUMN organisation_id INTEGER NOT NULL DEFAULT 1 3 | REFERENCES organisation(id); 4 | 5 | ALTER TABLE gender ALTER COLUMN organisation_id DROP DEFAULT; 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_93_3__Create_openchs_impl.sql: -------------------------------------------------------------------------------- 1 | DO $$ 2 | BEGIN 3 | IF NOT EXISTS(SELECT 1 FROM pg_roles WHERE rolname = 'openchs_impl') 4 | THEN 5 | DROP ROLE IF EXISTS openchs_impl; 6 | CREATE ROLE openchs_impl 7 | NOINHERIT 8 | NOLOGIN 9 | NOBYPASSRLS; 10 | GRANT openchs_impl TO openchs; 11 | 12 | UPDATE organisation SET db_user = 'openchs_impl' where name = 'OpenCHS'; 13 | END IF; 14 | END$$; 15 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_93__DropUserSettingsTable.sql: -------------------------------------------------------------------------------- 1 | drop policy user_settings_orgs on user_settings; 2 | drop table user_settings; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_95__AddEmailAndPhoneToUser.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users 2 | ADD COLUMN email VARCHAR(320), 3 | ADD COLUMN phone_number VARCHAR(32), 4 | ADD COLUMN disabled_in_cognito BOOLEAN DEFAULT FALSE; -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_97__AddColumnsToSyncTelemetryTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE sync_telemetry 2 | ADD COLUMN device_name varchar(255), 3 | ADD COLUMN android_version varchar(255), 4 | ADD COLUMN app_version varchar(255) -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/db/migration/V1_98__RenameUsernameAndAddNameInUserTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users 2 | RENAME COLUMN name TO username; 3 | ALTER TABLE users 4 | ALTER COLUMN username SET NOT NULL; 5 | ALTER TABLE users 6 | ADD COLUMN name CHARACTER VARYING(255); 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/addContactGroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "operationName": "createGroup", 3 | "variables": { 4 | "input": { 5 | "label": "${contactGroupName}", 6 | "description": "${contactGroupDescription}" 7 | } 8 | }, 9 | "query": "mutation createGroup($input: GroupInput!) {\n createGroup(input: $input) {\n group {\n id\n label\n }\n errors {\n key\n message\n }\n }\n}" 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/deleteContactGroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "operationName": "deleteGroup", 3 | "variables": { 4 | "id": "${id}" 5 | }, 6 | "query": "mutation deleteGroup($id: ID!) {\n deleteGroup(id: $id) {\n errors {\n key\n message\n }\n }\n}" 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/getContact.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query contacts($filter: ContactFilter, $opts: Opts) { contacts(filter: $filter, opts:$opts) { id name optinTime optoutTime optinMethod optoutMethod phone maskedPhone bspStatus status tags { id label } groups { id label } }}", 3 | "variables": { 4 | "filter": { 5 | "phone": "${phoneNumber}" 6 | }, 7 | "opts": { 8 | "order": "ASC", 9 | "limit": 10, 10 | "offset": 0 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/getContactGroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query group($id: ID!) {\n group(id: $id) {\n group {\n id\n label\n description\n }\n }\n}", 3 | "variables": { 4 | "id": "${id}" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/getContactGroupContactCount.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query countContacts($filter: ContactFilter!) {\n countContacts(filter: $filter)\n}", 3 | "variables": { 4 | "filter": { 5 | "includeGroups": "${groupId}" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/getContactGroupContacts.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query contacts($filter: ContactFilter!, $opts: Opts!) {\n contacts(filter: $filter, opts: $opts) {\n id\n name\n maskedPhone\n phone \n }\n}", 3 | "variables": { 4 | "filter": { 5 | "includeGroups": "${groupId}" 6 | }, 7 | "opts": { 8 | "limit": "${limit}", 9 | "offset": "${offset}", 10 | "orderWith": "id", 11 | "order": "ASC" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/getContactGroupCount.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query countGroups($filter: GroupFilter!) {\n countGroups(filter: $filter)\n}", 3 | "variables": { 4 | "filter": { 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/getContactGroups.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query groups($filter: GroupFilter, $opts: Opts) { groups(filter: $filter, opts:$opts) { id label contactsCount usersCount description } }", 3 | "variables": { 4 | "opts": { 5 | "order": "ASC", 6 | "limit": "${limit}", 7 | "offset": "${offset}" 8 | }, 9 | "filter": { 10 | "label": "${label}" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/messageTemplateRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query sessionTemplates($filter: SessionTemplateFilter, $opts: Opts) { sessionTemplates(filter: $filter, opts:$opts) { id body label } }", 3 | "variables": { 4 | "filter": { 5 | "isHsm": true, 6 | "status": "APPROVED" 7 | }, 8 | "opts": { 9 | "order": "ASC", 10 | "limit": 100, 11 | "offset": 0 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/optinContact.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation optinContact($phone: String!, $name: String) {optinContact(phone: $phone, name: $name) {contact {id phone name lastMessageAt optinTime bspStatus} errors {key message}}}", 3 | "variables": { 4 | "phone": "${phoneNumber}", 5 | "name": "${fullName}" 6 | } 7 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/sendHsmMessage.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation sendHsmMessage($templateId: ID!, $receiverId: ID!, $parameters: [String]) {sendHsmMessage(templateId: $templateId, receiverId: $receiverId, parameters: $parameters) {message{id body isHsm } errors {key message } } }", 3 | "variables": { 4 | "templateId": "${templateId}", 5 | "receiverId": "${receiverId}", 6 | "parameters": "${parameters}" 7 | } 8 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/sendHsmMessageToGroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation createAndSendMessageToGroup($input: MessageInput!, $groupId: ID!) {createAndSendMessageToGroup(input: $input, groupId: $groupId) {success contactIds errors {key message}}}", 3 | "variables": { 4 | "input": { 5 | "templateId": "${templateId}", 6 | "isHsm": true, 7 | "params": "${parameters}" 8 | }, 9 | "groupId": "${groupId}" 10 | } 11 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/startFlowForContact.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "mutation startContactFlow($flowId: ID!, $contactId: ID! $defaultResults: Json!) { startContactFlow(flowId: $flowId, contactId: $contactId, defaultResults: $defaultResults) { success errors { key message }}}", 3 | "variables": { 4 | "flowId": "${flowId}", 5 | "contactId": "${contactId}", 6 | "defaultResults": "{\"status\": \"success\"}" 7 | } 8 | } -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/external/glific/updateContactGroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "operationName": "updateGroup", 3 | "variables": { 4 | "id": "${id}", 5 | "input": { 6 | "label": "${label}", 7 | "description": "${description}" 8 | } 9 | }, 10 | "query": "mutation updateGroup($id: ID!, $input: GroupInput!) {\n updateGroup(id: $id, input: $input) {\n group {\n id\n label\n description\n}\n errors {\n key\n message\n }\n }\n}" 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/main/resources/favicon.ico -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/pivot/conceptMap.sql: -------------------------------------------------------------------------------- 1 | ${mapName} as (SELECT public.hstore((array_agg(c2.uuid)) :: text [], (array_agg(c2.name)) :: text []) AS map 2 | FROM public.concept 3 | join public.concept_answer a on concept.id = a.concept_id 4 | join public.concept c2 on a.answer_concept_id = c2.id 5 | where concept.uuid in (${conceptUuids})) 6 | -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/main/resources/public/.gitkeep -------------------------------------------------------------------------------- /avni-server-api/src/main/resources/rules/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/main/resources/rules/.gitkeep -------------------------------------------------------------------------------- /avni-server-api/src/test/java/org/avni/server/application/FormTypeTest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | import org.junit.Test; 4 | 5 | import java.util.Arrays; 6 | 7 | import static org.junit.Assert.assertNotNull; 8 | 9 | public class FormTypeTest { 10 | @Test 11 | public void getPrivilegeTypeShouldWorkForAllFormTypes() { 12 | Arrays.stream(FormType.values()).forEach(formType -> assertNotNull(FormType.getPrivilegeType(formType))); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /avni-server-api/src/test/java/org/avni/server/domain/ExportJobParametersBuilder.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public class ExportJobParametersBuilder { 4 | private final ExportJobParameters exportJobParameters = new ExportJobParameters(); 5 | 6 | public ExportJobParametersBuilder withTimezone(String timezone) { 7 | exportJobParameters.setTimezone(timezone); 8 | return this; 9 | } 10 | 11 | public ExportJobParameters build() { 12 | return exportJobParameters; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /avni-server-api/src/test/java/org/avni/server/util/ValidationUtilTest.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.util; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | public class ValidationUtilTest { 8 | @Test 9 | public void checkChars() { 10 | assertTrue(ValidationUtil.containsDisallowedPattern(">", ValidationUtil.COMMON_INVALID_CHARS_PATTERN)); 11 | assertTrue(ValidationUtil.containsDisallowedPattern("\"", ValidationUtil.COMMON_INVALID_CHARS_PATTERN)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/Import MetaData.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/Import MetaData.xlsx -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/Test Import.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/Test Import.xlsx -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/TransactionData.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/TransactionData.xlsx -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/js/test.js: -------------------------------------------------------------------------------- 1 | var filterTest = function (arr) { 2 | return arr.filter(function () { 3 | return true; 4 | }); 5 | }; 6 | 7 | 8 | var Domain = function (val1, val2) { 9 | this.val1 = val1; 10 | this.val2 = val2; 11 | return this; 12 | }; 13 | 14 | var assignment = function (obj) { 15 | var domain = new Domain(); 16 | domain.val1 = obj.val1; 17 | domain.val2 = 1; 18 | }; 19 | 20 | (function () { 21 | return {filterTest: filterTest}; 22 | }()); -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/concepts/conceptAnswerAdditionViaSeparateFile.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "New child in separate file", 4 | "uuid": "18dfc9b0-4e17-4b61-a7c6-bc1d6283ccca", 5 | "dataType": "NA" 6 | }, 7 | { 8 | "name": "Parent", 9 | "uuid": "d76927d0-a0b9-4cb0-be29-12508275036e", 10 | "dataType": "Coded", 11 | "answers": [ 12 | { 13 | "uuid": "18dfc9b0-4e17-4b61-a7c6-bc1d6283ccca" 14 | } 15 | ] 16 | } 17 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/concepts/voidableConcept.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Voidable concept", 4 | "uuid": "23b26d8f-a864-4b8c-9b9d-2eec498136e6", 5 | "dataType": "Numeric" 6 | } 7 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/concepts/voidedConcept.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Voidable concept", 4 | "uuid": "23b26d8f-a864-4b8c-9b9d-2eec498136e6", 5 | "dataType": "Numeric", 6 | "voided": true 7 | } 8 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounterTypes/encounterTypes.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "NA EncounterType", 4 | "uuid": "c11c579e-eadf-448c-831c-c73c205aaaca", 5 | "immutable": false 6 | } 7 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounterTypes/encounterTypesWithRequiredEncoding.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "abc", 4 | "uuid": "5f6fb89b-01a7-46f8-8a00-25acaac62618", 5 | "immutable": false 6 | } 7 | ] 8 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounterTypes/voidableEncounterType.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Voidable EncounterType", 4 | "uuid": "50e822a4-2f05-4789-b834-834ab13ea398", 5 | "immutable": false 6 | } 7 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounterTypes/voidedEncounterType.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Voidable EncounterType", 4 | "uuid": "50e822a4-2f05-4789-b834-834ab13ea398", 5 | "voided": true, 6 | "immutable": false 7 | } 8 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounters/invalidMultiSelectAnswers.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "a82c8687-0bb3-4907-93b8-e45dec290e3f", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "encounterDateTime": "2018-02-22T17:10:30.000Z", 6 | "observations": [ 7 | { 8 | "conceptUUID": "9daa0b8a-985a-464d-a5ab-8a4f90e8a26b", 9 | "value": ["6f83d3e4-0e25-4f51-8b5e-5421322f3ffe"] 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounters/invalidSingleSelectAnswer.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "a82c8687-0bb3-4907-93b8-e45dec290e3f", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "encounterDateTime": "2018-02-22T17:10:30.000Z", 6 | "observations": [ 7 | { 8 | "conceptUUID": "9daa0b8a-985a-464d-a5ab-8a4f90e8a26b", 9 | "value": "6f83d3e4-0e25-4f51-8b5e-5421322f3ffe" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounters/newEncounter.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "fbfd4ce8-b03b-45b9-b919-1ef8a0d9651e", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "encounterDateTime": "2018-02-21T17:10:30.000Z", 6 | "observations": [ 7 | { 8 | "conceptUUID": "95c4b174-6ce6-4d9a-b223-1f9000b60006", 9 | "conceptName": "Temperature", 10 | "value": 99.1 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounters/scheduled.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "c92d53cc-2a83-4e9f-93a2-0f3d46d99c34", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "encounterDateTime": null, 6 | "earliestVisitDateTime" : "3019-01-01T00:00:00.000Z", 7 | "maxVisitDateTime" : "4019-01-01T00:00:00.000Z", 8 | "observations": [ 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounters/voidedConceptAnswer.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "19a98372-c125-4122-8639-1659fde5d65a", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "encounterDateTime": "2018-02-22T17:10:30.000Z", 6 | "observations": [ 7 | { 8 | "conceptUUID": "9daa0b8a-985a-464d-a5ab-8a4f90e8a26b", 9 | "value": "766eb773-942e-4874-819d-29039d6794b9" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/encounters/voidedEncounter.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "fbfd4ce8-b03b-45b9-b919-1ef8a0d9651e", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "encounterDateTime": "2018-02-21T17:10:30.000Z", 6 | "observations": [ 7 | { 8 | "conceptUUID": "95c4b174-6ce6-4d9a-b223-1f9000b60006", 9 | "conceptName": "Temperature", 10 | "value": 99.1 11 | } 12 | ], 13 | "voided": true 14 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/enrolment/NonEmptyObsProgEnrolment.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "0a1bf764-4576-4d71-a9de-25895a113e81", 3 | "programUUID": "ac8cfbcb-39d2-4fcb-b02f-4ef80335f553", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "enrolmentDateTime": "2018-03-06", 6 | "observations": [ 7 | {"conceptUUID": "95c4b174-6ce6-4d9a-b223-1f9000b60006", "conceptName": "Temperature", "value": 98.4} 8 | ], 9 | "programExitObservations": [] 10 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/enrolment/newProgEnrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "0a1bf764-4576-4d71-a9de-25895a113e81", 3 | "programUUID": "ac8cfbcb-39d2-4fcb-b02f-4ef80335f553", 4 | "individualUUID": "4378dce3-247e-4393-8dd5-032c6eb0a655", 5 | "enrolmentDateTime": "2018-03-06", 6 | "observations": [], 7 | "programExitObservations": [] 8 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/formMappings/formMappings.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "uuid": "bc253834-9e6f-4bc5-ac1e-73aca27d4c53", 4 | "formUUID": "0c444bf3-54c3-41e4-8ca9-f0deb8760831", 5 | "programUUID": "db62a322-0ec2-4bb0-ac24-296dc7216c9a", 6 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 7 | "comment": "Diabetes-Some encounter-Adolescent Dropout Form" 8 | } 9 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/formMappings/voidableFormMapping.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "uuid": "d5f7c308-17f3-4896-a276-1dec611b2571", 4 | "formUUID": "0c444bf3-54c3-41e4-8ca9-f0deb8760831", 5 | "programUUID": "db62a322-0ec2-4bb0-ac24-296dc7216c9a", 6 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 7 | "comment": "Diabetes-Some encounter-Adolescent Dropout Form" 8 | } 9 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/formMappings/voidedFormMapping.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "uuid": "d5f7c308-17f3-4896-a276-1dec611b2571", 4 | "formUUID": "0c444bf3-54c3-41e4-8ca9-f0deb8760831", 5 | "programUUID": "db62a322-0ec2-4bb0-ac24-296dc7216c9a", 6 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 7 | "comment": "Diabetes-Some encounter-Adolescent Dropout Form", 8 | "voided": true 9 | } 10 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/forms/formWithANonApplicableElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": "Abortion", 3 | "uuid": "0c444bf3-54c3-41e4-8ca9-f0deb8760831", 4 | "formElementGroups": [ 5 | { 6 | "uuid": "e47c7604-6cb6-45bb-a36a-05a03f958cdf", 7 | "comment": "A form element group", 8 | "formElements": [ 9 | { 10 | "uuid": "6965816f-b3bb-4162-ac8e-08136739b459", 11 | "comment": "Another random numeric question" 12 | } 13 | ] 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/glific/badMessageTemplateRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "query": "query sessionTemplates($filter: SessionTemplateFilter, $opts: Opts) { sessionTemplates(filter: $filter, opts:$opts) { id nonExistentItemKey body insertedAt, label shortcode isHsm type isActive translations updatedAt isSource language { label } messageMedia { url } } }" 3 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/individual/NonEmptyObsIndividual.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "0a1bf764-4576-4d71-b8ec-25895a113e81", 3 | "firstName": "Ramesh", 4 | "lastName": "Gond", 5 | "dateOfBirth": "1997-08-21", 6 | "dateOfBirthVerified": false, 7 | "gender": "Male", 8 | "addressLevelUUID": "ae35fe6d-910e-47bd-a0c7-0c10182a4085", 9 | "registrationDate": "2018-03-06", 10 | "observations": [ 11 | {"conceptUUID": "95c4b174-6ce6-4d9a-b223-1f9000b60006", "conceptName": "Temperature", "value": 98.4} 12 | ] 13 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/individual/newIndividual.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "0a1bf764-4576-4d71-b8ec-25895a113e81", 3 | "firstName": "Ramesh", 4 | "lastName": "Gond", 5 | "dateOfBirth": "1997-08-21", 6 | "dateOfBirthVerified": false, 7 | "gender": "Male", 8 | "addressLevelUUID": "ae35fe6d-910e-47bd-a0c7-0c10182a4085", 9 | "registrationDate": "2018-03-06", 10 | "observations": [] 11 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/individual/voidedIndividual.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "0a1bf764-4576-4d71-b8ec-25895a113e81", 3 | "firstName": "Ramesh", 4 | "lastName": "Gond", 5 | "dateOfBirth": "1997-08-21", 6 | "dateOfBirthVerified": false, 7 | "gender": "Male", 8 | "addressLevelUUID": "ae35fe6d-910e-47bd-a0c7-0c10182a4085", 9 | "registrationDate": "2018-03-06", 10 | "observations": [], 11 | "voided": true 12 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/operationalModules.json: -------------------------------------------------------------------------------- 1 | { 2 | "organisationName": "demo", 3 | "encounterTypes": [ 4 | "Outpatient", 5 | "Delivery", 6 | "Abortion", 7 | "Child Default", 8 | "ANC", 9 | "PNC", 10 | "Annual Visit", 11 | "Quarterly Visit", 12 | "Half-Yearly Visit", 13 | "Monthly Visit" 14 | ], 15 | "programs": [ 16 | "Mother", 17 | "Child", 18 | "Adolescent" 19 | ] 20 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/program.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Adolescent", 4 | "uuid": "215f4795-7d46-4617-95dd-52343f945a0f", 5 | "colour": "blueviolet" 6 | } 7 | ] -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/ref/programEncounters/newProgramEncounter.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "fbfd4ce8-b03b-45b9-b869-1ef8a0d9651e", 3 | "encounterTypeUUID": "3a1535d0-81fd-48fc-85b5-dc9da81064a3", 4 | "programEnrolmentUUID": "ba0a3b91-2d4d-446b-a3ee-d56e7edaf3d3", 5 | "encounterDateTime": "2018-02-21T17:10:30.000Z", 6 | "observations": [ 7 | { 8 | "conceptUUID": "95c4b174-6ce6-4d9a-b223-1f9000b60006", 9 | "conceptName": "Temperature", 10 | "value": 99.1 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/angled.xml: -------------------------------------------------------------------------------- 1 | 2 |

3 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/compressed.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/sample-files/compressed.zip -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/csv.csv: -------------------------------------------------------------------------------- 1 | this,is,a,csv,file 2 | this,is,a,csv,file -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/csv.txt: -------------------------------------------------------------------------------- 1 | this,is,a,csv,file 2 | this,is,a,csv,file -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/document.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/sample-files/document.pdf -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/javascript.js: -------------------------------------------------------------------------------- 1 | console.log('hello world'); 2 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/json.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "value" 3 | } 4 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/phpfile.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | PHP - Hello, World! 7 | 8 | 9 |

10 | 11 | -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/spreadsheet.numbers: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/sample-files/spreadsheet.numbers -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/spreadsheet.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/avni-server-api/src/test/resources/sample-files/spreadsheet.xlsx -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/text.csv: -------------------------------------------------------------------------------- 1 | This is a text file -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/text.txt: -------------------------------------------------------------------------------- 1 | This is a text file -------------------------------------------------------------------------------- /avni-server-api/src/test/resources/sample-files/text.txt.csv: -------------------------------------------------------------------------------- 1 | This is a text file -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/Constants.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain; 2 | 3 | public class Constants { 4 | public final static String DURATION_PATTERN = "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?$"; 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/MessageDeliveryStatus.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain; 2 | 3 | public enum MessageDeliveryStatus { 4 | NotSent, 5 | NotSentNoPhoneNumberInAvni, 6 | PartiallySent, 7 | Sent, 8 | Failed 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/ReceiverType.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain; 2 | 3 | public enum ReceiverType { 4 | User, 5 | Subject, 6 | Group 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/exception/GlificConnectException.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain.exception; 2 | 3 | import org.springframework.dao.DataAccessException; 4 | 5 | public class GlificConnectException extends DataAccessException { 6 | public GlificConnectException(String msg) { 7 | super(msg); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/exception/GlificContactNotFoundError.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain.exception; 2 | 3 | public class GlificContactNotFoundError extends RuntimeException { 4 | public GlificContactNotFoundError(String msg) { 5 | super(msg); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/exception/GlificException.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain.exception; 2 | 3 | public class GlificException extends Exception { 4 | public GlificException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/messaging/domain/exception/GlificNotConfiguredException.java: -------------------------------------------------------------------------------- 1 | package org.avni.messaging.domain.exception; 2 | 3 | public class GlificNotConfiguredException extends Exception { 4 | public GlificNotConfiguredException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/FormElementType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum FormElementType { 4 | SingleSelect, MultiSelect 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/KeyType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum KeyType { 4 | Select, TrueValue, FalseValue, editable, IdSourceUUID, isWithinCatchment, lowestAddressLevelTypeUUIDs, highestAddressLevelTypeUUID, 5 | customRegistrationLocations, subjectTypeUUID, prints, repeatable, primary_contact, contact_number 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/OrganisationConfigSettingKey.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum OrganisationConfigSettingKey { 4 | languages, searchFilters, myDashboardFilters, lowestAddressLevelType, saveDrafts, enableComments, 5 | searchResultFields, useMinioForStorage, useKeycloakAsIDP, skipRuleExecution, customRegistrationLocations, enableMessaging, 6 | donotRequirePasswordChangeOnFirstLogin, failOnValidationError 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/Platform.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum Platform { 4 | Android, 5 | Web 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/RuleEntity.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum RuleEntity { 4 | ProgramEncounter, ProgramEnrolment, Encounter, IndividualProfile 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/RuleType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum RuleType { 4 | Decision, 5 | ViewFilter, 6 | VisitSchedule, 7 | Checklists, 8 | Validation, 9 | EnrolmentSummary, 10 | WorkListUpdation, 11 | EnrolmentEligibilityCheck, 12 | EncounterEligibilityCheck 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/Subject.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum Subject { 4 | Group, Household, Individual, Person, User 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/SubjectTypeSettingKey.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum SubjectTypeSettingKey { 4 | displayRegistrationDetails, displayPlannedEncounters 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/ValueType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application; 2 | 3 | public enum ValueType { 4 | Single, Multi, yes; 5 | 6 | public static ValueType[] getSelectValueTypes() { 7 | return new ValueType[]{ValueType.Single, ValueType.Multi}; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/menu/MenuItemGroup.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.menu; 2 | 3 | public enum MenuItemGroup { 4 | Functionality, Sync, User, Support 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/menu/MenuItemType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.menu; 2 | 3 | public enum MenuItemType { 4 | Link, 5 | Document 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/projections/BaseProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.projections; 2 | 3 | public interface BaseProjection { 4 | Long getId(); 5 | String getUuid(); 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/projections/CatchmentAddressProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.projections; 2 | 3 | public interface CatchmentAddressProjection { 4 | Long getId(); 5 | Long getAddresslevel_id(); 6 | Long getCatchment_id(); 7 | Long getType_id(); 8 | } 9 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/projections/DocumentationProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.projections; 2 | 3 | public interface DocumentationProjection extends BaseProjection { 4 | 5 | String getName(); 6 | DocumentationProjection getParent(); 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/projections/LocationProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.projections; 2 | 3 | public interface LocationProjection extends BaseProjection { 4 | String getTitle(); 5 | Long getTypeId(); 6 | Long getParentId(); 7 | String getLineage(); 8 | String getTypeString(); 9 | Double getLevel(); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/application/projections/ReportingViewProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.application.projections; 2 | 3 | public interface ReportingViewProjection { 4 | String getViewname(); 5 | String getDefinition(); 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/dao/SubjectTreeItemRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao; 2 | 3 | import org.avni.server.domain.AddressLevel; 4 | 5 | public interface SubjectTreeItemRepository { 6 | void voidSubjectItemsAt(AddressLevel address); 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/dao/SyncableRepository.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.dao; 2 | 3 | import org.springframework.data.domain.Page; 4 | import org.springframework.data.domain.Slice; 5 | 6 | public interface SyncableRepository { 7 | Page getSyncResults(SyncParameters syncParameters); 8 | boolean isEntityChanged(SyncParameters syncParameters); 9 | Slice getSyncResultsAsSlice(SyncParameters syncParameters); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/dao/exception/ConstraintViolationExceptionAcrossOrganisations.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.service.exception; 2 | 3 | import org.hibernate.exception.ConstraintViolationException; 4 | 5 | public class ConstraintViolationExceptionAcrossOrganisations extends ConstraintViolationException { 6 | public ConstraintViolationExceptionAcrossOrganisations(String message, ConstraintViolationException cve) { 7 | super(message, cve.getSQLException(), cve.getSQL(), cve.getConstraintName()); 8 | } 9 | } -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/MessageableEntity.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public interface MessageableEntity { 4 | public Long getEntityTypeId(); 5 | 6 | public Long getEntityId(); 7 | 8 | public Individual getIndividual(); 9 | 10 | public User getCreatedBy(); 11 | 12 | public boolean isVoided(); 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/NamedEntity.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public interface NamedEntity { 4 | String getName(); 5 | Long getId(); 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/OperatingIndividualScope.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public enum OperatingIndividualScope { 4 | ByCatchment, 5 | None 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/RuleData.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | import java.io.Serializable; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | 7 | public class RuleData extends HashMap implements Serializable { 8 | 9 | public RuleData() { 10 | } 11 | 12 | public RuleData(Map data) { 13 | this.putAll(data); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/RuleEntityType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public enum RuleEntityType { 4 | EncounterType, 5 | Program 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/Status.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public enum Status { 4 | open, closed 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/ValidationException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain; 2 | 3 | public class ValidationException extends Exception { 4 | public ValidationException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/accessControl/AvniNoUserSessionException.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.accessControl; 2 | 3 | public class AvniNoUserSessionException extends RuntimeException { 4 | public AvniNoUserSessionException(String message) { 5 | super(message); 6 | } 7 | 8 | public AvniNoUserSessionException(Throwable cause) { 9 | super(cause); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/enums/ruleFailure/AppType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.enums.ruleFailure; 2 | 3 | public enum AppType { 4 | Android, Web 5 | } -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/enums/ruleFailure/EntityType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.enums.ruleFailure; 2 | 3 | public enum EntityType { 4 | Individual, ProgramEnrolment, ProgramEncounter, Encounter, WorkList, Checklist, ReportCard, ChecklistItem; 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/enums/ruleFailure/SourceType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.enums.ruleFailure; 2 | 3 | public enum SourceType { 4 | Decision, VisitSchedule, Validation, EnrolmentSummary, SubjectSummary, WorkListUpdation, ManualEnrolmentEligibilityCheckRule, EnrolmentEligibilityCheck, EncounterEligibilityCheck, Checklist, FormElement, FormElementGroup, OldRule, ReportCard, EditForm 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/extenalSystem/SystemName.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.extenalSystem; 2 | 3 | 4 | public enum SystemName { 5 | Exotel, 6 | Glific 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/framework/BaseJsonObject.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.framework; 2 | 3 | import java.util.Map; 4 | 5 | public class BaseJsonObject { 6 | protected final Map map; 7 | 8 | public BaseJsonObject(Map map) { 9 | this.map = map; 10 | } 11 | 12 | public String getStringValue(String fieldName) { 13 | return (String) map.get(fieldName); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/framework/IdHolder.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.framework; 2 | 3 | public interface IdHolder { 4 | Long getId(); 5 | String getUuid(); 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/identifier/IdentifierGeneratorType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.identifier; 2 | 3 | public enum IdentifierGeneratorType { 4 | userPoolBasedIdentifierGenerator, 5 | userBasedIdentifierGenerator 6 | } 7 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/jsRuleSupport/JsModelConcept.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.jsRuleSupport; 2 | 3 | public class JsModelConcept { 4 | } 5 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/jsRuleSupport/JsModelObservation.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.jsRuleSupport; 2 | 3 | public class JsModelObservation { 4 | private final String name; 5 | private final Object value; 6 | 7 | public JsModelObservation(String name, Object value) { 8 | this.name = name; 9 | this.value = value; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/AggregationType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum AggregationType { 4 | COUNT("count"), 5 | SUM("sum"), 6 | AVG("avg"), 7 | MIN("min"), 8 | MAX("max"); 9 | 10 | private final String value; 11 | 12 | AggregationType(String value) { 13 | this.value = value; 14 | } 15 | 16 | public String getValue() { 17 | return value; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/CardType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | //Refer Documentation : https://www.metabase.com/docs/latest/api/card#post-apicard 4 | public enum CardType { 5 | QUESTION("question"); 6 | 7 | private final String type; 8 | 9 | CardType(String type) { 10 | this.type = type; 11 | } 12 | 13 | public String getType() { 14 | return type; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/CollectionResponse.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | @Component 6 | public class CollectionResponse { 7 | private int id; 8 | 9 | public int getId() { 10 | return id; 11 | } 12 | 13 | public void setId(int id) { 14 | this.id = id; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/ConditionType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum ConditionType { 4 | EQUAL("="), 5 | NOT_EQUAL("!="), 6 | IS_NULL("is-null"); 7 | 8 | private final String operator; 9 | 10 | ConditionType(String operator) { 11 | this.operator = operator; 12 | } 13 | 14 | public String getOperator() { 15 | return operator; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/DashboardName.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum DashboardName { 4 | CANNED_REPORTS("Canned Reports"); 5 | private final String name; 6 | DashboardName(String name) { 7 | this.name=name; 8 | } 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/DatasetColumn.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum DatasetColumn { 4 | NAME(1), 5 | TYPE(2), 6 | SCHEMA_NAME(3); 7 | 8 | private final int index; 9 | 10 | DatasetColumn(int index) { 11 | this.index = index; 12 | } 13 | 14 | public int getIndex() { 15 | return index; 16 | } 17 | } -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/MetabaseTargetType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum MetabaseTargetType { 4 | DIMENSION("dimension"); 5 | 6 | private final String value; 7 | 8 | MetabaseTargetType(String value) { 9 | this.value = value; 10 | } 11 | 12 | public String getValue() { 13 | return value; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/QueryAttribute.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum QueryAttribute { 4 | AGGREGATION("aggregation"), 5 | BREAKOUT("breakout"), 6 | FILTER("filter"); 7 | 8 | private final String value; 9 | 10 | QueryAttribute(String value) { 11 | this.value = value; 12 | } 13 | 14 | public String getValue() { 15 | return value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/QueryType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum QueryType { 4 | QUERY("query"), 5 | DASHBOARD("dashboard"); 6 | 7 | private final String typeName; 8 | 9 | QueryType(String typeName) { 10 | this.typeName = typeName; 11 | } 12 | 13 | public String getTypeName() { 14 | return typeName; 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return typeName; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/TableName.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum TableName { 4 | PROGRAM_ENROLMENT("program_enrolment"), 5 | INDIVIDUAL("individual"); 6 | 7 | private final String name; 8 | TableName(String name) { 9 | this.name =name; 10 | } 11 | 12 | public String getName() { 13 | return name; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/Tabs.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class Tabs { 6 | @JsonProperty("id") 7 | private int id; 8 | 9 | @JsonProperty("name") 10 | private String name; 11 | 12 | public Tabs(int id, String name) { 13 | this.id = id; 14 | this.name = name; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metabase/VisualizationAttributes.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metabase; 2 | 3 | public enum VisualizationAttributes { 4 | GRAPH_DIMENSIONS("graph.dimensions"), 5 | GRAPH_METRICS("graph.metrics"); 6 | 7 | private final String value; 8 | 9 | VisualizationAttributes(String value) { 10 | this.value = value; 11 | } 12 | 13 | public String getValue() { 14 | return value; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metadata/ChangeType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metadata; 2 | 3 | public enum ChangeType { 4 | Added, Missing, Modified, NoChange, Voided 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metadata/FileEntryChangeReport.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metadata; 2 | 3 | public class FileEntryChangeReport { 4 | } 5 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/metadata/MetaData.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.metadata; 2 | 3 | public interface MetaData { 4 | void accept(MetaDataVisitor metaDataVisitor); 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/organisation/OrganisationStatus.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.organisation; 2 | 3 | import org.avni.server.domain.CHSEntity; 4 | 5 | import jakarta.persistence.*; 6 | 7 | @Entity 8 | public class OrganisationStatus extends CHSEntity { 9 | private String name; 10 | 11 | public String getName() { 12 | return name; 13 | } 14 | 15 | public void setName(String name) { 16 | this.name = name; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/reporting/Names.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.reporting; 2 | 3 | public class Names { 4 | public static final String DecisionConceptMapName = "concepts_decisions"; 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/sync/SubjectLinkedSyncEntity.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.sync; 2 | 3 | import java.util.Date; 4 | 5 | public interface SubjectLinkedSyncEntity { 6 | void setSyncDisabledDateTime(Date syncDisabledDateTime); 7 | void setSyncDisabled(boolean syncDisabled); 8 | Date getSyncDisabledDateTime(); 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/task/TaskTypeName.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.task; 2 | 3 | public enum TaskTypeName { 4 | Call, OpenSubject 5 | } 6 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/domain/util/EntityUtil.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.domain.util; 2 | 3 | public class EntityUtil { 4 | public static String getVoidedName(String name, Long id) { 5 | return String.format("%s (voided~%d)", name, id); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/ChecklistItemUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.domain.ChecklistItemStatus; 4 | 5 | public class ChecklistItemUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return ChecklistItemStatus.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/DeclarativeRuleUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.domain.DeclarativeRule; 4 | 5 | public class DeclarativeRuleUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return DeclarativeRule.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/JSONObjectUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.domain.JsonObject; 4 | 5 | public class JSONObjectUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return JsonObject.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/KeyValuePairsHibernateObject.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import com.fasterxml.jackson.core.type.TypeReference; 4 | 5 | import java.io.Serializable; 6 | import java.util.Map; 7 | 8 | public class KeyValuePairsHibernateObject extends TypeReference> implements Serializable { 9 | } 10 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/KeyValuesUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.application.KeyValues; 4 | 5 | public class KeyValuesUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return KeyValues.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/NextTriggerDetailsUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.messaging.domain.NextTriggerDetails; 4 | 5 | public class NextTriggerDetailsUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return NextTriggerDetails.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/ObservationCollectionUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.domain.ObservationCollection; 4 | 5 | public class ObservationCollectionUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return ObservationCollection.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/RuleDataUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.domain.RuleData; 4 | 5 | public class RuleDataUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return RuleData.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/framework/hibernate/RuledEntityUserType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.framework.hibernate; 2 | 3 | import org.avni.server.domain.RuledEntity; 4 | 5 | public class RuledEntityUserType extends AbstractJsonbUserType { 6 | @Override 7 | public Class returnedClass() { 8 | return RuledEntity.class; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/projection/CodedConceptProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.projection; 2 | 3 | import org.avni.server.application.projections.BaseProjection; 4 | import org.avni.server.domain.Concept; 5 | import org.springframework.data.rest.core.config.Projection; 6 | 7 | @Projection(name = "ConceptProjection", types = {Concept.class}) 8 | public interface CodedConceptProjection extends BaseProjection { 9 | String getName(); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/projection/ConceptWebProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.projection; 2 | 3 | import org.avni.server.domain.Concept; 4 | import org.springframework.data.rest.core.config.Projection; 5 | 6 | import java.util.Set; 7 | 8 | @Projection(name = "ConceptWebProjection", types = {Concept.class}) 9 | public interface ConceptWebProjection extends ConceptLeafWebProjection { 10 | Set getConceptAnswers(); 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/projection/IdentifierAssignmentProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.projection; 2 | 3 | import org.avni.server.domain.IdentifierAssignment; 4 | import org.springframework.data.rest.core.config.Projection; 5 | 6 | @Projection(name = "IdentifierAssignmentProjection", types = {IdentifierAssignment.class}) 7 | public interface IdentifierAssignmentProjection { 8 | String getUuid(); 9 | String getIdentifier(); 10 | IdentifierSourceProjection getIdentifierSource(); 11 | } 12 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/projection/IdentifierSourceProjection.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.projection; 2 | 3 | import org.avni.server.domain.IdentifierSource; 4 | import org.springframework.data.rest.core.config.Projection; 5 | 6 | @Projection(name = "IdentifierSourceProjection", types = {IdentifierSource.class}) 7 | public interface IdentifierSourceProjection { 8 | String getUuid(); 9 | String getName(); 10 | } 11 | -------------------------------------------------------------------------------- /avni-server-data/src/main/java/org/avni/server/util/S3FileType.java: -------------------------------------------------------------------------------- 1 | package org.avni.server.util; 2 | 3 | public enum S3FileType { 4 | Main, 5 | Extensions, 6 | Global, 7 | Export, 8 | BulkUploadsError, 9 | BulkUploadsInput, 10 | RelativePath 11 | } 12 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | group = 'org.openchs' 3 | version = '0.0.1-SNAPSHOT' 4 | } 5 | 6 | subprojects { 7 | apply plugin: 'java' 8 | apply plugin: 'idea' 9 | 10 | repositories { 11 | mavenLocal() 12 | maven { url "https://repo.maven.apache.org/maven2" } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /dev-commands.txt: -------------------------------------------------------------------------------- 1 | make test_server_with_remote_db DBUSER=postgres DBSERVER=192.168.33.11 2 | OPENCHS_USER=vivek@test make start_server_remote_db 3 | -------------------------------------------------------------------------------- /docker/.dockerignore: -------------------------------------------------------------------------------- 1 | # Ignore all files in the root directory 2 | * 3 | # Include the src directory 4 | !src/ 5 | # Include the pom.xml file 6 | !pom.xml 7 | # Exclude the target directory and its contents 8 | .gradle/ 9 | .idea/ 10 | .github/ 11 | .circleci/ -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | #build stage using gradle 2 | FROM gradle:5.6 AS build 3 | COPY --chown=gradle:gradle . /home/gradle/src 4 | WORKDIR /home/gradle/src 5 | RUN gradle clean build --no-daemon -x test 6 | 7 | #deploy stage to start the java application 8 | FROM openjdk:8 AS deploy 9 | EXPOSE 8021 10 | RUN mkdir /app 11 | COPY --from=build /home/gradle/src/avni-server-api/build/libs/avni-server-0.0.1-SNAPSHOT.jar /app/avni-server-0.0.1-SNAPSHOT.jar 12 | ENTRYPOINT ["java", "-jar","/app/avni-server-0.0.1-SNAPSHOT.jar"] -------------------------------------------------------------------------------- /docker/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | web: 4 | container_name: avni_server_api 5 | build: . 6 | image: avni-server:latest 7 | ports: 8 | - "8021:8021" 9 | env_file: 10 | - .env 11 | restart: always -------------------------------------------------------------------------------- /dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/dummy -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Oct 07 16:01:43 IST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip 7 | -------------------------------------------------------------------------------- /infra/rpm/config/openchs.conf: -------------------------------------------------------------------------------- 1 | export OPENCHS_SERVER=localhost 2 | export OPENCHS_SERVER_PORT=8022 3 | export OPENCHS_SERVER_OPTS="-Xmx250m -XX:ErrorFile=/var/log/openchs/jvm.log" 4 | export OPENCHS_DATABASE_HOST=localhost 5 | export OPENCHS_DATABASE_USER=openchs 6 | export OPENCHS_DATABASE_PASSWORD=password 7 | export OPENCHS_DATABASE_URL="jdbc:postgresql://localhost:5432/openchs?currentSchema=public" -------------------------------------------------------------------------------- /infra/rpm/scripts/postUninstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf /opt/openchs /etc/init.d/openchs /var/run/openchs /var/log/openchs 2>>dev/null -------------------------------------------------------------------------------- /infra/rpm/scripts/preInstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf /opt/openchs /etc/init.d/openchs /var/run/openchs /var/log/openchs 2>>dev/null -------------------------------------------------------------------------------- /infra/rpm/scripts/preUninstall.sh: -------------------------------------------------------------------------------- 1 | service openchs stop || true -------------------------------------------------------------------------------- /infra/rpm/service/openchs.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/infra/rpm/service/openchs.log -------------------------------------------------------------------------------- /infra/rpm/service/openchs.pid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/infra/rpm/service/openchs.pid -------------------------------------------------------------------------------- /infra/rpm/service/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | nohup java $OPENCHS_SERVER_OPTS -jar /opt/openchs/bin/avni-server.jar >> /var/log/openchs/openchs.log 2>&1 & 3 | echo $! > /var/run/openchs/openchs.pid 4 | -------------------------------------------------------------------------------- /makefiles/gradle.mk: -------------------------------------------------------------------------------- 1 | dependency-tree-compile-classpath: 2 | cd avni-server-api && ../gradlew dependencies --configuration compileClasspath 3 | -------------------------------------------------------------------------------- /makefiles/lfe.mk: -------------------------------------------------------------------------------- 1 | open-user-media-lfe: 2 | ifndef orgMedia 3 | @echo "Provde the orgMedia variable with org media prefix" 4 | exit 1 5 | endif 6 | open "https://s3.console.aws.amazon.com/s3/buckets/lfe-user-media?region=ap-south-1&bucketType=general&prefix=teachap/&showversions=false" 7 | 8 | open-cognito-lfe: 9 | open https://ap-south-1.console.aws.amazon.com/cognito/v2/idp/user-pools/ap-south-1_mxlMq9ZIW/users 10 | -------------------------------------------------------------------------------- /makefiles/metabase.sh: -------------------------------------------------------------------------------- 1 | export MB_DB_TYPE=postgres 2 | export MB_DB_CONNECTION_URI="jdbc:postgresql://localhost:5432/reportingdb?user=reporting_user&password=password" 3 | java -jar metabase.jar 4 | -------------------------------------------------------------------------------- /makefiles/pgDumpParams.txt: -------------------------------------------------------------------------------- 1 | --dbname=openchs 2 | --username=openchs 3 | --role=apfodisha 4 | --file=/Users/vsingh/projects/avni/db/prod-apfodisha.sql 5 | --enable-row-security --verbose --schema=public --host=localhost 6 | --exclude-table-data=audit 7 | --exclude-table-data='public.sync_telemetry' 8 | --exclude-table-data='rule_failure_log' 9 | --exclude-table-data='scheduled_job_run' 10 | --exclude-table-data='qrtz_*' 11 | --exclude-table-data='batch_*' 12 | -------------------------------------------------------------------------------- /makefiles/rule-server.mk: -------------------------------------------------------------------------------- 1 | start-rule-server: build-server 2 | ./gradlew :avni-rule-server:run 3 | 4 | build-js-rule-server: 5 | #cd avni-rule-server/src/main/js && npm install 6 | ./gradlew :avni-rule-server:copyJsFiles 7 | 8 | deps: 9 | cd avni-rule-server/src/main/js && npm install --legacy-peer-deps 10 | 11 | build-rule-invoker: 12 | cd avni-rule-server/src/main/js && npm run build 13 | -------------------------------------------------------------------------------- /makefiles/util.mk: -------------------------------------------------------------------------------- 1 | open-circle-ci: 2 | open https://app.circleci.com/pipelines/github/avniproject/avni-server 3 | 4 | open-github-project: 5 | open https://github.com/avniproject/avni-server 6 | 7 | open-github-org: 8 | open https://github.com/avniproject 9 | 10 | get-gradle-version: 11 | ./gradlew --version 12 | -------------------------------------------------------------------------------- /message_rule.patch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avniproject/avni-server/64e2c7b121b8c813ece81a1f8d7920fdc281e96e/message_rule.patch -------------------------------------------------------------------------------- /perf/gatling/user-files/resources/search.csv: -------------------------------------------------------------------------------- 1 | searchCriterion,searchComputerName 2 | Macbook,MacBook Pro 3 | eee,ASUS Eee PC 1005PE -------------------------------------------------------------------------------- /postman/localhost.postman_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "7feb1c2b-f90a-4d5d-bb2e-44b5f785f6f1", 3 | "name": "Avni Localhost", 4 | "values": [ 5 | { 6 | "key": "origin", 7 | "value": "http://localhost:8021", 8 | "type": "default", 9 | "enabled": true 10 | } 11 | ], 12 | "_postman_variable_scope": "environment", 13 | "_postman_exported_at": "2022-10-22T09:10:27.219Z", 14 | "_postman_exported_using": "Postman/10.0.32" 15 | } -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'avni-server' 2 | include ':avni-server-api' 3 | project(':avni-server-api').projectDir = "$rootDir/avni-server-api" as File 4 | include 'avni-server-data' 5 | include 'avni-rule-server' 6 | 7 | --------------------------------------------------------------------------------