AIapp - Discounting

 TAS->CRSM-RSM->Resource ObBoader-> Core onboarder -> ERP Common-> ERP Discounts -> ERP AD
 
  • TAS
    • Tenant automation service
  • CRSM
    • Cross Region service manager 
    • This distributes calls to specific RSM
  • RSM 
    • Resginal service manager
  • Resource Onboarder ?
  • Core Onboarder?
  • AI Core onboarding
    • onboarding service responsible for platform part of tenant onboarding
  • app onboarding1...N
    • ERP Common  --> to be recognized by RSM we need to register under resource onboarder
    • ERP Discounts
    • ERP AD

kudevcp -n erp-payables get pods   -> control plane
PODs in erp-payables namespace
  •  ai-erp-common-onboarding-cp
    • Service onboarding
      • Configuraitons for idcs
        • DNS registry
        • WTSS registry   //domain name ? 
      • HelmChartOnBoarderHandler("idcs-serviceonboarding").installERPAtpCharts();
    • Tenant onboarding
      • HelmChartOnBoarderHandler(context.getTenant()).installAiRoutingChart(context);
      • saveAccessLinks(context);
  •  ai-erp-discounts-onboarding-cp-
  •  ai-poline-onboarding-cp-
  •  ai-erp-ad-onboarding-cp-55cc94bd68-szzkd
  •  ai-vanity-metrics-onboarding-cp-
     

kudevdp -n erp-payables get pods
PODs in erp-payables namespace  -> data plane
  •  ai-erp-ad-rest-dp-
  •  ai-erp-discounts-rest-cp-
  •  ai-erp-discounts-ui-cp-
  •  ai-vanity-metrics-rest
Customer specific
 
kudevdp get pods -A | grep -i payables
kudevdp -n erp-payables-idcs-<tenant id> get pods 
  • ai-erp-ad-workflow1
ERP Common Onboarding
  • Service onboarding
    •  
  • tenant onboardin
  • offboarding
Framework components/parts:
  • Parts
    • Ingestion
      • Extraction component called Pegasus
        • It connects to FA via BIP  
      • Transformation component called Protheus
        • Used for flattening for feature generation
      • csv training dataset/file output from ingestion pipeline
    • Data science
      • Athena
        • Allows to easily specify the approach to take in building a Model
        • Training pipeline
          • read csv file which is output from Ingestion and builds a model based on algorithm that data scientist has coded into training pipeline
        • Model serving pipeline
    • Prediction
      • NO explicit framework components
      • Andrew team buidling called hermes (Prediction delivery service)
        • Service to external systems(similar to requests from invoice distributions)
Discounts - how is it different from other AI apps
  • Enrichment process to connect to Datafox
 Customer using it(Evaluating it)
  • Embridge, OAL,  Camgemini, PWC
Spark(Hadoop components)
  • Used in Aggregation module
Service OnBoarding
  • registerPegasusIngredients
    •  
  • registerWorkflowinYas
  • uploadSolrConfigSet
  • installDaaSB
  • installCharts
BIP Ingedients
  • Discounts -> Build -> Docker -> OCI -> aid-onboarding -> bip-ingredients 
    • dailyrate-ingredient.yml
    • invoiceheader-ingredient.yml
    • invoicepaymentschedule-ingredient.yml
    • invoiceprepayment-ingredient.yml
    • invoicepymtsall-ingredient.yml
    • ledger-ingredient.yml
    • supplier-ingredient.yml
    • suppliersite-ingredient.yml
    • suppliersiteassignments-ingredient.yml
  • QA
    • /etc/aiapps/pegasus/ingredients/suppliersite-ingredient.yml
Discounts Objects
  • model
    • POJOs extending RESTPojoBase 
      • APRRecommendation, Assignment, Assignments, BiPubConnection, BusinessUnit, Category,  ConversionType, ConversionTypes, Currency, Currencies, DiscountRecommendation, Invoice, RESTPojoBase, Setting, SolrDynamicFacet, SolrFilterQuery, SolrRequest, StandingOffer, StandingOfferAssignment, StandingOffers, StandingOffersAssignment, SubCategory, Supplier, SupplierAttribute, SupplierCategory, SupplierDetails, SupplierGroupMembership, SupplierHistory, SupplierHistoryAcceptedAPR, Suppliers, SupplierScore, SupplierScoreComponent, SupplierSite, SupplierSiteAssignmentSupplierSitesAssignment, SupplierStatus, SupplierTag, ValidateCredentials
Discounts Database
  • POJOs extending AIDBObject
    • Assignment, BusinessUnit, ConversionType, CurrencyCode, DiscountRecommendation, ExecutionLog, GLDailyRate, GLLedger, InvoiceHeader, InvoicePayment, InvoicePaymentSchedule, MissingCurrencyCodes, Settings, Supplier, SupplierBU, SupplierBUHistory, SupplierDelta, SupplierHistory, SupplierSite, SupplierSiteAssignment
  • Repository
    • Repository that extends CommonRepository<its type> 
    • DAO/repository objects to fetch data from HBase
    • Repository Classes that push data to repository/DB?-> why only for Suppliers?
DiscountsCommon
  • constants
    • DiscountsCommonConstants
      • ObjectStorage Intialpath, base_dir, 
      • workflowname, workflow namespace
      • Pegasus constants
      • Platform manager
    • LogConstants
    • SecurityConstants
  • datastore
    •  getDBConnection
      • discountsSecretService.getApplicationCommonSecretValues("ATP_CREDENTIALS") 
      • discountsSecretService.getGlobalSecretValues("AI_COMMON_DB_URL");
      • OracleDataSource ods = new OracleDataSource();
                    ods.setURL(dbUrl);
                    ods.setConnectionProperties(info);

  • FusionConfigUtils
    • saveTenantFusionConfig  & getTenantBIConfig
    • saveBIPublisherConfig & getTenantFusionConfig
  • FusionConnection
    • saveFusionConnection & getFusionConnection
  • PlatformManagerService
    • createNamespace
    • deleteTenantNamespace
  • ObjectStorageService
    • getObjectNamesWithFilter
    • downloadObjectStream
    • getContainerObject
    • uploadObjectStream
    • moveRawToProcd
    • uploadObjectStream
  • AIDiscountsSolrClient
    • jsonToSolrInputDocument
    • validateSolrInputDocument
    • addToCollection  => commit to solr
  • DiscountsWorkflowScheduler
    • Schedules Discounts workflow in YAS with default properties.
    • Scheduling account defaulting workflow
  • FileUtils
    • Generatecsv & compress 
Discounts OnBoarding
  • constants
  • enums
  • handlers
  • onboarders
    • DiscountsServiceOnboarding implements ServiceOnboarding
      • registerPegasusIngredient
        • PegasusOnboarder.registerIngredient(BIP_PAYABLES_PRODUCT_NAME, INGREDIENT_NAME_SUPPLIER_SITE, Paths.get(INGREDIENT_FILE_SUPPLIER_SITE));
      • registerWorkflowInYAS
        • WorkflowOnboarder.register(DISCOUNTS_WORKFLOW_NAME, workflowPath);
      • uploadSolrConfigSet
        •  solrOnboarder.uploadConfigSet
      • installCharts 
        • installOrUninstallRestChart(false);
        • installOrUninstallRestChart(true);
        • installOrUninstallUIChart(false);
        • installOrUninstallUIChart(true);
    • DiscountsTenantOnboarding implements TenantOnboarding
      • doTenantOnboarding
        • createHbaseNamespace 
          • HBaseUtils.createNamespaceIfNotExists(OnboardingUtils.getTenantWithUnderscore(tenantId), hbaseOnboarder.getAdmin());
        • createSolrCollection
          • solOnborder.createCollection(collectionName,
                                    AIAPPS_ERP_AI_SOLR_CONFIGSET_NAME,
                                    AIAPPS_ERP_AI_SOLR_SHARDS,
                                    AIAPPS_ERP_AI_SOLR_REPLICAS);
        • saveIDCSClientData
          • SecretsCommon.setApplicationTenantSecretValues
        • createAppTenantNamespaceIfDoesntExists
          • platformManagerService.createNamespace
        • rescheduleTenantWorkflows
        • copyFASecretsToNamespace
    • DiscountsTenantOffboarding implements TenantOffboarding 
      • doTenantOffboarding
        • cleanupDiscounts
          • deleteSolrCollection
          • deleteScheduleJobFromYas
          • deleteHbaseTables
          • deleteTenantFilesFromObjectStorage
          • cleanupIDCSClientData
          • deleteBIPCredentials
          • deleteFusionCredentials
  • patterns
  • utils
  • DiscountsMonitoringOnBoarding.java
  • DiscountsOnboardingApplication.java

Enrichment

    public static final String MATCHING_OUTPUT_TABLE = "DASB_MATCHING_OUTPUT";
    public static final String ERP_TENANTID = "ERP_TENANTID";
    public static final String ERP_FIRSTPARTYID = "ERP_FIRSTPARTYID";
    public static final String DNB_DUNS = "DNB_DUNS";
    public static final String SCORE = "SCORE";

    public static final String MAPPING_TABLE = "DASB_SUPPLIERS_BUSINESSES";
    public static final String TENANTID = "TENANTID";
    public static final String FIRSTPARTYID = "FIRSTPARTYID";
    public static final String DAASBID = "DAASBID";
    public static final String ASSERTED = "ASSERTED";

 

  • periodicProcess
    • RAW_PATH = payables/daasb/suppliersites/<ENV>/raw/ 
    • ENRICHED_PATH = payables/daasb/suppliersites/<ENV>/enriched/
    • periodicProcessERPData
      • getRawFiles
        • returns List<filenames> from ObjectStorageService
      • loadRawFiles
        •  
      • DatafoxEnrichmentManager.enrichFromSuppliersTable
      • MergeSuppliers.runProcess();
      • enrichRawFiles
        •  
      • TruncateStagingTable
        • TRUNCATE TABLE DASB_SUPPLIERS_STG
      • PostProcessRawFiles
        • Move to procd directory

Ingestion

oracle.aiapps.discounts.ingestion.fusion.FusionIngestion

  • DataService
    • createPojosFromStream  //return list of Objects of any class that extend AIDBObject
      • fromCsvContent  //convert csv to List<DBObjects>
    •  
  • ProcessorUtils
    • convertZIPFileToPojos  -> uses DataService.createPojosFromStream
    • processZIPFile
      • dataService.processCSVContent
  • RepositoryFactory
    • Class to create and return any repository object
  • StorageServiceFactory  //create and return object for the following services
    • getTenantOCIStorageService
    • getDaasbObjectStorageService
  • Processor
    • processData -> calls processDataBatch
    • processDataBatch
      • Push data to repository/DB
  • DataService
    • processCSVContent
      • fromColumnsData
      • processor.processDataBatch to push data to DB
  • fusion
    • dataservice
      • fromColumnsData //Convert csv record to object that extends AIDBObject 
    • factory
      • DataServiceFactory to return fusion.dataservice object
      • IngestionFactory to return POJO that has Dataservice & Repository factories
    • processor
  • FusionIngestion.main()
    • fusionIngestion.execute();
      • runProcess()
        • storageServiceFactory = new StorageServiceFactory(this.tenantId);
        • runProcess(storageServiceFactory)
          • tenantObjectStorageService = storageServiceFactory.getTenantOCIStorageService();
          • moveFromBaseDirToProcdDir(tenantObjectStorageService);
          • getUnprocessedFiles(tenantObjectStorageService);
          • postProcessFiles
      • runProcessRemoval();
DiscountsEnrichment
  • datafox
    • rest
      • DatafoxRestAPI
        •  
    • util
    • DatafoxServer
      • get credentials from discountsSecretService
      • return instance of DatafoxRestAPI
  • DatafoxEnrichmentConsumer extends EnrichmentConsumer
    • batchProcess
      • getSelectDataFromBusinessSuppliers
      • getDatafoxRestAPI
      • mergeResults
  • DatafoxEnrichmentManager
    •  

  •  
 
DiscountsAggregation
 
  • aggregation  
    • common
      • DailyExchangeRate
      • SimpleHttpGetMethod
      • Time
      • Util
    • extraction
      • Extract data from HBase Tables using Spark
    • ml
      • APRCalculator
        • getBetterAPR
          • supplier.getmLScore
    • solr
      • SolrIngestion
        •  indexSuppliersInfoToSolr
    • pojo
      • POJOs for all entities
    • Utilities
      • denormalizeDataBUCurrencyIsNull
      • mergeInvoiceHeaderInvoiceHeaderRDDs
      • mergeInvoiceHeaderInvoicePaymentScheduleRDDs
      • mergeInvoicePaymentInvoiceHeaderRDDs
      • mergeSupplierInvoiceHeaderRDDs
      • mergeSupplierSupplierRDDs
      • mergeSupplierSupplierSiteAssignmentRDDs
      • setEnrollmentStatusForSupplierSiteAssignments
    • DiscountsAggregation  -> Is this data hammering
      • registerContainerApplication
      • runProcess
        • extractSettings and all other entities
        • extractSuppliers
        • ExtractSiteAssignments
        • getStandingOffersRDD
        • setEnrollmentStatusForSupplierSiteAssignments
        • denormalizePaymentData  //Populate the BU Currency on any invoice payment
        • aggregateERPData
          • mergeSupplierSupplierSiteAssignmentRDDs
          • mergeSupplierInvoiceHeaderRDDs
          • mergeSupplierSupplierRDDs 
          • aggregateSupplierSiteAssignments
        • denormalizeSupplierBUData  //save
        • denormalizeSupplierSiteAssignmentData //save
        • indexSuppliersInfoToSolr //save
        • ingest into solr
DiscountsRest
  • java
    • rest.common
      • httpRequest
        • getConnection
        • getJSONFromResponse
    • jaxrs
      • JerseyApplication
        • startServer
        • installMonitoring
    • resources
      • GET operations on following resources defined // calls Services to fetch data
        BusinessUnitResource, SupplierResource, SupplierSiteAssignmentResource, StandingOfferResource, StandingOfferAssignmentResource, SettingResource, OAuth2Resource, DiscountResource, CurrencyResource, ConversionTypeResource, ConnectionResource,
    • services // fetch data using Repository objects
      • SupplierService, SupplierSiteAssignmentService, StandingOfferService, StandingOfferAssignmentService, SettingService, OAuth2Service, MissingCurrencyService, DiscountsService, CurrencyService, ConversionTypeService, ConnectionService, BusinessUnitService, AISearchSupplierService
  • resource
    • static content
    • .template files
  • webapp
    • web.xml // no content 
Discounts UI
  • minify
  • nbproject
  • public_html
    • build
    • css
    • js
      • resources
      • templates
      • util
        • AIDiscountsConstants
          • URL_MAP: {
                        "discounts": "/discounts/rest/v1",
                        "common": "/common/rest/v1",
                        'common-lib':'/common/ui/js'
                    }
          •  DATAPROVIDER: {
                        _QUERY_AJAX_STATUS_SUCCESS: "success",
                        _QUERY_AJAX_STATUS_NOCONTENT: "nocontent",
                        _GET: "GET",
                        _POST: "POST",
                        _PUT: "PUT",
                        connections: "/connections",
                        connectionsFusion: "/connections/fusion",
                        connectionsbiPublisher: "/connections/biPublisher",
                        settings: "/settings",
                        currencies: "/currencies",
                        conversiontypes : "/conversiontypes",
                        suppliers: "/suppliers",
                        businessUnits: "/businessUnits",
                        standingOffers: "/standingOffers",
                        standingOfferAssignments: "/standingOfferAssignments",
                        supplierSites: "/supplierSiteAssignments",
                        suppliersCategories: "/suppliers/categories",
                        supplierInvoices: "/invoices",
                        userInfo: "/authSession?userInfo=true",
                        credentialsData: "/connections/credentialsData",
                        credentialsRegenSecret: "/connections/regenCredentialsData",
                        log: "/log",
                        callTimeout: 1500
                    }
          • dataprovider.js
            • constructs url & triggers Ajax call to fetch data
            • EventManager.js
              • EventDispatcher
              • DashboardItemChangeEvent
              • DashboardCustomChange
              • createSingleCustomChangeEvent
              • createCustomChange
              • getCustomChangeValue
              • getCustomChange
      • viewModels
        • components
          • FacetSelectionSet
          • genericDialog
          • homeCardSet
          • InformationBox
          • InformationBoxSet
          • progressIndicator
          • supplierCardList
          • suppliersiteCardList
        • enrollmentModules
          • addOffers
          • editOffers
          • manageEnrollments
          • review
          • selectCampaign
          • viewSiteEnrollments
        • supControlModules
          • scSupplierDetails
          • scSuppliers
        • connections.js
        • home.js
        • insights.js
        • settings.js
        • supervisoryControls.js
      • views 
        • components
          • FacetSelectionSet
          • genericDialog
          • homeCardSet
            •  
          • InformationBox
          • InformationBoxSet
          • progressIndicator
          • supplierCardList
          • suppliersiteCardList
        • enrollmentModules
          • addOffers
          • editOffers
          • manageEnrollments
          • review
          • selectCampaign
          • viewSiteEnrollments
        • supControlModules
          • scSupplierDetails
          • scSupplier
        • connections.html
          • financialsCloud user/passwd & url
          • oracleBusinessIntelligence user/passwd & url
          • aiAppsSection
        • home.html
        • insights.html
        • settings.html
        • supervisoryControls.html
    • META-INF
    • index.html 
      • main.js
        • navDrawer
        • pageContent
          • banner
            • drawerToggleButton
            • companyLogo
            • Toolbar(user admin, logout)
          • main
            • homeCardSet



 
Discounts Monitoring
  • LongRunningPullMetrics
    • initializeMetrics
      • create instance of PrometheusMeterRegistry
      • Put data/info to customMetricsCounter Hashmap
    • incrementEndPointMetrics
      •  
    • hasMetricsInitialized
    • incrementErrors
    • completeRequest
    • beginRequest
    • setHeartbeat
  • ShortLivingPushMetrics
    • initializeMetrics
    • getMetrics
    • incrementErrors
    • incrementWarnings
    • registerIngestedRecordsByTable
    • incrementCustomMetrics
    • finalizeMetrics
    • hasMetricsInitialized
    • getCompleteMetricName
    • setErrorFlag
  • ShortLivingPushMetrics 
Discounts UI
  •  
 
ADF UI
  • Supervisory Controls
    • Datamodel
      • AP_DISCOUNT_OFFERS_TL, AP_DISCOUNT_OFFERS_B- is this campaign?
      • AP_DISCOUNT_OFFERS_ASSIGN --assignments?
    •  Navigate to any supplier
    • Campaigns
    • Create Enrollments
      • select Campaign
      • Choose supplier site, APR, date range

Comments

Popular posts from this blog

OCI